screenwright 0.1.8 → 0.1.10

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 (68) hide show
  1. package/dist/bin/screenwright.js +2 -0
  2. package/dist/bin/screenwright.js.map +1 -1
  3. package/dist/src/commands/compose.d.ts.map +1 -1
  4. package/dist/src/commands/compose.js +21 -2
  5. package/dist/src/commands/compose.js.map +1 -1
  6. package/dist/src/commands/config.d.ts +3 -0
  7. package/dist/src/commands/config.d.ts.map +1 -0
  8. package/dist/src/commands/config.js +97 -0
  9. package/dist/src/commands/config.js.map +1 -0
  10. package/dist/src/commands/init.d.ts.map +1 -1
  11. package/dist/src/commands/init.js +15 -3
  12. package/dist/src/commands/init.js.map +1 -1
  13. package/dist/src/composition/CursorOverlay.d.ts.map +1 -1
  14. package/dist/src/composition/CursorOverlay.js +7 -2
  15. package/dist/src/composition/CursorOverlay.js.map +1 -1
  16. package/dist/src/composition/cursor-path.d.ts.map +1 -1
  17. package/dist/src/composition/cursor-path.js +9 -9
  18. package/dist/src/composition/cursor-path.js.map +1 -1
  19. package/dist/src/config/config-schema.d.ts +11 -0
  20. package/dist/src/config/config-schema.d.ts.map +1 -1
  21. package/dist/src/config/config-schema.js +7 -0
  22. package/dist/src/config/config-schema.js.map +1 -1
  23. package/dist/src/config/defaults.d.ts.map +1 -1
  24. package/dist/src/config/defaults.js +3 -0
  25. package/dist/src/config/defaults.js.map +1 -1
  26. package/dist/src/config/load-config.d.ts +7 -0
  27. package/dist/src/config/load-config.d.ts.map +1 -0
  28. package/dist/src/config/load-config.js +31 -0
  29. package/dist/src/config/load-config.js.map +1 -0
  30. package/dist/src/generator/prompts.d.ts +1 -1
  31. package/dist/src/generator/prompts.d.ts.map +1 -1
  32. package/dist/src/generator/prompts.js +1 -6
  33. package/dist/src/generator/prompts.js.map +1 -1
  34. package/dist/src/generator/scenario-generator.d.ts.map +1 -1
  35. package/dist/src/generator/scenario-generator.js +0 -4
  36. package/dist/src/generator/scenario-generator.js.map +1 -1
  37. package/dist/src/index.d.ts +4 -2
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +2 -0
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/runtime/action-helpers.d.ts +9 -2
  42. package/dist/src/runtime/action-helpers.d.ts.map +1 -1
  43. package/dist/src/runtime/action-helpers.js +58 -31
  44. package/dist/src/runtime/action-helpers.js.map +1 -1
  45. package/dist/src/runtime/instrumented-page.d.ts +2 -1
  46. package/dist/src/runtime/instrumented-page.d.ts.map +1 -1
  47. package/dist/src/runtime/instrumented-page.js +12 -2
  48. package/dist/src/runtime/instrumented-page.js.map +1 -1
  49. package/dist/src/timeline/schema.d.ts +10 -10
  50. package/dist/src/version.d.ts +1 -1
  51. package/dist/src/version.d.ts.map +1 -1
  52. package/dist/src/version.js +1 -1
  53. package/dist/src/version.js.map +1 -1
  54. package/dist/src/voiceover/narration-timing.d.ts +4 -1
  55. package/dist/src/voiceover/narration-timing.d.ts.map +1 -1
  56. package/dist/src/voiceover/narration-timing.js +10 -5
  57. package/dist/src/voiceover/narration-timing.js.map +1 -1
  58. package/dist/src/voiceover/openai-engine.d.ts +7 -0
  59. package/dist/src/voiceover/openai-engine.d.ts.map +1 -0
  60. package/dist/src/voiceover/openai-engine.js +50 -0
  61. package/dist/src/voiceover/openai-engine.js.map +1 -0
  62. package/dist/src/voiceover/piper-engine.d.ts +1 -1
  63. package/dist/src/voiceover/piper-engine.d.ts.map +1 -1
  64. package/dist/src/voiceover/piper-engine.js +1 -1
  65. package/dist/src/voiceover/piper-engine.js.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +1 -1
  68. package/skill/SKILL.md +3 -13
