studioflow 0.1.5 → 0.2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 StudioFlow contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -8,9 +8,9 @@ This package includes:
8
8
 
9
9
  ## Requirements
10
10
 
11
- - macOS (Screen Studio automation)
12
- - Screen Studio installed
11
+ - macOS (QuickTime/Screen Studio automation)
13
12
  - Node.js 22+
13
+ - QuickTime Player (built into macOS) or Screen Studio
14
14
 
15
15
  ## Install
16
16
 
@@ -63,9 +63,10 @@ Record a demo for onboarding and billing.
63
63
  - validate the flow
64
64
  - execute recording through the CLI runtime
65
65
 
66
- `run`/`demo` automatically performs Screen Studio preflight checks. Use manual prep only for troubleshooting.
66
+ `run`/`demo` automatically performs recorder preflight checks. QuickTime is the default backend; use `--recorder screenstudio` to opt into Screen Studio.
67
67
  Headed runs auto-open a maximized browser window for cleaner recording composition.
68
68
  Runs do not auto-export by default; include `recorder_export` in flow steps only when export is explicitly needed.
69
+ Runs now also block `recorder_export` unless intent text explicitly asks for export, or `--allow-export true` is provided.
69
70
 
70
71
  ## Advanced Manual Mode (Optional)
71
72
 
Binary file
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "packageName": "studioflow",
4
+ "packageVersion": "0.2.0",
5
+ "generatedAt": "2026-02-14T18:48:19.096Z",
6
+ "skills": {
7
+ "studioflow-cli": {
8
+ "hash": "4328ceed07012ece8406541b2e764d2ea686af473a6ce0206458a346f2e6eed8"
9
+ },
10
+ "studioflow-investigate": {
11
+ "hash": "e2bf84ed56b7077575c2a875acc5b2c26cac7b34e84d8ceb213ff5d4357665fc"
12
+ }
13
+ }
14
+ }
@@ -13,6 +13,7 @@ Run validated artifacts through deterministic execution.
13
13
  - `artifacts/studioflow-cli-handoff.json`
14
14
 
15
15
  If handoff exists, use it as the source of truth for `flowPath`, `intentSummary`, `baseUrl`, `startCommand`, and `healthPath`.
16
+ If handoff includes `recorder`, treat it as source of truth and preserve explicit user recorder choice.
16
17
  If present, also consume `runtimePacing` from handoff for runtime timing env values.
17
18
 
18
19
  1. Confirm artifact presence:
@@ -29,7 +30,14 @@ pnpm run setup
29
30
  pnpm run doctor
30
31
  ```
31
32
 
32
- If run preflight fails, collect explicit Screen Studio diagnostics:
33
+ If run preflight fails, collect recorder-specific diagnostics:
34
+ - For `recorder=quicktime`:
35
+
36
+ ```bash
37
+ pnpm quicktime-prep
38
+ ```
39
+
40
+ - For `recorder=screenstudio`:
33
41
 
34
42
  ```bash
35
43
  pnpm screenstudio-prep
@@ -44,10 +52,11 @@ pnpm validate -- --flow artifacts/flow.json
44
52
  4. Execute recording run from artifact:
45
53
 
46
54
  ```bash
47
- STUDIOFLOW_CURSOR_MOVE_MS=<cursorMoveMs> STUDIOFLOW_CURSOR_HIGHLIGHT_MS=<cursorHighlightMs> STUDIOFLOW_TYPING_DELAY_MS=<typingDelayMs> STUDIOFLOW_CLICK_PULSE_MS=<clickPulseMs> STUDIOFLOW_STEP_PRE_DELAY_MS=<stepPreDelayMs> STUDIOFLOW_STEP_POST_DELAY_MS=<stepPostDelayMs> STUDIOFLOW_STEP_DWELL_MS=<stepDwellMs> pnpm demo -- --flow <flowPath> --intent "<intent-summary>" --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>
55
+ STUDIOFLOW_CURSOR_MOVE_MS=<cursorMoveMs> STUDIOFLOW_CURSOR_HIGHLIGHT_MS=<cursorHighlightMs> STUDIOFLOW_TYPING_DELAY_MS=<typingDelayMs> STUDIOFLOW_CLICK_PULSE_MS=<clickPulseMs> STUDIOFLOW_STEP_PRE_DELAY_MS=<stepPreDelayMs> STUDIOFLOW_STEP_POST_DELAY_MS=<stepPostDelayMs> STUDIOFLOW_STEP_DWELL_MS=<stepDwellMs> pnpm demo -- --flow <flowPath> --intent "<intent-summary>" --recorder <recorder> --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>
48
56
  ```
