@ytspar/sweetlink 1.21.0 → 1.23.0

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.
Files changed (115) hide show
  1. package/README.md +77 -0
  2. package/dist/browser/SweetlinkBridge.d.ts +9 -0
  3. package/dist/browser/SweetlinkBridge.d.ts.map +1 -1
  4. package/dist/browser/SweetlinkBridge.js +73 -20
  5. package/dist/browser/SweetlinkBridge.js.map +1 -1
  6. package/dist/browser/commands/screenshot.d.ts.map +1 -1
  7. package/dist/browser/commands/screenshot.js +16 -7
  8. package/dist/browser/commands/screenshot.js.map +1 -1
  9. package/dist/browser/consoleCapture.js +1 -1
  10. package/dist/browser/consoleCapture.js.map +1 -1
  11. package/dist/browser/earlyConsoleCapture.d.ts +1 -1
  12. package/dist/browser/earlyConsoleCapture.d.ts.map +1 -1
  13. package/dist/browser/screenshotUtils.d.ts +13 -3
  14. package/dist/browser/screenshotUtils.d.ts.map +1 -1
  15. package/dist/browser/screenshotUtils.js +32 -6
  16. package/dist/browser/screenshotUtils.js.map +1 -1
  17. package/dist/cdp.d.ts +1 -0
  18. package/dist/cdp.d.ts.map +1 -1
  19. package/dist/cdp.js +34 -3
  20. package/dist/cdp.js.map +1 -1
  21. package/dist/cli/outputSchemas.d.ts +1 -0
  22. package/dist/cli/outputSchemas.d.ts.map +1 -1
  23. package/dist/cli/outputSchemas.js +1 -0
  24. package/dist/cli/outputSchemas.js.map +1 -1
  25. package/dist/cli/sweetlink-dev.d.ts +5 -2
  26. package/dist/cli/sweetlink-dev.d.ts.map +1 -1
  27. package/dist/cli/sweetlink-dev.js +12 -4
  28. package/dist/cli/sweetlink-dev.js.map +1 -1
  29. package/dist/cli/sweetlink.js +148 -64
  30. package/dist/cli/sweetlink.js.map +1 -1
  31. package/dist/daemon/browser.d.ts +3 -0
  32. package/dist/daemon/browser.d.ts.map +1 -1
  33. package/dist/daemon/browser.js +38 -5
  34. package/dist/daemon/browser.js.map +1 -1
  35. package/dist/daemon/demo.d.ts.map +1 -1
  36. package/dist/daemon/demo.js +3 -19
  37. package/dist/daemon/demo.js.map +1 -1
  38. package/dist/daemon/recording.d.ts +1 -1
  39. package/dist/daemon/recording.d.ts.map +1 -1
  40. package/dist/daemon/recording.js +1 -19
  41. package/dist/daemon/recording.js.map +1 -1
  42. package/dist/daemon/server.d.ts.map +1 -1
  43. package/dist/daemon/server.js +7 -9
  44. package/dist/daemon/server.js.map +1 -1
  45. package/dist/daemon/session.d.ts +8 -1
  46. package/dist/daemon/session.d.ts.map +1 -1
  47. package/dist/daemon/types.d.ts +9 -2
  48. package/dist/daemon/types.d.ts.map +1 -1
  49. package/dist/daemon/types.js.map +1 -1
  50. package/dist/daemon/utils.d.ts +22 -0
  51. package/dist/daemon/utils.d.ts.map +1 -0
  52. package/dist/daemon/utils.js +44 -0
  53. package/dist/daemon/utils.js.map +1 -0
  54. package/dist/daemon/viewer.d.ts.map +1 -1
  55. package/dist/daemon/viewer.js +2 -8
  56. package/dist/daemon/viewer.js.map +1 -1
  57. package/dist/daemon/visualDiff.d.ts +9 -0
  58. package/dist/daemon/visualDiff.d.ts.map +1 -1
  59. package/dist/daemon/visualDiff.js +12 -1
  60. package/dist/daemon/visualDiff.js.map +1 -1
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/next.d.ts.map +1 -1
  66. package/dist/next.js +16 -1
  67. package/dist/next.js.map +1 -1
  68. package/dist/playwright.d.ts +19 -0
  69. package/dist/playwright.d.ts.map +1 -1
  70. package/dist/playwright.js +119 -12
  71. package/dist/playwright.js.map +1 -1
  72. package/dist/runs.d.ts +15 -3
  73. package/dist/runs.d.ts.map +1 -1
  74. package/dist/runs.js +29 -13
  75. package/dist/runs.js.map +1 -1
  76. package/dist/server/index.d.ts +7 -1
  77. package/dist/server/index.d.ts.map +1 -1
  78. package/dist/server/index.js +56 -16
  79. package/dist/server/index.js.map +1 -1
  80. package/dist/simulator/android.d.ts +6 -0
  81. package/dist/simulator/android.d.ts.map +1 -1
  82. package/dist/simulator/android.js +81 -4
  83. package/dist/simulator/android.js.map +1 -1
  84. package/dist/simulator/androidTaps.d.ts +12 -2
  85. package/dist/simulator/androidTaps.d.ts.map +1 -1
  86. package/dist/simulator/androidTaps.js +57 -11
  87. package/dist/simulator/androidTaps.js.map +1 -1
  88. package/dist/simulator/ios.d.ts +7 -0
  89. package/dist/simulator/ios.d.ts.map +1 -1
  90. package/dist/simulator/ios.js +70 -25
  91. package/dist/simulator/ios.js.map +1 -1
  92. package/dist/term/cast.d.ts +24 -0
  93. package/dist/term/cast.d.ts.map +1 -0
  94. package/dist/term/cast.js +24 -0
  95. package/dist/term/cast.js.map +1 -0
  96. package/dist/term/player.d.ts.map +1 -1
  97. package/dist/term/player.js +36 -14
  98. package/dist/term/player.js.map +1 -1
  99. package/dist/term/recorder.d.ts +7 -0
  100. package/dist/term/recorder.d.ts.map +1 -1
  101. package/dist/term/recorder.js +35 -1
  102. package/dist/term/recorder.js.map +1 -1
  103. package/dist/types.d.ts +37 -1
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/types.js +127 -0
  106. package/dist/types.js.map +1 -1
  107. package/dist/vite.d.ts +11 -0
  108. package/dist/vite.d.ts.map +1 -1
  109. package/dist/vite.js +20 -1
  110. package/dist/vite.js.map +1 -1
  111. package/package.json +1 -1
  112. package/dist/term/ansi.d.ts +0 -37
  113. package/dist/term/ansi.d.ts.map +0 -1
  114. package/dist/term/ansi.js +0 -205
  115. package/dist/term/ansi.js.map +0 -1
