Quién llama a esto y qué se rompe si lo cambio

El grafo de llamadas alrededor de un símbolo, y el radio de impacto de un diff — sin leer un solo archivo entero.

Prompt#

¿Quién llama a ResolveAgentCmd, y qué se rompe si lo cambio?

Qué hace el Chair#

Consulta el índice de símbolos del propio workspace: primero los llamadores, después el alcance de los archivos que vas a tocar.

Llamadas MCP#

trace_path({ "symbol": "ResolveAgentCmd", "direction": "callers", "depth": 2 })

Después, el radio de impacto del cambio:

impact({ "paths": ["client/internal/config/config.go"] })

O contra un rango de la rama en vez del árbol de trabajo:

impact({ "git_range": "main...HEAD" })

Y lee solo el cuerpo que de verdad necesitas:

code_snippet({ "symbol": "ResolveAgentCmd", "max_lines": 120 })

Equivalentes en CLI: orch symbols trace <name>, orch symbols impact, orch symbols snippet <name>, orch symbols arch.

Respuesta esperada#

trace_path devuelve {root, nodes, edges}, con un confidence por arista. impact devuelve {paths, touched, callers, edges} — touched: [] cuando el diff no alcanza nada indexado. architecture devuelve {dirs, edges}, un mapa por directorio que vale leer antes de decidir dónde va un cambio.

Trampas#

  • Lee el confidence. 1.0 significa que el resolutor casó un import o el archivo mismo; 0.7 casó un tipo receptor; 0.4 es el tokenizador genérico casando un Name( pelado contra símbolos del mismo lenguaje. Una arista 0.4 es una pista, no un hecho.
  • Un nombre que no está es una sugerencia, no un error. Vuelve como {found: false, hint, did_you_mean: [...]} — prueba uno de esos nombres en vez de caer en grep. Los lenguajes para los que Orchemax no tiene parser no aportan aristas.
  • El grafo solo ve símbolos con firma. Constantes, nombres de tabla, flags de esquema, códigos de feature y todo lo que vive dentro de una cadena son invisibles para trace_path — para eso, grep. Es el único caso en que leer archivos sigue ganando.
  • impact sin argumentos usa los cambios de tu propio checkout (git diff --name-only HEAD más los archivos sin seguimiento, corrido donde estás tú: el worktree del worker, no la raíz del workspace). Si pasas paths, git_range se ignora; si no hay ni uno ni otro y no hay cambios, pasa symbol: "Nombre".
  • depth está topado en 5 y por defecto es 2. La profundidad es donde estas consultas se ponen caras; amplíala una vez, no por costumbre.
  • Aquí el código sin etiquetar sí se ve. A diferencia de search_shared_symbols, que responde solo con símbolos orch:export, las herramientas de grafo también leen definiciones locales — así que un helper privado que nadie exportó igual aparece como llamador.
  • Tu propio proyecto siempre se puede leer. Un worker que pide un símbolo del código que le tocó recibe el cuerpo desde su propio worktree, símbolos locales (sin etiqueta) incluidos. La restricción a orch:export aplica solo cuando project: nombra otro proyecto, y el rechazo lo dice.
  • Las respuestas tienen techo de bytes y degradan para entrar. trace_path 2.000 B, impact 3.000 B, architecture 4.000 B, code_snippet el cuerpo más 200 B. Las filas se ordenan por cantidad de referencias y se cortan en limit (20); una lista cortada trae has_more y un cursor. Pide verbose: true una vez si de verdad quieres la forma completa.
  • session ya es opcional. El asiento sale de ORCH_SESSION; pasa session solo cuando manejes las herramientas en nombre de otro asiento.