49
57
 
50
58
  Only set timing env vars that are provided (or implied by selected run-feel profile) in handoff.
59
+ If `recorder` is missing from handoff, default to `quicktime`.
51
60
 
52
61
  5. Inspect outputs:
53
62
  - `<runsDir>/<run-id>/run.json`
@@ -11,11 +11,12 @@
11
11
  "version": 1,
12
12
  "intentSummary": "Record only onboarding + CRM in Demo Lab",
13
13
  "flowPath": "artifacts/flow.json",
14
+ "recorder": "screenstudio",
14
15
  "baseUrl": "http://localhost:4280",
15
16
  "startCommand": "pnpm dev:demo-lab",
16
17
  "healthPath": "/",
17
18
  "runtimePacing": {
18
- "profile": "balanced",
19
+ "profile": "standard",
19
20
  "cursorMoveMs": 430,
20
21
  "cursorHighlightMs": 170,
21
22
  "typingDelayMs": 55,
@@ -33,18 +34,22 @@
33
34
  - `version`
34
35
  - `intentSummary`
35
36
  - `flowPath`
37
+ - `recorder`
36
38
  - `baseUrl`
37
39
  - `healthPath`
38
40
 
39
41
  `startCommand` is recommended. If omitted, runtime can still proceed when app is already healthy.
40
- `runtimePacing` is optional for conversation-driven speed tuning.
42
+ `recorder` values: `quicktime`, `screenstudio`. If missing, default to `quicktime`.
43
+ When intent explicitly names recorder software, preserve that recorder in handoff and execution.
44
+ `runtimePacing` should be present for investigate-generated handoff and should drive timing env vars directly.
45
+ Use `runtimePacing.profile` values `fast`, `standard`, `cinematic`.
41
46
 
42
47
  ## Execution mapping
43
48
 
44
49
  From payload, execute:
45
50
 
46
51
  1. `pnpm validate -- --flow <flowPath>`
47
- 2. `pnpm demo -- --flow <flowPath> --intent "<intentSummary>" --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>`
52
+ 2. `pnpm demo -- --flow <flowPath> --intent "<intentSummary>" --recorder <recorder> --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>`
48
53
  3. If `runtimePacing` exists, set mapped env vars on the `pnpm demo` command:
49
54
  - `STUDIOFLOW_CURSOR_MOVE_MS`
50
55
  - `STUDIOFLOW_CURSOR_HIGHLIGHT_MS`
@@ -54,4 +59,8 @@ From payload, execute:
54
59
  - `STUDIOFLOW_STEP_POST_DELAY_MS`
55
60
  - `STUDIOFLOW_STEP_DWELL_MS`
56
61
 
62
+ Preflight diagnostics mapping:
63
+ - `recorder=quicktime` -> `pnpm quicktime-prep`
64
+ - `recorder=screenstudio` -> `pnpm screenstudio-prep`
65
+
57
66
  If payload is missing, fall back to explicit user arguments or repo defaults.
@@ -39,11 +39,19 @@ Open-intent detection:
39
39
  - `user_goal`: what user action/outcome to demonstrate
40
40
  - `done_assertion`: what text/element proves completion
41
41
 
42
+ Recorder selection:
43
+ - Detect explicit recorder preference from user wording before authoring handoff:
44
+ - If intent says `screen studio` (or equivalent), set recorder to `screenstudio`.
45
+ - If intent says `quicktime` or `quicktime player`, set recorder to `quicktime`.
46
+ - If not specified, default to `quicktime`.
47
+ - Treat explicit user recorder wording as authoritative over defaults.
48
+
42
49
  Clarification loop:
43
50
  - Max 2 rounds.
44
51
  - Ask 1-3 questions per round (adaptive; only missing high-impact fields).
45
52
  - Question priority: `done_assertion` -> `target_route` -> `user_goal` -> optional inputs/scope.
46
- - Capture optional run-feel preferences when provided (for example: `fast`, `balanced`, `cinematic`, or explicit timing overrides).
53
+ - Infer run feel and pacing automatically from user intent + discovered UI complexity.
54
+ - Ask about run-feel preferences only when user intent explicitly asks for a style (for example: `fast`, `standard`, `cinematic`).
47
55
  - If host supports structured question-card requests, emit payloads from `references/question-card-spec.md`.
48
56
  - If structured cards are not supported, ask equivalent plain-language questions.
49
57
  - Track known/missing fields using `references/clarification-state.md`.
@@ -54,7 +62,8 @@ Rules for authored flow:
54
62
  - Deterministic steps only.
55
63
  - Prefer stable selectors (`data-testid`).
56
64
  - Include clear step IDs and assertions at key transitions.
57
- - Include optional pacing fields when useful for recording quality.
65
+ - Always synthesize pacing fields (`preDelayMs`, `postDelayMs`, `mouseMoveMs`, `highlightMs`, `dwellMs`) for interaction-heavy steps to keep demos human-looking.
66
+ - Model scroll risk during authoring. For below-fold or overflow-container targets, add stable preconditions (`wait_for` on section/container) before interaction steps.
58
67
  - Add `recorder_export` only when the user explicitly asks for export at run completion.
59
68
  - If clarification remains incomplete after 2 rounds, generate best-effort flow with explicit assumptions.
60
69
 
@@ -69,7 +78,8 @@ pnpm validate -- --flow artifacts/flow.json
69
78
  8. Emit deterministic runtime handoff for `studioflow-cli`.
70
79
 
71
80
  Write `artifacts/studioflow-cli-handoff.json` using `references/cli-handoff-spec.md`.
72
- - Include `runtimePacing` in handoff when run-feel preferences or timing overrides are known.
81
+ - Always include `runtimePacing` in handoff, inferred from authored flow pacing and intent.
82
+ - Always include `recorder` in handoff (`quicktime` or `screenstudio`), resolved from intent wording + defaults.
73
83
 
74
84
  9. Hand off execution to `studioflow-cli` immediately.
75
85
 
@@ -32,9 +32,15 @@ Flow steps may include pacing fields:
32
32
  - dwellMs
33
33
  - narrativeCheckpoint
34
34
 
35
+ Authoring intelligence rules:
36
+ - Prefer setting pacing fields for click/type/assert transition steps by default, not only on outliers.
37
+ - Anticipate scroll-sensitive interactions (below fold, nested overflow containers) and add deterministic setup steps (`wait_for` container/section) before click/type actions.
38
+ - Keep selectors stable (`data-testid`) and avoid positional selectors for scroll-sensitive regions.
39
+
35
40
  Recorder note:
36
41
  - Include `recorder_export` only when user explicitly asks to export at run completion.
37
42
  - Without `recorder_export`, StudioFlow stops recording and completes the run without export.
43
+ - Recorder software selection is not encoded in `flow.json`; include it in `studioflow-cli-handoff.json` as `recorder`.
38
44
 
39
45
  ## Open-intent fallback note
40
46
 
@@ -9,6 +9,7 @@ known:
9
9
  target_route: null
10
10
  user_goal: null
11
11
  done_assertion: null
12
+ recorder_backend: null
12
13
  data_input: []
13
14
  scope_limit: null
14
15
  missing:
@@ -27,8 +28,9 @@ risks: []
27
28
  - `target_route`
28
29
  - `user_goal`
29
30
  - `done_assertion`
30
- 3. Do not exceed 2 rounds.
31
- 4. If anchors are still missing after round 2:
31
+ 3. Resolve `recorder_backend` from explicit intent wording when present (`screenstudio` or `quicktime`), else default `quicktime`.
32
+ 4. Do not exceed 2 rounds.
33
+ 5. If anchors are still missing after round 2:
32
34
  - add explicit `assumptions`
33
35
  - keep `confidence: low`
34
36
  - generate best-effort deterministic `flow.json`
@@ -38,5 +40,6 @@ risks: []
38
40
  Include in final response:
39
41
 
40
42
  - `Resolved`: key anchors and selected values
43
+ - `Recorder`: selected backend (`quicktime` or `screenstudio`)
41
44
  - `Assumptions`: any inferred defaults
42
45
  - `Confidence`: `high|medium|low`
@@ -13,11 +13,12 @@ Path:
13
13
  "version": 1,
14
14
  "intentSummary": "Record only onboarding + CRM in Demo Lab",
15
15
  "flowPath": "artifacts/flow.json",
16
+ "recorder": "screenstudio",
16
17
  "baseUrl": "http://localhost:4280",
17
18
  "startCommand": "pnpm dev:demo-lab",
18
19
  "healthPath": "/",
19
20
  "runtimePacing": {
20
- "profile": "balanced",
21
+ "profile": "standard",
21
22
  "cursorMoveMs": 430,
22
23
  "cursorHighlightMs": 170,
23
24
  "typingDelayMs": 55,
@@ -37,12 +38,15 @@ Path:
37
38
  - `version`: integer, currently `1`.
38
39
  - `intentSummary`: concise run label for CLI `--intent`.
39
40
  - `flowPath`: deterministic artifact path. Default: `artifacts/flow.json`.
41
+ - `recorder`: recorder backend used by CLI `--recorder`.
42
+ - Allowed values: `quicktime`, `screenstudio`.
43
+ - Selection rule: if user explicitly requests Screen Studio/QuickTime, preserve that; otherwise default `quicktime`.
40
44
  - `baseUrl`: runtime host URL.
41
45
  - `startCommand`: command used when app is not already healthy.
42
46
  - `healthPath`: health probe path used by runtime.
43
- - `runtimePacing`: optional runtime timing overrides.
47
+ - `runtimePacing`: required runtime timing overrides derived from authored flow pacing.
44
48
  - Allowed fields: `profile`, `cursorMoveMs`, `cursorHighlightMs`, `typingDelayMs`, `clickPulseMs`, `stepPreDelayMs`, `stepPostDelayMs`, `stepDwellMs`.
45
- - `profile` values: `fast`, `balanced`, `cinematic`.
49
+ - `profile` values: `fast`, `standard`, `cinematic`.
46
50
  - `notes`: optional operator notes.
47
51
 
48
52
  ## Invocation contract
@@ -50,7 +54,7 @@ Path:
50
54
  When handoff artifact is written, immediately invoke `studioflow-cli` (or equivalent runtime workflow in same agent) to execute:
51
55
 
52
56
  1. `pnpm validate -- --flow <flowPath>`
53
- 2. `pnpm demo -- --flow <flowPath> --intent "<intentSummary>" --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>`
54
- 3. If `runtimePacing` exists, set matching `STUDIOFLOW_*` env vars on the demo command.
57
+ 2. `pnpm demo -- --flow <flowPath> --intent "<intentSummary>" --recorder <recorder> --base-url <baseUrl> --start-command "<startCommand>" --health-path <healthPath>`
58
+ 3. Set matching `STUDIOFLOW_*` env vars from `runtimePacing` on the demo command.
55
59
 
56
60
  Do not ask the user to translate the handoff into commands.