@sentry/junior-agent-browser 0.234.0 → 0.236.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.
package/README.md CHANGED
@@ -16,10 +16,11 @@ import { defineJuniorPlugins } from "@sentry/junior";
16
16
  export const plugins = defineJuniorPlugins(["@sentry/junior-agent-browser"]);
17
17
  ```
18
18
 
19
- The package includes two skills:
19
+ The package includes three skills:
20
20
 
21
21
  - `/agent-browser` for general browser navigation, interaction, extraction, and capture
22
22
  - `/visual-web-qa` for evidence-driven verification of frontend, docs, layout, theme, loading, animation, and interaction changes
23
+ - `/demo-video` for edited product presentations with browser captures, optional narration, and Remotion
23
24
 
24
25
  For example:
25
26
 
@@ -27,4 +28,6 @@ For example:
27
28
  /visual-web-qa Verify the docs theme on desktop and mobile, then share the evidence.
28
29
  ```
29
30
 
31
+ `/demo-video` captures the production workflow; it does not install Remotion or FFmpeg. Use a local artifact project with compatible dependencies and an appropriate Remotion license. For generated narration, enable a TTS plugin such as `@sentry/junior-tts`, or supply an audio file. Keep video artifacts separate from the app unless a repository change is requested.
32
+
30
33
  Full setup guide: https://junior.sentry.dev/extend/agent-browser-plugin/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/junior-agent-browser",