package/dist/cdp.js CHANGED
@@ -16,6 +16,15 @@ const NETWORK_IDLE_TIMEOUT_MS = 10000;
16
16
  const NETWORK_IDLE_TIME_MS = 500;
17
17
  const SELECTOR_TIMEOUT_MS = 5000;
18
18
  const HOVER_TRANSITION_DELAY_MS = 300;
19
+ const HIDE_DEVBAR_STYLE_ID = 'sweetlink-hide-devbar-for-screenshot';
20
+ const HIDE_DEVBAR_CSS = `
21
+ [data-devbar],
22
+ [data-devbar-overlay],
23
+ [data-devbar-tooltip] {
24
+ visibility: hidden !important;
25
+ pointer-events: none !important;
26
+ }
27
+ `;
19
28
  const NETWORK_REQUEST_COLLECT_DELAY_MS = 2000;
20
29
  /**
21
30
  * Check if Chrome DevTools Protocol is available
@@ -137,9 +146,31 @@ export async function screenshotViaCDP(options) {
137
146
  throw new Error(`Failed to find element "${options.selector}": ${error instanceof Error ? error.message : error}`);
138
147
  }
139
148
  }
140
- // Take the screenshot
141
- const screenshot = await page.screenshot(screenshotOptions);
142
- const buffer = Buffer.from(screenshot);
149
+ let devbarHidden = false;
150
+ if (options.hideDevbar) {
151
+ devbarHidden = await page.evaluate((styleId, css) => {
152
+ if (document.getElementById(styleId))
153
+ return false;
154
+ const style = document.createElement('style');
155
+ style.id = styleId;
156
+ style.textContent = css;
157
+ document.head.appendChild(style);
158
+ return true;
159
+ }, HIDE_DEVBAR_STYLE_ID, HIDE_DEVBAR_CSS);
160
+ }
161
+ let buffer;
162
+ try {
163
+ // Take the screenshot
164
+ const screenshot = await page.screenshot(screenshotOptions);
165
+ buffer = Buffer.from(screenshot);
166
+ }
167
+ finally {
168
+ if (devbarHidden) {
169
+ await page.evaluate((styleId) => {
170
+ document.getElementById(styleId)?.remove();
171
+ }, HIDE_DEVBAR_STYLE_ID);
172
+ }
173
+ }
143
174
  // Save to file if output path provided
144
175
  if (options.output) {
145
176
  fs.writeFileSync(options.output, buffer);
package/dist/cdp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export interface ScreenshotData {
17
17
  height: number;
18
18
  method: string;
19
19
  selector?: string;
20
+ devbarHidden?: boolean;
20
21
  }
21
22
  export interface QueryData {
22
23
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"outputSchemas.d.ts","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnF,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxD,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChF;AAcD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoK1C,CAAC;AAMF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAErD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAoBxD"}
1
+ {"version":3,"file":"outputSchemas.d.ts","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export const SCHEMAS = {
21
21
  height: number;
22
22
  method: string;
23
23
  selector?: string;
24
+ devbarHidden?: boolean;
24
25
  }`,
25
26
  query: `interface QueryData {
26
27
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"outputSchemas.js","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6JH,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,MAAM,eAAe,GAAG;;;;;;EAMtB,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAA2B;IAC7C,UAAU,EAAE;;;;;;EAMZ;IAEA,KAAK,EAAE;;;;EAIP;IAEA,IAAI,EAAE;;;;;;EAMN;IAEA,IAAI,EAAE;;EAEN;IAEA,KAAK,EAAE;;;;EAIP;IAEA,OAAO,EAAE;;EAET;IAEA,KAAK,EAAE;;;;;EAKP;IAEA,OAAO,EAAE;;;EAGT;IAEA,MAAM,EAAE;;;;EAIR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;EAGR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;;EAIR;IAEA,MAAM,EAAE;;;;;;EAMR;IAEA,QAAQ,EAAE;;;;EAIV;IAEA,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCT;IAEA,OAAO,EAAE;;;;;;EAMT;IAEA,IAAI,EAAE;;;EAGN;IAEA,KAAK,EAAE;;EAEP;IAEA,MAAM,EAAE;;;;;;EAMR;CACD,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAsB;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"outputSchemas.js","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8JH,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,MAAM,eAAe,GAAG;;;;;;EAMtB,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAA2B;IAC7C,UAAU,EAAE;;;;;;;EAOZ;IAEA,KAAK,EAAE;;;;EAIP;IAEA,IAAI,EAAE;;;;;;EAMN;IAEA,IAAI,EAAE;;EAEN;IAEA,KAAK,EAAE;;;;EAIP;IAEA,OAAO,EAAE;;EAET;IAEA,KAAK,EAAE;;;;;EAKP;IAEA,OAAO,EAAE;;;EAGT;IAEA,MAAM,EAAE;;;;EAIR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;EAGR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;;EAIR;IAEA,MAAM,EAAE;;;;;;EAMR;IAEA,QAAQ,EAAE;;;;EAIV;IAEA,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCT;IAEA,OAAO,EAAE;;;;;;EAMT;IAEA,IAAI,EAAE;;;EAGN;IAEA,KAAK,EAAE;;EAEP;IAEA,MAAM,EAAE;;;;;;EAMR;CACD,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAsB;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -6,8 +6,11 @@
6
6
  * Run alongside the Remix dev server.
7
7
  *
8
8
  * Environment variables:
9
- * - SWEETLINK_WS_PORT: WebSocket server port (default: 9223)
10
- * - PORT: Associated app port for origin validation (optional)
9
+ * - SWEETLINK_WS_PORT: WebSocket server port (default: appPort + 6223, or 9223)
10
+ * - SWEETLINK_APP_PORT: Associated app port for origin validation (optional)
11
+ * - SWEETLINK_APP_URL: Associated local app URL for origin validation (optional)
12
+ * - PORTLESS_URL: Associated Portless app URL for origin validation (optional)
13
+ * - PORT: Associated app port fallback for origin validation (optional)
11
14
  * - ANTHROPIC_API_KEY: Required for AI design review feature
12
15
  */
