tracegist-mcp-bridge 0.2.8 → 0.2.11

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.
package/README.md CHANGED
@@ -43,6 +43,10 @@ Set `TRACEGIST_DIR` to change where the bridge looks for packages (defaults to `
43
43
  - `read_tracegist_package_file` — read any text file from inside the ZIP without writing to disk (e.g. `network/api-requests.jsonl`, the Playwright repro script)
44
44
  - `extract_tracegist_package_file` — write a binary or text file from the ZIP to a local directory
45
45
  - `transcribe_tracegist_package_voice_notes` — transcribe voice notes using local Python Whisper
46
+ - `watch_live_session` — poll real-time session events while recording is active
47
+ - `get_live_screenshot` — request and retrieve a screenshot of the current tab
48
+ - `ask_tester_question` — send a question to the tester (shown as a browser toast, max 200 chars)
49
+ - `get_tester_response` — retrieve the tester's voice + screenshot answer
46
50
 
47
51
  ## Package contents
48
52
 
package/bin/lib.mjs CHANGED
@@ -89,6 +89,14 @@ const SECTION_HINTS = {
89
89
  "marker visual evidence": "Screenshot references for each marker",
90
90
  "environment at marker time": "Environment snapshot at a specific marker",
91
91
  "marker timeline logs (context window)": "Logs within the ±5 s marker window",
92
+ "webapp testing reproduction":
93
+ "Server setup, Python repro script, verification points, key selectors",
94
+ "tester intent summary": "Classified intent: specifications, issues found, observations",
95
+ "iterative context": "Previous session reference, verification checklist for build-test cycle",
96
+ "tier 0: quick summary": "Session overview, intent, reproduction command (~200 tokens)",
97
+ "tier 1: findings": "Marker timeline with structured findings (~500 tokens)",
98
+ "tier 2: full context": "Interaction timeline, network/console context, environment",
99
+ "tier 3: deep diagnostics": "Full session timelines (deep profile only)",
92
100
  };
93
101
 
94
102
  function getSectionHint(sectionName) {
@@ -928,7 +928,9 @@ async function transcribeLiveVoice(voiceBlobDataUrl) {
928
928
  const text = result.choices?.[0]?.message?.content?.trim();
929
929
  return text ? { transcription: text } : { error: "Empty transcription response" };
930
930
  } catch (err) {
931
- return { error: `OpenRouter transcription failed: ${err instanceof Error ? err.message : String(err)}` };
931
+ return {
932
+ error: `OpenRouter transcription failed: ${err instanceof Error ? err.message : String(err)}`,
933
+ };
932
934
  }
933
935
  }
934
936
 
@@ -950,7 +952,9 @@ async function transcribeLiveVoice(voiceBlobDataUrl) {
950
952
  await fs.rm(tmpDir, { recursive: true, force: true });
951
953
  }
952
954
  } catch (err) {
953
- return { error: `Whisper transcription failed: ${err instanceof Error ? err.message : String(err)}` };
955
+ return {
956
+ error: `Whisper transcription failed: ${err instanceof Error ? err.message : String(err)}`,
957
+ };
954
958
  }
955
959
  }
956
960
 
@@ -1273,7 +1277,11 @@ server.tool(
1273
1277
  }
1274
1278
  }
1275
1279
  const enrichedEvents = events.map((e) => {
1276
- if (e.eventType === "marker" && e.data?.markerId && transcriptionsByMarkerId.has(e.data.markerId)) {
1280
+ if (
1281
+ e.eventType === "marker" &&
1282
+ e.data?.markerId &&
1283
+ transcriptionsByMarkerId.has(e.data.markerId)
1284
+ ) {
1277
1285
  return {
1278
1286
  ...e,
1279
1287
  data: {
@@ -1306,8 +1314,7 @@ server.tool(
1306
1314
  },
1307
1315
  {
1308
1316
  tool: "get_live_screenshot",
1309
- description:
1310
- "Capture a screenshot of the tester's current browser tab.",
1317
+ description: "Capture a screenshot of the tester's current browser tab.",
1311
1318
  },
1312
1319
  ];
1313
1320
  if (pendingQuestions.length > 0) {
@@ -1319,7 +1326,10 @@ server.tool(
1319
1326
  }
1320
1327
  } else {
1321
1328
  // Session ended — include full interaction log and voice transcriptions
1322
- if (liveInteractions.length > 0 || liveEvents.some((e) => e.eventType === "voice-transcription")) {
1329
+ if (
1330
+ liveInteractions.length > 0 ||
1331
+ liveEvents.some((e) => e.eventType === "voice-transcription")
1332
+ ) {
1323
1333
  responseData.sessionEndedNote =
1324
1334
  "Session has ended. The interactionLog and voiceMarkerTranscriptions below contain all agent-tester exchanges from this session. " +
1325
1335
  "Include these in your analysis — they represent collaborative context between agent and tester. " +
@@ -1448,8 +1458,7 @@ server.tool(
1448
1458
  {
1449
1459
  type: "text",
1450
1460
  text: [
1451
- "No response yet." +
1452
- (waitingSec !== null ? ` Waiting for ${waitingSec}s.` : ""),
1461
+ "No response yet." + (waitingSec !== null ? ` Waiting for ${waitingSec}s.` : ""),
1453
1462
  "The tester may still be recording their voice answer.",
1454
1463
  "",
1455
1464
  "TIP: Instead of polling this tool, go back to polling watch_live_session — " +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracegist-mcp-bridge",
3
- "version": "0.2.8",
3
+ "version": "0.2.11",
4
4
  "description": "Local-first MCP bridge for reading and transcribing TraceGist package zips.",
5
5
  "type": "module",
6
6
  "bin": {