studioflow 0.1.5 → 0.2.1
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 +97 -41
- package/assets/cursor.png +0 -0
- package/bundled/skills/manifest.json +17 -0
- package/bundled/skills/studioflow-author/SKILL.md +86 -0
- package/{skills/studioflow-investigate → bundled/skills/studioflow-author}/references/artifact-spec.md +8 -2
- package/bundled/skills/studioflow-author/references/cli-handoff-spec.md +60 -0
- package/{skills → bundled/skills}/studioflow-cli/SKILL.md +26 -2
- package/{skills → bundled/skills}/studioflow-cli/references/handoff-spec.md +13 -4
- package/bundled/skills/studioflow-investigate/SKILL.md +85 -0
- package/bundled/skills/studioflow-investigate/references/artifact-fit-spec.md +73 -0
- package/{skills → bundled/skills}/studioflow-investigate/references/clarification-state.md +5 -2
- package/{skills → bundled/skills}/studioflow-investigate/references/cli-handoff-spec.md +10 -6
- package/dist/index.js +1083 -223
- package/dist/index.js.map +4 -4
- package/package.json +24 -22
- package/scripts/sync-skills.mjs +8 -4
- package/skills/manifest.json +0 -14
- package/skills/studioflow-investigate/SKILL.md +0 -98
- /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/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "studioflow",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "Deterministic AI-assisted product demo automation CLI for Screen Studio workflows",
|
|
5
|
+
"description": "Deterministic AI-assisted product demo automation CLI for QuickTime and Screen Studio workflows",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22"
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
17
|
"dist",
|
|
18
|
-
"
|
|
19
|
-
"
|
|
18
|
+
"assets",
|
|
19
|
+
"bundled",
|
|
20
20
|
"scripts/sync-skills.mjs",
|
|
21
21
|
"scripts/build.mjs",
|
|
22
22
|
"tsconfig.json",
|
|
@@ -25,35 +25,37 @@
|
|
|
25
25
|
"bin": {
|
|
26
26
|
"studioflow": "dist/index.js"
|
|
27
27
|
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"playwright": "^1.55.0",
|
|
30
|
+
"yaml": "^2.8.1"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"esbuild": "^0.25.11",
|
|
34
|
+
"kleur": "^4.1.5",
|
|
35
|
+
"tsx": "^4.20.5",
|
|
36
|
+
"@studioflow/adapters-desktop": "0.1.0",
|
|
37
|
+
"@studioflow/adapters-playwright": "0.1.0",
|
|
38
|
+
"@studioflow/adapters-screenstudio": "0.1.0",
|
|
39
|
+
"@studioflow/flow-registry": "0.1.0",
|
|
40
|
+
"@studioflow/orchestrator": "0.1.0",
|
|
41
|
+
"@studioflow/contracts": "0.1.0",
|
|
42
|
+
"@studioflow/artifacts": "0.1.0"
|
|
43
|
+
},
|
|
28
44
|
"scripts": {
|
|
29
45
|
"prepare:assets": "node scripts/sync-skills.mjs",
|
|
30
46
|
"build": "node scripts/build.mjs",
|
|
31
|
-
"
|
|
47
|
+
"verify:bundled": "node scripts/verify-bundled-assets.mjs",
|
|
48
|
+
"verify:release-tag": "node scripts/verify-release-tag.mjs",
|
|
32
49
|
"demo": "tsx src/index.ts run",
|
|
33
50
|
"config": "tsx src/index.ts config",
|
|
34
51
|
"setup": "tsx src/index.ts setup",
|
|
35
52
|
"install-skills": "tsx src/index.ts install-skills",
|
|
36
53
|
"discover": "tsx src/index.ts discover",
|
|
37
54
|
"bootstrap": "tsx src/index.ts bootstrap",
|
|
55
|
+
"quicktime-prep": "tsx src/index.ts quicktime-prep",
|
|
38
56
|
"screenstudio-prep": "tsx src/index.ts screenstudio-prep",
|
|
39
57
|
"validate": "tsx src/index.ts validate",
|
|
40
58
|
"doctor": "tsx src/index.ts doctor",
|
|
41
59
|
"list-flows": "tsx src/index.ts list-flows"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"playwright": "^1.55.0",
|
|
45
|
-
"yaml": "^2.8.1"
|
|
46
|
-
},
|
|
47
|
-
"devDependencies": {
|
|
48
|
-
"@studioflow/adapters-desktop": "workspace:*",
|
|
49
|
-
"@studioflow/adapters-playwright": "workspace:*",
|
|
50
|
-
"@studioflow/adapters-screenstudio": "workspace:*",
|
|
51
|
-
"@studioflow/artifacts": "workspace:*",
|
|
52
|
-
"@studioflow/contracts": "workspace:*",
|
|
53
|
-
"@studioflow/flow-registry": "workspace:*",
|
|
54
|
-
"@studioflow/orchestrator": "workspace:*",
|
|
55
|
-
"esbuild": "^0.25.11",
|
|
56
|
-
"kleur": "^4.1.5",
|
|
57
|
-
"tsx": "^4.20.5"
|
|
58
60
|
}
|
|
59
|
-
}
|
|
61
|
+
}
|
package/scripts/sync-skills.mjs
CHANGED
|
@@ -6,11 +6,13 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
|
|
7
7
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
8
|
const packageRoot = path.resolve(__dirname, "..");
|
|
9
|
+
// Source-of-truth lives in the workspace; packaged runtime reads from bundled/.
|
|
9
10
|
const sourceSkillsRoot = path.resolve(packageRoot, "../../skills");
|
|
10
|
-
const
|
|
11
|
+
const bundledRoot = path.join(packageRoot, "bundled");
|
|
12
|
+
const targetSkillsRoot = path.join(bundledRoot, "skills");
|
|
11
13
|
const sourceFlowsRoot = path.resolve(packageRoot, "../../packages/flow-registry/flows");
|
|
12
|
-
const targetFlowsRoot = path.join(
|
|
13
|
-
const skillNames = ["studioflow-cli", "studioflow-investigate"];
|
|
14
|
+
const targetFlowsRoot = path.join(bundledRoot, "flows");
|
|
15
|
+
const skillNames = ["studioflow-cli", "studioflow-investigate", "studioflow-author"];
|
|
14
16
|
const flowNames = ["billing.yaml", "onboarding.yaml", "onboarding_billing.yaml"];
|
|
15
17
|
|
|
16
18
|
async function listFilesRecursively(rootDir) {
|
|
@@ -85,6 +87,8 @@ async function main() {
|
|
|
85
87
|
await Promise.all(skillNames.map(ensureSkillExists));
|
|
86
88
|
await Promise.all(flowNames.map(ensureFlowExists));
|
|
87
89
|
|
|
90
|
+
await fs.mkdir(bundledRoot, { recursive: true });
|
|
91
|
+
|
|
88
92
|
await fs.rm(targetSkillsRoot, { recursive: true, force: true });
|
|
89
93
|
await fs.mkdir(targetSkillsRoot, { recursive: true });
|
|
90
94
|
|
|
@@ -104,7 +108,7 @@ async function main() {
|
|
|
104
108
|
await fs.cp(source, target);
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
console.log(`Bundled assets synced:
|
|
111
|
+
console.log(`Bundled assets synced: ${bundledRoot}`);
|
|
108
112
|
}
|
|
109
113
|
|
|
110
114
|
main().catch((error) => {
|
package/skills/manifest.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schemaVersion": 1,
|
|
3
|
-
"packageName": "studioflow",
|
|
4
|
-
"packageVersion": "0.1.5",
|
|
5
|
-
"generatedAt": "2026-02-14T00:24:03.533Z",
|
|
6
|
-
"skills": {
|
|
7
|
-
"studioflow-cli": {
|
|
8
|
-
"hash": "50cb91859a39b682eda7e8defe273eacb6146c49579f7f97328617b842f759c3"
|
|
9
|
-
},
|
|
10
|
-
"studioflow-investigate": {
|
|
11
|
-
"hash": "69850be6246b5bd99633aa0db48eb55f63948e9fc8b47e9f37037455ab9edfcf"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: studioflow-investigate
|
|
3
|
-
description: Investigate an arbitrary web project and generate deterministic StudioFlow artifacts. Use when the user asks to discover app structure, map routes/components/actions, synthesize artifacts/flow.json from natural-language intent, or clarify open/ambiguous intent before authoring a flow.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# StudioFlow Investigate
|
|
7
|
-
|
|
8
|
-
Generate deterministic demo-planning artifacts for any web app.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
1. Inspect project root and identify framework, package manager, and startup command.
|
|
13
|
-
2. Always collect project context artifacts before intent mapping.
|
|
14
|
-
|
|
15
|
-
Do this automatically in the skill workflow. Do not ask the user to run these commands manually.
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pnpm bootstrap -- --out artifacts/bootstrap.json
|
|
19
|
-
pnpm discover -- --out artifacts
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Fallback if `pnpm` workspace scripts are unavailable:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
studioflow bootstrap --out artifacts/bootstrap.json
|
|
26
|
-
studioflow discover --out artifacts
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
3. Review generated artifacts:
|
|
30
|
-
- `artifacts/bootstrap.json`
|
|
31
|
-
- `artifacts/structure-report.json`
|
|
32
|
-
- `artifacts/navigation-graph.json`
|
|
33
|
-
|
|
34
|
-
4. Resolve intent specificity before authoring `artifacts/flow.json`.
|
|
35
|
-
|
|
36
|
-
Open-intent detection:
|
|
37
|
-
- Treat intent as open when one or more anchors are missing:
|
|
38
|
-
- `target_route`: where the flow should navigate
|
|
39
|
-
- `user_goal`: what user action/outcome to demonstrate
|
|
40
|
-
- `done_assertion`: what text/element proves completion
|
|
41
|
-
|
|
42
|
-
Clarification loop:
|
|
43
|
-
- Max 2 rounds.
|
|
44
|
-
- Ask 1-3 questions per round (adaptive; only missing high-impact fields).
|
|
45
|
-
- 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).
|
|
47
|
-
- If host supports structured question-card requests, emit payloads from `references/question-card-spec.md`.
|
|
48
|
-
- If structured cards are not supported, ask equivalent plain-language questions.
|
|
49
|
-
- Track known/missing fields using `references/clarification-state.md`.
|
|
50
|
-
|
|
51
|
-
5. Author `artifacts/flow.json` from intent + discovered structure + clarified answers.
|
|
52
|
-
|
|
53
|
-
Rules for authored flow:
|
|
54
|
-
- Deterministic steps only.
|
|
55
|
-
- Prefer stable selectors (`data-testid`).
|
|
56
|
-
- Include clear step IDs and assertions at key transitions.
|
|
57
|
-
- Include optional pacing fields when useful for recording quality.
|
|
58
|
-
- Add `recorder_export` only when the user explicitly asks for export at run completion.
|
|
59
|
-
- If clarification remains incomplete after 2 rounds, generate best-effort flow with explicit assumptions.
|
|
60
|
-
|
|
61
|
-
6. Validate candidate flow:
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
pnpm validate -- --flow artifacts/flow.json
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
7. If validation fails, edit flow actions/selectors and rerun validation.
|
|
68
|
-
|
|
69
|
-
8. Emit deterministic runtime handoff for `studioflow-cli`.
|
|
70
|
-
|
|
71
|
-
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.
|
|
73
|
-
|
|
74
|
-
9. Hand off execution to `studioflow-cli` immediately.
|
|
75
|
-
|
|
76
|
-
- If your host supports explicit skill invocation, invoke `studioflow-cli` in the same turn using the handoff payload.
|
|
77
|
-
- If explicit skill invocation is unavailable, execute the equivalent CLI run workflow directly in the same turn.
|
|
78
|
-
- Do not stop at "here is the command to run" when the user intent is to run/record a demo.
|
|
79
|
-
|
|
80
|
-
## Output Requirements
|
|
81
|
-
|
|
82
|
-
Always produce these files for handoff to runtime execution:
|
|
83
|
-
1. `artifacts/bootstrap.json`
|
|
84
|
-
2. `artifacts/structure-report.json`
|
|
85
|
-
3. `artifacts/navigation-graph.json`
|
|
86
|
-
4. `artifacts/flow.json`
|
|
87
|
-
5. `artifacts/studioflow-cli-handoff.json`
|
|
88
|
-
|
|
89
|
-
Always include a concise handoff summary in the response:
|
|
90
|
-
- resolved intent anchors
|
|
91
|
-
- unresolved assumptions (if any)
|
|
92
|
-
- confidence (`high|medium|low`)
|
|
93
|
-
|
|
94
|
-
Use references in:
|
|
95
|
-
- `references/artifact-spec.md`
|
|
96
|
-
- `references/question-card-spec.md`
|
|
97
|
-
- `references/clarification-state.md`
|
|
98
|
-
- `references/cli-handoff-spec.md`
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|