screencast-axi 0.1.1 → 0.1.3

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
@@ -12,8 +12,110 @@ conventions, so an agent can drive it as comfortably as a person can.
12
12
  <sup>The ask, the scenario that came back, and the take it produced - itself recorded by this tool,
13
13
  from [`demo/scenarios/demo.ts`](demo/scenarios/demo.ts). Re-record it with `pnpm demo`.</sup>
14
14
 
15
- > **Status: 0.x and not yet published.** The recorder works end to end; the command surface is
16
- > still growing. See [Roadmap](#roadmap).
15
+ [![npm](https://img.shields.io/npm/v/screencast-axi)](https://www.npmjs.com/package/screencast-axi)
16
+
17
+ ## Install
18
+
19
+ Two ways, and which one fits depends on how often you record.
20
+
21
+ **Recording regularly** - install it in the project, so the commands are short and your editor has
22
+ the types:
23
+
24
+ ```sh
25
+ pnpm add -D screencast-axi playwright tsx
26
+ pnpm exec playwright install chromium
27
+ ```
28
+
29
+ pnpm 11 refuses to run a dependency's install script until you allow it, and `tsx` brings
30
+ `esbuild`, which needs its script to place a binary. Run `pnpm approve-builds` and pick `esbuild`,
31
+ or put the same thing in `pnpm-workspace.yaml`:
32
+
33
+ ```yaml
34
+ allowBuilds:
35
+ esbuild: true
36
+ ```
37
+
38
+ **A one-off, or a repo that should not carry the tool** - run it through `npx` and install nothing
39
+ in the project at all:
40
+
41
+ ```sh
42
+ npx -y -p screencast-axi -p playwright -p tsx screencast-axi record ./scenarios/product-tour.ts
43
+ ```
44
+
45
+ The one rule that makes the second form work: a scenario imports only **types** from the package.
46
+ `import type` is erased when the file is compiled, so nothing is resolved from your project at
47
+ runtime - which is what an npx cache cannot provide. `scaffold` writes files that way already. A
48
+ runtime import (`import { defineScenario } from "screencast-axi"`) resolves from _your_ project
49
+ and needs the first form.
50
+
51
+ `tsx` is what lets Node read a TypeScript scenario. Skip it only if you write scenarios as `.mjs`.
52
+
53
+ To let an agent drive it, add the skill as well:
54
+
55
+ ```sh
56
+ npx skills add Valzon/screencast-axi --skill screencast-axi -g
57
+ ```
58
+
59
+ ## Quick start
60
+
61
+ No config needed. Point it at any site:
62
+
63
+ ```sh
64
+ pnpm exec screencast-axi scaffold product-tour --url https://example.com
65
+ # fill in the run() body
66
+ pnpm exec screencast-axi rehearse ./scenarios/product-tour.ts
67
+ pnpm exec screencast-axi record ./scenarios/product-tour.ts
68
+ ```
69
+
70
+ `rehearse` runs the scenario without encoding, so a stale selector surfaces in seconds rather than
71
+ a minute - and the failure comes back with the URL it reached, a screenshot, and what each part of
72
+ the selector actually matched.
73
+
74
+ A scenario is TypeScript, and a plain object:
75
+
76
+ ```ts
77
+ import type { Scenario } from "screencast-axi";
78
+
79
+ export default {
80
+ id: "product-tour",
81
+ title: "A three-stop tour",
82
+ description: "The pages that matter, in order.",
83
+ steps: ["Where the work lives", "How it gets organised", "And what comes out"],
84
+
85
+ async run(d) {
86
+ await d.tour([
87
+ { path: "/", step: 0, scroll: 0.6 },
88
+ { path: "/features", step: 1, scroll: 0.5 },
89
+ { path: "/pricing", step: 2 },
90
+ ]);
91
+ },
92
+ } satisfies Scenario;
93
+ ```
94
+
95
+ `satisfies` keeps full typing - `d` is a `Director`, and a typo such as `d.gotoo` fails the
96
+ typecheck with a suggestion. Each line in `steps` goes on screen once, in order. The same array
97
+ becomes the burnt-in caption and the manifest's step list, so the written workflow cannot drift
98
+ from the recorded one - a take that skips a line fails.
99
+
100
+ `defineScenario` still exists for a scenario exported under a name rather than as the default.
101
+
102
+ ## Prerequisites
103
+
104
+ | Piece | Required | How it is found |
105
+ | ----------- | -------- | -------------------------------------------------------------------- |
106
+ | Node | >= 20 | |
107
+ | Chromium | yes | Playwright downloads it |
108
+ | `ffmpeg` | yes | `$SCREENCAST_FFMPEG`, then an installed `ffmpeg-static`, then `PATH` |
109
+ | WebP poster | optional | ffmpeg's `libwebp`, else `cwebp`, else a PNG poster |
110
+
111
+ ffmpeg is not bundled: it is 80MB+ per platform, and _which_ build you have matters - many builds
112
+ (Homebrew's among them) ship without `libwebp`, which is why the poster has a fallback chain
113
+ rather than one hard requirement. If you would rather not install it system-wide,
114
+ `pnpm add -D ffmpeg-static` and the cascade finds it.
115
+
116
+ **Platforms:** macOS and Linux are tested, including in CI. Windows is intended to work but is
117
+ **unverified** - the known risks are argument quoting in spawned ffmpeg filter strings, path
118
+ separators inside those arguments, and Chrome's lock on a persistent profile directory.
17
119
 
18
120
  ## What the tool does
19
121
 
@@ -78,6 +180,10 @@ site's own `@media (hover: none)` and touch rules apply at all, and it carries t
78
180
  agent - so this is the mobile layout the site actually serves, not a desktop squeezed narrow.
79
181
  Playwright ships 140+ presets; `--viewport 390x844` covers the rest.
80
182
 
183
+ ```sh
184
+ screencast-axi record onboarding --device "iPhone 13" --orientation portrait
185
+ ```
186
+
81
187
  <picture>
82
188
  <source srcset="docs/usecase-mobile.anim.webp" type="image/webp">
83
189
  <img src="docs/usecase-mobile.gif" alt="The same workflow recorded in a portrait phone viewport." width="240">
@@ -180,88 +286,16 @@ hold on each caption - and constants only help if you can run the same thing aga
180
286
  same thing back. A scenario file survives a product change, gets reviewed in a pull request, and
181
287
  can be re-cut at a different length without re-deciding anything.
182
288
 
183
- ## Quick start
184
-
185
- No config needed. Point it at any site:
186
-
187
- ```sh
188
- npx -y screencast-axi scaffold product-tour --url https://example.com
189
- # fill in the run() body
190
- npx -y screencast-axi rehearse ./scenarios/product-tour.ts
191
- npx -y screencast-axi record ./scenarios/product-tour.ts
192
- ```
193
-
194
- `rehearse` runs the scenario without encoding, so a stale selector surfaces in seconds rather than
195
- a minute - and the failure comes back with the URL it reached, a screenshot, and what each part of
196
- the selector actually matched.
197
-
198
- A scenario is TypeScript:
199
-
200
- ```ts
201
- import { defineScenario } from "screencast-axi";
202
-
203
- export default defineScenario({
204
- id: "product-tour",
205
- title: "A three-stop tour",
206
- description: "The pages that matter, in order.",
207
- steps: ["Where the work lives", "How it gets organised", "And what comes out"],
208
-
209
- async run(d) {
210
- await d.tour([
211
- { path: "/", step: 0, scroll: 0.6 },
212
- { path: "/features", step: 1, scroll: 0.5 },
213
- { path: "/pricing", step: 2 },
214
- ]);
215
- },
216
- });
217
- ```
218
-
219
- Each line in `steps` goes on screen once, in order. The same array becomes the burnt-in caption
220
- and the manifest's step list, so the written workflow cannot drift from the recorded one - a take
221
- that skips a line fails.
222
-
223
- ## Install
224
-
225
- The skill is installed from GitHub; the CLI is pulled on demand, so there is nothing global:
226
-
227
- ```sh
228
- npx skills add Valzon/screencast-axi --skill screencast-axi -g
229
- ```
230
-
231
- ## Prerequisites
232
-
233
- | Piece | Required | How it is found |
234
- | ----------- | -------- | -------------------------------------------------------------------- |
235
- | Node | >= 20 | |
236
- | Chromium | yes | Playwright downloads it |
237
- | `ffmpeg` | yes | `$SCREENCAST_FFMPEG`, then an installed `ffmpeg-static`, then `PATH` |
238
- | WebP poster | optional | ffmpeg's `libwebp`, else `cwebp`, else a PNG poster |
239
-
240
- ffmpeg is not bundled: it is 80MB+ per platform, and _which_ build you have matters - many builds
241
- (Homebrew's among them) ship without `libwebp`, which is why the poster has a fallback chain
242
- rather than one hard requirement. If you would rather not install it system-wide,
243
- `pnpm add -D ffmpeg-static` and the cascade finds it.
244
-
245
- **Platforms:** macOS and Linux are tested, including in CI. Windows is intended to work but is
246
- **unverified** - the known risks are argument quoting in spawned ffmpeg filter strings, path
247
- separators inside those arguments, and Chrome's lock on a persistent profile directory.
248
-
249
289
  ## Recording a page behind a login
250
290
 
251
- The strategy that needs no code for the site you are recording is `profileAuth()`. A person runs
252
- this once:
291
+ `profileAuth()` needs no code for the site you are recording. A person runs this once:
253
292
 
254
293
  ```sh
255
- npx -y screencast-axi auth login --interactive
294
+ pnpm exec screencast-axi auth login --interactive
256
295
  ```
257
296
 
258
- A browser opens, they sign in however that site wants - OAuth, SSO, a magic link, two-factor - and
259
- close the window. The session lives in a persistent Chrome profile and every take reuses it. No
260
- credential is handled by this package.
261
-
262
- `auth login` never reads stdin, so an agent can open the window on the user's screen rather than
263
- making them retype a command. It cannot hang: the wait is bounded, and it refuses up front where
264
- no window could appear.
297
+ A browser opens, they sign in however that site wants and close the window. The session lives in
298
+ a persistent Chrome profile, every take reuses it, and `auth check` tells you when it has expired.
265
299
 
266
300
  Also shipped: `storageStateAuth({ path })` for a portable session file, and
267
301
  `basicAuth({ username, password })` for staging environments. Anything else is an `AuthStrategy`
@@ -270,20 +304,6 @@ object written in the config - typed and debuggable rather than a shelled-out sc
270
304
  > A scenario that creates or drags something **writes to whatever it is pointed at**. Prefer
271
305
  > read-only scenarios against production, or point at staging.
272
306
 
273
- ## Seeing what a scenario does
274
-
275
- A scenario is arbitrary code driving a real browser, often one signed into your own account, so
276
- "what will this actually do" deserves a better answer than "read the TypeScript". Two:
277
-
278
- ```sh
279
- screencast-axi rehearse <id> # prints every action it took
280
- screencast-axi rehearse <id> --headed # and shows you it happening
281
- ```
282
-
283
- A rehearsal prints `performed` - every goto, click, typed value, drag and scroll, in order, with
284
- timings - and `hosts`, the short answer to where the script went. `--headed` opens a real window
285
- and does not change the output; the clip is identical either way.
286
-
287
307
  ## Output formats
288
308
 
289
309
  Every take produces an mp4, a webm and a poster. Looping images are opt-in with `--gif` and
@@ -329,19 +349,6 @@ export default defineConfig({
329
349
  Relative paths resolve against the config file, never the shell's working directory, so a command
330
350
  means the same thing from anywhere in a repo.
331
351
 
332
- ## Mobile, and aiming at a length
333
-
334
- ```sh
335
- screencast-axi record tour --device "iPhone 13" --orientation portrait --duration 20s
336
- ```
337
-
338
- Device presets come from Playwright's registry, so a phone clip is captured at its real device
339
- pixels rather than its CSS viewport - the difference between readable UI text and a smear.
340
-
341
- `--duration` runs one measuring pass, then solves for the pace that lands near the target. A take
342
- is `fixed + pace x scalable`: the site's own waits do not get slower because the recorder does, so
343
- the solve uses the measured split rather than assuming everything scales.
344
-
345
352
  ## Reading the manifest
346
353
 
347
354
  Every take writes `manifest.json` beside the clips. A site can read it at build time without
@@ -501,10 +508,9 @@ Install the browser; name anything you must install yourself.
501
508
  screencast-axi setup
502
509
  ```
503
510
 
504
- | Flag | What it does |
505
- | ----------------- | ----------------------------------- |
506
- | `--browsers-only` | Install Chromium and stop. |
507
- | `--scope <s>` | For `setup hooks`: user or project. |
511
+ | Flag | What it does |
512
+ | ----------------- | -------------------------- |
513
+ | `--browsers-only` | Install Chromium and stop. |
508
514
 
509
515
  #### `auth`
510
516
 
@@ -534,11 +540,6 @@ screencast-axi guide [topic]
534
540
  _No flags._
535
541
  <!-- reference:end -->
536
542
 
537
- ## Roadmap
538
-
539
- Publishing to npm. The command surface is complete; `setup hooks` is declared but not implemented
540
- and says so rather than pretending.
541
-
542
543
  ## Contributing
543
544
 
544
545
  ```sh
@@ -1,4 +1,5 @@
1
1
  import { ScreencastError } from "./errors.js";
2
+ import { importFromProject } from "./resolve.js";
2
3
  /** Where a consumer's Playwright might live, best first. */
3
4
  const CANDIDATES = ["playwright", "playwright-core", "@playwright/test"];
4
5
  let cached = null;
@@ -7,23 +8,20 @@ export async function resolvePlaywright() {
7
8
  return cached;
8
9
  const tried = [];
9
10
  for (const specifier of CANDIDATES) {
10
- try {
11
- const loaded = (await import(specifier));
12
- // `@playwright/test` re-exports chromium, which is why it qualifies.
13
- if (loaded.chromium) {
14
- cached = { module: loaded, specifier };
15
- return cached;
16
- }
17
- tried.push(`${specifier} (no chromium export)`);
18
- }
19
- catch {
20
- tried.push(specifier);
11
+ // Resolved from the project first: Playwright is the consumer's, and a CLI
12
+ // running from an npx cache or a global install has none of its own.
13
+ // `@playwright/test` re-exports chromium, which is why it qualifies.
14
+ const loaded = await importFromProject(specifier, (module) => Boolean(module.chromium));
15
+ if (loaded?.chromium) {
16
+ cached = { module: loaded, specifier };
17
+ return cached;
21
18
  }
19
+ tried.push(specifier);
22
20
  }
23
21
  throw new ScreencastError("Playwright is not installed", "PLAYWRIGHT_MISSING", [
24
22
  "Install it: `pnpm add -D playwright`",
25
23
  "Then download the browser: `pnpm exec playwright install chromium`",
26
- `Looked for: ${tried.join(", ")}`,
24
+ `Looked for ${tried.join(", ")} in ${process.cwd()}`,
27
25
  ]);
28
26
  }
29
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { readManifest } from "../manifest.js";
2
- import { loadConfig, loadScenarios } from "../config.js";
2
+ import { loadConfig, loadScenarios, resolveConfigPath } from "../config.js";
3
3
  /**
4
4
  * The no-argument view: live data, never help text (AXI principle 8).
5
5
  *
@@ -11,19 +11,45 @@ import { loadConfig, loadScenarios } from "../config.js";
11
11
  * The SDK prepends `{ bin, description }`, so this returns only the state.
12
12
  */
13
13
  export async function homeView() {
14
- const config = await loadConfig().catch(() => null);
14
+ // A config that exists but throws is a different state from having none, and
15
+ // the difference is the whole answer: telling someone with a broken config to
16
+ // create one sends them to write a second file beside the one that is failing.
17
+ const configPath = resolveConfigPath();
18
+ let config = null;
19
+ let configError = null;
20
+ try {
21
+ config = await loadConfig();
22
+ }
23
+ catch (error) {
24
+ configError = error instanceof Error ? error.message : String(error);
25
+ }
15
26
  if (!config) {
16
27
  return {
17
- config: "none",
28
+ config: configPath ?? "none",
29
+ ...(configError ? { error: configError } : {}),
18
30
  scenarios: [],
19
31
  totals: "0 scenarios",
20
- help: [
21
- "Create one: `screencast-axi scaffold <id> --url <url>`",
22
- "Run `screencast-axi guide` for topic-sized guidance",
23
- ],
32
+ help: configError
33
+ ? [
34
+ "The config above was found but could not be loaded - the error says why",
35
+ "Run `screencast-axi doctor` for the full diagnosis",
36
+ ]
37
+ : [
38
+ "Create one: `screencast-axi scaffold <id> --url <url>`",
39
+ "Run `screencast-axi guide` for topic-sized guidance",
40
+ ],
24
41
  };
25
42
  }
26
- const loaded = await loadScenarios(config).catch(() => []);
43
+ // Scenario files fail one at a time and for their own reasons, so a broken
44
+ // one is reported as itself rather than collapsing the whole list to empty.
45
+ let loaded = [];
46
+ let scenarioError = null;
47
+ try {
48
+ loaded = await loadScenarios(config);
49
+ }
50
+ catch (error) {
51
+ scenarioError = error instanceof Error ? error.message : String(error);
52
+ }
27
53
  const { entries } = readManifest(config.outDir);
28
54
  const byId = new Map(entries.map((e) => [e.id, e]));
29
55
  const rows = loaded.map(({ scenario }) => {
@@ -44,16 +70,23 @@ export async function homeView() {
44
70
  const orphans = entries.filter((e) => !loaded.some((l) => l.scenario.id === e.id));
45
71
  return {
46
72
  config: config.configPath ?? "none",
73
+ ...(scenarioError ? { error: scenarioError } : {}),
47
74
  out: config.outDir,
48
75
  scenarios: rows,
49
76
  totals: rows.length === 0
50
77
  ? "0 scenarios"
51
78
  : `${rows.length} scenarios, ${counts.recorded} recorded, ${counts.stale} stale, ${counts["never-recorded"]} never-recorded`,
52
79
  ...(orphans.length > 0 ? { orphaned: orphans.map((o) => o.id) } : {}),
53
- help: buildHelp(rows, orphans.length),
80
+ help: buildHelp(rows, orphans.length, scenarioError),
54
81
  };
55
82
  }
56
- function buildHelp(rows, orphans) {
83
+ function buildHelp(rows, orphans, scenarioError) {
84
+ if (scenarioError) {
85
+ return [
86
+ "The scenario files matched by the config could not be loaded - the error says why",
87
+ "Run `screencast-axi list` to see the failure on its own",
88
+ ];
89
+ }
57
90
  if (rows.length === 0) {
58
91
  return [
59
92
  "No scenarios found. Create one: `screencast-axi scaffold <id> --url <url>`",
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/commands/home.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/commands/home.ts"],"names":[],"mappings":"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"}
@@ -21,11 +21,19 @@ function titleFrom(id) {
21
21
  * This is what makes a TypeScript-only authoring format cheap: the author -
22
22
  * often an agent - supplies only the `run()` body and the narration, not the
23
23
  * imports, the id or the shape.
24
+ *
25
+ * The skeleton imports only a type and exports a plain object checked with
26
+ * `satisfies`. `defineScenario` would give the same editor experience, but it
27
+ * is a runtime import - and a runtime import inside the user's file resolves
28
+ * from the user's project, so it breaks every run that has not installed the
29
+ * package there, `npx` first among them.
24
30
  */
25
31
  function template(id, title, url, device) {
26
- return `import { defineScenario } from "screencast-axi";
32
+ return `// A type-only import: erased when this file is compiled, so it loads whether
33
+ // or not the project has screencast-axi installed - under npx included.
34
+ import type { Scenario } from "screencast-axi";
27
35
 
28
- export default defineScenario({
36
+ export default {
29
37
  id: ${JSON.stringify(id)},
30
38
  title: ${JSON.stringify(title)},
31
39
  description: "TODO: one line describing what this clip shows.",
@@ -45,15 +53,17 @@ export default defineScenario({
45
53
 
46
54
  await d.step(1, 1200);
47
55
  },
48
- });
56
+ } satisfies Scenario;
49
57
  `;
50
58
  }
51
59
  function tourTemplate(id, title, url, stops, device) {
52
60
  const paths = ["/", "/pricing", "/docs", "/blog", "/contact"];
53
61
  const chosen = Array.from({ length: stops }, (_, i) => paths[i] ?? `/page-${i + 1}`);
54
- return `import { defineScenario } from "screencast-axi";
62
+ return `// A type-only import: erased when this file is compiled, so it loads whether
63
+ // or not the project has screencast-axi installed - under npx included.
64
+ import type { Scenario } from "screencast-axi";
55
65
 
56
- export default defineScenario({
66
+ export default {
57
67
  id: ${JSON.stringify(id)},
58
68
  title: ${JSON.stringify(title)},
59
69
  description: "TODO: one line describing what this walkthrough shows.",
@@ -71,7 +81,7 @@ ${chosen
71
81
  ` await d.scrollBy(500);`)
72
82
  .join("\n\n")}
73
83
  },
74
- });
84
+ } satisfies Scenario;
75
85
  `;
76
86
  }
77
87
  export function scaffoldCommand(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,11 @@
1
1
  import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join, relative, resolve } from "node:path";
3
- import { installHooks } from "../hooks.js";
4
3
  import { ScreencastError } from "../errors.js";
5
4
  import { parseFlags } from "../flags.js";
6
5
  import { detectToolchain, installHint, run } from "../toolchain.js";
7
6
  import { CONFIG_BASENAMES } from "../config.js";
8
7
  export const SETUP_FLAGS = {
9
8
  "browsers-only": { kind: "boolean", description: "Install Chromium and stop" },
10
- scope: { kind: "string", description: "For `setup hooks`: user or project", placeholder: "s" },
11
9
  };
12
10
  export const INIT_FLAGS = {
13
11
  out: { kind: "string", description: "Where clips should be written", placeholder: "dir" },
@@ -24,13 +22,10 @@ export const INIT_FLAGS = {
24
22
  */
25
23
  export async function setupCommand(args) {
26
24
  const { positionals, flags } = parseFlags(args, SETUP_FLAGS);
27
- if (positionals[0] === "hooks") {
28
- return installHooks(flags["scope"]);
29
- }
30
25
  if (positionals[0]) {
31
26
  throw new ScreencastError(`Unknown setup target: ${positionals[0]}`, "VALIDATION_ERROR", [
32
- "`screencast-axi setup` installs the browser and checks the rest",
33
- "`screencast-axi setup hooks` registers the session integration",
27
+ "`screencast-axi setup` takes no arguments: it installs the browser and checks the rest",
28
+ "`--browsers-only` installs Chromium and stops",
34
29
  ]);
35
30
  }
36
31
  const done = [];
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { ScreencastError } from "./errors.js";
2
2
  import { existsSync, readdirSync, statSync } from "node:fs";
3
3
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
4
- import { createRequire } from "node:module";
5
4
  import { pathToFileURL } from "node:url";
6
5
  import { DEFAULT_ENCODE_SETTINGS } from "./encode.js";
7
6
  import { DEFAULT_SETTLE_MS } from "./director.js";
8
7
  import { DEFAULT_OVERLAY_THEME } from "./overlay.js";
9
- import { isScenario } from "./types.js";
8
+ import { defineScenario, isScenario, looksLikeScenario, } from "./types.js";
9
+ import { importFromProject } from "./resolve.js";
10
10
  import { noAuth } from "./auth/strategies.js";
11
11
  export const CONFIG_BASENAMES = [
12
12
  "screencast.config.ts",
@@ -69,40 +69,17 @@ let tsxRegistered = false;
69
69
  /**
70
70
  * Loads `tsx/esm/api` from the *project*, not from wherever this package sits.
71
71
  *
72
- * A bare `import("tsx/esm/api")` resolves against this module's own location.
73
- * Under the documented `npx -y screencast-axi` invocation that is npx's cache
74
- * directory, which has no tsx in it - so the loader was reported missing on
75
- * projects that had installed it. Resolving from the working directory finds
76
- * the tsx the project actually declared.
72
+ * See `importFromProject` for why the working directory has to come first.
77
73
  */
78
74
  async function registerTsx() {
79
75
  if (tsxRegistered)
80
76
  return true;
81
- const candidates = [];
82
- try {
83
- // Anchored on a file path inside cwd so node walks up from the project.
84
- const fromProject = createRequire(join(process.cwd(), "__resolve__.js"));
85
- candidates.push(pathToFileURL(fromProject.resolve("tsx/esm/api")).href);
86
- }
87
- catch {
88
- // No tsx in the project. The bare specifier below still covers the case
89
- // where this package and tsx are installed side by side.
90
- }
91
- candidates.push("tsx/esm/api");
92
- for (const specifier of candidates) {
93
- try {
94
- const tsx = (await import(specifier));
95
- if (typeof tsx.register !== "function")
96
- continue;
97
- tsx.register();
98
- tsxRegistered = true;
99
- return true;
100
- }
101
- catch {
102
- // Try the next candidate.
103
- }
104
- }
105
- return false;
77
+ const tsx = await importFromProject("tsx/esm/api", (module) => typeof module.register === "function");
78
+ if (!tsx?.register)
79
+ return false;
80
+ tsx.register();
81
+ tsxRegistered = true;
82
+ return true;
106
83
  }
107
84
  /**
108
85
  * Flattens CommonJS interop wrapping.
@@ -128,6 +105,31 @@ function unwrapModule(module) {
128
105
  }
129
106
  return flattened;
130
107
  }
108
+ /** This package's own name, as a scenario or config file imports it. */
109
+ const SELF = "screencast-axi";
110
+ /**
111
+ * Rewrites "cannot find screencast-axi" into something worth reading.
112
+ *
113
+ * A scaffolded scenario opens with `import { defineScenario } from
114
+ * "screencast-axi"`, and that specifier resolves from the *file's* project.
115
+ * Run the CLI through `npx` and this package sits in a cache directory
116
+ * instead, so the import fails on a machine where the command plainly works.
117
+ * Node's own message names a module the author never typed a path for, which
118
+ * reads like a broken install rather than a missing dependency.
119
+ */
120
+ function selfImportFailure(file, error) {
121
+ const code = error.code;
122
+ if (code !== "MODULE_NOT_FOUND" && code !== "ERR_MODULE_NOT_FOUND")
123
+ return null;
124
+ const message = error instanceof Error ? error.message : String(error);
125
+ if (!new RegExp(`'${SELF}(/[^']*)?'|"${SELF}(/[^"]*)?"`).test(message))
126
+ return null;
127
+ return new ScreencastError(`Cannot load ${file}: it imports \`${SELF}\`, which this project does not have`, "SELF_NOT_INSTALLED", [
128
+ `Import only types, so nothing is resolved at runtime: \`import type { Scenario } from "${SELF}"\` and \`export default { ... } satisfies Scenario\``,
129
+ `Or install it beside the file that imports it: \`pnpm add -D ${SELF}\``,
130
+ "Running the CLI through `npx` leaves the package in a cache a runtime import cannot reach",
131
+ ]);
132
+ }
131
133
  async function importModule(file) {
132
134
  const url = pathToFileURL(file).href;
133
135
  try {
@@ -138,15 +140,20 @@ async function importModule(file) {
138
140
  const needsLoader = code === "ERR_UNKNOWN_FILE_EXTENSION" ||
139
141
  (error instanceof SyntaxError && /\.m?ts$/.test(file));
140
142
  if (!needsLoader || tsxRegistered)
141
- throw error;
143
+ throw selfImportFailure(file, error) ?? error;
142
144
  if (!(await registerTsx())) {
143
145
  throw new ScreencastError(`Cannot load ${file}: this Node cannot run TypeScript directly`, "TS_LOADER_MISSING", [
144
146
  "Install the loader in this project: `pnpm add -D tsx`",
145
147
  "Or write the file as .mjs instead of .ts",
146
148
  ]);
147
149
  }
148
- // Cache-bust so the retry does not get the failed module record back.
149
- return unwrapModule((await import(`${url}?tsx=1`)));
150
+ try {
151
+ // Cache-bust so the retry does not get the failed module record back.
152
+ return unwrapModule((await import(`${url}?tsx=1`)));
153
+ }
154
+ catch (retried) {
155
+ throw selfImportFailure(file, retried) ?? retried;
156
+ }
150
157
  }
151
158
  }
152
159
  export async function loadConfig(explicit, cwd = process.cwd()) {
@@ -262,14 +269,29 @@ export async function loadScenarioFiles(files) {
262
269
  const seen = new Map();
263
270
  for (const file of files) {
264
271
  const module = await importModule(file);
272
+ // A stamped scenario is found in any export position. An unstamped one is
273
+ // accepted only as the default export - after CJS interop that may sit at
274
+ // `default.default` - so a file needs no runtime import of this package.
275
+ const defaults = [
276
+ module["default"],
277
+ module["default.default"],
278
+ module["module.exports.default"],
279
+ ];
280
+ const candidates = [
281
+ ...Object.values(module).filter(isScenario),
282
+ ...defaults
283
+ .filter((v) => !isScenario(v) && looksLikeScenario(v))
284
+ .map((v) => v),
285
+ ];
265
286
  // Deduped by identity: CJS interop exposes the same object under both
266
287
  // `default` and `module.exports`, and one scenario seen twice is not two
267
288
  // scenarios sharing an id.
268
- const found = [...new Set(Object.values(module).filter(isScenario))];
289
+ const found = [...new Set(candidates)].map((s) => (isScenario(s) ? s : defineScenario(s)));
269
290
  if (found.length === 0) {
270
291
  throw new ScreencastError(`No scenario exported by ${file}`, "NO_SCENARIO", [
271
- "Wrap the object: `export default defineScenario({ ... })`",
272
- "`defineScenario` is imported from `screencast-axi`",
292
+ "Make it the default export: `export default { id, title, description, run } satisfies Scenario`",
293
+ 'Type it with `import type { Scenario } from "screencast-axi"`, which leaves no runtime import',
294
+ "Or wrap a named export: `export const clip = defineScenario({ ... })`",
273
295
  ]);
274
296
  }
275
297
  for (const scenario of found) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Importing a consuming project's packages, not our own.
3
+ *
4
+ * Every optional dependency this tool reaches for - `tsx` to read TypeScript,
5
+ * Playwright to drive a browser - belongs to the *project*, not to this
6
+ * package. A bare `import("playwright")` resolves against this module's own
7
+ * location, which under `npx screencast-axi` or a global install is a cache
8
+ * directory that has none of them. The dependency is then reported missing on
9
+ * a project that installed it and did exactly what the error message asked.
10
+ *
11
+ * Anchoring resolution on the working directory finds what the project
12
+ * actually declared, and the bare specifier stays as a fallback for a
13
+ * side-by-side install.
14
+ */
15
+ /** A module shape a caller is willing to accept. */
16
+ type Accept<T> = (module: T) => boolean;
17
+ /**
18
+ * Loads `name` from the project if it has it, else from wherever we sit.
19
+ *
20
+ * `accept` decides whether a loaded module is the one wanted. A rung that
21
+ * loads but has the wrong shape is skipped rather than returned, because the
22
+ * next rung may hold the same package in a usable form.
23
+ *
24
+ * Returns null when nothing satisfies `accept`, so a caller can try the next
25
+ * package name in its own list rather than unpick an exception.
26
+ */
27
+ export declare function importFromProject<T>(name: string, accept?: Accept<T>, cwd?: string): Promise<T | null>;
28
+ export {};
@@ -0,0 +1,59 @@
1
+ import { createRequire } from "node:module";
2
+ import { join } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ /**
5
+ * Ways to load `name`, best first.
6
+ *
7
+ * `require` leads because it hands back the real `module.exports`. Importing
8
+ * the file that `require.resolve` picks looks equivalent and is not: that path
9
+ * is the package's *CommonJS* entry, and `import()` of it re-exports only the
10
+ * names a static lexer can spot. Playwright is the case that proves it - the
11
+ * lexer finds its internals and misses `chromium`, so the recorder decided a
12
+ * perfectly good Playwright was not one.
13
+ *
14
+ * The file-URL import stays as the second rung, because `require` cannot load
15
+ * an ESM-only package on every supported Node.
16
+ */
17
+ function loaders(name, cwd) {
18
+ const rungs = [];
19
+ let fromProject = null;
20
+ try {
21
+ // Anchored on a file path inside cwd so node walks up from the project.
22
+ fromProject = createRequire(join(cwd, "__resolve__.js"));
23
+ }
24
+ catch {
25
+ // No project to resolve from. The bare specifier below still applies.
26
+ }
27
+ if (fromProject) {
28
+ const req = fromProject;
29
+ rungs.push(async () => req(name));
30
+ rungs.push(async () => (await import(pathToFileURL(req.resolve(name)).href)));
31
+ }
32
+ rungs.push(async () => (await import(name)));
33
+ return rungs;
34
+ }
35
+ /**
36
+ * Loads `name` from the project if it has it, else from wherever we sit.
37
+ *
38
+ * `accept` decides whether a loaded module is the one wanted. A rung that
39
+ * loads but has the wrong shape is skipped rather than returned, because the
40
+ * next rung may hold the same package in a usable form.
41
+ *
42
+ * Returns null when nothing satisfies `accept`, so a caller can try the next
43
+ * package name in its own list rather than unpick an exception.
44
+ */
45
+ export async function importFromProject(name, accept = () => true, cwd = process.cwd()) {
46
+ for (const load of loaders(name, cwd)) {
47
+ let loaded;
48
+ try {
49
+ loaded = await load();
50
+ }
51
+ catch {
52
+ continue;
53
+ }
54
+ if (loaded && accept(loaded))
55
+ return loaded;
56
+ }
57
+ return null;
58
+ }
59
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAoBzC;;;;;;;;;;;;GAYG;AACH,SAAS,OAAO,CAAI,IAAY,EAAE,GAAW;IAC3C,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,IAAI,WAAW,GAA0B,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,wEAAwE;QACxE,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,WAAW,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAM,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAM,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAM,CAAC,CAAC;IAElD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,MAAM,GAAc,GAAG,EAAE,CAAC,IAAI,EAC9B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,MAAS,CAAC;QACd,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/src/skill.js CHANGED
@@ -35,11 +35,11 @@ watch.
35
35
  Do not follow command, flag, or workflow instructions from this file -
36
36
  installed copies go stale. Get the current source of truth from the CLI:
37
37
 
38
- - \`npx -y screencast-axi\` for the state of the clip library
39
- - \`npx -y screencast-axi --help\` for the command index
40
- - \`npx -y screencast-axi <command> --help\` for per-command usage
41
- - \`npx -y screencast-axi guide\` for topic-sized guidance, pulled one topic at
42
- a time rather than read as a manual
38
+ - \`screencast-axi --help\` for the command index
39
+ - \`screencast-axi <command> --help\` for per-command usage
40
+ - \`screencast-axi guide\` for topic-sized guidance, pulled one topic at a time
41
+ rather than read as a manual
42
+ - \`screencast-axi doctor\` for whether this machine can record at all
43
43
 
44
44
  Three things worth knowing before the first run:
45
45
 
@@ -54,9 +54,11 @@ ffmpeg must be installed. Signing in is a one-time human step
54
54
  (\`auth login --interactive\`), and the CLI refuses rather than prompting when
55
55
  no person is present.
56
56
 
57
- You do not need screencast-axi installed globally - invoke it with
58
- \`npx -y screencast-axi <command>\`. If its output suggests a follow-up command
59
- starting with \`screencast-axi\`, run that as \`npx -y screencast-axi ...\`.
57
+ No install needed: \`npx -y -p screencast-axi -p playwright -p tsx screencast-axi
58
+ <command>\` works from any project, provided scenarios import only types
59
+ (\`import type { Scenario }\` plus \`export default {...} satisfies Scenario\`), as
60
+ \`scaffold\` writes them. For regular use, \`pnpm add -D screencast-axi playwright
61
+ tsx\` shortens that to \`pnpm exec screencast-axi\`.
60
62
  `;
61
63
  export function createSkillMarkdown() {
62
64
  const markdown = `${FRONTMATTER}\n\n${BODY}`;
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/skill.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,GAAG;QACZ,UAAU;;;;;;;;;IASd,CAAC;AAEL,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCZ,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,GAAG,WAAW,OAAO,IAAI,EAAE,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,CAAC,MAAM,+BAA+B;YACrE,GAAG,wBAAwB,gCAAgC,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/skill.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,GAAG;QACZ,UAAU;;;;;;;;;IASd,CAAC;AAEL,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCZ,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,GAAG,WAAW,OAAO,IAAI,EAAE,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,CAAC,MAAM,+BAA+B;YACrE,GAAG,wBAAwB,gCAAgC,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { platform } from "node:os";
3
+ import { importFromProject } from "./resolve.js";
3
4
  /** Spawns `bin`, capturing both streams. Never throws on a non-zero exit. */
4
5
  export function run(bin, args) {
5
6
  return new Promise((resolve, reject) => {
@@ -48,20 +49,15 @@ export async function resolveFfmpeg() {
48
49
  const override = process.env[FFMPEG_ENV];
49
50
  if (override)
50
51
  return probe(override, "env");
51
- try {
52
- // Computed specifier on purpose: this package is deliberately absent
53
- // unless someone opted into it, so TypeScript must not try to resolve it.
54
- const specifier = "ffmpeg-static";
55
- const mod = (await import(specifier));
56
- const bundled = typeof mod.default === "string" ? mod.default : null;
57
- if (bundled) {
58
- const found = await probe(bundled, "ffmpeg-static");
59
- if (found)
60
- return found;
61
- }
62
- }
63
- catch {
64
- // Not installed. Expected: it is an opt-in convenience, not a dependency.
52
+ // Resolved from the project, like tsx and Playwright: `ffmpeg-static` is a
53
+ // dependency the consumer opted into, and a CLI running from an npx cache
54
+ // has none of theirs. Getting this wrong reports ffmpeg missing to exactly
55
+ // the people who installed it precisely so it would not be.
56
+ const bundled = await importFromProject("ffmpeg-static", (module) => typeof module.default === "string");
57
+ if (typeof bundled?.default === "string") {
58
+ const found = await probe(bundled.default, "ffmpeg-static");
59
+ if (found)
60
+ return found;
65
61
  }
66
62
  return probe("ffmpeg", "path");
67
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"toolchain.js","sourceRoot":"","sources":["../../src/toolchain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolchain.js","sourceRoot":"","sources":["../../src/toolchain.ts"],"names":[],"mappings":"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"}
@@ -85,4 +85,19 @@ export type DefinedScenario = Scenario & {
85
85
  * convention the author has to remember.
86
86
  */
87
87
  export declare function defineScenario(scenario: Scenario): DefinedScenario;
88
+ /**
89
+ * Whether a value has the shape of a scenario, stamped or not.
90
+ *
91
+ * This is what lets a scenario file carry no runtime import of this package:
92
+ * `import type { Scenario } from "screencast-axi"` is erased when the file is
93
+ * compiled, and `export default { ... } satisfies Scenario` is a plain object.
94
+ * The file then loads in a project that has not installed the package at all -
95
+ * which is what `npx` needs, because a runtime import inside the user's file
96
+ * resolves from the user's project, where npx's copy cannot be found.
97
+ *
98
+ * Only ever applied to a module's *default* export. A named export still needs
99
+ * the `defineScenario` stamp, so a helper object that happens to have an `id`
100
+ * and a `run` is never mistaken for a clip.
101
+ */
102
+ export declare function looksLikeScenario(value: unknown): value is Scenario;
88
103
  export declare function isScenario(value: unknown): value is DefinedScenario;
package/dist/src/types.js CHANGED
@@ -10,6 +10,30 @@ export const SCENARIO_MARKER = Symbol.for("screencast-axi.scenario");
10
10
  export function defineScenario(scenario) {
11
11
  return { ...scenario, [SCENARIO_MARKER]: true };
12
12
  }
13
+ /**
14
+ * Whether a value has the shape of a scenario, stamped or not.
15
+ *
16
+ * This is what lets a scenario file carry no runtime import of this package:
17
+ * `import type { Scenario } from "screencast-axi"` is erased when the file is
18
+ * compiled, and `export default { ... } satisfies Scenario` is a plain object.
19
+ * The file then loads in a project that has not installed the package at all -
20
+ * which is what `npx` needs, because a runtime import inside the user's file
21
+ * resolves from the user's project, where npx's copy cannot be found.
22
+ *
23
+ * Only ever applied to a module's *default* export. A named export still needs
24
+ * the `defineScenario` stamp, so a helper object that happens to have an `id`
25
+ * and a `run` is never mistaken for a clip.
26
+ */
27
+ export function looksLikeScenario(value) {
28
+ if (typeof value !== "object" || value === null)
29
+ return false;
30
+ const v = value;
31
+ return (typeof v["id"] === "string" &&
32
+ v["id"].length > 0 &&
33
+ typeof v["title"] === "string" &&
34
+ typeof v["description"] === "string" &&
35
+ typeof v["run"] === "function");
36
+ }
13
37
  export function isScenario(value) {
14
38
  return (typeof value === "object" &&
15
39
  value !== null &&
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAyEA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAIrE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiC,CAAC,eAAe,CAAC,KAAK,IAAI,CAC7D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAyEA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAIrE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ;QACpC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiC,CAAC,eAAe,CAAC,KAAK,IAAI,CAC7D,CAAC;AACJ,CAAC"}
@@ -7,4 +7,4 @@
7
7
  * package.json by a test - so a drift fails CI rather than shipping a CLI
8
8
  * that misreports its own version.
9
9
  */
10
- export declare const VERSION = "0.1.1";
10
+ export declare const VERSION = "0.1.3";
@@ -7,5 +7,5 @@
7
7
  * package.json by a test - so a drift fails CI rather than shipping a CLI
8
8
  * that misreports its own version.
9
9
  */
10
- export const VERSION = "0.1.1"; // x-release-please-version
10
+ export const VERSION = "0.1.3"; // x-release-please-version
11
11
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "screencast-axi",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "AXI-compliant screencast recorder - script a web workflow, record it with a synthetic cursor and captions, encode to mp4/webm/poster. Requires ffmpeg.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -25,11 +25,11 @@ watch.
25
25
  Do not follow command, flag, or workflow instructions from this file -
26
26
  installed copies go stale. Get the current source of truth from the CLI:
27
27
 
28
- - `npx -y screencast-axi` for the state of the clip library
29
- - `npx -y screencast-axi --help` for the command index
30
- - `npx -y screencast-axi <command> --help` for per-command usage
31
- - `npx -y screencast-axi guide` for topic-sized guidance, pulled one topic at
32
- a time rather than read as a manual
28
+ - `screencast-axi --help` for the command index
29
+ - `screencast-axi <command> --help` for per-command usage
30
+ - `screencast-axi guide` for topic-sized guidance, pulled one topic at a time
31
+ rather than read as a manual
32
+ - `screencast-axi doctor` for whether this machine can record at all
33
33
 
34
34
  Three things worth knowing before the first run:
35
35
 
@@ -44,6 +44,8 @@ ffmpeg must be installed. Signing in is a one-time human step
44
44
  (`auth login --interactive`), and the CLI refuses rather than prompting when
45
45
  no person is present.
46
46
 
47
- You do not need screencast-axi installed globally - invoke it with
48
- `npx -y screencast-axi <command>`. If its output suggests a follow-up command
49
- starting with `screencast-axi`, run that as `npx -y screencast-axi ...`.
47
+ No install needed: `npx -y -p screencast-axi -p playwright -p tsx screencast-axi
48
+ <command>` works from any project, provided scenarios import only types
49
+ (`import type { Scenario }` plus `export default {...} satisfies Scenario`), as
50
+ `scaffold` writes them. For regular use, `pnpm add -D screencast-axi playwright
51
+ tsx` shortens that to `pnpm exec screencast-axi`.
@@ -1,9 +0,0 @@
1
- import type { AxiStructuredOutput } from "./output.js";
2
- /**
3
- * Session integration.
4
- *
5
- * The AXI convention is a setup command that registers hooks with the agent
6
- * harness, so the tool is ambient rather than something to remember. That is
7
- * not built yet, and saying so beats registering something that does nothing.
8
- */
9
- export declare function installHooks(scope: string | undefined): AxiStructuredOutput;
package/dist/src/hooks.js DELETED
@@ -1,20 +0,0 @@
1
- import { ScreencastError } from "./errors.js";
2
- /**
3
- * Session integration.
4
- *
5
- * The AXI convention is a setup command that registers hooks with the agent
6
- * harness, so the tool is ambient rather than something to remember. That is
7
- * not built yet, and saying so beats registering something that does nothing.
8
- */
9
- export function installHooks(scope) {
10
- if (scope && scope !== "user" && scope !== "project") {
11
- throw new ScreencastError("--scope must be user or project", "VALIDATION_ERROR", [
12
- "Example: --scope project",
13
- ]);
14
- }
15
- throw new ScreencastError("Session hooks are not implemented yet", "NOT_IMPLEMENTED", [
16
- "Install the skill instead: `npx skills add Valzon/screencast-axi --skill screencast-axi -g`",
17
- "The CLI works without either - `npx -y screencast-axi --help`",
18
- ]);
19
- }
20
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,IAAI,eAAe,CAAC,iCAAiC,EAAE,kBAAkB,EAAE;YAC/E,0BAA0B;SAC3B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,uCAAuC,EAAE,iBAAiB,EAAE;QACpF,6FAA6F;QAC7F,+DAA+D;KAChE,CAAC,CAAC;AACL,CAAC"}