Documentation Index
Fetch the complete documentation index at: https://docs.m4trix.dev/llms.txt
Use this file to discover all available pages before exploring further.
Error Handling in Agents
Handle errors inside your agent logic and emit error events:
const errorEvent = AgentNetworkEvent.of('agent-error', S.Struct({ message: S.String }));
const agent = AgentFactory.run()
.listensTo([requestEvent])
.emits([responseEvent, errorEvent])
.logic(async ({ triggerEvent, emit }) => {
try {
const result = await doWork(triggerEvent.payload);
emit({ name: 'agent-response', payload: { answer: result, done: true } });
} catch (e) {
emit({ name: 'agent-error', payload: { message: String(e) } });
}
})
.produce({});
Ensure the client channel streams both response and error events so the UI can show errors.
Event Filtering
Stream only specific events to the client:
const api = network.expose({
protocol: 'sse',
select: {
channels: 'client',
events: ['agent-response', 'agent-error'],
},
});
Observability Hooks
onRequest
Use onRequest to log, trace, or enrich before the start event is published:
const api = network.expose({
protocol: 'sse',
onRequest: async ({ emitStartEvent, req, payload }) => {
const traceId = crypto.randomUUID();
console.log('[trace]', traceId, payload);
emitStartEvent({ ...payload, traceId });
},
select: { channels: 'client' },
});
Catch-All Logger Agent
Register a catch-all agent to log every event:
const loggerAgent = AgentFactory.run()
.logic(async ({ triggerEvent }) => {
console.log('[event]', triggerEvent.name, triggerEvent.meta.runId, triggerEvent.payload);
})
.produce({});
registerAgent(loggerAgent).subscribe(main).subscribe(processing);
Every event has meta.runId, meta.contextId, meta.correlationId, meta.causationId, and meta.ts. Use these for distributed tracing and correlation.