vexlo_get_trace for a trace,
vexlo_get_function for a function’s own callers and callees. Reach them with an id or a name
from find; fetch bytes afterwards with values.
Both responses below come from the seeded server find describes: the spec’s
conformance trace on team fixture, 17 steps with one three-attempt step.
vexlo_get_trace
Returns every step that ran, withparent_path and depth, per-attempt status and timing, and
a preview of each captured input, output, error, and logs slot. A preview carries the
slot’s encoding, its bytes_count, and the first 64 code points of the value.
There is no
limit: the tool asks for the server’s own maximum steps per call,
trace_steps_limit_max, 500 here, and steps is that one page rather than the whole trace.
next_cursor is present exactly when more steps remain, and only the count of distinct paths
against step_count proves a walk saw every step. A clipped page under slowest_first drops
the steps with no completed attempt, which on a hung trace are the ones worth reading. The API
caps a trace at 10,000 steps. No team or environment argument either, since a trace id
already belongs to one team.
jq . renderings of it. Fetching one step’s two values afterwards
costs 113 tokens on this trace.
Reading the fields:
completenesssays whether every record arrived (running: more are expected;partial/abandoned: some were lost or given up on;complete: all of them) and is independent ofroot_status: this trace iscompletewithroot_status: "error".coveragecarriesrecords_lost,records_shed,truncated,instance_mismatch, andservice_loss_24h. A missing step was shed or lost rather than skipped when these are non-zero.- One step carries one or more attempts.
attempt_groupingissingle,declared, orobserved_retry; the step above retried three times, so each attempt has its own status, timing, and slots.error_classappears only on an errored attempt. pathis a step’s identity and is opaque. Rebuild the tree fromparent_pathanddepth, never by decoding it, and pass it tovexlo_get_valuesexactly as it arrived.
order: "slowest_first" returns the same steps ranked by the step’s own duration, one row per
step, each still carrying all of its attempts: the retried step above appears once. Both orders
return 17 rows for this trace, matching its step_count, and cost within a token of each other
(11,585 bytes, 3,307 tokens).
An attempt’s status is ok, error, or in_flight: the third means its entry record
arrived and its completion record did not. Such an attempt carries attempt and started_us
and nothing else, with no duration_us, no error_class, and no slots key. A step whose
every attempt is open carries no duration_us of its own either, so
under slowest_first it has nothing to rank by and sorts after every step that has one. An open
attempt counts in step_count, never in error_step_count, and leaves root_status absent
rather than error, so it is not failure; read it with completeness. format_version is the
record format this trace arrived in, 2 above. Traces documents both fields.
vexlo_get_function
Returns one function’s observed callers and callees across every trace the server has ingested for it, not one trace. Reach it with a name from a trace’sname field or from
vexlo_list_functions.
team and environment are as find defines them: environment takes
{"named": [...]} or {"unset": true} and nothing else.
service is required, so this route’s service_required error is unreachable from this tool.
There is no include argument: worked input and output examples come from
vexlo_get_function_examples.
null name in
observed_callers means this function has been seen as an entry point or as an orphan, whose own
caller never arrived, so it alone never proves an entry point. is_entry_point is the index’s own
answer to that question.
observed_count counts steps and error_count counts attempts, so a function that ran once
and failed three times reads 1 and 3; both sum across every edge.
Functions covers the index’s own rules.
team is present only when the lookup resolved to one team; where it is absent the counts sum
every team in scope.
Cost tracks the number of distinct callers and callees, not how often the function ran. The
response above is 1,282 bytes and 518 tokens for one caller and six callees. Dividing by seven
overstates one more edge, since the identifying fields are paid once:
token costs derives the marginal edge from two measured fan-outs.
A never-observed pair is an answer, not an error. observed_count: 0, empty edge lists, and
both timestamps as empty strings:
observed_count === 0, never on parsing those two timestamps as instants.
When every requested team is outside the token’s set, the other tools return an empty,
route-shaped result with a scope_note. This tool is the one exception. Its response is a single
object whose every field a real call would have filled, so it returns only the two identifying
arguments and the note, rather than an observed_count: 0 that would read as “never observed”:
observed_count.