Supafone Labs ยท Documentation

๐Ÿ“œ Log Streaming#

Developers need to see what the system is doing: oracle calls, whispers, TTS, STT, call reports, provider metadata, latency, and billing seconds. Supafone Labs exposes both snapshots and an SSE stream.

Snapshot#

TypeScript:

ts
const { logs } = await supafone.logs(100);
console.table(logs.map((log) => ({
  id: log.id,
  endpoint: log.endpoint,
  seconds: log.seconds_billed,
  duration: log.duration_ms,
  detail: log.detail,
})));

Python:

python
logs = supafone.logs(100)["logs"]
for row in logs:
    print(row["id"], row["endpoint"], row["detail"])

REST:

bash
curl "https://api.labs.supafone.ai/v1/logs?limit=100" \
  -H "Authorization: Bearer $SUPAFONE_LABS_API_KEY"

Live SSE Stream#

TypeScript:

ts
for await (const log of supafone.streamLogs({
  limit: 100,
  pollMs: 1000,
  snapshot: true,
})) {
  console.log(log.at, log.endpoint, log.detail, log.meta);
}

Python:

python
for log in supafone.stream_logs(limit=100, poll_ms=1000, snapshot=True):
    print(log["at"], log["endpoint"], log["detail"])

REST:

bash
curl -N "https://api.labs.supafone.ai/v1/logs/stream?limit=100&poll_ms=1000&snapshot=true" \
  -H "Authorization: Bearer $SUPAFONE_LABS_API_KEY"

Each event is emitted as:

text
event: log
id: 123
data: {"id":123,"endpoint":"oracle","detail":"...","meta":{"provider":"anthropic"}}

Builder UI Behavior#

The builder should have a persistent log rail:

If SSE is unavailable in the browser environment, poll /v1/logs and de-dupe by id.

MCP Logs#

Claude Desktop tools are request/response, so the MCP server exposes bounded polling instead of an infinite SSE stream:

json
{
  "limit": 100,
  "iterations": 10,
  "intervalSeconds": 2
}

Use tail_logs or poll_logs for agent-team debugging.

View raw Markdown