spooling 0.2.4__tar.gz → 0.2.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spooling-0.2.4/spooling.egg-info → spooling-0.2.5}/PKG-INFO +1 -1
- {spooling-0.2.4 → spooling-0.2.5}/pyproject.toml +1 -1
- {spooling-0.2.4 → spooling-0.2.5}/spooling/cloud.py +17 -5
- {spooling-0.2.4 → spooling-0.2.5/spooling.egg-info}/PKG-INFO +1 -1
- {spooling-0.2.4 → spooling-0.2.5}/LICENSE +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/README.md +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/setup.cfg +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/__init__.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/agent.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/classifiers.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/cli.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/config.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/__init__.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/base.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/bigquery.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/clickhouse.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/factory.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/mongodb.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/mysql.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/postgresql.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/rest/__init__.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/rest/base.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/rest/shopify_connectors.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/snowflake.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/connectors/types.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/db.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/embeddings.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/evals.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/experiments.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/ingest.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/mcp_server.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/parser.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/pricing.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/__init__.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/antigravity.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/base.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/codex.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/copilot.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/cortex_code.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/cursor.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/gemini.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/github.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/gitlab.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/kiro.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/opencode.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/session_file.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/providers/windsurf.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/redact.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/remote_otel.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/schema.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/sdk.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/search.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/server.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/stats.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/subscription_pricing.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/tracing.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/tunnel.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/tunnel_auth.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling/watcher.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling.egg-info/SOURCES.txt +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling.egg-info/dependency_links.txt +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling.egg-info/entry_points.txt +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling.egg-info/requires.txt +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/spooling.egg-info/top_level.txt +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/tests/test_mcp_auth_middleware.py +0 -0
- {spooling-0.2.4 → spooling-0.2.5}/tests/test_tunnel_auth.py +0 -0
|
@@ -229,6 +229,18 @@ def _collect_traces(session_ids: list[str]) -> list[dict]:
|
|
|
229
229
|
if isinstance(v, str):
|
|
230
230
|
return v
|
|
231
231
|
return v.isoformat()
|
|
232
|
+
|
|
233
|
+
def _json(v, default):
|
|
234
|
+
"""Return a parsed object regardless of whether v is already parsed or a JSON string."""
|
|
235
|
+
if v is None:
|
|
236
|
+
return default
|
|
237
|
+
if isinstance(v, str):
|
|
238
|
+
import json as _json_mod
|
|
239
|
+
try:
|
|
240
|
+
return _json_mod.loads(v)
|
|
241
|
+
except Exception:
|
|
242
|
+
return default
|
|
243
|
+
return v
|
|
232
244
|
conn = get_connection()
|
|
233
245
|
try:
|
|
234
246
|
placeholders = ", ".join(["%s"] * len(session_ids))
|
|
@@ -282,19 +294,19 @@ def _collect_traces(session_ids: list[str]) -> list[dict]:
|
|
|
282
294
|
"cost_usd": float(s["cost_usd"] or 0),
|
|
283
295
|
"model": s["model"],
|
|
284
296
|
"tool_name": s["tool_name"],
|
|
285
|
-
"tool_input": s["tool_input"],
|
|
297
|
+
"tool_input": _json(s["tool_input"], None),
|
|
286
298
|
"tool_output": (s["tool_output"] or "")[:200000] if s["tool_output"] else None,
|
|
287
299
|
"tool_is_error": bool(s["tool_is_error"]),
|
|
288
300
|
"agent_type": s["agent_type"],
|
|
289
301
|
"agent_prompt": (s["agent_prompt"] or "")[:200000] if s["agent_prompt"] else None,
|
|
290
302
|
"vendor": s["vendor"],
|
|
291
303
|
"category": s["category"],
|
|
292
|
-
"attrs": s["attrs"]
|
|
304
|
+
"attrs": _json(s["attrs"], {}),
|
|
293
305
|
"events": [
|
|
294
306
|
{
|
|
295
307
|
"name": e["name"],
|
|
296
308
|
"timestamp": _ts(e["timestamp"]),
|
|
297
|
-
"attrs": e["attrs"]
|
|
309
|
+
"attrs": _json(e["attrs"], {}),
|
|
298
310
|
}
|
|
299
311
|
for e in events
|
|
300
312
|
],
|
|
@@ -323,8 +335,8 @@ def _collect_traces(session_ids: list[str]) -> list[dict]:
|
|
|
323
335
|
"git_branch": t["git_branch"],
|
|
324
336
|
"model": t["model"],
|
|
325
337
|
"vendor_count": int(t["vendor_count"] or 0),
|
|
326
|
-
"top_vendors": t["top_vendors"]
|
|
327
|
-
"attrs": t["attrs"]
|
|
338
|
+
"top_vendors": _json(t["top_vendors"], []),
|
|
339
|
+
"attrs": _json(t["attrs"], {}),
|
|
328
340
|
"spans": spans_payload,
|
|
329
341
|
})
|
|
330
342
|
return out
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|