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/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "studioflow",
3
- "version": "0.1.5",
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
- "skills",
19
- "flows",
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
- "prepack": "node scripts/sync-skills.mjs && node scripts/build.mjs",
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
+ }
@@ -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 targetSkillsRoot = path.join(packageRoot, "skills");
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(packageRoot, "flows");
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: skills -> ${targetSkillsRoot}, flows -> ${targetFlowsRoot}`);
111
+ console.log(`Bundled assets synced: ${bundledRoot}`);
108
112
  }
109
113
 
110
114
  main().catch((error) => {
@@ -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