versioncam 0.1.2 → 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/CHANGELOG.md +72 -46
- package/README.md +382 -242
- package/bin/versioncam.js +1 -1
- package/dist/app-server.js +2 -2
- package/dist/app-server.js.map +1 -1
- package/dist/cli/commands/doctor.js +2 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/record.js +3 -2
- package/dist/cli/commands/record.js.map +1 -1
- package/dist/cli/commands/render.js +1 -1
- package/dist/cli/commands/render.js.map +1 -1
- package/dist/cli/commands/stability.js +4 -4
- package/dist/cli/commands/stability.js.map +1 -1
- package/dist/cli/usage.d.ts +9 -5
- package/dist/cli/usage.js +36 -23
- package/dist/cli/usage.js.map +1 -1
- package/dist/core/timeline.d.ts +22 -0
- package/dist/core/timeline.js +10 -0
- package/dist/core/timeline.js.map +1 -1
- package/dist/driver/clip.d.ts +4 -1
- package/dist/driver/clip.js +9 -1
- package/dist/driver/clip.js.map +1 -1
- package/dist/driver/session.d.ts +13 -0
- package/dist/driver/session.js +33 -0
- package/dist/driver/session.js.map +1 -1
- package/dist/driver/settle.js +2 -2
- package/dist/driver/settle.js.map +1 -1
- package/dist/inspect/inspect.js +1 -1
- package/dist/page/index.html +1 -1
- package/dist/render/render.js +1 -1
- package/dist/render/render.js.map +1 -1
- package/dist/render/sampling.js +1 -1
- package/dist/render/sampling.js.map +1 -1
- package/dist/review/review.js +3 -3
- package/dist/review/review.js.map +1 -1
- package/dsl.md +230 -92
- package/package.json +2 -2
- package/plugin/README.md +53 -47
package/CHANGELOG.md
CHANGED
|
@@ -2,29 +2,52 @@
|
|
|
2
2
|
|
|
3
3
|
What a user of `versioncam` would want to know about each version, newest
|
|
4
4
|
first. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
5
|
-
and versions follow [semantic versioning](https://semver.org/)
|
|
5
|
+
and versions follow [semantic versioning](https://semver.org/). While the
|
|
6
6
|
major version is 0, a minor version may change the config or the clip DSL,
|
|
7
7
|
and its entry here says how.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 0.1.3 (2026-09-28)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- A recording lists the steps its script took: `steps` in `timeline.json`,
|
|
14
|
+
each DSL call the script made and the frame it began on. There is one per
|
|
15
|
+
line of the script: `typeInto` is one step, not also the click it makes, and
|
|
16
|
+
a locator is an argument, not a step. A reader holding the script can say
|
|
17
|
+
which line produced which moment.
|
|
18
|
+
- A recording names the versioncam that made it: `meta.recorder`, the package
|
|
19
|
+
version. A page that shows the recording can print the version that
|
|
20
|
+
recorded it instead of the latest release.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- The DSL reference gives every method its own heading and every option its
|
|
25
|
+
default, and `versioncam dsl` prints it. It used to say `camera.zoom`
|
|
26
|
+
defaults to 1.65. The default is 1.5, as far as the camera goes before
|
|
27
|
+
captured pixels are upscaled.
|
|
28
|
+
- `versioncam --help` groups the commands by stage: set up, write, record,
|
|
29
|
+
review, output.
|
|
30
|
+
- The CLI's messages say things in sentences and brackets rather than
|
|
31
|
+
dashes. `record` says "1 cut" rather than "1 cuts". `stability` separates
|
|
32
|
+
the pair it compared from the result with a `·`, so a script matching its
|
|
33
|
+
output needs the new line.
|
|
34
|
+
|
|
35
|
+
## 0.1.2 (2026-09-28)
|
|
12
36
|
|
|
13
37
|
### Fixed
|
|
14
38
|
|
|
15
39
|
- Typing followed straight away by another action no longer loses its last
|
|
16
|
-
character. `type` and `typeInto` queue keystrokes at a human cadence
|
|
17
|
-
|
|
18
|
-
queued until after the next step
|
|
40
|
+
character. `type` and `typeInto` queue keystrokes at a human cadence.
|
|
41
|
+
Whenever the typing ended between two frames, the last keystroke stayed
|
|
42
|
+
queued until after the next step. So `typeInto(…)` then `press("Enter")`
|
|
19
43
|
sent the text without its last character, which then began the next
|
|
20
44
|
message. Whether a clip was affected depended only on its timing.
|
|
45
|
+
- A point written as `{ x, y }`, the shape a bounding box gives you, fails
|
|
46
|
+
with "A point is [x, y], not { x, y }", which names the fix. It used to
|
|
47
|
+
reach Playwright as if it were a locator and fail as "locator.count is not
|
|
48
|
+
a function". `dsl.md` says that a point is `[x, y]`.
|
|
21
49
|
|
|
22
|
-
|
|
23
|
-
with "A point is [x, y], not { x, y }", naming the fix. It used to reach
|
|
24
|
-
Playwright as if it were a locator and fail as "locator.count is not a
|
|
25
|
-
function". `dsl.md` says that a point is `[x, y]`.
|
|
26
|
-
|
|
27
|
-
## [0.1.1] — 2026-09-28
|
|
50
|
+
## 0.1.1 (2026-09-28)
|
|
28
51
|
|
|
29
52
|
The first version published by the release workflow rather than by hand.
|
|
30
53
|
|
|
@@ -32,77 +55,80 @@ The first version published by the release workflow rather than by hand.
|
|
|
32
55
|
|
|
33
56
|
- Where there is no `versioncam.config.ts`, `doctor` and every other command
|
|
34
57
|
say how to get one: `npx versioncam init`, then `/versioncam`, whose first
|
|
35
|
-
run writes it from the repository
|
|
36
|
-
`defineRecorder()`. They used to offer only the second, which is the
|
|
37
|
-
way round for anyone using the skill.
|
|
58
|
+
run writes it from the repository. Or write it by hand, a default export
|
|
59
|
+
from `defineRecorder()`. They used to offer only the second, which is the
|
|
60
|
+
long way round for anyone using the skill.
|
|
38
61
|
- The skill's plugin manifest links to version.cam, and no longer to a
|
|
39
62
|
repository nobody outside can open.
|
|
40
63
|
|
|
41
|
-
##
|
|
64
|
+
## 0.1.0 (2026-09-25)
|
|
42
65
|
|
|
43
|
-
The first published version
|
|
44
|
-
|
|
66
|
+
The first published version, and no longer on npm: install 0.1.1 or later.
|
|
67
|
+
It was built in work packages before it had a version number, so this entry
|
|
68
|
+
is grouped by them, newest first.
|
|
45
69
|
|
|
46
70
|
### Publishing
|
|
47
71
|
|
|
48
72
|
- Licensed under the Functional Source License 1.1 with Apache 2.0 as the
|
|
49
|
-
future licence (`FSL-1.1-ALv2`)
|
|
50
|
-
CI, commercial work included
|
|
51
|
-
version is also available under Apache 2.0 two years after its
|
|
73
|
+
future licence (`FSL-1.1-ALv2`). Use it on your own apps and in your own
|
|
74
|
+
CI, commercial work included, but not in a competing product or service.
|
|
75
|
+
Each version is also available under Apache 2.0 two years after its
|
|
76
|
+
release.
|
|
52
77
|
- `versioncam install` installs the Chromium that this version's Playwright
|
|
53
|
-
expects
|
|
54
|
-
|
|
78
|
+
expects, and `--with-deps` adds its system libraries on Linux CI. `doctor`
|
|
79
|
+
names it when the browser is missing.
|
|
55
80
|
|
|
56
81
|
### Reproducible on Linux
|
|
57
82
|
|
|
58
83
|
- A draft recording reproduces on Linux. Chromium now repaints whole tiles
|
|
59
|
-
(`--disable-partial-raster`)
|
|
84
|
+
(`--disable-partial-raster`). At a draft's CSS scale, repainting only what
|
|
60
85
|
the page reported as changed had left one pixel of a just-typed letter
|
|
61
86
|
stale in about half of all runs on a CI runner. Full recordings are
|
|
62
87
|
byte-identical with and without it.
|
|
63
|
-
- The page's clock moves only when the recorder moves it
|
|
64
|
-
16 ms a tick while it waits
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
88
|
+
- The page's clock moves only when the recorder moves it: 1/fps a frame, and
|
|
89
|
+
16 ms a tick while it waits. It used to run on real time between frames,
|
|
90
|
+
where one slow screenshot had moved it 840 ms and fired an app's timer
|
|
91
|
+
seven frames early. `offCamera` spends no time on the page's clock. A
|
|
92
|
+
sign-in hook runs with the clock ticking. A target that is not yet on
|
|
68
93
|
screen is waited for in ticks, so it arrives on the same tick every run.
|
|
69
94
|
|
|
70
|
-
### Versioncam
|
|
95
|
+
### Versioncam (2026-09-24)
|
|
71
96
|
|
|
72
97
|
- One name for everything: the package and CLI `versioncam`, the config
|
|
73
98
|
`versioncam.config.ts`, the output directory `.versioncam/`, the skill
|
|
74
99
|
`/versioncam`.
|
|
75
|
-
- `webServer` in the config, Playwright's fields
|
|
76
|
-
the app starts it when nothing answers, and stops everything it
|
|
100
|
+
- `webServer` in the config, with Playwright's fields. Every command that
|
|
101
|
+
drives the app starts it when nothing answers, and stops everything it
|
|
102
|
+
started.
|
|
77
103
|
- `versioncam stability` records a clip twice the same way and says whether
|
|
78
104
|
the app reproduces, with the two pictures behind the first frame that
|
|
79
|
-
differs. `frame --at <label>` renders the frame a beat shows
|
|
80
|
-
says where each name came from
|
|
81
|
-
- One skill and one reviewer file, installed by `versioncam init
|
|
105
|
+
differs. `frame --at <label>` renders the frame a beat shows. `inspect`
|
|
106
|
+
says where each name came from. `measure` prints what each match says.
|
|
107
|
+
- One skill and one reviewer file, installed by `versioncam init`. The
|
|
82
108
|
skill's first run in a repository writes the config and proves the app
|
|
83
109
|
records the same way twice before it writes a clip.
|
|
84
110
|
|
|
85
|
-
### The authoring loop
|
|
111
|
+
### The authoring loop (2026-09-22)
|
|
86
112
|
|
|
87
113
|
- The agent skill: inspect the app, write a clip, record it, have a fresh
|
|
88
|
-
reviewer judge a contact sheet, fix what it finds. No API key
|
|
89
|
-
|
|
90
|
-
- `versioncam review
|
|
91
|
-
sampled at the beats
|
|
92
|
-
their waits (`settles.json`)
|
|
93
|
-
breaks
|
|
94
|
-
|
|
114
|
+
reviewer judge a contact sheet, fix what it finds. No API key: the model is
|
|
115
|
+
whichever agent session runs it.
|
|
116
|
+
- `versioncam review`, the checks that need no eyes. `sheet --at-marks`,
|
|
117
|
+
sampled at the beats. Recordings that describe their beats (`marks`) and
|
|
118
|
+
their waits (`settles.json`). `failure.png` and `failure.json` when a clip
|
|
119
|
+
breaks. `s.drag`. `cursorStart`. Bounds on a clip's length that the app
|
|
120
|
+
sets for review.
|
|
95
121
|
|
|
96
|
-
### Speed
|
|
122
|
+
### Speed (2026-09-21)
|
|
97
123
|
|
|
98
124
|
- Capture on change: a frame is photographed only when the page can have
|
|
99
|
-
changed
|
|
125
|
+
changed. That skips 81% to 95% of frames on the example app and leaves the
|
|
100
126
|
recording identical.
|
|
101
127
|
- `--draft`: fifteen frames a second at CSS scale, for looking at while
|
|
102
128
|
writing a clip.
|
|
103
129
|
- `record` prints where the time went.
|
|
104
130
|
|
|
105
|
-
### The package
|
|
131
|
+
### The package (2026-09-21)
|
|
106
132
|
|
|
107
133
|
- The recorder, extracted from the prototype it grew up in: a config
|
|
108
134
|
boundary (`defineRecorder`), the clip DSL, a renderer with presentation as
|