Why TypeScript AI Developers Need Native Tracing Tools A developer argues that TypeScript AI tracing tools need native support for concurrent Node.js servers, serverless functions, and streaming responses, not just a TypeScript SDK. They demonstrate how AsyncLocalStorage and stream-aware hooks can preserve trace context across async boundaries, a requirement often overlooked by existing tools. TypeScript support is easy to claim. Publish an npm package, add a few type declarations, and a tracing product can put “JavaScript and TypeScript” on its integration list. Native support is a higher bar. AI applications in the TypeScript ecosystem run inside concurrent Node.js servers, serverless functions, edge runtimes, background workers, test runners, and streaming web frameworks. They cross promise chains, callbacks, tool adapters, async iterators, and package boundaries. A useful tracing tool must fit those execution models without breaking types or producing disconnected spans. The question is therefore not only, “Does this tool have a TypeScript SDK?” It is, “Does it preserve how a TypeScript agent actually runs?” Consider a small agent: js async function supportAgent question: string { const category = await classifyQuestion question ; const documents = await retrieveDocuments question, category ; return generateAnswer question, documents ; } The source looks sequential, but a production server may execute hundreds of these functions concurrently. A flat event stream cannot tell which retrieval or model call belongs to which request. php request A: classify - retrieve - generate request B: classify - retrieve - generate The tracer needs a request-level trace ID and a parent span for each nested operation. More importantly, those identifiers must remain available after every asynchronous handoff. In Node.js, AsyncLocalStorage is the usual foundation for request-scoped context. It propagates state through normal promise chains and many asynchronous resources, which is much safer than storing a current trace ID in a module-level variable. js import { AsyncLocalStorage } from 'node:async hooks'; type TraceContext = { traceId: string; spanId: string | null; }; const context = new AsyncLocalStorage