3
- "version": "0.234.0",
3
+ "version": "0.236.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: demo-video
3
+ description: Creates and revises product demo videos and narrated walkthroughs from browser captures with Remotion. Use for a short presentation of an app or shipped work, animated screenshots, or a video update with new narration. Do not use for a raw browser recording, screenshot-only visual QA, or audio-only text-to-speech.
4
+ ---
5
+
6
+ # Demo Video
7
+
8
+ Make the product the subject. Show what people can do, why it matters, and what the team built. Use personality in the delivery, not as the story. Do not introduce a revision as a new take or talk about the narrator's voice unless asked.
9
+
10
+ Open [references/rendering.md](references/rendering.md) when setting up Remotion, measuring clips, rendering, or checking an export. It includes commands and revision examples.
11
+
12
+ ## 1. Resolve The Brief And Reuse Work
13
+
14
+ - Read the current request and prior decisions. Keep the agreed audience, length, tone, credits, and destination. Ask only for a missing decision that blocks work.
15
+ - Find the existing source, assets, and attachments before rebuilding. If the source is missing, say this will be a fresh composition.
16
+ - Inspect the target UI and relevant repository history before writing claims about shipped behavior. Use the repository skill for code access. Do not present an unmerged feature as live.
17
+ - Draft a short scene list with one point per scene. Match each claim to a capture or verified source. Name collaborators when requested and supported.
18
+ - Separate product capabilities from actions taken during this task. Describing reminder emails does not authorize sending one.
19
+
20
+ ## 2. Capture The Actual UI
21
+
22
+ Load `agent-browser` for browser commands. Use `visual-web-qa` when the request also asks whether the UI works or looks correct.
23
+
24
+ - Prefer a reachable local or preview page for the requested revision. Use an authorized session for private pages; do not bypass sign-in.
25
+ - If private data prevents safe capture, use the real UI with isolated synthetic fixtures. Label that data in the video. Do not make a lookalike and call it the app.
26
+ - Keep the fixture server local. Prevent it from sending writes, email, or uploads to production. Do not reuse customer submissions or secrets.
27
+ - Capture a few useful states and relevant desktop/mobile views. Save the route, viewport, theme, and source revision with each asset.
28
+ - Use screenshots for stable pages. Use short browser recordings when an interaction or motion is part of the story. Stop recordings after the required flow.
29
+ - Wait for expected content and fonts. Open the captures before using them. Check for loading states, clipping, mismatched fixture counts, and sensitive content.
30
+
31
+ For a raw interaction recording without an edited presentation, use `agent-browser` alone. Do not add a Remotion project by default.
32
+
33
+ ## 3. Prepare Narration
34
+
35
+ - Write spoken text separately from scene layout and delivery directions. Keep the opening about the work. Put credits and operational capabilities where they support the story.
36
+ - For requested speech, load the available TTS skill and use its credential, cost, and retry rules. Use the agreed voice preset. Do not silently replace a missing provider with another voice.
37
+ - Generate one clip per scene to make revisions cheap. Reuse unchanged clips and generate changed text to fresh paths. A visual-only edit needs no new speech request.
38
+ - Measure each clip. Derive scene frames from its duration plus explicit lead and tail time. Recompute later scene offsets after a clip changes.
39
+ - Keep captions tied to the final script. Use real alignment when available; otherwise state that word-count timing is approximate. Audio-energy avatar motion is not lip sync.
40
+
41
+ ## 4. Compose And Render
42
+
43
+ - Use a separate artifact directory unless the user asked to change the app. Keep composition source, local assets, scene data, and outputs together.
44
+ - Reuse an existing Remotion project and lockfile. For a new project, follow the setup reference. Browser runtime setup remains owned by the plugin; report a missing runtime instead of repairing it here.
45
+ - Match the app's type, colors, and approved assets. Keep UI text readable. Use simple cuts, pans, and small transitions instead of expensive effects.
46
+ - Bundle images, fonts, and audio locally. Drive motion from frame numbers, not wall-clock timers or network calls during render.
47
+ - Render stills for each layout before a full video. Start with low concurrency in a small Sandbox. Use a short frame range to diagnose failures.
48
+ - Set export resolution and audio bitrate for the destination early. Keep the source at full composition size. A smaller delivery copy need not change the scene design.
49
+
50
+ ## 5. Check And Deliver
51
+
52
+ - Decode the full exported video and audio. Inspect frames from every scene, including transitions, first/last frames, captions, and any changed crop. Check durations, missing audio, peaks, and final-frame truncation.
53
+ - Listen when audio review is available. Decode and level checks do not prove pronunciation, timing, or listening quality; report unchecked limits.
54
+ - Check the actual file size before attachment. If too large, re-encode the existing master with a smaller delivery profile. Recheck that file. Do not regenerate speech or publish a public URL to work around the limit.
55
+ - Inspect outputs and logs after a timeout before repeating a render. Never infer success from a file's existence alone.
56
+ - Deliver the video with `sendFiles`. Include standalone synthetic narration and editable source when requested or already agreed. Exclude dependencies, caches, secrets, and unused revisions from the source archive.
57
+ - Report successful attachments, duration, checks, and remaining limits. Record capture provenance and rerender commands in the artifact README. Do not say the app or production changed when only the video changed.
@@ -0,0 +1,44 @@
1
+ # Demo Video Sources
2
+
3
+ ## Source Inventory
4
+
5
+ Reviewed 2026-09-29. Official docs and repository contracts are authoritative for syntax and ownership. The completed workflow is evidence of one working setup, not a performance guarantee.
6
+
7
+ | Source | Confidence | Contribution and limits |
8
+ | --------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | [Agent Skills specification](https://agentskills.io/specification) | High | Frontmatter, directory names, and relative bundled files. |
10
+ | `packages/junior-agent-browser/plugin.yaml`, package manifest, and sibling skills | High | Browser ownership and packaged skill discovery. Keep runtime setup in the manifest. |
11
+ | `packages/junior-tts/skills/tts/SKILL.md` | High | Speech workflow, fresh paths, provider ownership, and paid-request limits. Reference rather than duplicate its credential policy. |
12
+ | `policies/agent-steering.md` | High | One owner per rule. No extra system prompt or core tool changes. |
13
+ | [Remotion render CLI](https://www.remotion.dev/docs/cli/render) | High | Composition selection, codec, frame range, scale, concurrency, audio bitrate, and overwrite controls. Check flags against the installed version. |
14
+ | [Remotion performance](https://www.remotion.dev/docs/performance) | High | Concurrency tradeoffs, local assets, resolution, and expensive GPU effects. No universal fastest setting. |
15
+ | [Remotion versions](https://www.remotion.dev/docs/version-mismatch) | High | Exact, matching Remotion package versions. |
16
+ | [Remotion licensing](https://www.remotion.dev/docs/license) | High | Commercial use has license conditions; no free-use assumption. |
17
+ | Completed browser-to-Remotion presentation and user revisions, September 2026 | High for observed outcomes | Real React UI with local fixtures; measured WAV clips; Remotion 4.0.354; FFmpeg decode and frame checks; successful MP4, WAV, and source delivery. Generalized here without transcript or identity data. |
18
+
19
+ Documentation is linked and summarized, not copied as a bundled upstream manual. No third-party media, project-specific avatar, sample app data, or generated speech is included.
20
+
21
+ ## Decisions And Coverage
22
+
23
+ - **Adopted:** general Junior ownership in the existing browser plugin. Browser capture is the entry point. The workflow is not specific to one app or deployment.
24
+ - **Adopted:** workflow-process class and reference-backed shape. The main checklist is short; exact rendering commands are a separate lookup. Inline-only guidance would mix story decisions with optional CLI detail.
25
+ - **Adopted:** product-led narration, requested collaborator credit, and supported capability claims. User corrections rejected voice-focused introductions and take numbers.
26
+ - **Adopted:** reuse unchanged speech and captures. Measure new clips and update later scene starts. This reduced paid generation during small edits.
27
+ - **Adopted:** inspect output after timeouts; check actual attachment bytes. One render completed despite a tool timeout. A large master needed a smaller delivery copy.
28
+ - **Adopted:** standard-library WAV measurement fallback. FFmpeg was available while FFprobe was not. No extra audio package was needed.
29
+ - **Rejected:** shipping the one-off composition, fixtures, assets, or hardcoded browser path. Those are project choices, not reusable skill policy.
30
+ - **Deferred:** a Remotion plugin, installed render dependencies, generator scripts, forced caption alignment, and phoneme-level avatar animation. No recurring need for that scope was established.
31
+
32
+ Coverage includes preconditions (brief, source, tools, license), ordered flow (capture through delivery), safety (local fixtures and no production actions), failures (auth, missing tools, timeout, size), revision examples, and verified output limits. All runtime reference files are routed directly from `SKILL.md`.
33
+
34
+ Portability: pnpm, Node, Remotion, an installed browser, and FFmpeg are explicit. TTS is optional and delegated to the installed skill. Python is only a conditional WAV fallback. No host path, provider token, or model name is required by this skill.
35
+
36
+ ## Precision And Validation Notes
37
+
38
+ Added one skill because neither browser automation nor visual QA owns edited presentation production. Kept those workflows unchanged. Moved command detail and examples into one reference; provenance and trigger review stay in maintenance files. No new tool descriptions, manifests, or dependency setup rules were added.
39
+
40
+ Trigger review separates edited presentations from raw capture, visual QA, audio-only work, and operating the app. Examples cover the happy path, private-data handling, story correction, capability claims, and delivery recovery.
41
+
42
+ Collection stopped after the successful workflow, its observed failures, current official syntax, and repository registration rules covered the requested scope. Broader video tooling research would not change this small workflow.
43
+
44
+ Open limits: this instruction-only addition has structural and manual content checks, not a new model-graded execution eval. Rendering commands came from the observed workflow and official docs; future environments must check dependencies, licenses, and destination limits. No new paid narration is needed to validate this skill change.
@@ -0,0 +1,47 @@
1
+ # Demo Video Specification
2
+
3
+ ## Intent And Scope
4
+
5
+ Create or revise an edited product presentation from real UI captures, optional narration, and a Remotion composition. Keep the story about the product and the team's work. Preserve useful source and assets across revisions.
6
+
7
+ This is a workflow-process skill with a reference-backed shape. The runtime checklist owns the flow. One reference holds optional rendering commands and examples. No generator script, fixed design template, new package, or runtime dependency is required by this change.
8
+
9
+ Raw browser recordings belong to `agent-browser`. Visual correctness checks belong to `visual-web-qa`. Audio-only requests belong to the available TTS skill. Deployment, event operations, email sending, and voice cloning are outside scope.
10
+
11
+ ## Contract
12
+
13
+ - Resolve the brief, source, and existing artifacts before generating assets.
14
+ - Verify product claims and preserve requested credits.
15
+ - Capture the real UI safely; label synthetic fixtures and narration.
16
+ - Measure speech, reuse unchanged clips, and keep scene offsets current.
17
+ - Check the delivered export, not only its source or master.
18
+ - Deliver the requested video and agreed supporting artifacts with honest limits.
19
+ - Leave the app and production unchanged unless a separate request permits changes.
20
+
21
+ ## Trigger Review
22
+
23
+ Should trigger:
24
+
25
+ - “Make a short product demo with animated screenshots and narration.”
26
+ - “Use Remotion to present what we shipped.”
27
+ - “Update this demo video with the new UI and voiceover.”
28
+ - “Add a collaborator credit and the reminder feature to our presentation.”
29
+
30
+ Should not trigger:
31
+
32
+ - “Record this loading bug.”
33
+ - “Take a mobile screenshot and check the spacing.”
34
+ - “Read this paragraph aloud.”
35
+ - “Schedule a demo and send an email reminder.”
36
+
37
+ ## Evidence And Validation
38
+
39
+ Use the repository, safe browser captures, measured media, render logs, and user feedback. See `SOURCES.md` for provenance. Store no raw Slack transcript, secrets, private submissions, or identifying fixture data in this skill.
40
+
41
+ Validate frontmatter, bundled links, plugin packaging, and the trigger boundary. Manually review the examples for product focus, blocked authentication, scoped clip reuse, and oversized delivery. A future execution should render a short sample and verify decoding and representative frames. Structural checks do not prove narration quality or agent behavior.
42
+
43
+ ## Limits And Maintenance
44
+
45
+ Remotion and FFmpeg are not provisioned by this skill. Speech needs the appropriate enabled plugin or supplied audio. Commercial Remotion use needs an appropriate license. Captions based on word counts remain approximate. Audio-energy motion is not lip sync.
46
+
47
+ Update commands after incompatible Remotion changes. Keep tool setup and credentials in their owning plugins. Extend the existing reference only for a demonstrated failure or recurring task; do not turn this into a general video platform.
@@ -0,0 +1,111 @@
1
+ # Render And Revise A Demo
2
+
3
+ ## Project Setup
4
+
5
+ Check Node.js, pnpm, FFmpeg, and an installed supported browser before rendering. Use the browser executable path found in the current Sandbox, not a saved path from another run. FFprobe is optional; it may be absent even when FFmpeg is present.
6
+
7
+ This skill ships instructions, not Remotion or FFmpeg. Do not install or repair the browser plugin runtime here. If an external dependency is unavailable or installation is not permitted, report the missing dependency. Check the organization's Remotion license before commercial use; do not assume the free license applies.
8
+
9
+ Keep a new project outside the app checkout:
10
+
11
+ ```text
12
+ demo-video/
13
+ package.json
14
+ pnpm-lock.yaml
15
+ src/index.tsx
16
+ src/scenes.json
17
+ public/
18
+ out/
19
+ README.md
20
+ ```
21
+
22
+ For a new, authorized local artifact project, choose a verified compatible version. Replace the placeholders before running:
23
+
24
+ ```bash
25
+ pnpm add --save-exact remotion@<version> @remotion/cli@<same-version> react@<version> react-dom@<same-version>
26
+ ```
27
+
28
+ All Remotion packages must have the same exact version. Reuse the lockfile on revisions. Check the installed CLI help and current docs before adding version-specific flags.
29
+
30
+ Use `registerRoot` and `Composition` for the entry point. Load local media with `staticFile` and `Img`. Put each scene and its audio in a `Sequence`. Use `useCurrentFrame`, `interpolate`, or `spring` for deterministic motion. Use media components supported by the installed version.
31
+
32
+ Keep scene text, asset path, audio path, measured seconds, start frame, and duration in one scene record. Do not select clips through scattered filename conditions. Keep original screenshots; derive crops as separate assets.
33
+
34
+ ## Measure Audio Before Setting Frames
35
+
36
+ When FFprobe is available:
37
+
38
+ ```bash
39
+ ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 public/scene.wav
40
+ ```
41
+
42
+ For PCM WAV files, Python's standard library is a fallback when Python is available:
43
+
44
+ ```bash
45
+ python3 - <<'PY'
46
+ import wave
47
+ with wave.open('public/scene.wav', 'rb') as clip:
48
+ print(clip.getnframes() / clip.getframerate())
49
+ PY
50
+ ```
51
+
52
+ For each scene:
53
+
54
+ ```text
55
+ audioFrames = ceil(audioSeconds * fps)
56
+ sceneFrames = leadFrames + audioFrames + tailFrames
57
+ startFrame = sum(previous sceneFrames)
58
+ ```
59
+
60
+ Place audio at `leadFrames` within the scene. Ensure fades do not cut off speech. Caption times use the same audio offset. Never keep an old duration after replacing a clip.
61
+
62
+ ## Preview, Then Render
63
+
64
+ Run from the artifact project. Replace the entry point, composition ID, frame, and output names as needed. Use fresh output names. Add `--browser-executable="$BROWSER"` only after resolving that path.
65
+
66
+ ```bash
67
+ pnpm exec remotion still src/index.tsx Demo out/layout.png --frame=60
68
+ pnpm exec remotion render src/index.tsx Demo out/sample.mp4 --frames=0-89 --codec=h264 --concurrency=2
69
+ pnpm exec remotion render src/index.tsx Demo out/demo.mp4 --codec=h264 --crf=26 --audio-bitrate=128k --concurrency=2 --overwrite=false
70
+ ```
71
+
72
+ - Use local assets and simple transforms. Precompute audio levels or caption boundaries once, not per frame.
73
+ - Avoid blur, large shadows, and complex effects on a CPU-only Sandbox.
74
+ - Start at concurrency 2 if resources permit. More workers can make rendering slower or exhaust memory. Measure a short sample before increasing it.
75
+ - For a 1920 × 1080 composition, `--scale=0.6666666666666666` produces a 1280 × 720 copy. Scaling is not a file-size guarantee.
76
+ - Keep long-render logs in a file. On timeout, inspect the log and output before rerunning. A failed render does not require new narration.
77
+
78
+ ## Export Checks And Size
79
+
80
+ ```bash
81
+ # Inspect streams and duration. With no output, FFmpeg normally exits nonzero.
82
+ # This is a metadata probe, not a validation result.
83
+ ffmpeg -hide_banner -i out/demo.mp4
84
+
85
+ # Decode both streams completely. Check the exit code and stderr.
86
+ ffmpeg -v error -i out/demo.mp4 -f null -
87
+
88
+ # Measure audio level; this is not a listening check.
89
+ ffmpeg -hide_banner -i out/demo.mp4 -vn -af volumedetect -f null -
90
+
91
+ # Seek directly to a representative frame instead of decoding the full film per still.
92
+ ffmpeg -v error -ss 12 -i out/demo.mp4 -frames:v 1 -update 1 out/frame.png
93
+ ```
94
+
95
+ Extract and inspect representative frames from all scenes and changed transitions. Keep captions outside the UI crop. Do not treat a contact sheet as proof that motion or speech timing is correct.
96
+
97
+ Check the destination's current limit and the file's byte size. Do not assume the upload limit from a previous conversation still applies. If necessary, re-encode the existing master:
98
+
99
+ ```bash
100
+ ffmpeg -n -i out/demo.mp4 -vf scale=1280:720 -c:v libx264 -preset medium -crf 28 -c:a aac -b:a 96k -movflags +faststart out/demo-delivery.mp4
101
+ ```
102
+
103
+ Measure the new file and check its text readability and decoding. If it still exceeds the limit, reduce resolution or bitrate while preserving usable UI text. Keep the original master. For standalone narration, join the original lossless clips with the same scene gaps; do not decode the compressed MP4 audio when source WAV files are available.
104
+
105
+ ## Revision Examples
106
+
107
+ - **Product walkthrough:** “Present what we built in about 90 seconds.” Inspect the UI and shipped changes, capture four useful states, write a benefit-led script, then generate and measure scene clips. Deliver an MP4 and the agreed source archive.
108
+ - **Private app:** “Use our dashboard in a demo.” Sign-in blocks access. Use an authorized session or the real local UI with isolated, labeled synthetic fixtures. State that this is not a production-data recording. Do not copy private submissions or alter production to make the capture work.
109
+ - **Story correction:** “This is about the product, not your new voice.” Bad: regenerate everything and announce “take three.” Correct: remove voice and take references from spoken and on-screen text, replace only changed clips, recompute timing, and keep useful captures.
110
+ - **Add credit and operations:** “Name my collaborator and explain reminders.” Verify the name and capability. Add the credit and a short workflow explanation, including required confirmation. Do not send a reminder just to illustrate it.
111
+ - **Upload rejected:** a valid MP4 exceeds the attachment limit. Keep its narration and composition. Make a smaller delivery copy, check it, and resend that file rather than repeating paid generation.