@kenkaiiii/ggcoder 5.66.4 → 5.67.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/assets/motion/bin/flash-check.mjs +314 -0
- package/assets/motion/references/motion-language.md +75 -37
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +19 -19
- package/assets/motion/references/runtime/minimal-composition.md +6 -0
- package/assets/motion/skills/brand-kit/SKILL.md +4 -3
- package/assets/motion/skills/motion/SKILL.md +91 -2
- package/assets/motion/skills/video-qa/SKILL.md +29 -8
- package/dist/core/agent-session.js +8 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autopilot-verdict.d.ts +5 -1
- package/dist/core/autopilot-verdict.js +30 -13
- package/dist/core/autopilot-verdict.js.map +1 -1
- package/dist/core/ken-context.d.ts +7 -5
- package/dist/core/ken-context.js +106 -16
- package/dist/core/ken-context.js.map +1 -1
- package/dist/core/ken-prompt.js +24 -21
- package/dist/core/ken-prompt.js.map +1 -1
- package/dist/motion-agent/motion-check-tool.js +67 -3
- package/dist/motion-agent/motion-check-tool.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +4 -4
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/package.json +4 -4
|
@@ -11,6 +11,91 @@ plan to record before building and the principles: read it before planning a
|
|
|
11
11
|
new video. Keep the work proportionate to the request: a copy edit does not
|
|
12
12
|
need a new plan.
|
|
13
13
|
|
|
14
|
+
## Ask first, in plain words
|
|
15
|
+
|
|
16
|
+
Most users aren't motion designers. They know where the video will be seen and
|
|
17
|
+
what it's for; they can't choose between easing curves or aspect ratios. A
|
|
18
|
+
question they can't answer is worse than none, and a guess they never see can't
|
|
19
|
+
be corrected.
|
|
20
|
+
|
|
21
|
+
**When to ask.** For a new video from an open prompt, ask once, before planning,
|
|
22
|
+
about what only the user knows and would be costly to change later: where it
|
|
23
|
+
will be watched (it sets shape, length and pace), whether it has music (the
|
|
24
|
+
timing is built on it) and, when the subject suggests they have some, material to
|
|
25
|
+
include. Ask about purpose, feeling or length only when nothing in the prompt
|
|
26
|
+
hints at it. Own everything else: look, colour, type, pacing, transitions.
|
|
27
|
+
|
|
28
|
+
- Skip anything the prompt, attachments, a brand kit, workspace preferences or
|
|
29
|
+
`frame.md` already answers. A detailed brief, a shot list or an edit gets no
|
|
30
|
+
questions.
|
|
31
|
+
- Use one `ask_user` card with at most three questions, each with a recommended
|
|
32
|
+
answer drawn from the prompt. Then build without further stops: this gathers
|
|
33
|
+
facts; it is not an approval step.
|
|
34
|
+
- If they have material to include, end the turn with one plain line asking them
|
|
35
|
+
to attach or paste it, and start when it arrives.
|
|
36
|
+
- Mid-build conflicts (a headline too long for a phone screen, a supplied font
|
|
37
|
+
that won't fit) follow the same rules: one plain line on the problem, your fix
|
|
38
|
+
as the recommended option.
|
|
39
|
+
- Flashing, unreadable text and invented facts are never options: fix them, or
|
|
40
|
+
ask for the missing fact.
|
|
41
|
+
|
|
42
|
+
**How to word it.** Ask about their world: "Where will people mostly watch
|
|
43
|
+
this?", not "9:16 or 16:9?"; "How should it feel?", not "Which register?".
|
|
44
|
+
Each option is an outcome they'd recognise, and its hint says what it means for
|
|
45
|
+
their video. Use reference points they know (TikTok, YouTube, "like a luxury
|
|
46
|
+
ad"). Keep craft terms out of questions, hints and messages: register, easing,
|
|
47
|
+
LUFS, safe zone, lower third, CTA, fps, kinetic type, loop seam. If one is
|
|
48
|
+
unavoidable, explain it in the same line. If the user writes in those terms,
|
|
49
|
+
answer in them.
|
|
50
|
+
|
|
51
|
+
**Starting wording.** Adapt it to the prompt and pick at most three.
|
|
52
|
+
|
|
53
|
+
1. "Where will people mostly watch this?"
|
|
54
|
+
- Scrolling on a phone: Tall video. Grabs attention right away and works with
|
|
55
|
+
the sound off.
|
|
56
|
+
- On a website or YouTube: Wide video. It can take its time; people usually
|
|
57
|
+
have sound on.
|
|
58
|
+
- Slides or a big screen: Wide, bold and easy to read from across a room.
|
|
59
|
+
- As a background loop: A calm, seamless loop for a website or display
|
|
60
|
+
screen. No sound needed.
|
|
61
|
+
- Sent to someone: A gift, birthday or memorial. Paced to feel personal, not
|
|
62
|
+
to grab attention.
|
|
63
|
+
2. "Should it have music?" GG's built-in tracks are all upbeat and cheerful.
|
|
64
|
+
When the subject needs another mood (calm, serious, tender, cinematic), make
|
|
65
|
+
the "yes" answer an original score composed for the video, so the choice of
|
|
66
|
+
music needs no second question.
|
|
67
|
+
- Yes, add music: I'll choose music that fits and time the video to it.
|
|
68
|
+
- No, keep it silent: Works anywhere, including feeds where most people watch
|
|
69
|
+
muted.
|
|
70
|
+
- I'll add music myself: Silent for now, with a steady rhythm so your music is
|
|
71
|
+
easy to add.
|
|
72
|
+
3. "Do you have anything it should include?" (pick any): My logo or colours ·
|
|
73
|
+
My photos or videos · Exact words or numbers · Nothing, start fresh
|
|
74
|
+
4. "What should people get from it?"
|
|
75
|
+
- Understand something: Explains an idea, a process or some numbers, step by
|
|
76
|
+
step.
|
|
77
|
+
- Want to buy or try it: Shows what it does for them and ends with one clear
|
|
78
|
+
next step.
|
|
79
|
+
- Hear some news: A launch, an event or a milestone.
|
|
80
|
+
- Feel something: A mood piece, celebration or tribute, led by feeling rather
|
|
81
|
+
than facts.
|
|
82
|
+
5. "How should it feel?"
|
|
83
|
+
- Calm and clear: Gentle movement and time to read. Nothing flashy.
|
|
84
|
+
- Bold and energetic: Quick cuts, big words, a strong beat.
|
|
85
|
+
- Playful: Bright and bouncy, with a bit of fun.
|
|
86
|
+
- Elegant: Slow, precise and spacious, like a luxury ad.
|
|
87
|
+
- Warm and personal: Soft and unhurried; lets photos and moments breathe.
|
|
88
|
+
- Serious and respectful: Restrained, for sensitive or factual subjects.
|
|
89
|
+
6. "How long should it be?"
|
|
90
|
+
- About 10 seconds: One idea, quick to watch.
|
|
91
|
+
- About 30 seconds: Room for a short story or a few points.
|
|
92
|
+
- About a minute: Room to explain something step by step.
|
|
93
|
+
|
|
94
|
+
Illustratively: "30-second vertical launch video for our app, upbeat, logo
|
|
95
|
+
attached" gets no questions. "Make a video for my bakery" gets where it will be
|
|
96
|
+
watched, music and material. "Make a video about black holes" gets where it will
|
|
97
|
+
be watched and how long; infer a curious, clear feel.
|
|
98
|
+
|
|
14
99
|
## Choose support only when needed
|
|
15
100
|
|
|
16
101
|
- `brand-kit`: create, update or apply a reusable brand identity.
|
|
@@ -30,14 +115,17 @@ Each video lives in its own workspace folder. Keep one compact `frame.md` beside
|
|
|
30
115
|
|
|
31
116
|
```text
|
|
32
117
|
Output: <duration, dimensions, fps, format>
|
|
118
|
+
Viewer: <where it's watched, sound, purpose; mark what you assumed>
|
|
33
119
|
Brand: <kit or supplied identity | none>
|
|
34
120
|
Sources: <paths/URLs used for facts or assets | none>
|
|
35
121
|
Overrides: <explicitly requested departures | none>
|
|
36
122
|
Limits: <missing/unsupported behaviour and verification status>
|
|
37
123
|
Concept: <the idea it demonstrates; the motif linking scenes>
|
|
38
|
-
Language: <palette roles, type roles, beat, arc, fps>
|
|
124
|
+
Language: <register, palette roles, type roles, beat, arc, fps>
|
|
39
125
|
```
|
|
40
126
|
|
|
127
|
+
Record the user's answers in `Viewer` so follow-ups don't ask again.
|
|
128
|
+
|
|
41
129
|
Reuse it for follow-ups. Do not create a director packet, storyboard, staged
|
|
42
130
|
approval files or a separate brand system. Preserve existing `DESIGN.md`, brief
|
|
43
131
|
or storyboard files if a legacy project has them.
|
|
@@ -84,6 +172,7 @@ them.
|
|
|
84
172
|
Fix concrete defects and render. For a targeted fix or small edit, spot-check
|
|
85
173
|
the changed moments first (`spot: true`), then run one full check on the export
|
|
86
174
|
you deliver. An unchanged export needs no repeated checking unless its hold plan
|
|
87
|
-
changed. Deliver
|
|
175
|
+
changed. Deliver as `video-qa` describes: reveal the MP4, write the delivery
|
|
176
|
+
message with real limits as your final message.
|
|
88
177
|
Sampled frames are not full playback or audio listening; technical success is
|
|
89
178
|
not proof of visual quality.
|
|
@@ -19,9 +19,9 @@ Call `motion_check` with:
|
|
|
19
19
|
- `range`: only for an export longer than 180 seconds or a targeted diagnostic, a start/end range of at most 180 seconds. Report the inspected range honestly; do not claim full-video visual coverage.
|
|
20
20
|
- `spot`: true for a quick check of a targeted fix or small edit. Put short `windows` around the moments you changed, at most 240 rendered frames in total (4 s at 60 fps). The layout check then covers every rendered frame inside them, far faster than the full check, while the pixel, hold and audio checks still cover the whole export. A spot result is never delivery verification: once it is clean, run the full check (without `spot`) once on the export you deliver.
|
|
21
21
|
|
|
22
|
-
The tool runs HyperFrames `check` (which already includes lint), decoded-pixel analysis with `motion-check.mjs` including canvas/WebGL, and audio analysis only when audio exists. It returns technical results and actual rendered overview, phone-size and consecutive-frame images **to you**, the working agent.
|
|
22
|
+
The tool runs HyperFrames `check` (which already includes lint), decoded-pixel analysis with `motion-check.mjs` including canvas/WebGL, a flash check of the whole export against the WCAG 2.3.1 limits, and audio analysis only when audio exists. It returns technical results and actual rendered overview, phone-size and consecutive-frame images **to you**, the working agent.
|
|
23
23
|
|
|
24
|
-
Do not precede or follow it with another lint/check/audio/frame-extraction checklist. Do not call the legacy `motion_review` prepare/submit workflow. No subagent, separate model critique, approval score or chapter registration is needed.
|
|
24
|
+
Do not precede or follow it with another lint/check/audio/frame-extraction checklist. Diagnosing a specific failure it reported, or looking at a few frames while building, is part of the work, not a second check. Do not call the legacy `motion_review` prepare/submit workflow. No subagent, separate model critique, approval score or chapter registration is needed.
|
|
25
25
|
|
|
26
26
|
## 2. Inspect what was returned
|
|
27
27
|
|
|
@@ -41,7 +41,9 @@ If the tool fails, its check details list each problem with where and when it oc
|
|
|
41
41
|
|
|
42
42
|
A failed check or visibly wrong output warrants a targeted fix, a new versioned render and a spot check of the fixed moments, then one full check once they are clean. An unchanged export does not need checking again unless you corrected its hold plan; that re-check reuses the passing source audit, so it is quick. Do not iterate toward subjective perfection or route the result to another reviewer. Report an unresolved blocker as draft/unverified rather than looping indefinitely or declaring success.
|
|
43
43
|
|
|
44
|
-
The tool measures audio and rejects non-finite levels or clipping; it does not normalize the file. Follow the user's delivery loudness target when they give one. Do not add audio to silent work or force every supplied animation through a generic -14 LUFS mix.
|
|
44
|
+
The tool measures audio, reports its integrated loudness and true peak, and rejects non-finite levels or clipping; it does not normalize the file. Follow the user's delivery loudness target when they give one. Do not add audio to silent work or force every supplied animation through a generic -14 LUFS mix.
|
|
45
|
+
|
|
46
|
+
A flash failure names when it happens and how fast. Retime or soften that moment: at most three light/dark or red swaps in any second, a smaller flashing area, or a smaller brightness difference. Never ship it, and never mark it as a hold to get past it.
|
|
45
47
|
|
|
46
48
|
### Intentional holds
|
|
47
49
|
|
|
@@ -59,10 +61,29 @@ When a hold is stale, the check lists where the pixels actually freeze; correct
|
|
|
59
61
|
|
|
60
62
|
## 4. Deliver
|
|
61
63
|
|
|
62
|
-
Deliver the actual versioned MP4,
|
|
64
|
+
Deliver the actual versioned MP4 in this order. The written message is what the user reads to understand what they got, so it is your final message: no `ask_user` card at delivery, which would come before the message and hide it.
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
```
|
|
66
|
+
1. Reveal the file:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
<node> "<motion bin>/reveal.mjs" renders/<file>.mp4
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. Write the delivery message as your final message, in plain words:
|
|
73
|
+
- One bold line on what they got, in their words: length, shape, where it fits, how it ends.
|
|
74
|
+
- One line on anything you assumed, so a wrong guess is easy to spot.
|
|
75
|
+
- What the checks mean for their viewers, never the standard or tool names; those stay in `frame.md`. Mention only checks that actually ran and passed.
|
|
76
|
+
- What couldn't be checked, plainly. Do not claim full playback or audio listening from sampled images.
|
|
77
|
+
- After a new video, one closing sentence naming the two or three changes they're most likely to want. Don't make them unasked.
|
|
78
|
+
|
|
79
|
+
Illustrative delivery message, to adapt rather than copy:
|
|
80
|
+
|
|
81
|
+
> **A 15-second tall video for Instagram, with upbeat music, ending on your logo.** I assumed it's for people who don't know the shop yet, so it leads with the bread rather than the name.
|
|
82
|
+
>
|
|
83
|
+
> It's safe for people sensitive to flashing lights, all the text fits on screen with enough contrast to read, and the sound stays clean at its loudest moments. I checked it frame by frame, but I can't watch it the way you will, so play it once on your phone before you share it.
|
|
84
|
+
>
|
|
85
|
+
> If you'd like, I can add your address and opening hours, use your real logo, or make a wide version for your website.
|
|
86
|
+
|
|
87
|
+
If they gave a loudness target, say whether it was met. Report what you designed for but no check measures, such as keeping text clear of Instagram's or TikTok's buttons, as your choice ("I kept the text clear of Instagram's buttons"), never as a check result. If something couldn't be checked: "I couldn't listen to the sound, so play it once on your phone first."
|
|
67
88
|
|
|
68
|
-
|
|
89
|
+
No automatic posters, share copy, extra formats or launch packages.
|
|
@@ -1157,7 +1157,14 @@ export class AgentSession {
|
|
|
1157
1157
|
if (call.sourceSnapshot === null)
|
|
1158
1158
|
this.verificationGate.requireFreshVerification(true, event.args.command);
|
|
1159
1159
|
}
|
|
1160
|
-
else
|
|
1160
|
+
else if ((classification.accepted && event.args.persist !== true) ||
|
|
1161
|
+
(!classification.accepted && classification.mayMutate)) {
|
|
1162
|
+
// Flag the workspace unknown only when tool_call_end can resolve
|
|
1163
|
+
// it: a bounded check records pass/fail, a file-rewriting command
|
|
1164
|
+
// bumps the revision. An unrecognized read-only check (`biome ci`)
|
|
1165
|
+
// or a persistent-shell run records nothing at the end, so
|
|
1166
|
+
// flagging it left verified work Unverified forever — and
|
|
1167
|
+
// autopilot silently refused every later turn.
|
|
1161
1168
|
this.verificationGate.requireFreshVerification(!classification.accepted && classification.mayMutate, event.args.command);
|
|
1162
1169
|
}
|
|
1163
1170
|
await this.persistVerificationState();
|