@@ -1,7 +1,6 @@
1
1
  export const SYSTEM_PROMPT = `You are Screenwright, a tool that converts Playwright E2E tests into cinematic product demo scenarios.
2
2
 
3
3
  Given a Playwright test file, generate a new TypeScript file that uses the Screenwright helpers API to create a polished demo with:
4
- - Natural pacing (deliberate waits between actions)
5
4
  - Human-friendly data (replace faker/test data with realistic values)
6
5
  - Narration cues (explain what's happening to the viewer)
7
6
  - Scene boundaries (organize the demo into logical chapters)
@@ -23,7 +22,7 @@ Rules:
23
22
  2. Export a default async function
24
23
  3. Replace ALL test/faker data with realistic human-friendly values
25
24
  4. Add narration to key actions explaining what the user is doing
26
- 5. Add sw.wait() calls between logical steps for pacing
25
+ 5. Use sw.wait() sparingly only at scene transitions. Screenwright adds natural pacing automatically.
27
26
  6. Use sw.scene() to organize into 2-5 scenes
28
27
  7. Keep the same user flow as the original test
29
28
  8. Do NOT include assertions — this is a demo, not a test
@@ -82,24 +81,20 @@ export default async function scenario(sw: ScreenwrightHelpers) {
82
81
  await sw.navigate('http://localhost:3000', {
83
82
  narration: 'Let\\'s browse the electronics store.',
84
83
  });
85
- await sw.wait(1500);
86
84
 
87
85
  await sw.click('[data-testid="product-laptop"]', {
88
86
  narration: 'We\\'ll select the MacBook Pro.',
89
87
  });
90
- await sw.wait(1000);
91
88
 
92
89
  await sw.scene('Adding to Cart');
93
90
  await sw.click('[data-testid="add-to-cart"]', {
94
91
  narration: 'Add it to our cart.',
95
92
  });
96
- await sw.wait(1500);
97
93
 
98
94
  await sw.scene('Checkout');
99
95
  await sw.fill('[data-testid="email"]', 'sarah.chen@acme.co', {
100
96
  narration: 'Enter our email address for the order confirmation.',
101
97
  });
102
- await sw.wait(1000);
103
98
 
104
99
  await sw.click('[data-testid="checkout"]', {
105
100
  narration: 'Complete the purchase.',
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/generator/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAoDyC,CAAC;AAEvE,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,cAAoC,EACpC,cAAuB;IAEvB,IAAI,MAAM,GAAG;;mBAEI,cAAc;EAC/B,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,yDAAyD;;EAEvJ,cAAc,CAAC,CAAC,CAAC,gBAAgB,cAAc,MAAM,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2D1D,UAAU;;;gDAGoC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/generator/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAmDyC,CAAC;AAEvE,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,cAAoC,EACpC,cAAuB;IAEvB,IAAI,MAAM,GAAG;;mBAEI,cAAc;EAC/B,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,yDAAyD;;EAEvJ,cAAc,CAAC,CAAC,CAAC,gBAAgB,cAAc,MAAM,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuD1D,UAAU;;;gDAGoC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/scenario-generator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAOD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgB/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAkDnE"}
1
+ {"version":3,"file":"scenario-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/scenario-generator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAOD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgB/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA6CnE"}
@@ -73,10 +73,6 @@ export function validateScenarioCode(code) {
73
73
  if (!/\.scene\s*\(/.test(code)) {
74
74
  warnings.push({ code: 'NO_SCENES', message: 'No sw.scene() calls found — consider adding scene boundaries' });
75
75
  }
76
- // Warnings — no waits
77
- if (!/\.wait\s*\(/.test(code)) {
78
- warnings.push({ code: 'NO_WAITS', message: 'No sw.wait() calls found — consider adding pacing' });
79
- }
80
76
  // Warnings — no narration
81
77
  if (!/narration/.test(code)) {
82
78
  warnings.push({ code: 'NO_NARRATION', message: 'No narration found — consider adding narration to actions' });
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-generator.js","sourceRoot":"","sources":["../../../src/generator/scenario-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenario-generator.js","sourceRoot":"","sources":["../../../src/generator/scenario-generator.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- export type { ScreenwrightHelpers, ActionOptions } from './runtime/action-helpers.js';
1
+ export type { ScreenwrightHelpers, ActionOptions, Pacing, HelpersOptions } from './runtime/action-helpers.js';
2
+ export { getPacingMultiplier, getNarrationOverlap } from './runtime/action-helpers.js';
2
3
  export type { ScenarioFn } from './runtime/instrumented-page.js';
3
4
  export type { Timeline, TimelineEvent, SceneEvent, ActionEvent, CursorTargetEvent, NarrationEvent, WaitEvent } from './timeline/types.js';
4
- export type { ScreenwrightConfig } from './config/config-schema.js';
5
+ export type { ScreenwrightConfig, OpenaiVoice } from './config/config-schema.js';
6
+ export { openaiVoices } from './config/config-schema.js';
5
7
  export { validateScenarioCode, extractScenarioCode } from './generator/scenario-generator.js';
6
8
  export type { ValidationResult, ValidationError, GenerateOptions } from './generator/scenario-generator.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACtF,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1I,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvF,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1I,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,2 +1,4 @@
1
+ export { getPacingMultiplier, getNarrationOverlap } from './runtime/action-helpers.js';
2
+ export { openaiVoices } from './config/config-schema.js';
1
3
  export { validateScenarioCode, extractScenarioCode } from './generator/scenario-generator.js';
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAIvF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -14,6 +14,13 @@ export interface ScreenwrightHelpers {
14
14
  wait(ms: number): Promise<void>;
15
15
  narrate(text: string): Promise<void>;
16
16
  }
17
- export declare function calculateMoveDuration(fromX: number, fromY: number, toX: number, toY: number): number;
18
- export declare function createHelpers(page: Page, collector: TimelineCollector): ScreenwrightHelpers;
17
+ export type Pacing = 'fast' | 'normal' | 'cinematic';
18
+ export interface HelpersOptions {
19
+ pacingMultiplier?: number;
20
+ narrationOverlap?: number;
21
+ }
22
+ export declare function getPacingMultiplier(pacing: Pacing): number;
23
+ export declare function getNarrationOverlap(pacing: Pacing): number;
24
+ export declare function calculateMoveDuration(fromX: number, fromY: number, toX: number, toY: number, pacingMultiplier?: number): number;
25
+ export declare function createHelpers(page: Page, collector: TimelineCollector, opts?: HelpersOptions): ScreenwrightHelpers;
19
26
  //# sourceMappingURL=action-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-helpers.d.ts","sourceRoot":"","sources":["../../../src/runtime/action-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAWD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGpG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,GAAG,mBAAmB,CA6I3F"}
1
+ {"version":3,"file":"action-helpers.d.ts","sourceRoot":"","sources":["../../../src/runtime/action-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,SAAM,GAAG,MAAM,CAI5H;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,mBAAmB,CAuJlH"}
@@ -1,25 +1,50 @@
1
1
  const NARRATION_WPM = 150;
2
- const POST_ACTION_DELAY_MS = 500;
3
- const CHAR_TYPE_DELAY_MS = 50;
2
+ const POST_ACTION_DELAY_MS = 300;
3
+ const PAGE_LOAD_WAIT_MS = 600;
4
+ const CHAR_TYPE_DELAY_MS = 30;
5
+ const CURSOR_MOVE_MIN_MS = 200;
6
+ const CURSOR_MOVE_MAX_MS = 800;
7
+ const NARRATION_OVERLAP = {
8
+ fast: 0.4,
9
+ normal: 0.6,
10
+ cinematic: 0.85,
11
+ };
12
+ export function getPacingMultiplier(pacing) {
13
+ switch (pacing) {
14
+ case 'fast': return 0.5;
15
+ case 'normal': return 1.0;
16
+ case 'cinematic': return 1.5;
17
+ }
18
+ }
19
+ export function getNarrationOverlap(pacing) {
20
+ return NARRATION_OVERLAP[pacing];
21
+ }
4
22
  function estimateNarrationMs(text) {
5
23
  const words = text.split(/\s+/).length;
6
24
  return Math.round((words / NARRATION_WPM) * 60 * 1000);
7
25
  }
8
- export function calculateMoveDuration(fromX, fromY, toX, toY) {
26
+ export function calculateMoveDuration(fromX, fromY, toX, toY, pacingMultiplier = 1.0) {
9
27
  const distance = Math.sqrt((toX - fromX) ** 2 + (toY - fromY) ** 2);
10
- return Math.min(1200, Math.max(300, Math.round(200 * Math.log2(distance / 10 + 1))));
28
+ const base = Math.min(CURSOR_MOVE_MAX_MS, Math.max(CURSOR_MOVE_MIN_MS, Math.round(200 * Math.log2(distance / 10 + 1))));
29
+ return Math.round(base * pacingMultiplier);
11
30
  }
12
- export function createHelpers(page, collector) {
31
+ export function createHelpers(page, collector, opts) {
32
+ const pm = opts?.pacingMultiplier ?? 1.0;
33
+ const narrationOverlap = opts?.narrationOverlap ?? 0.6;
13
34
  let lastX = 640;
14
35
  let lastY = 360;
36
+ function scaled(ms) {
37
+ return Math.round(ms * pm);
38
+ }
15
39
  async function emitNarration(text) {
16
40
  const estimatedMs = estimateNarrationMs(text);
41
+ const actualWaitMs = Math.round(estimatedMs * narrationOverlap * pm);
17
42
  collector.emit({ type: 'narration', text });
18
- collector.emit({ type: 'wait', durationMs: estimatedMs, reason: 'narration_sync' });
19
- await page.waitForTimeout(estimatedMs);
43
+ collector.emit({ type: 'wait', durationMs: actualWaitMs, reason: 'narration_sync' });
44
+ await page.waitForTimeout(actualWaitMs);
20
45
  }
21
46
  async function moveCursorTo(toX, toY) {
22
- const moveDurationMs = calculateMoveDuration(lastX, lastY, toX, toY);
47
+ const moveDurationMs = calculateMoveDuration(lastX, lastY, toX, toY, pm);
23
48
  collector.emit({
24
49
  type: 'cursor_target',
25
50
  fromX: lastX, fromY: lastY,
@@ -44,9 +69,9 @@ export function createHelpers(page, collector) {
44
69
  async scene(title, description) {
45
70
  collector.emit({ type: 'scene', title, description });
46
71
  },
47
- async navigate(url, opts) {
48
- if (opts?.narration)
49
- await emitNarration(opts.narration);
72
+ async navigate(url, actionOpts) {
73
+ if (actionOpts?.narration)
74
+ await emitNarration(actionOpts.narration);
50
75
  collector.emit({
51
76
  type: 'action',
52
77
  action: 'navigate',
@@ -55,12 +80,13 @@ export function createHelpers(page, collector) {
55
80
  boundingBox: null,
56
81
  });
57
82
  await page.goto(url, { waitUntil: 'domcontentloaded' });
58
- collector.emit({ type: 'wait', durationMs: 1000, reason: 'page_load' });
59
- await page.waitForTimeout(1000);
83
+ const waitMs = scaled(PAGE_LOAD_WAIT_MS);
84
+ collector.emit({ type: 'wait', durationMs: waitMs, reason: 'page_load' });
85
+ await page.waitForTimeout(waitMs);
60
86
  },
61
- async click(selector, opts) {
62
- if (opts?.narration)
63
- await emitNarration(opts.narration);
87
+ async click(selector, actionOpts) {
88
+ if (actionOpts?.narration)
89
+ await emitNarration(actionOpts.narration);
64
90
  const center = await resolveCenter(selector);
65
91
  await moveCursorTo(center.x, center.y);
66
92
  const locator = page.locator(selector).first();
@@ -73,32 +99,33 @@ export function createHelpers(page, collector) {
73
99
  boundingBox: box ? { x: Math.round(box.x), y: Math.round(box.y), width: Math.round(box.width), height: Math.round(box.height) } : null,
74
100
  });
75
101
  await locator.click();
76
- await page.waitForTimeout(POST_ACTION_DELAY_MS);
102
+ await page.waitForTimeout(scaled(POST_ACTION_DELAY_MS));
77
103
  },
78
- async fill(selector, value, opts) {
79
- if (opts?.narration)
80
- await emitNarration(opts.narration);
104
+ async fill(selector, value, actionOpts) {
105
+ if (actionOpts?.narration)
106
+ await emitNarration(actionOpts.narration);
81
107
  const center = await resolveCenter(selector);
82
108
  await moveCursorTo(center.x, center.y);
83
109
  const locator = page.locator(selector).first();
84
110
  const box = await locator.boundingBox();
85
111
  await locator.click();
112
+ const charDelay = scaled(CHAR_TYPE_DELAY_MS);
86
113
  collector.emit({
87
114
  type: 'action',
88
115
  action: 'fill',
89
116
  selector,
90
117
  value,
91
- durationMs: value.length * CHAR_TYPE_DELAY_MS,
118
+ durationMs: value.length * charDelay,
92
119
  boundingBox: box ? { x: Math.round(box.x), y: Math.round(box.y), width: Math.round(box.width), height: Math.round(box.height) } : null,
93
120
  });
94
121
  for (const char of value) {
95
- await page.keyboard.type(char, { delay: CHAR_TYPE_DELAY_MS });
122
+ await page.keyboard.type(char, { delay: charDelay });
96
123
  }
97
- await page.waitForTimeout(POST_ACTION_DELAY_MS);
124
+ await page.waitForTimeout(scaled(POST_ACTION_DELAY_MS));
98
125
  },
99
- async hover(selector, opts) {
100
- if (opts?.narration)
101
- await emitNarration(opts.narration);
126
+ async hover(selector, actionOpts) {
127
+ if (actionOpts?.narration)
128
+ await emitNarration(actionOpts.narration);
102
129
  const center = await resolveCenter(selector);
103
130
  await moveCursorTo(center.x, center.y);
104
131
  const locator = page.locator(selector).first();
@@ -111,11 +138,11 @@ export function createHelpers(page, collector) {
111
138
  boundingBox: box ? { x: Math.round(box.x), y: Math.round(box.y), width: Math.round(box.width), height: Math.round(box.height) } : null,
112
139
  });
113
140
  await locator.hover();
114
- await page.waitForTimeout(POST_ACTION_DELAY_MS);
141
+ await page.waitForTimeout(scaled(POST_ACTION_DELAY_MS));
115
142
  },
116
- async press(key, opts) {
117
- if (opts?.narration)
118
- await emitNarration(opts.narration);
143
+ async press(key, actionOpts) {
144
+ if (actionOpts?.narration)
145
+ await emitNarration(actionOpts.narration);
119
146
  collector.emit({
120
147
  type: 'action',
121
148
  action: 'press',
@@ -124,7 +151,7 @@ export function createHelpers(page, collector) {
124
151
  boundingBox: null,
125
152
  });
126
153
  await page.keyboard.press(key);
127
- await page.waitForTimeout(POST_ACTION_DELAY_MS);
154
+ await page.waitForTimeout(scaled(POST_ACTION_DELAY_MS));
128
155
  },
129
156
  async wait(ms) {
130
157
  collector.emit({ type: 'wait', durationMs: ms, reason: 'pacing' });
@@ -1 +1 @@
1
- {"version":3,"file":"action-helpers.js","sourceRoot":"","sources":["../../../src/runtime/action-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-helpers.js","sourceRoot":"","sources":["../../../src/runtime/action-helpers.ts"],"names":[],"mappings":"AA0BA,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,iBAAiB,GAA2B;IAChD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC;QACxB,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAC;QAC1B,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,gBAAgB,GAAG,GAAG;IAClH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,SAA4B,EAAE,IAAqB;IAC3F,MAAM,EAAE,GAAG,IAAI,EAAE,gBAAgB,IAAI,GAAG,CAAC;IACzC,MAAM,gBAAgB,GAAG,IAAI,EAAE,gBAAgB,IAAI,GAAG,CAAC;IAEvD,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,SAAS,MAAM,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,IAAY;QACvC,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACrE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAyB,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;QAClD,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACzE,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC1B,GAAG,EAAE,GAAG;YACR,cAAc;YACd,MAAM,EAAE,QAAiB;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1C,KAAK,GAAG,GAAG,CAAC;QACZ,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,QAAgB;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,OAAO;QACL,IAAI;QAEJ,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW;YAC5B,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU;YAC5B,IAAI,UAAU,EAAE,SAAS;gBAAE,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAoB,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU;YAC9B,IAAI,UAAU,EAAE,SAAS;gBAAE,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ;gBACR,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;aACvI,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU;YACpC,IAAI,UAAU,EAAE,SAAS;gBAAE,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YAEtB,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,QAAQ;gBACR,KAAK;gBACL,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS;gBACpC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;aACvI,CAAC,CAAC;YAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU;YAC9B,IAAI,UAAU,EAAE,SAAS;gBAAE,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ;gBACR,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;aACvI,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU;YACzB,IAAI,UAAU,EAAE,SAAS;gBAAE,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE;YACX,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Timeline } from '../timeline/types.js';
2
- import { type ScreenwrightHelpers } from './action-helpers.js';
2
+ import { type ScreenwrightHelpers, type Pacing } from './action-helpers.js';
3
3
  export type ScenarioFn = (sw: ScreenwrightHelpers) => Promise<void>;
4
4
  export interface RunOptions {
5
5
  scenarioFile: string;
@@ -11,6 +11,7 @@ export interface RunOptions {
11
11
  colorScheme?: 'light' | 'dark';
12
12
  locale?: string;
13
13
  timezoneId?: string;
14
+ pacing?: Pacing;
14
15
  }
15
16
  export interface RunResult {
16
17
  timeline: Timeline;
@@ -1 +1 @@
1
- {"version":3,"file":"instrumented-page.d.ts","sourceRoot":"","sources":["../../../src/runtime/instrumented-page.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAoD5F"}
1
+ {"version":3,"file":"instrumented-page.d.ts","sourceRoot":"","sources":["../../../src/runtime/instrumented-page.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAA2D,KAAK,mBAAmB,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAErI,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA+D5F"}
@@ -3,7 +3,7 @@ import { mkdtemp, writeFile } from 'node:fs/promises';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { TimelineCollector } from './timeline-collector.js';
6
- import { createHelpers } from './action-helpers.js';
6
+ import { createHelpers, getPacingMultiplier, getNarrationOverlap } from './action-helpers.js';
7
7
  export async function runScenario(scenario, opts) {
8
8
  const viewport = opts.viewport ?? { width: 1280, height: 720 };
9
9
  const tempDir = await mkdtemp(join(tmpdir(), 'screenwright-'));
@@ -18,10 +18,20 @@ export async function runScenario(scenario, opts) {
18
18
  timezoneId: opts.timezoneId ?? 'America/New_York',
19
19
  recordVideo: { dir: tempDir, size: viewport },
20
20
  });
21
+ // Hide the native cursor so only the Screenwright overlay cursor appears
22
+ await context.addInitScript(`
23
+ const s = document.createElement('style');
24
+ s.textContent = '*, *::before, *::after { cursor: none !important; }';
25
+ (document.head || document.documentElement).appendChild(s);
26
+ `);
21
27
  const page = await context.newPage();
22
28
  const collector = new TimelineCollector();
23
29
  collector.start();
24
- const sw = createHelpers(page, collector);
30
+ const pacing = opts.pacing ?? 'normal';
31
+ const sw = createHelpers(page, collector, {
32
+ pacingMultiplier: getPacingMultiplier(pacing),
33
+ narrationOverlap: getNarrationOverlap(pacing),
34
+ });
25
35
  await scenario(sw);
26
36
  // Close page to finalize video
27
37
  await page.close();
@@ -1 +1 @@
1
- {"version":3,"file":"instrumented-page.js","sourceRoot":"","sources":["../../../src/runtime/instrumented-page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumented-page.js","sourceRoot":"","sources":["../../../src/runtime/instrumented-page.ts"],"names":[],"mappings":"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"}
@@ -70,41 +70,41 @@ export declare const timelineSchema: z.ZodObject<{
70
70
  width: z.ZodNumber;
71
71
  height: z.ZodNumber;
72
72
  }, "strip", z.ZodTypeAny, {
73
- x: number;
74
73
  width: number;
75
74
  height: number;
75
+ x: number;
76
76
  y: number;
77
77
  }, {
78
- x: number;
79
78
  width: number;
80
79
  height: number;
80
+ x: number;
81
81
  y: number;
82
82
  }>>;
83
83
  }, "strip", z.ZodTypeAny, {
84
- action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
85
84
  type: "action";
85
+ action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
86
86
  id: string;
87
87
  timestampMs: number;
88
88
  selector: string;
89
89
  durationMs: number;
90
90
  boundingBox: {
91
- x: number;
92
91
  width: number;
93
92
  height: number;
93
+ x: number;
94
94
  y: number;
95
95
  } | null;
96
96
  value?: string | undefined;
97
97
  }, {
98
- action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
99
98
  type: "action";
99
+ action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
100
100
  id: string;
101
101
  timestampMs: number;
102
102
  selector: string;
103
103
  durationMs: number;
104
104
  boundingBox: {
105
- x: number;
106
105
  width: number;
107
106
  height: number;
107
+ x: number;
108
108
  y: number;
109
109
  } | null;
110
110
  value?: string | undefined;
@@ -198,16 +198,16 @@ export declare const timelineSchema: z.ZodObject<{
198
198
  title: string;
199
199
  description?: string | undefined;
200
200
  } | {
201
- action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
202
201
  type: "action";
202
+ action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
203
203
  id: string;
204
204
  timestampMs: number;
205
205
  selector: string;
206
206
  durationMs: number;
207
207
  boundingBox: {
208
- x: number;
209
208
  width: number;
210
209
  height: number;
210
+ x: number;
211
211
  y: number;
212
212
  } | null;
213
213
  value?: string | undefined;
@@ -255,16 +255,16 @@ export declare const timelineSchema: z.ZodObject<{
255
255
  title: string;
256
256
  description?: string | undefined;
257
257
  } | {
258
- action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
259
258
  type: "action";
259
+ action: "fill" | "click" | "hover" | "select" | "press" | "navigate";
260
260
  id: string;
261
261
  timestampMs: number;
262
262
  selector: string;
263
263
  durationMs: number;
264
264
  boundingBox: {
265
- x: number;
266
265
  width: number;
267
266
  height: number;
267
+ x: number;
268
268
  y: number;
269
269
  } | null;
270
270
  value?: string | undefined;
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.8";
1
+ export declare const VERSION = "0.1.10";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
@@ -1,2 +1,2 @@
1
- export const VERSION = "0.1.8";
1
+ export const VERSION = "0.1.10";
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import type { Timeline } from '../timeline/types.js';
2
+ import type { OpenaiVoice } from '../config/config-schema.js';
2
3
  export interface NarrationOptions {
3
4
  modelPath?: string;
4
5
  tempDir: string;
6
+ ttsProvider?: 'piper' | 'openai';
7
+ openaiVoice?: OpenaiVoice;
5
8
  }
6
9
  /**
7
- * Generate voiceover WAV files for all narration events in a timeline.
10
+ * Generate voiceover audio files for all narration events in a timeline.
8
11
  * Updates each narration event with the audioFile path and actual duration.
9
12
  * Returns a new timeline with updated narration events.
10
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"narration-timing.d.ts","sourceRoot":"","sources":["../../../src/voiceover/narration-timing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,sBAAsB,CAAC;AAGrE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAoBnB"}
1
+ {"version":3,"file":"narration-timing.d.ts","sourceRoot":"","sources":["../../../src/voiceover/narration-timing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,sBAAsB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAwBnB"}
@@ -1,22 +1,27 @@
1
1
  import { join } from 'node:path';
2
- import { synthesize } from './piper-engine.js';
2
+ import { synthesize as piperSynthesize } from './piper-engine.js';
3
+ import { synthesize as openaiSynthesize } from './openai-engine.js';
3
4
  /**
4
- * Generate voiceover WAV files for all narration events in a timeline.
5
+ * Generate voiceover audio files for all narration events in a timeline.
5
6
  * Updates each narration event with the audioFile path and actual duration.
6
7
  * Returns a new timeline with updated narration events.
7
8
  */
8
9
  export async function generateNarration(timeline, opts) {
10
+ const provider = opts.ttsProvider ?? 'piper';
11
+ const ext = provider === 'openai' ? '.mp3' : '.wav';
9
12
  const events = [...timeline.events];
10
13
  for (let i = 0; i < events.length; i++) {
11
14
  const event = events[i];
12
15
  if (event.type !== 'narration')
13
16
  continue;
14
17
  const narration = event;
15
- const outputPath = join(opts.tempDir, `narration-${narration.id}.wav`);
16
- const result = await synthesize(narration.text, outputPath, opts.modelPath);
18
+ const outputPath = join(opts.tempDir, `narration-${narration.id}${ext}`);
19
+ const result = provider === 'openai'
20
+ ? await openaiSynthesize(narration.text, outputPath, opts.openaiVoice)
21
+ : await piperSynthesize(narration.text, outputPath, opts.modelPath);
17
22
  events[i] = {
18
23
  ...narration,
19
- audioFile: result.wavPath,
24
+ audioFile: result.audioPath,
20
25
  audioDurationMs: result.durationMs,
21
26
  };
22
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"narration-timing.js","sourceRoot":"","sources":["../../../src/voiceover/narration-timing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAO/C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,IAAsB;IAEtB,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAEzC,MAAM,SAAS,GAAG,KAAuB,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5E,MAAM,CAAC,CAAC,CAAC,GAAG;YACV,GAAG,SAAS;YACZ,SAAS,EAAE,MAAM,CAAC,OAAO;YACzB,eAAe,EAAE,MAAM,CAAC,UAAU;SACnC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"narration-timing.js","sourceRoot":"","sources":["../../../src/voiceover/narration-timing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUpE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,IAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAEzC,MAAM,SAAS,GAAG,KAAuB,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;YACtE,CAAC,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtE,MAAM,CAAC,CAAC,CAAC,GAAG;YACV,GAAG,SAAS;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,eAAe,EAAE,MAAM,CAAC,UAAU;SACnC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { OpenaiVoice } from '../config/config-schema.js';
2
+ export interface SynthesizeResult {
3
+ audioPath: string;
4
+ durationMs: number;
5
+ }
6
+ export declare function synthesize(text: string, outputPath: string, voice?: OpenaiVoice): Promise<SynthesizeResult>;
7
+ //# sourceMappingURL=openai-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-engine.d.ts","sourceRoot":"","sources":["../../../src/voiceover/openai-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,WAAoB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAiC3B"}