13
16
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sweetlink-dev.d.ts","sourceRoot":"","sources":["../../src/cli/sweetlink-dev.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"sweetlink-dev.d.ts","sourceRoot":"","sources":["../../src/cli/sweetlink-dev.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
@@ -6,8 +6,11 @@
6
6
  * Run alongside the Remix dev server.
7
7
  *
8
8
  * Environment variables:
9
- * - SWEETLINK_WS_PORT: WebSocket server port (default: 9223)
10
- * - PORT: Associated app port for origin validation (optional)
9
+ * - SWEETLINK_WS_PORT: WebSocket server port (default: appPort + 6223, or 9223)
10
+ * - SWEETLINK_APP_PORT: Associated app port for origin validation (optional)
11
+ * - SWEETLINK_APP_URL: Associated local app URL for origin validation (optional)
12
+ * - PORTLESS_URL: Associated Portless app URL for origin validation (optional)
13
+ * - PORT: Associated app port fallback for origin validation (optional)
11
14
  * - ANTHROPIC_API_KEY: Required for AI design review feature
12
15
  */
13
16
  import { config } from 'dotenv';
@@ -15,8 +18,13 @@ import { join } from 'path';
15
18
  // Load .env from the project directory (cwd)
16
19
  config({ path: join(process.cwd(), '.env') });
17
20
  import { closeSweetlink, initSweetlink } from '../server.js';
18
- const port = parseInt(process.env.SWEETLINK_WS_PORT || '9223', 10);
19
- const appPort = process.env.PORT ? parseInt(process.env.PORT, 10) : undefined;
21
+ import { parsePortNumber, resolveAppPortFromLocalUrl, resolveSweetlinkWsPortForAppPort, } from '../types.js';
22
+ const appPort = parsePortNumber(process.env.SWEETLINK_APP_PORT) ??
23
+ resolveAppPortFromLocalUrl(process.env.SWEETLINK_APP_URL) ??
24
+ resolveAppPortFromLocalUrl(process.env.PORTLESS_URL) ??
25
+ parsePortNumber(process.env.PORT) ??
26
+ undefined;
27
+ const port = parsePortNumber(process.env.SWEETLINK_WS_PORT) ?? resolveSweetlinkWsPortForAppPort(appPort);
20
28
  console.log('[Sweetlink] Starting development server...');
21
29
  console.log(`[Sweetlink] Project directory: ${process.cwd()}`);
22
30
  initSweetlink({ port, appPort });
@@ -1 +1 @@
1
- {"version":3,"file":"sweetlink-dev.js","sourceRoot":"","sources":["../../src/cli/sweetlink-dev.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,6CAA6C;AAC7C,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAE9E,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC1D,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE/D,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjC,oBAAoB;AACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC"}
1
+ {"version":3,"file":"sweetlink-dev.js","sourceRoot":"","sources":["../../src/cli/sweetlink-dev.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,6CAA6C;AAC7C,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,GACX,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACzD,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACpD,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,SAAS,CAAC;AACZ,MAAM,IAAI,GACR,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,gCAAgC,CAAC,OAAO,CAAC,CAAC;AAE9F,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC1D,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE/D,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjC,oBAAoB;AACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * Command-line interface for interacting with the Sweetlink WebSocket server.
6
6
  * Allows taking screenshots, querying DOM, getting console logs, and executing JavaScript.
7
7
  */
8
+ import * as childProcess from 'child_process';
8
9
  import * as fs from 'fs';
9
10
  import * as path from 'path';
10
11
  import { WebSocket } from 'ws';
@@ -90,6 +91,75 @@ function ensureDir(filePath) {
90
91
  fs.mkdirSync(dir, { recursive: true });
91
92
  }
92
93
  }
94
+ /**
95
+ * Find the most recent recording-session directory.
96
+ * Returns the absolute path or null if no sessions exist.
97
+ */
98
+ function findLatestSessionDir(baseDir) {
99
+ if (!fs.existsSync(baseDir))
100
+ return null;
101
+ const sessions = fs
102
+ .readdirSync(baseDir)
103
+ .filter((f) => f.startsWith('session-'))
104
+ .sort()
105
+ .reverse();
106
+ if (sessions.length === 0)
107
+ return null;
108
+ return path.join(baseDir, sessions[0]);
109
+ }
110
+ /**
111
+ * Open a file in the default GUI handler. Cross-platform helper used by
112
+ * `record stop` (auto-open viewer) and `sessions open` (browse index).
113
+ * Failure is best-effort — the path is already on disk, the user can open
114
+ * it manually if no GUI is available.
115
+ */
116
+ function openInBrowser(filePath) {
117
+ let cmd;
118
+ let args;
119
+ switch (process.platform) {
120
+ case 'darwin':
121
+ cmd = 'open';
122
+ args = [filePath];
123
+ break;
124
+ case 'win32':
125
+ cmd = 'cmd';
126
+ args = ['/c', 'start', '', filePath];
127
+ break;
128
+ default:
129
+ cmd = 'xdg-open';
130
+ args = [filePath];
131
+ break;
132
+ }
133
+ try {
134
+ childProcess.spawn(cmd, args, { detached: true, stdio: 'ignore' }).unref();
135
+ }
136
+ catch {
137
+ /* best effort — user can open manually */
138
+ }
139
+ }
140
+ /**
141
+ * Reject --output paths that escape the project root.
142
+ *
143
+ * Any path is fine when it resolves inside the project (relative or absolute);
144
+ * paths that resolve outside (e.g. `--output ../../../etc/passwd`,
145
+ * `--output /Users/victim/.zshrc`, or batch JSON `output: "/etc/cron.d/x"`)
146
+ * are blocked unless `SWEETLINK_ALLOW_OUTSIDE_OUTPUT=1` is set. Without this
147
+ * gate the batch JSON-stdin mode lets a less-trusted upstream agent write
148
+ * arbitrary content to arbitrary paths the user can write.
149
+ */
150
+ function assertOutputInRoot(outputPath) {
151
+ const projectRoot = path.resolve(findProjectRoot());
152
+ const resolved = path.resolve(outputPath);
153
+ if (process.env.SWEETLINK_ALLOW_OUTSIDE_OUTPUT === '1')
154
+ return resolved;
155
+ if (resolved !== projectRoot && !resolved.startsWith(`${projectRoot}${path.sep}`)) {
156
+ throw new Error(`Refusing to write outside project root.\n` +
157
+ ` output: ${resolved}\n` +
158
+ ` project: ${projectRoot}\n` +
159
+ `Pass a path inside the project, or set SWEETLINK_ALLOW_OUTSIDE_OUTPUT=1 to override.`);
160
+ }
161
+ return resolved;
162
+ }
93
163
  /**
94
164
  * Get the default screenshot output path (relative to project root)
95
165
  */
@@ -408,6 +478,7 @@ async function takePlaywrightScreenshot(options, method) {
408
478
  fullPage: options.fullPage,
409
479
  viewport: options.viewport,
410
480
  hover: options.hover,
481
+ hideDevbar: options.hideDevbar,
411
482
  url: options.url,
412
483
  });
413
484
  reportScreenshotSuccess(outputPath, result.width, result.height, method, options.selector);
@@ -417,6 +488,7 @@ async function takePlaywrightScreenshot(options, method) {
417
488
  height: result.height,
418
489
  method,
419
490
  selector: options.selector,
491
+ ...(options.hideDevbar ? { devbarHidden: true } : {}),
420
492
  };
421
493
  }
422
494
  async function screenshot(options) {
@@ -445,6 +517,7 @@ async function screenshot(options) {
445
517
  if (options.responsive) {
446
518
  const resp = await daemonRequest(daemonState, 'screenshot-responsive', {
447
519
  fullPage: options.fullPage,
520
+ hideDevbar: options.hideDevbar,
448
521
  });
449
522
  const data = resp.data;
450
523
  const outputDir = options.output
@@ -465,6 +538,7 @@ async function screenshot(options) {
465
538
  width: first.width,
466
539
  height: first.height,
467
540
  method: 'Daemon (responsive)',
541
+ ...(options.hideDevbar ? { devbarHidden: true } : {}),
468
542
  };
469
543
  }
470
544
  // Single hifi screenshot
@@ -474,6 +548,7 @@ async function screenshot(options) {
474
548
  viewport: options.viewport,
475
549
  padding: options.padding,
476
550
  theme: options.theme,
551
+ hideDevbar: options.hideDevbar,
477
552
  });
478
553
  const data = resp.data;
479
554
  const outputPath = options.output || getDefaultScreenshotPath();
@@ -501,6 +576,7 @@ async function screenshot(options) {
501
576
  height: data.height,
502
577
  method: 'Daemon (hifi)',
503
578
  selector: options.selector,
579
+ ...(options.hideDevbar ? { devbarHidden: true } : {}),
504
580
  };
505
581
  }
506
582
  console.log('[Sweetlink] Taking screenshot...');
@@ -524,6 +600,7 @@ async function screenshot(options) {
524
600
  fullPage: options.fullPage,
525
601
  viewport: options.viewport,
526
602
  hover: options.hover,
603
+ hideDevbar: options.hideDevbar,
527
604
  url: options.url,
528
605
  };
529
606
  // If we need CDP/Playwright (for hover or force-cdp), or if CDP is available, use Playwright
@@ -561,6 +638,7 @@ async function screenshot(options) {
561
638
  const command = {
562
639
  type: 'screenshot',
563
640
  selector: options.selector,
641
+ hideDevbar: options.hideDevbar || undefined,
564
642
  options: {
565
643
  fullPage: options.fullPage,
566
644
  a11y: options.a11y,
@@ -598,6 +676,7 @@ async function screenshot(options) {
598
676
  height: data.height,
599
677
  method: 'WebSocket (html2canvas)',
600
678
  selector: data.selector,
679
+ ...(options.hideDevbar ? { devbarHidden: true } : {}),
601
680
  };
602
681
  }
603
682
  catch (error) {
@@ -1518,26 +1597,33 @@ async function getVitals(options) {
1518
1597
  console.log(`\n[Sweetlink] Web Vitals`);
1519
1598
  console.log(` URL: ${vitalsData.url}`);
1520
1599
  console.log(` ${summary}`);
1521
- // Detailed breakdown
1600
+ // Detailed breakdown — pick a green/yellow/red color per Web Vitals threshold
1601
+ const ANSI_GREEN = '\x1b[32m';
1602
+ const ANSI_YELLOW = '\x1b[33m';
1603
+ const ANSI_RED = '\x1b[31m';
1604
+ const ANSI_RESET = '\x1b[0m';
1605
+ const thresholdColor = (value, good, ok) => {
1606
+ if (value <= good)
1607
+ return ANSI_GREEN;
1608
+ if (value <= ok)
1609
+ return ANSI_YELLOW;
1610
+ return ANSI_RED;
1611
+ };
1522
1612
  if (vitalsData.fcp !== null) {
1523
1613
  const fcp = vitalsData.fcp;
1524
- const color = fcp <= 1800 ? '\x1b[32m' : fcp <= 3000 ? '\x1b[33m' : '\x1b[31m';
1525
- console.log(` FCP: ${color}${fcp}ms\x1b[0m`);
1614
+ console.log(` FCP: ${thresholdColor(fcp, 1800, 3000)}${fcp}ms${ANSI_RESET}`);
1526
1615
  }
1527
1616
  if (vitalsData.lcp !== null) {
1528
1617
  const lcp = vitalsData.lcp;
1529
- const color = lcp <= 2500 ? '\x1b[32m' : lcp <= 4000 ? '\x1b[33m' : '\x1b[31m';
1530
- console.log(` LCP: ${color}${lcp}ms\x1b[0m`);
1618
+ console.log(` LCP: ${thresholdColor(lcp, 2500, 4000)}${lcp}ms${ANSI_RESET}`);
1531
1619
  }
1532
1620
  if (vitalsData.cls !== null) {
1533
1621
  const cls = vitalsData.cls;
1534
- const color = cls <= 0.1 ? '\x1b[32m' : cls <= 0.25 ? '\x1b[33m' : '\x1b[31m';
1535
- console.log(` CLS: ${color}${cls}\x1b[0m`);
1622
+ console.log(` CLS: ${thresholdColor(cls, 0.1, 0.25)}${cls}${ANSI_RESET}`);
1536
1623
  }
1537
1624
  if (vitalsData.inp !== null) {
1538
1625
  const inp = vitalsData.inp;
1539
- const color = inp <= 200 ? '\x1b[32m' : inp <= 500 ? '\x1b[33m' : '\x1b[31m';
1540
- console.log(` INP: ${color}${inp}ms\x1b[0m`);
1626
+ console.log(` INP: ${thresholdColor(inp, 200, 500)}${inp}ms${ANSI_RESET}`);
1541
1627
  }
1542
1628
  if (vitalsData.pageSize !== null) {
1543
1629
  const sizeKB = Math.round(vitalsData.pageSize / 1024);
@@ -1595,6 +1681,7 @@ const COMMAND_HELP = {
1595
1681
  --selector <css-selector> CSS selector of element to screenshot
1596
1682
  --output <path> Output file path (default: screenshot-<timestamp>.png)
1597
1683
  --full-page Capture full scrollable page (default: viewport only)
1684
+ --hide-devbar Temporarily hide DevBar chrome from the screenshot
1598
1685
  --width <pixels> Viewport width for Playwright (e.g., 768 for tablet, 375 for mobile)
1599
1686
  --height <pixels> Viewport height for Playwright (default: width * 1.5)
1600
1687
  --viewport <preset|WxH> Viewport preset for Playwright (mobile, tablet, desktop) or WIDTHxHEIGHT
@@ -1615,6 +1702,7 @@ const COMMAND_HELP = {
1615
1702
  pnpm sweetlink screenshot # Viewport screenshot (small)
1616
1703
  pnpm sweetlink screenshot --url "http://localhost:3000/company/foo" # Navigate then capture
1617
1704
  pnpm sweetlink screenshot --selector ".company-card" # Element screenshot
1705
+ pnpm sweetlink screenshot --hide-devbar # Capture app without DevBar chrome
1618
1706
  pnpm sweetlink screenshot --full-page # Full scrollable page
1619
1707
  pnpm sweetlink screenshot --force-cdp --viewport tablet # Playwright at 768x1024
1620
1708
  pnpm sweetlink screenshot --force-cdp --width 375 --height 667 # Playwright at iPhone SE
@@ -2171,6 +2259,30 @@ async function runBatchFromStdin() {
2171
2259
  if (!allOk)
2172
2260
  process.exit(1);
2173
2261
  }
2262
+ /**
2263
+ * Resolve the on-disk path for a capture artifact (term .cast, sim .mp4).
2264
+ * Honours --app/--run for the app-scoped hierarchy (delegates to runSlot)
2265
+ * and the historical flat layout when --app is absent. Used by both the
2266
+ * batch JSON-stdin path and the direct CLI handlers so they cannot drift.
2267
+ */
2268
+ async function resolveCapturePath(opts) {
2269
+ if (opts.output)
2270
+ return assertOutputInRoot(opts.output);
2271
+ const labelSlug = (opts.label ?? 'batch')
2272
+ .replace(/[^a-z0-9]/gi, '-')
2273
+ .toLowerCase()
2274
+ .slice(0, 40);
2275
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
2276
+ const filename = `${labelSlug}-${stamp}.${opts.ext}`;
2277
+ const { runSlot } = await import('../runs.js');
2278
+ const dir = runSlot({
2279
+ baseDir: findProjectRoot(),
2280
+ app: opts.app,
2281
+ run: opts.run,
2282
+ kind: opts.kind,
2283
+ });
2284
+ return assertOutputInRoot(path.join(dir, filename));
2285
+ }
2174
2286
  async function runOneBatchCapture(cap) {
2175
2287
  const mode = cap.mode;
2176
2288
  if (!mode)
@@ -2180,13 +2292,14 @@ async function runOneBatchCapture(cap) {
2180
2292
  if (!command)
2181
2293
  throw new Error('term capture missing "command".');
2182
2294
  const label = cap.label ?? 'batch';
2183
- const labelSlug = label
2184
- .replace(/[^a-z0-9]/gi, '-')
2185
- .toLowerCase()
2186
- .slice(0, 40);
2187
- const stamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
2188
- const output = cap.output ??
2189
- path.join(findProjectRoot(), '.sweetlink', 'term', `${labelSlug}-${stamp}.cast`);
2295
+ const output = await resolveCapturePath({
2296
+ kind: 'term',
2297
+ label,
2298
+ output: cap.output,
2299
+ app: cap.app,
2300
+ run: cap.run,
2301
+ ext: 'cast',
2302
+ });
2190
2303
  ensureDir(output);
2191
2304
  const { captureTerminal } = await import('../term/recorder.js');
2192
2305
  const { generatePlayer } = await import('../term/player.js');
@@ -2197,6 +2310,7 @@ async function runOneBatchCapture(cap) {
2197
2310
  shell: cap.shell,
2198
2311
  cols: typeof cap.cols === 'number' ? cap.cols : undefined,
2199
2312
  rows: typeof cap.rows === 'number' ? cap.rows : undefined,
2313
+ inheritEnv: cap.inheritEnv === true,
2200
2314
  });
2201
2315
  const playerPath = await generatePlayer({ castPath: output });
2202
2316
  return {
@@ -2212,13 +2326,14 @@ async function runOneBatchCapture(cap) {
2212
2326
  if (!command)
2213
2327
  throw new Error(`${mode} capture missing "command".`);
2214
2328
  const label = cap.label ?? 'batch';
2215
- const labelSlug = label
2216
- .replace(/[^a-z0-9]/gi, '-')
2217
- .toLowerCase()
2218
- .slice(0, 40);
2219
- const stamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
2220
- const output = cap.output ??
2221
- path.join(findProjectRoot(), '.sweetlink', 'sim', `${labelSlug}-${stamp}.mp4`);
2329
+ const output = await resolveCapturePath({
2330
+ kind: 'sim',
2331
+ label,
2332
+ output: cap.output,
2333
+ app: cap.app,
2334
+ run: cap.run,
2335
+ ext: 'mp4',
2336
+ });
2222
2337
  ensureDir(output);
2223
2338
  const device = cap.device;
2224
2339
  if (mode === 'sim-ios') {
@@ -2246,7 +2361,7 @@ async function runOneBatchCapture(cap) {
2246
2361
  });
2247
2362
  const data = resp.data;
2248
2363
  if (cap.output) {
2249
- const outputPath = cap.output;
2364
+ const outputPath = assertOutputInRoot(cap.output);
2250
2365
  ensureDir(outputPath);
2251
2366
  fs.writeFileSync(outputPath, Buffer.from(data.screenshot, 'base64'));
2252
2367
  return { path: outputPath, width: data.width, height: data.height };
@@ -2452,6 +2567,7 @@ async function handleStatusCommand() {
2452
2567
  width: getArg('--width') ? parseInt(getArg('--width'), 10) : undefined,
2453
2568
  height: getArg('--height') ? parseInt(getArg('--height'), 10) : undefined,
2454
2569
  hover: hasFlag('--hover'),
2570
+ hideDevbar: hasFlag('--hide-devbar'),
2455
2571
  padding: getArg('--padding') ? parseInt(getArg('--padding'), 10) : undefined,
2456
2572
  theme: getArg('--theme'),
2457
2573
  url: getArg('--url'),
@@ -2721,17 +2837,11 @@ async function handleStatusCommand() {
2721
2837
  process.exit(1);
2722
2838
  }
2723
2839
  const sessionDirArg = getArg('--session') ?? '.sweetlink';
2724
- // Find latest session manifest
2725
- const sessionFiles = fs
2726
- .readdirSync(sessionDirArg)
2727
- .filter((f) => f.startsWith('session-'))
2728
- .sort()
2729
- .reverse();
2730
- if (sessionFiles.length === 0) {
2840
+ const latestSession = findLatestSessionDir(sessionDirArg);
2841
+ if (!latestSession) {
2731
2842
  console.error('[Sweetlink] No session found. Run `record start` and `record stop` first.');
2732
2843
  process.exit(1);
2733
2844
  }
2734
- const latestSession = path.join(sessionDirArg, sessionFiles[0]);
2735
2845
  const manifestPath = path.join(latestSession, 'sweetlink-session.json');
2736
2846
  if (!fs.existsSync(manifestPath)) {
2737
2847
  console.error(`[Sweetlink] No manifest found at ${manifestPath}`);
@@ -2782,20 +2892,7 @@ async function handleStatusCommand() {
2782
2892
  // Auto-open the viewer (cross-platform; --no-open to suppress)
2783
2893
  if (data.viewerPath && !hasFlag('--no-open')) {
2784
2894
  console.log(` Viewer: ${data.viewerPath}`);
2785
- const { execFile } = await import('child_process');
2786
- // `start` on Windows is a cmd builtin, not an exe — must invoke via cmd.
2787
- const cmd = process.platform === 'darwin'
2788
- ? 'open'
2789
- : process.platform === 'win32'
2790
- ? 'cmd'
2791
- : 'xdg-open';
2792
- const args = process.platform === 'win32'
2793
- ? ['/c', 'start', '', data.viewerPath]
2794
- : [data.viewerPath];
2795
- execFile(cmd, args, (err) => {
2796
- if (err)
2797
- console.error(' Could not open viewer:', err.message);
2798
- });
2895
+ openInBrowser(data.viewerPath);
2799
2896
  console.log(` Opened in browser.`);
2800
2897
  }
2801
2898
  else if (data.viewerPath) {
@@ -2915,21 +3012,15 @@ async function handleStatusCommand() {
2915
3012
  }
2916
3013
  case 'report': {
2917
3014
  const sessionDirArg = getArg('--session') ?? '.sweetlink';
2918
- // Find latest session directory
2919
3015
  if (!fs.existsSync(sessionDirArg)) {
2920
3016
  console.error(`[Sweetlink] Session directory not found: ${sessionDirArg}`);
2921
3017
  process.exit(1);
2922
3018
  }
2923
- const reportSessions = fs
2924
- .readdirSync(sessionDirArg)
2925
- .filter((f) => f.startsWith('session-'))
2926
- .sort()
2927
- .reverse();
2928
- if (reportSessions.length === 0) {
3019
+ const reportSessionDir = findLatestSessionDir(sessionDirArg);
3020
+ if (!reportSessionDir) {
2929
3021
  console.error('[Sweetlink] No session found. Run `record start` and `record stop` first.');
2930
3022
  process.exit(1);
2931
3023
  }
2932
- const reportSessionDir = path.join(sessionDirArg, reportSessions[0]);
2933
3024
  if (hasFlag('--clipboard')) {
2934
3025
  // Copy SUMMARY.md to clipboard
2935
3026
  const summaryPath = path.join(reportSessionDir, 'SUMMARY.md');
@@ -2949,7 +3040,7 @@ async function handleStatusCommand() {
2949
3040
  console.error(`[Sweetlink] Failed to copy to clipboard (${clipCmd}):`, err instanceof Error ? err.message : err);
2950
3041
  process.exit(1);
2951
3042
  }
2952
- result = { mode: 'clipboard', session: reportSessions[0] };
3043
+ result = { mode: 'clipboard', session: path.basename(reportSessionDir) };
2953
3044
  }
2954
3045
  else if (hasFlag('--serve')) {
2955
3046
  // Serve viewer.html on a random port
@@ -3033,7 +3124,7 @@ async function handleStatusCommand() {
3033
3124
  }
3034
3125
  const summaryContent = fs.readFileSync(summaryPath, 'utf-8');
3035
3126
  process.stdout.write(summaryContent);
3036
- result = { mode: 'stdout', session: reportSessions[0] };
3127
+ result = { mode: 'stdout', session: path.basename(reportSessionDir) };
3037
3128
  }
3038
3129
  break;
3039
3130
  }
@@ -3295,14 +3386,7 @@ async function handleStatusCommand() {
3295
3386
  else if (sub === 'open') {
3296
3387
  // Open the index.html in the browser
3297
3388
  if (data.indexPath) {
3298
- const { execFile } = await import('child_process');
3299
- const cmd = process.platform === 'darwin'
3300
- ? 'open'
3301
- : process.platform === 'win32'
3302
- ? 'cmd'
3303
- : 'xdg-open';
3304
- const cmdArgs = process.platform === 'win32' ? ['/c', 'start', '', data.indexPath] : [data.indexPath];
3305
- execFile(cmd, cmdArgs, () => { });
3389
+ openInBrowser(data.indexPath);
3306
3390
  console.log(`[Sweetlink] Opened ${data.indexPath}`);
3307
3391
  }
3308
3392
  result = { indexPath: data.indexPath };