@buoy-gg/mcp 7.0.45 → 7.0.47
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/dist/chunk-QF624MC2.mjs +364 -0
- package/dist/cli.js +109 -109
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +46 -1
- package/dist/index.d.ts +46 -1
- package/dist/index.js +94 -94
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/skill/buoy-optimize/SKILL.md +42 -1
- package/dist/chunk-GFFMF22U.mjs +0 -364
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{SyncClient as i,createMcpServer as p,runInit as a}from"./chunk-
|
|
2
|
+
import{SyncClient as i,createMcpServer as p,runInit as a}from"./chunk-QF624MC2.mjs";import{StdioServerTransport as l}from"@modelcontextprotocol/sdk/server/stdio.js";console.log=(...e)=>console.error(...e);console.info=(...e)=>console.error(...e);console.debug=(...e)=>console.error(...e);async function d(){const e=process.env.BUOY_BROKER_PORT;const s=new i({url:process.env.BUOY_BROKER_URL,port:e?Number(e):void 0,autoSpawnBroker:process.env.BUOY_NO_SPAWN!=="1"});const o=p(s);const c=new l;let n=false;const r=t=>{if(n)return;n=true;process.stderr.write(`[buoy-mcp] shutting down (${t})
|
|
3
3
|
`);setTimeout(()=>process.exit(0),2e3).unref();void(async()=>{await s.stop().catch(()=>{});await o.close().catch(()=>{});process.exit(0)})()};process.stdin.once("end",()=>r("stdin closed"));process.stdin.once("close",()=>r("stdin closed"));o.server.onclose=()=>r("transport closed");process.on("SIGINT",()=>r("SIGINT"));process.on("SIGTERM",()=>r("SIGTERM"));process.on("SIGHUP",()=>r("SIGHUP"));await o.connect(c);process.stderr.write(`[buoy-mcp] serving MCP over stdio; connecting to broker\u2026
|
|
4
4
|
`);s.start().then(t=>process.stderr.write(`[buoy-mcp] broker ${t}
|
|
5
5
|
`)).catch(t=>process.stderr.write(`[buoy-mcp] broker connection failed: ${t?.message??t} \u2014 tools will report no devices until it recovers
|
package/dist/index.d.mts
CHANGED
|
@@ -474,6 +474,27 @@ interface AutomationConfig {
|
|
|
474
474
|
captureRenders?: boolean;
|
|
475
475
|
}
|
|
476
476
|
/** A lightweight saved-recording summary (the device's index entry). */
|
|
477
|
+
/** Per-run browser probe summary (perf-monitor webRunProbe.ts). */
|
|
478
|
+
interface WebRunSummary {
|
|
479
|
+
durationMs: number;
|
|
480
|
+
frames: number;
|
|
481
|
+
refreshHz: number;
|
|
482
|
+
frameGapP95Ms: number | null;
|
|
483
|
+
frameGapMaxMs: number | null;
|
|
484
|
+
longFrames: number;
|
|
485
|
+
longTasksSupported: boolean;
|
|
486
|
+
longTaskMs: number | null;
|
|
487
|
+
longTaskPct: number | null;
|
|
488
|
+
hidden: boolean;
|
|
489
|
+
heapSupported: boolean;
|
|
490
|
+
viewport: {
|
|
491
|
+
width: number;
|
|
492
|
+
height: number;
|
|
493
|
+
} | null;
|
|
494
|
+
dpr: number | null;
|
|
495
|
+
resized: boolean;
|
|
496
|
+
userAgent: string | null;
|
|
497
|
+
}
|
|
477
498
|
interface IndexEntry {
|
|
478
499
|
id: string;
|
|
479
500
|
createdAt: number;
|
|
@@ -496,6 +517,10 @@ interface IndexEntry {
|
|
|
496
517
|
caseId?: string;
|
|
497
518
|
runIndex?: number;
|
|
498
519
|
isMedianRun?: boolean;
|
|
520
|
+
/** Set on every run of the batch's baseline case. batchIndex is the shuffled slot, so it can't say which case is the baseline. */
|
|
521
|
+
isBaseline?: boolean;
|
|
522
|
+
/** Browser runs only: what the per-run probe saw. Mirrors perf-monitor's WebRunSummary. */
|
|
523
|
+
webRun?: WebRunSummary;
|
|
499
524
|
/** Thermal state at run start; a throttled run reads cheap AND janky. */
|
|
500
525
|
thermalState?: "nominal" | "fair" | "serious" | "critical";
|
|
501
526
|
/** Render-capture mirror (absent when capture was unavailable/disabled). */
|
|
@@ -607,7 +632,25 @@ interface RankRow {
|
|
|
607
632
|
jsJank: number | null;
|
|
608
633
|
uiJank: number | null;
|
|
609
634
|
deviceMaxRefreshRate: number | null;
|
|
610
|
-
/**
|
|
635
|
+
/** True for the caller's baseline case (its first case, wherever it ran). */
|
|
636
|
+
isBaseline?: boolean;
|
|
637
|
+
/**
|
|
638
|
+
* "web" when the run came from a browser. Browser rows read differently:
|
|
639
|
+
* one main-thread FPS (in `jsFps`; `uiFps` is null), no CPU (long-task time
|
|
640
|
+
* is in `longTaskPct`), and real frame gaps instead of slow-sample counts.
|
|
641
|
+
*/
|
|
642
|
+
platform?: "web";
|
|
643
|
+
/** Browser rows: % of the run the main thread spent in long tasks (>50 ms). null = not supported. */
|
|
644
|
+
longTaskPct?: number | null;
|
|
645
|
+
/** Browser rows: 95th-percentile gap between frames, ms. */
|
|
646
|
+
frameGapP95Ms?: number | null;
|
|
647
|
+
/** Browser rows: the longest gap between frames, ms. */
|
|
648
|
+
frameGapMaxMs?: number | null;
|
|
649
|
+
/** Browser rows: gaps long enough to miss at least one frame. */
|
|
650
|
+
longFrames?: number | null;
|
|
651
|
+
/** Browser rows: metrics this browser can't measure (they show as —, never 0). */
|
|
652
|
+
missingMetrics?: string[];
|
|
653
|
+
/** Delta vs the baseline case — positive = better/more fps. */
|
|
611
654
|
deltaUiFps: number | null;
|
|
612
655
|
deltaJsFps: number | null;
|
|
613
656
|
/** At-risk axes for this case (e.g. "UI thread drops frames", "CPU near cap"). */
|
|
@@ -637,6 +680,8 @@ interface BatchRanking {
|
|
|
637
680
|
lowestCpu?: string;
|
|
638
681
|
lowestMem?: string;
|
|
639
682
|
fewestJank?: string;
|
|
683
|
+
/** Browser batches: least main-thread time in long tasks. */
|
|
684
|
+
fewestLongTasks?: string;
|
|
640
685
|
};
|
|
641
686
|
/** Cases with an at-risk axis (esp. UI thread) — never a silent winner. */
|
|
642
687
|
flagged: {
|
package/dist/index.d.ts
CHANGED
|
@@ -474,6 +474,27 @@ interface AutomationConfig {
|
|
|
474
474
|
captureRenders?: boolean;
|
|
475
475
|
}
|
|
476
476
|
/** A lightweight saved-recording summary (the device's index entry). */
|
|
477
|
+
/** Per-run browser probe summary (perf-monitor webRunProbe.ts). */
|
|
478
|
+
interface WebRunSummary {
|
|
479
|
+
durationMs: number;
|
|
480
|
+
frames: number;
|
|
481
|
+
refreshHz: number;
|
|
482
|
+
frameGapP95Ms: number | null;
|
|
483
|
+
frameGapMaxMs: number | null;
|
|
484
|
+
longFrames: number;
|
|
485
|
+
longTasksSupported: boolean;
|
|
486
|
+
longTaskMs: number | null;
|
|
487
|
+
longTaskPct: number | null;
|
|
488
|
+
hidden: boolean;
|
|
489
|
+
heapSupported: boolean;
|
|
490
|
+
viewport: {
|
|
491
|
+
width: number;
|
|
492
|
+
height: number;
|
|
493
|
+
} | null;
|
|
494
|
+
dpr: number | null;
|
|
495
|
+
resized: boolean;
|
|
496
|
+
userAgent: string | null;
|
|
497
|
+
}
|
|
477
498
|
interface IndexEntry {
|
|
478
499
|
id: string;
|
|
479
500
|
createdAt: number;
|
|
@@ -496,6 +517,10 @@ interface IndexEntry {
|
|
|
496
517
|
caseId?: string;
|
|
497
518
|
runIndex?: number;
|
|
498
519
|
isMedianRun?: boolean;
|
|
520
|
+
/** Set on every run of the batch's baseline case. batchIndex is the shuffled slot, so it can't say which case is the baseline. */
|
|
521
|
+
isBaseline?: boolean;
|
|
522
|
+
/** Browser runs only: what the per-run probe saw. Mirrors perf-monitor's WebRunSummary. */
|
|
523
|
+
webRun?: WebRunSummary;
|
|
499
524
|
/** Thermal state at run start; a throttled run reads cheap AND janky. */
|
|
500
525
|
thermalState?: "nominal" | "fair" | "serious" | "critical";
|
|
501
526
|
/** Render-capture mirror (absent when capture was unavailable/disabled). */
|
|
@@ -607,7 +632,25 @@ interface RankRow {
|
|
|
607
632
|
jsJank: number | null;
|
|
608
633
|
uiJank: number | null;
|
|
609
634
|
deviceMaxRefreshRate: number | null;
|
|
610
|
-
/**
|
|
635
|
+
/** True for the caller's baseline case (its first case, wherever it ran). */
|
|
636
|
+
isBaseline?: boolean;
|
|
637
|
+
/**
|
|
638
|
+
* "web" when the run came from a browser. Browser rows read differently:
|
|
639
|
+
* one main-thread FPS (in `jsFps`; `uiFps` is null), no CPU (long-task time
|
|
640
|
+
* is in `longTaskPct`), and real frame gaps instead of slow-sample counts.
|
|
641
|
+
*/
|
|
642
|
+
platform?: "web";
|
|
643
|
+
/** Browser rows: % of the run the main thread spent in long tasks (>50 ms). null = not supported. */
|
|
644
|
+
longTaskPct?: number | null;
|
|
645
|
+
/** Browser rows: 95th-percentile gap between frames, ms. */
|
|
646
|
+
frameGapP95Ms?: number | null;
|
|
647
|
+
/** Browser rows: the longest gap between frames, ms. */
|
|
648
|
+
frameGapMaxMs?: number | null;
|
|
649
|
+
/** Browser rows: gaps long enough to miss at least one frame. */
|
|
650
|
+
longFrames?: number | null;
|
|
651
|
+
/** Browser rows: metrics this browser can't measure (they show as —, never 0). */
|
|
652
|
+
missingMetrics?: string[];
|
|
653
|
+
/** Delta vs the baseline case — positive = better/more fps. */
|
|
611
654
|
deltaUiFps: number | null;
|
|
612
655
|
deltaJsFps: number | null;
|
|
613
656
|
/** At-risk axes for this case (e.g. "UI thread drops frames", "CPU near cap"). */
|
|
@@ -637,6 +680,8 @@ interface BatchRanking {
|
|
|
637
680
|
lowestCpu?: string;
|
|
638
681
|
lowestMem?: string;
|
|
639
682
|
fewestJank?: string;
|
|
683
|
+
/** Browser batches: least main-thread time in long tasks. */
|
|
684
|
+
fewestLongTasks?: string;
|
|
640
685
|
};
|
|
641
686
|
/** Cases with an at-risk axis (esp. UI thread) — never a silent winner. */
|
|
642
687
|
flagged: {
|