ast-mcp-server 0.10.0 → 0.11.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 +19 -2
- package/README.md +27 -2
- package/SECURITY.md +1 -1
- package/dist/cli.js +67 -1
- package/dist/services/agent-setup.js +11 -5
- package/dist/services/cli-project-discovery.js +97 -0
- package/dist/services/doctor-continuation.js +37 -0
- package/dist/services/doctor-model.js +77 -0
- package/dist/services/doctor.js +111 -0
- package/dist/services/managed-bundle.js +145 -0
- package/dist/services/managed-file.js +37 -0
- package/dist/services/project.js +98 -22
- package/dist/services/skill-installer.js +74 -56
- package/dist/services/upgrade-command.js +77 -0
- package/dist/services/upgrade-reconcile.js +41 -0
- package/dist/services/upgrade-runtime.js +157 -0
- package/dist/services/upgrade.js +232 -0
- package/docs/support.md +13 -13
- package/package.json +2 -2
- package/skills/structural-code-editing/SKILL.md +30 -160
- package/skills/structural-code-editing/references/operations.md +53 -0
- package/skills/structural-code-editing/releases.json +17 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: structural-code-editing
|
|
3
|
-
description:
|
|
4
|
-
version: "4.4.0"
|
|
5
|
-
author: "yail"
|
|
3
|
+
description: "Trigger: navegar, analizar o editar TypeScript/JavaScript con el compilador. Use tools AST preparadas, revisadas y vinculadas por hash."
|
|
6
4
|
license: "ISC"
|
|
7
5
|
metadata:
|
|
6
|
+
author: "yail"
|
|
7
|
+
version: "4.5.0"
|
|
8
8
|
hermes:
|
|
9
9
|
tags: ["typescript", "javascript", "ast", "refactoring", "mcp"]
|
|
10
10
|
homepage: "https://github.com/yailPeralta/ast-mcp-server"
|
|
@@ -12,174 +12,44 @@ metadata:
|
|
|
12
12
|
|
|
13
13
|
# Edición estructural con el servidor MCP `ast`
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Activation Contract
|
|
16
16
|
|
|
17
|
-
Cargar
|
|
17
|
+
Cargar este skill antes de navegar semánticamente, analizar impacto o referencias, consultar diagnostics o preparar una mutación TypeScript/JavaScript gobernada por el compilador.
|
|
18
18
|
|
|
19
19
|
No forzar un roundtrip AST para Markdown, configuración, comentarios ni una edición textual trivial en un archivo ya conocido. Si las tools `ast_*` no están disponibles, declarar el fallback y no presentar búsquedas textuales como evidencia compiler-backed.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
The local 0.11.0 release candidate requires Node.js `>=22.13.0` and is verified with exact Node.js 22.13.0 plus the governed Node.js 24 line. Published v0.10.0 retains its immutable Node.js 22.13.0/24 release evidence.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
## Hard Rules
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- crear un archivo de clase nuevo mediante un scaffold estructurado y revisado;
|
|
32
|
-
- obtener diagnostics sin cargar el proyecto como texto en el contexto.
|
|
25
|
+
- Verificar primero que las tools existen y que `ast_get_project_status` informa un proyecto usable.
|
|
26
|
+
- Tratar como autoritativa solo evidencia `compiler` + `exact` + `resolved` + `fresh`.
|
|
27
|
+
- Revisar siempre límites, `completeness`, `unresolved` y `truncation` antes de inferir ausencia.
|
|
28
|
+
- Preparar mutaciones, revisar preview y diagnostics, y aplicar únicamente con el `operation_id` y `plan_hash` exactos.
|
|
29
|
+
- Nunca reconstruir postimages desde un diff; después del apply, ejecutar el gate canónico del proyecto.
|
|
30
|
+
- Conservar `correlation_id` en errores públicos sin exponer source, paths absolutos, argumentos, environment, cache, stacks ni credenciales.
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
## Decision Gates
|
|
35
33
|
|
|
36
|
-
|
|
34
|
+
| Situación | Acción |
|
|
35
|
+
| -------------------------------------- | ---------------------------------------------------------------------- |
|
|
36
|
+
| Archivo o símbolo desconocido | Descubrir con `ast_list_files`, `ast_explore` o `ast_search_symbols` |
|
|
37
|
+
| Cambio cross-file | Consultar `ast_find_references`, `ast_get_impact` y candidatos de test |
|
|
38
|
+
| Evidencia stale, incompleta o ambigua | Refrescar, usar fallback compiler-backed o fallar cerrado |
|
|
39
|
+
| Rename, reemplazo de cuerpo o scaffold | Seguir el protocolo de preparación y apply por hash |
|
|
40
|
+
| Pipeline read-only conocido | Considerar `ast-tool run`; no usar batch para exploración abierta |
|
|
37
41
|
|
|
38
|
-
|
|
42
|
+
## Execution Steps
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
1. Leer la sección pertinente de `references/operations.md` y ejecutar el preflight.
|
|
45
|
+
2. Verificar trust, freshness, resolución y límites antes de decidir o mutar.
|
|
46
|
+
3. Para mutaciones, revisar el plan completo antes de aplicar ambos identificadores.
|
|
47
|
+
4. Ejecutar typecheck/build/tests relevantes y reportar evidencia y riesgo residual.
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
## Output Contract
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
Reportar tools y selectors usados, freshness, completitud y límites relevantes. Para mutaciones, incluir archivos afectados, diagnostics, identificadores aplicados y verificación. Declarar cualquier fallback textual como no compiler-backed.
|
|
48
52
|
|
|
49
|
-
|
|
53
|
+
## References
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
La persistencia del índice usa SQLite por default cuando `AST_SYMBOL_INDEX_PERSISTENCE` está ausente o vale `enabled`. El rollback inmediato es `AST_SYMBOL_INDEX_PERSISTENCE=disabled`; ese modo selecciona memoria antes de consultar HOME, XDG o un root explícito. `canary` conserva el requisito de `AST_SYMBOL_INDEX_CACHE_ROOT` absoluto, normalizado y aislado. Los fallos de policy o storage conservan la policy solicitada, cambian el backend efectivo a memoria y exponen una razón acotada sin paths. Administrar sólo artefactos derivados mediante `ast-tool cache inspect` y `ast-tool cache clear --yes`; no eliminar el árbol manualmente ni asumir GC automático.
|
|
54
|
-
|
|
55
|
-
Los errores públicos de las tools MCP usan un vocabulario cerrado dentro de `{ "error": { "code", "message", "correlation_id" } }`, con `isError: true`. Conservar el `correlation_id` al reportar un fallo; no pedir ni exponer stacks, paths absolutos, source, cache, argumentos crudos, environment ni credenciales para diagnosticarlo. Los errores del comando local `setup` pueden incluir un path destino acotado para permitir inspeccionar una escritura incierta o pendiente, pero no argumentos, environment, credenciales ni output crudo del proveedor.
|
|
56
|
-
|
|
57
|
-
## Flujo compacto de lectura
|
|
58
|
-
|
|
59
|
-
1. `ast_list_files` para descubrir archivos. Paginar; no pedir todo un monorepo si alcanza con un filtro.
|
|
60
|
-
2. `ast_get_project_status` para comprobar compiler, freshness, watcher, index y operation queue antes de confiar en una lectura sensible.
|
|
61
|
-
3. `ast_explore` para una pregunta de lectura que combine descubrimiento y evidencia. Usar `summary` por defecto, `context` para source seleccionado y `full` para source más referencias.
|
|
62
|
-
4. `ast_get_file` si ya se conoce el archivo y hace falta source exacto. Usar `offset`/`limit`; no cargar el archivo completo por defecto.
|
|
63
|
-
5. `ast_search_symbols` si todavía no se conoce el archivo o el selector exacto.
|
|
64
|
-
6. `ast_get_outline` para ver contratos sin cuerpos. No pedir `include_symbols` salvo que haga falta la metadata detallada.
|
|
65
|
-
7. `ast_get_symbol_source` solo para las declaraciones cuya implementación haya que inspeccionar.
|
|
66
|
-
8. `ast_find_references` antes de renames o cambios con impacto cross-file.
|
|
67
|
-
9. `ast_get_impact` para explorar impacto directo/transitivo con relaciones compiler-backed y límites explícitos.
|
|
68
|
-
10. `ast_get_diagnostics` para establecer y verificar el estado del proyecto.
|
|
69
|
-
|
|
70
|
-
`ast_search_symbols` devuelve por default hasta 20 records `summary` rankeados. Su campo `selector` es el valor que se pasa como `symbol_path` a la siguiente tool; pedir `detail: "selectors"` para routing puro o `detail: "full", limit: 100` para el perfil v0.4.0. `ast_find_references` devuelve `detail: "locations"` por default; expandir a `detail: "context"` únicamente cuando la línea fuente aporte evidencia necesaria.
|
|
71
|
-
|
|
72
|
-
`file_path` debe ser preferentemente relativo al proyecto. Si un suffix coincide con varios archivos, la tool falla y devuelve candidatos en vez de elegir uno silenciosamente.
|
|
73
|
-
|
|
74
|
-
`ast_get_file` es read-only y solo acepta archivos incluidos por el tsconfig activo. Su modo normal devuelve líneas exactas, paginadas y numeradas desde 1, junto con el hash SHA-256 de los bytes actuales. `symbols_only: true` devuelve selectors y signatures sin cuerpos. `snapshot_state: "fresh"` describe sincronización con el snapshot del compilador, no ausencia de diagnostics; consultar `ast_get_diagnostics` por separado.
|
|
75
|
-
|
|
76
|
-
`ast_explore` es read-only y no prepara ni aplica operaciones. Sus selectors son directamente reutilizables por las tools primitivas y de mutación. La respuesta admite clusters completos dentro de `max_bytes`, nunca corta source, referencias ni paths, y clasifica lo omitido como `budget`, `incomplete` o `untrusted`. Para un `file_path + symbol_path` exacto, `call_spines` puede pedir paths estáticos de invocación compiler-resolved; no representa stacks de runtime ni relabela referencias genéricas. Ausencia de la opción no ejecuta ese recorrido.
|
|
77
|
-
|
|
78
|
-
## Modelo de confianza y freshness
|
|
79
|
-
|
|
80
|
-
No tratar toda salida como evidencia equivalente. Cuando una relación expone metadata de trust:
|
|
81
|
-
|
|
82
|
-
- `provenance: "compiler"` + `confidence: "exact"` + `resolution: "resolved"` + `freshness.state: "fresh"` es la única combinación que puede llevar `compiler_authoritative: true`.
|
|
83
|
-
- `provenance: "syntax"` describe estructura AST sin resolución semántica; sirve para navegación, no para afirmar que dos símbolos están conectados.
|
|
84
|
-
- `provenance: "heuristic"` describe una sugerencia por convención o nombre; nunca autoriza una mutación ni un candidato de test compiler-backed.
|
|
85
|
-
- El índice es una aceleración derivada y no una autoridad. Validar cualquier selector contra el compilador; si el índice está stale, falta o no coincide, usar el fallback compiler-backed o fallar cerrado.
|
|
86
|
-
|
|
87
|
-
`fresh` significa que la evidencia coincide con el snapshot sincronizado. `pending`, `rebuilding`, `stale` y `degraded` no deben presentarse como evidencia actual. Las respuestas preservan `causes` (`source_change`, `config_change`, `index_failure`, `watcher_failure`, `compiler_rebuild`) y `checked_at`. `ast_get_impact` rechaza relaciones que no estén fresh; `ast_explore` conserva `completeness`, `unresolved`, `budget` y `truncation` para que una lectura parcial no parezca un negativo.
|
|
88
|
-
|
|
89
|
-
`ast_find_test_candidates` resuelve un símbolo exacto, fuerza impacto entrante y solo acepta evidencia fresh, exacta, resuelta y compiler-authoritative. Devuelve candidatos directos, transitivos o por convención con IDs y paths de relación completos; no ejecuta tests. Evidencia stale, truncada, incompleta, ambigua, heurística o no autoritativa falla cerrada. Solo un recorrido completo puede devolver una página vacía marcada `proven_empty`.
|
|
90
|
-
|
|
91
|
-
Todos los reads son bounded. Respetar `limit`, `reference_limit`, `max_bytes`, y en impacto `max_depth`, `max_nodes` y `max_edges`; revisar siempre `budget` y `truncation` antes de razonar sobre ausencia. Los límites de batch son independientes y también deben mantenerse explícitos.
|
|
92
|
-
|
|
93
|
-
Los clientes pueden prefijar los nombres publicados (`ast_*`) según su convención MCP; elegir por el nombre base y el schema, no adivinar el prefijo.
|
|
94
|
-
|
|
95
|
-
## Formato de resultado para el modelo
|
|
96
|
-
|
|
97
|
-
`ast_search_symbols`, `ast_find_references`, `ast_get_impact` y `ast_get_diagnostics` aceptan `output_format: "toon"`. Usarlo cuando la respuesta vaya directo al modelo y se espere una colección uniforme con varios registros. Omitirlo, o usar `json`, para automatización que dependa del objeto canónico.
|
|
98
|
-
|
|
99
|
-
En MCP, TOON llega como un único envelope estructurado `{ "format": "toon", "data": "..." }`; `data` contiene el documento TOON lossless. No hay una copia JSON completa en paralelo. Las cuatro tools validan primero el valor canónico con Zod, pero no publican un `outputSchema` MCP único porque tienen dos representaciones de éxito.
|
|
100
|
-
|
|
101
|
-
No pedir TOON para `ast_list_files`, outlines, source, previews ni mutaciones: los benchmarks muestran que el envelope empeora esas formas pequeñas, multiline o diff-heavy. Para un pipeline read-only conocido, se puede compactar únicamente el resultado final con:
|
|
102
|
-
|
|
103
|
-
```text
|
|
104
|
-
ast-tool run pipeline.json --output-format toon
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Los pasos internos del batch siempre son JSON estructurado. TOON dentro de `step.input` y TOON final para un batch de preparación se rechazan antes de ejecutar la operación.
|
|
108
|
-
|
|
109
|
-
## Batch CLI para clientes con Bash
|
|
110
|
-
|
|
111
|
-
Cuando un pipeline conocido requiere varias llamadas MCP dependientes y el cliente tiene Bash, usar `ast-tool run pipeline.json` para colapsar los roundtrips del modelo. No usar batch para exploración abierta ni asumir que reduce el trabajo interno del compilador.
|
|
112
|
-
|
|
113
|
-
- Encadenar outputs previos con objetos `{ "$ref": "#/steps/id/campo" }`.
|
|
114
|
-
- Usar `foreach` más `{ "$item": "/campo" }` solamente para lecturas acotadas.
|
|
115
|
-
- Definir `emit` para que los resultados intermedios no entren al contexto.
|
|
116
|
-
- Mantener paginación y filtros: batch elimina roundtrips, no vuelve razonable leer un monorepo entero.
|
|
117
|
-
- No generar JavaScript/eval dentro del documento; el contrato es declarativo y limitado.
|
|
118
|
-
- `ast_find_test_candidates` está admitida como lectura: el batch inyecta el `project_root` del pipeline, rechaza conflictos y conserva candidatos completos al paginar. JSON y el TOON final representan el mismo resultado lógico del handler MCP registrado.
|
|
119
|
-
- `ast_explore` también está admitida como lectura mediante el handler MCP registrado. Mantener `max_bytes` y los límites de spines explícitos; los intermediates son JSON y solo el resultado final puede serializarse como TOON.
|
|
120
|
-
|
|
121
|
-
`ast-tool validate pipeline.json` valida schema, orden de referencias y política sin cargar el proyecto. Límites por defecto: 50 steps, 500 invocaciones, 200 items por foreach, concurrencia 4 (máximo 16), input 1 MiB, 10 MiB por resultado retenido/output y 50 MiB de contexto intermedio acumulado. Los errores del CLI permanecen como JSON en stderr aunque el output exitoso solicitado sea TOON.
|
|
122
|
-
|
|
123
|
-
## Flujo obligatorio de mutación
|
|
124
|
-
|
|
125
|
-
Las tools de rename, reemplazo y scaffold **solo preparan**. `dry_run: false` directo está deshabilitado.
|
|
126
|
-
|
|
127
|
-
1. Llamar `ast_rename_symbol`, `ast_replace_symbol_body` o `ast_scaffold_class` con `dry_run: true`.
|
|
128
|
-
2. Revisar:
|
|
129
|
-
- `affected_files`;
|
|
130
|
-
- summaries y previews;
|
|
131
|
-
- diagnostics agregados/removidos;
|
|
132
|
-
- `blocked` y el valor visible de `allow_new_errors`.
|
|
133
|
-
3. Si el preview inline está truncado o hay varios archivos, pedir diffs completos con `ast_get_operation_preview`.
|
|
134
|
-
4. Aplicar con `ast_apply_operation`, pasando **ambos**:
|
|
135
|
-
- `operation_id`;
|
|
136
|
-
- `plan_hash`.
|
|
137
|
-
5. Ejecutar el typecheck/build/test canónico del proyecto después del apply.
|
|
138
|
-
|
|
139
|
-
Nunca reconstruir el contenido a aplicar a partir del diff. Apply escribe los postimages exactos retenidos en el plan.
|
|
140
|
-
|
|
141
|
-
### Scaffold de clase
|
|
142
|
-
|
|
143
|
-
Usar `ast_scaffold_class` solo para crear un `.ts`/`.tsx` ausente con una clase estructurada. Pasar imports, heritage, decorators, constructor params, properties inicializadas y métodos mediante el schema; no inyectar un archivo completo como string. Debe haber al menos un método.
|
|
144
|
-
|
|
145
|
-
Cada método generado contiene exclusivamente `throw new Error("Not implemented: Class.method")`. Preparar el scaffold, revisar el diff desde `/dev/null`, diagnostics, `pending_methods`, `blocked` y `plan_hash`, aplicar y luego reemplazar cada selector pendiente con `ast_replace_symbol_body`. Un target existente, path fuera del proyecto o parent simbólico debe fallar; no buscar un fallback textual.
|
|
146
|
-
|
|
147
|
-
### Mutaciones desde el CLI
|
|
148
|
-
|
|
149
|
-
Un batch puede terminar en una sola preparación, pero nunca puede incluir `ast_apply_operation`. El resultado expone `operation_id`, `plan_hash` y `plan_file` en el nivel superior aunque `emit` los omita; revisar preview, diagnostics y affected files, y aplicar en otra llamada:
|
|
150
|
-
|
|
151
|
-
```text
|
|
152
|
-
ast-tool apply <plan_file> --plan-hash <reviewed_sha256>
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Los planes CLI sobreviven al proceso bajo `${XDG_STATE_HOME:-~/.local/state}/ast-tool/plans` (o `AST_TOOL_STATE_DIR`), contienen bytes de código exactos y son privados. No copiar su contenido al chat si el repo es sensible.
|
|
156
|
-
|
|
157
|
-
## Seguridad que sí ofrece
|
|
158
|
-
|
|
159
|
-
- proyecto fresco al preparar mutaciones;
|
|
160
|
-
- diagnostics pre/post y bloqueo de errores nuevos por default;
|
|
161
|
-
- plan vinculado por hash al workspace completo, configs extendidos/referenciados y postimages;
|
|
162
|
-
- rechazo si cambió cualquier source/config antes de apply;
|
|
163
|
-
- lock filesystem cooperativo por config/workspace canónico compartido por MCP y CLI;
|
|
164
|
-
- staging, flush, rename para reemplazos y creación no-clobber para targets nuevos, con verificación de hash y rollback conservador;
|
|
165
|
-
- scaffold create-only con target ausente, parent real, postimage incluida en el fingerprint y diff contra `/dev/null`;
|
|
166
|
-
- retry idempotente de un operation ya aplicado;
|
|
167
|
-
- preservación de modo y UTF-8 BOM.
|
|
168
|
-
|
|
169
|
-
La edición AST no demuestra que un cambio sea semánticamente correcto ni vuelve imposible romper código. La garantía práctica surge de combinar selección estructural, diagnostics, preview exacto, hash revisado, freshness checks y apply fail-closed.
|
|
170
|
-
|
|
171
|
-
## Límites
|
|
172
|
-
|
|
173
|
-
- No es una transacción global multiarchivo: la atomicidad depende del rename por archivo.
|
|
174
|
-
- El rollback es best effort y no pisa cambios de otro writer.
|
|
175
|
-
- El lock coordina superficies de apply que usan el mismo state directory; no coordina editores, NFS ni writers hostiles.
|
|
176
|
-
- Los planes MCP son in-memory y se pierden al reiniciar el servidor; los planes CLI son archivos privados, versionados y con el mismo TTL.
|
|
177
|
-
- El receipt se persiste dentro de la sección crítica. Si esa persistencia falla después de reemplazar sources, apply sale no-cero y el retry recupera sólo si el workspace completo coincide exactamente con el fingerprint post-apply revisado.
|
|
178
|
-
- Un crash duro puede dejar un lock stale: retirarlo requiere inspeccionar metadata y confirmar que no hay apply activo. Un estado parcial o divergente sigue fallando cerrado.
|
|
179
|
-
- Solo admite sources UTF-8 con o sin BOM.
|
|
180
|
-
- No implementa migración arbitraria de firmas, creación/eliminación general de archivos ni lenguajes fuera de TS/JS; la única creación admitida es el scaffold de una clase.
|
|
181
|
-
- `allow_new_errors: true` evita el bloqueo del plan; no convierte código roto en código sano.
|
|
182
|
-
|
|
183
|
-
## Verificación
|
|
184
|
-
|
|
185
|
-
Después de aplicar, correr el gate canónico del repo. Como mínimo, un typecheck/build. Para cambios cross-file o con dinero/producción en juego, también la suite focalizada y la completa que corresponda.
|
|
55
|
+
- `references/operations.md` — preflight, selección de tools, trust/freshness, batches, mutaciones, errores y límites.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Operaciones estructurales
|
|
2
|
+
|
|
3
|
+
## Preflight y disponibilidad
|
|
4
|
+
|
|
5
|
+
La presencia del skill no demuestra que MCP esté configurado. Confirmar las tools `ast_*` y consultar `ast_get_project_status` antes de confiar en evidencia sensible.
|
|
6
|
+
|
|
7
|
+
El setup falla cerrado ante un registro `ast` conflictivo. No borrar ni reemplazar configuración ajena sin revisión explícita. El transporte soportado es stdio local bajo los permisos filesystem del usuario; no asumir autenticación HTTP, sandbox, aislamiento entre tenants ni seguridad para clientes remotos no confiables.
|
|
8
|
+
|
|
9
|
+
## Ruta de lectura
|
|
10
|
+
|
|
11
|
+
| Necesidad | Tool y contrato |
|
|
12
|
+
| ------------------------------- | ---------------------------------------------------------------------------- |
|
|
13
|
+
| Descubrir archivos | `ast_list_files`; filtrar y paginar |
|
|
14
|
+
| Ver salud y freshness | `ast_get_project_status`; revisar compiler, watcher, index y operation queue |
|
|
15
|
+
| Resolver una pregunta compuesta | `ast_explore`; usar `summary`, `context` o `full` con presupuesto explícito |
|
|
16
|
+
| Leer contrato o implementación | `ast_get_file`, `ast_get_outline` o `ast_get_symbol_source` |
|
|
17
|
+
| Encontrar declaraciones | `ast_search_symbols`; reutilizar `selector` como `symbol_path` |
|
|
18
|
+
| Usos, impacto y tests | `ast_find_references`, `ast_get_impact` y `ast_find_test_candidates` |
|
|
19
|
+
| Comprobar errores | `ast_get_diagnostics` antes y después del cambio |
|
|
20
|
+
|
|
21
|
+
Preferir `file_path` relativo; un suffix ambiguo debe devolver candidatos. `ast_get_file` solo admite archivos del tsconfig activo y `snapshot_state: "fresh"` no implica cero diagnostics. `ast_explore` es read-only: revisar `budget`, `completeness`, `unresolved` y `truncation`; sus `call_spines` son recorridos estáticos, no stacks de runtime.
|
|
22
|
+
|
|
23
|
+
## Trust, freshness y ausencia
|
|
24
|
+
|
|
25
|
+
Solo `provenance: "compiler"`, `confidence: "exact"`, `resolution: "resolved"` y `freshness.state: "fresh"` producen evidencia autoritativa. `syntax` describe estructura; `heuristic` nunca autoriza una mutación. El índice acelera, pero el compilador valida. Administrar su cache derivada solo con `ast-tool cache inspect` y `ast-tool cache clear --yes`, nunca borrándola manualmente. La ausencia usa el contrato específico: solo `ast_find_test_candidates` usa `completeness.proven_empty` para evidencia vacía de tests afectados; `ast_explore.call_spines` usa `empty_proven`; listados, búsquedas y referencias agotan paginación con `total`, `has_more` y `next_offset` según corresponda, nunca con `proven_empty`.
|
|
26
|
+
|
|
27
|
+
## Resultados y batches
|
|
28
|
+
|
|
29
|
+
Las búsquedas, referencias, impacto y diagnostics aceptan `output_format: "toon"`; usar JSON para automatización y evitar TOON en source, previews o mutaciones. Para un pipeline read-only conocido, `ast-tool run pipeline.json` admite `$ref`, `foreach`/`$item` acotado y `emit`; validar con `ast-tool validate pipeline.json`. Batch no admite apply, JavaScript ni eval, y no reduce el trabajo del compilador. Si termina preparando, revisar y aplicar aparte con `ast-tool apply <plan_file> --plan-hash <reviewed_sha256>`; mantener privados los planes con código exacto.
|
|
30
|
+
|
|
31
|
+
## Protocolo obligatorio de mutación
|
|
32
|
+
|
|
33
|
+
`ast_rename_symbol`, `ast_replace_symbol_body` y `ast_scaffold_class` solo preparan operaciones.
|
|
34
|
+
|
|
35
|
+
1. Preparar con `dry_run: true`.
|
|
36
|
+
2. Revisar `affected_files`, preview, diagnostics, `blocked` y `allow_new_errors`.
|
|
37
|
+
3. Si el preview está truncado o hay varios archivos, pedir diffs con `ast_get_operation_preview`.
|
|
38
|
+
4. Aplicar con `ast_apply_operation` pasando el `operation_id` y `plan_hash` exactos.
|
|
39
|
+
5. Ejecutar el gate canónico del proyecto.
|
|
40
|
+
|
|
41
|
+
Nunca reconstruir contenido desde el diff: apply usa las postimages retenidas y falla si cambió el workspace.
|
|
42
|
+
|
|
43
|
+
### Scaffold
|
|
44
|
+
|
|
45
|
+
`ast_scaffold_class` crea únicamente un `.ts`/`.tsx` ausente con una clase estructurada y al menos un método. Revisar el diff desde `/dev/null`, `pending_methods` y diagnostics; aplicar y completar cada método con `ast_replace_symbol_body`. Un target existente, fuera del proyecto o con parent simbólico debe fallar, no activar un fallback textual.
|
|
46
|
+
|
|
47
|
+
## Seguridad, errores y límites
|
|
48
|
+
|
|
49
|
+
Las operaciones preparadas vinculan el plan al workspace, configuración, diagnostics y postimages. Apply verifica cambios, coordina con lock cooperativo, conserva modo/BOM, usa reemplazos seguros y rollback conservador, y admite retry idempotente del mismo plan aplicado.
|
|
50
|
+
|
|
51
|
+
Estas garantías no demuestran corrección semántica ni coordinan editores, NFS o writers hostiles. El rollback es best effort; un crash puede dejar un lock stale; los planes tienen TTL; solo se admiten sources UTF-8. No hay migración arbitraria de firmas, creación/eliminación general ni lenguajes fuera de TS/JS.
|
|
52
|
+
|
|
53
|
+
Los errores MCP públicos usan `{ "error": { "code", "message", "correlation_id" } }` con `isError: true`. Conservar `correlation_id`; no pedir ni exponer stacks, source, paths absolutos, cache, argumentos crudos, environment ni credenciales.
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schema_version":
|
|
2
|
+
"schema_version": 2,
|
|
3
3
|
"algorithm": "sha256",
|
|
4
4
|
"current": {
|
|
5
|
-
"version": "4.
|
|
6
|
-
"
|
|
5
|
+
"version": "4.5.0",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": "SKILL.md",
|
|
9
|
+
"sha256": "be757e8bd98733c7ee952d63a2805dcd9877becf651b4fcb6ab63d20f6546f21"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "references/operations.md",
|
|
13
|
+
"sha256": "d52f01637e33e65ce523d19a810ce9488ab92228809768ec66a584120c24ad98"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
7
16
|
},
|
|
8
17
|
"predecessors": [
|
|
9
18
|
{
|
|
@@ -65,6 +74,11 @@
|
|
|
65
74
|
"version": "4.3.0",
|
|
66
75
|
"sha256": "bf0814b539cd8638aeed108a4e118fe1f2ab418e2e968a77ad75f2d0dbde93b9",
|
|
67
76
|
"npm_versions": ["0.9.2"]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"version": "4.4.0",
|
|
80
|
+
"sha256": "253b588c56d44c8f5565db3f33ce227d80c7c29aa6604d362844f44b1278385a",
|
|
81
|
+
"npm_versions": ["0.10.0"]
|
|
68
82
|
}
|
|
69
83
|
]
|
|
70
84
|
}
|