studioflow 0.1.4 → 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 +21 -0
- package/README.md +4 -3
- package/assets/cursor.png +0 -0
- package/bundled/skills/manifest.json +14 -0
- package/{skills → bundled/skills}/studioflow-cli/SKILL.md +11 -2
- package/{skills → bundled/skills}/studioflow-cli/references/handoff-spec.md +12 -3
- package/{skills → bundled/skills}/studioflow-investigate/SKILL.md +13 -3
- package/{skills → bundled/skills}/studioflow-investigate/references/artifact-spec.md +6 -0
- package/{skills → bundled/skills}/studioflow-investigate/references/clarification-state.md +5 -2
- package/{skills → bundled/skills}/studioflow-investigate/references/cli-handoff-spec.md +9 -5
- package/dist/index.js +917 -137
- package/dist/index.js.map +4 -4
- package/package.json +22 -22
- package/scripts/sync-skills.mjs +67 -3
- /package/{flows → bundled/flows}/billing.yaml +0 -0
- /package/{flows → bundled/flows}/onboarding.yaml +0 -0
- /package/{flows → bundled/flows}/onboarding_billing.yaml +0 -0
- /package/{skills → bundled/skills}/studioflow-cli/references/troubleshooting.md +0 -0
- /package/{skills → bundled/skills}/studioflow-investigate/references/question-card-spec.md +0 -0
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
|
|
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
|
|
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": "
|
|
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
|
-
`
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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.
|
|
31
|
-
4.
|
|
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": "
|
|
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`:
|
|
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`, `
|
|
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.
|
|
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.
|