takomi 2.1.39 → 2.1.41
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/.agents/plugins/marketplace.json +22 -22
- package/README.md +217 -422
- package/assets/.agent/skills/remotion/rules/assets/charts-bar-chart.tsx +173 -173
- package/assets/.agent/skills/remotion/rules/assets/text-animations-typewriter.tsx +100 -100
- package/assets/.agent/skills/remotion/rules/text-animations.md +20 -20
- package/assets/.agent/skills/remotion/rules/videos.md +171 -171
- package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -0
- package/assets/.agent/skills/takomi-flow/SKILL.md +244 -235
- package/docs/features/TakomiFlow_Portable_Plugin.md +82 -78
- package/docs/takomi-flow-onboarding.md +86 -76
- package/docs/takomi-flow-public-distribution.md +94 -94
- package/package.json +1 -1
- package/plugins/takomi-flow/.mcp.json +11 -11
- package/plugins/takomi-flow/assets/capabilities.json +203 -171
- package/plugins/takomi-flow/assets/collection.schema.json +29 -29
- package/plugins/takomi-flow/assets/examples.json +94 -94
- package/plugins/takomi-flow/assets/request.schema.json +91 -67
- package/plugins/takomi-flow/assets/result.schema.json +46 -45
- package/plugins/takomi-flow/assets/templates/image-request.json +17 -13
- package/plugins/takomi-flow/assets/templates/video-request.json +19 -15
- package/plugins/takomi-flow/package.json +38 -38
- package/plugins/takomi-flow/pnpm-lock.yaml +813 -813
- package/plugins/takomi-flow/references/flow-provider-contract.md +349 -326
- package/plugins/takomi-flow/scripts/lib/agent-plan.mjs +140 -130
- package/plugins/takomi-flow/scripts/lib/api.mjs +113 -113
- package/plugins/takomi-flow/scripts/lib/args.mjs +66 -57
- package/plugins/takomi-flow/scripts/lib/audit.mjs +65 -65
- package/plugins/takomi-flow/scripts/lib/browser.mjs +78 -39
- package/plugins/takomi-flow/scripts/lib/capabilities.mjs +11 -11
- package/plugins/takomi-flow/scripts/lib/collect.mjs +53 -53
- package/plugins/takomi-flow/scripts/lib/commands.mjs +192 -175
- package/plugins/takomi-flow/scripts/lib/doctor.mjs +77 -77
- package/plugins/takomi-flow/scripts/lib/examples.mjs +17 -17
- package/plugins/takomi-flow/scripts/lib/flow-media.mjs +39 -0
- package/plugins/takomi-flow/scripts/lib/flow-outcome.mjs +115 -90
- package/plugins/takomi-flow/scripts/lib/flow-project-session.mjs +153 -0
- package/plugins/takomi-flow/scripts/lib/flow-ui.mjs +204 -165
- package/plugins/takomi-flow/scripts/lib/generation.mjs +190 -90
- package/plugins/takomi-flow/scripts/lib/inspect.mjs +81 -81
- package/plugins/takomi-flow/scripts/lib/mcp-prompts.mjs +39 -39
- package/plugins/takomi-flow/scripts/lib/mcp-resources.mjs +16 -16
- package/plugins/takomi-flow/scripts/lib/mcp-tools.mjs +165 -150
- package/plugins/takomi-flow/scripts/lib/media.mjs +78 -78
- package/plugins/takomi-flow/scripts/lib/observe.mjs +54 -54
- package/plugins/takomi-flow/scripts/lib/paths.mjs +37 -37
- package/plugins/takomi-flow/scripts/lib/playwright-loader.mjs +23 -23
- package/plugins/takomi-flow/scripts/lib/prompts.mjs +72 -72
- package/plugins/takomi-flow/scripts/lib/report.mjs +141 -141
- package/plugins/takomi-flow/scripts/lib/request-validator.mjs +73 -58
- package/plugins/takomi-flow/scripts/lib/request.mjs +66 -55
- package/plugins/takomi-flow/scripts/lib/resource-files.mjs +69 -69
- package/plugins/takomi-flow/scripts/lib/result.mjs +31 -31
- package/plugins/takomi-flow/scripts/lib/review.mjs +44 -44
- package/plugins/takomi-flow/scripts/lib/selftest.mjs +153 -153
- package/plugins/takomi-flow/scripts/lib/settings-plan.mjs +44 -39
- package/plugins/takomi-flow/scripts/lib/templates.mjs +37 -37
- package/plugins/takomi-flow/scripts/lib/trusted-chrome.mjs +67 -67
- package/plugins/takomi-flow/scripts/lib/workflow.mjs +56 -56
- package/plugins/takomi-flow/scripts/mcp-server.mjs +18 -18
- package/plugins/takomi-flow/scripts/mcp-smoke.mjs +144 -142
- package/plugins/takomi-flow/scripts/takomi-flow.mjs +17 -17
- package/plugins/takomi-flow/skills/takomi-flow/SKILL.md +244 -235
- package/plugins/takomi-flow/skills/takomi-flow/agents/openai.yaml +7 -7
- package/scripts/install-takomi-flow.ps1 +85 -85
- package/src/skills-catalog.js +10 -9
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Anti-Patterns
|
|
2
|
+
|
|
3
|
+
Use this reference before and during review. If any anti-pattern appears, stop and correct it before calling the work complete.
|
|
4
|
+
|
|
5
|
+
## Anti-pattern 1: Pretty fake app screen
|
|
6
|
+
|
|
7
|
+
### Symptom
|
|
8
|
+
|
|
9
|
+
The composition creates custom JSX that resembles an existing app screen:
|
|
10
|
+
|
|
11
|
+
- handmade dashboard
|
|
12
|
+
- handmade form
|
|
13
|
+
- handmade table/grid
|
|
14
|
+
- handmade score sheet
|
|
15
|
+
- handmade sidebar/header
|
|
16
|
+
- handmade report card
|
|
17
|
+
|
|
18
|
+
### Why it is wrong
|
|
19
|
+
|
|
20
|
+
The video may look polished, but it no longer proves or showcases the real product UI. Future UI changes will not carry into the video, and the agent has violated the real-UI workflow.
|
|
21
|
+
|
|
22
|
+
### Correct response
|
|
23
|
+
|
|
24
|
+
Find the actual app component and import/extract it. Replace only data/runtime boundaries.
|
|
25
|
+
|
|
26
|
+
## Anti-pattern 2: Existing component ignored
|
|
27
|
+
|
|
28
|
+
### Symptom
|
|
29
|
+
|
|
30
|
+
The codebase has components like:
|
|
31
|
+
|
|
32
|
+
```txt
|
|
33
|
+
SelectionBar
|
|
34
|
+
RosterGrid
|
|
35
|
+
SaveActionBar
|
|
36
|
+
ReportPreview
|
|
37
|
+
WorkspaceShell
|
|
38
|
+
SettingsForm
|
|
39
|
+
BillingTable
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
But the Remotion composition builds similar JSX itself.
|
|
43
|
+
|
|
44
|
+
### Correct response
|
|
45
|
+
|
|
46
|
+
Use the existing components. If they are not exportable, export them or extract a presentational view.
|
|
47
|
+
|
|
48
|
+
## Anti-pattern 3: Semantic targets without semantic measurement
|
|
49
|
+
|
|
50
|
+
### Symptom
|
|
51
|
+
|
|
52
|
+
The agent adds `data-video-target`, but cursor/touch positions still come from hardcoded coordinates.
|
|
53
|
+
|
|
54
|
+
### Correct response
|
|
55
|
+
|
|
56
|
+
Measure the target with `getBoundingClientRect()`, normalize to composition coordinates, and use fallback coordinates only when measurement is unavailable.
|
|
57
|
+
|
|
58
|
+
## Anti-pattern 4: Raw bounding rect coordinates
|
|
59
|
+
|
|
60
|
+
### Symptom
|
|
61
|
+
|
|
62
|
+
The code uses:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
x: targetRect.left - rootRect.left
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
without compensating for Remotion Studio scaling.
|
|
69
|
+
|
|
70
|
+
### Correct response
|
|
71
|
+
|
|
72
|
+
Use composition width/height from `useVideoConfig()`:
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
const scaleX = rootRect.width / compositionWidth;
|
|
76
|
+
const scaleY = rootRect.height / compositionHeight;
|
|
77
|
+
|
|
78
|
+
x = (targetRect.left - rootRect.left) / scaleX;
|
|
79
|
+
y = (targetRect.top - rootRect.top) / scaleY;
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Anti-pattern 5: CSS transitions on frame-driven motion
|
|
83
|
+
|
|
84
|
+
### Symptom
|
|
85
|
+
|
|
86
|
+
Frame-driven scroll/camera transforms use CSS `transition`.
|
|
87
|
+
|
|
88
|
+
### Why it is wrong
|
|
89
|
+
|
|
90
|
+
The browser interpolates while Remotion samples exact frames, causing jitter or stutter.
|
|
91
|
+
|
|
92
|
+
### Correct response
|
|
93
|
+
|
|
94
|
+
Use deterministic frame values only, e.g. `translate3d(...)`, and no CSS transition.
|
|
95
|
+
|
|
96
|
+
## Anti-pattern 6: Registered but not renderable
|
|
97
|
+
|
|
98
|
+
### Symptom
|
|
99
|
+
|
|
100
|
+
A composition is registered, but there are no scripts/commands for stills, debug stills, or final video.
|
|
101
|
+
|
|
102
|
+
### Correct response
|
|
103
|
+
|
|
104
|
+
Add or document render commands before calling the work done.
|
|
105
|
+
|
|
106
|
+
## Anti-pattern 7: Unreviewed production edits
|
|
107
|
+
|
|
108
|
+
### Symptom
|
|
109
|
+
|
|
110
|
+
Shared/production components are changed to satisfy Remotion, but no one checks whether live behavior changed.
|
|
111
|
+
|
|
112
|
+
### Correct response
|
|
113
|
+
|
|
114
|
+
Review every production edit. Prefer additive props, `data-video-target`, exports, or presentational extraction. Avoid changing live auth/data/routing/import behavior unless deliberately required.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Completion Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before saying a Remotion real-UI video task is complete.
|
|
4
|
+
|
|
5
|
+
## Pre-implementation report
|
|
6
|
+
|
|
7
|
+
- [ ] Listed real UI source files for every app-screen scene.
|
|
8
|
+
- [ ] Listed real components imported or extracted.
|
|
9
|
+
- [ ] Listed runtime/data/provider boundaries replaced with demo/local equivalents.
|
|
10
|
+
- [ ] Identified which scenes are marketing overlays only.
|
|
11
|
+
- [ ] Asked the user before creating any video-only mockup of an existing app screen.
|
|
12
|
+
|
|
13
|
+
## Real UI compliance
|
|
14
|
+
|
|
15
|
+
For each app-screen scene:
|
|
16
|
+
|
|
17
|
+
- [ ] Scene imports/extracts real app UI components.
|
|
18
|
+
- [ ] Scene does not hand-build a lookalike dashboard/form/table/screen.
|
|
19
|
+
- [ ] Demo data enters through props/providers/boundaries, not by rewriting visual JSX.
|
|
20
|
+
- [ ] Any production/shared component changes are additive and low-risk.
|
|
21
|
+
|
|
22
|
+
## Timeline and interaction compliance
|
|
23
|
+
|
|
24
|
+
- [ ] Interactions are centralized in a timeline/action object.
|
|
25
|
+
- [ ] Every action has `targetId`, fallback coordinates, `downFrame`, `upFrame`, and `commitFrame`.
|
|
26
|
+
- [ ] UI/route/data changes happen at `commitFrame`, after click/tap release.
|
|
27
|
+
- [ ] Desktop uses cursor indicators; mobile uses touch indicators.
|
|
28
|
+
- [ ] Mobile scroll is frame-driven and deterministic, with no CSS transitions.
|
|
29
|
+
|
|
30
|
+
## Target measurement compliance
|
|
31
|
+
|
|
32
|
+
- [ ] Click/tap targets use `data-video-target`.
|
|
33
|
+
- [ ] DOM measurements use `getBoundingClientRect()`.
|
|
34
|
+
- [ ] Measurements are normalized from viewport/Studio-scaled pixels into composition coordinates.
|
|
35
|
+
- [ ] Debug overlays use the same normalized coordinate space as the cursor/touch indicator.
|
|
36
|
+
- [ ] Fallback hardcoded coordinates are used only if measurement is unavailable.
|
|
37
|
+
|
|
38
|
+
## Render and artifact compliance
|
|
39
|
+
|
|
40
|
+
- [ ] Final composition canvas uses full HD by default: 1920×1080 for landscape or 1080×1920 for portrait/mobile, unless the user explicitly requested a smaller/different size.
|
|
41
|
+
- [ ] Typechecked every touched package.
|
|
42
|
+
- [ ] Rendered stills at key scene/action frames.
|
|
43
|
+
- [ ] Rendered at least one debug-overlay still per composition.
|
|
44
|
+
- [ ] Added or documented still/debug/final video render commands.
|
|
45
|
+
- [ ] Rendered final video artifact unless user requested stills only.
|
|
46
|
+
- [ ] Compared output scene-by-scene against the user's script.
|
|
47
|
+
- [ ] Checked that UI is not cramped, clipped, or too small on the chosen canvas.
|
|
48
|
+
|
|
49
|
+
## Required final report
|
|
50
|
+
|
|
51
|
+
When reporting completion, include:
|
|
52
|
+
|
|
53
|
+
```txt
|
|
54
|
+
Real UI reused:
|
|
55
|
+
- Scene <n>: <component> from <path>
|
|
56
|
+
|
|
57
|
+
Demo boundaries:
|
|
58
|
+
- <boundary>: <demo/local replacement>
|
|
59
|
+
|
|
60
|
+
Verification:
|
|
61
|
+
- typecheck command(s)
|
|
62
|
+
- still/debug artifact(s)
|
|
63
|
+
- final video artifact
|
|
64
|
+
|
|
65
|
+
Known gaps:
|
|
66
|
+
- <none or explicit caveat>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Golden task mental test
|
|
70
|
+
|
|
71
|
+
Before implementation, ask:
|
|
72
|
+
|
|
73
|
+
> If the product team changes the real app screen tomorrow, would this video scene naturally inherit that change?
|
|
74
|
+
|
|
75
|
+
If the answer is no because the screen was recreated in Remotion, the implementation has failed this skill unless the user explicitly requested a mockup/redesign.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Real UI Bridge Reference
|
|
2
|
+
|
|
3
|
+
Use this reference when implementing a Remotion composition for an existing app screen.
|
|
4
|
+
|
|
5
|
+
## Required pattern
|
|
6
|
+
|
|
7
|
+
```txt
|
|
8
|
+
Existing app route/page
|
|
9
|
+
-> live container/hooks/providers
|
|
10
|
+
-> RealFeatureView props
|
|
11
|
+
|
|
12
|
+
Remotion composition
|
|
13
|
+
-> imports RealFeatureView
|
|
14
|
+
-> supplies deterministic demo props
|
|
15
|
+
-> drives route/state from timeline commit frames
|
|
16
|
+
-> overlays cursor/touch/highlights around the real UI
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Good example shape
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
// app/admin/scores/page.tsx
|
|
23
|
+
export default function ScoresPage() {
|
|
24
|
+
const session = useLiveSession();
|
|
25
|
+
const data = useScoresQuery(session.schoolId);
|
|
26
|
+
return <ScoresWorkspaceView data={data} onSave={saveScores} />;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// app/admin/scores/ScoresWorkspaceView.tsx
|
|
30
|
+
export function ScoresWorkspaceView({ data, onSave }: Props) {
|
|
31
|
+
return (
|
|
32
|
+
<WorkspaceShell>
|
|
33
|
+
<ScoreSelector value={data.selection} />
|
|
34
|
+
<ScoreGrid rows={data.rows} onSave={onSave} />
|
|
35
|
+
<PreviewAction />
|
|
36
|
+
</WorkspaceShell>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// remotion/compositions/ScoresDemo.tsx
|
|
41
|
+
export function ScoresDemo() {
|
|
42
|
+
const frame = useCurrentFrame();
|
|
43
|
+
const scene = getScene(frame);
|
|
44
|
+
return (
|
|
45
|
+
<AbsoluteFill data-video-coordinate-root>
|
|
46
|
+
<ScoresWorkspaceView
|
|
47
|
+
data={getDemoScoresData(scene)}
|
|
48
|
+
onSave={() => undefined}
|
|
49
|
+
/>
|
|
50
|
+
<TimelineCursor />
|
|
51
|
+
</AbsoluteFill>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Bad example shape
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
// remotion/compositions/ScoresDemo.tsx
|
|
60
|
+
// BAD: This redraws the app screen from scratch even though real components exist.
|
|
61
|
+
function FakeScoreGrid() {
|
|
62
|
+
return <table>{/* handmade lookalike rows */}</table>;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This is unacceptable unless the user explicitly approved a video-only mockup/redesign after being told real UI reuse is not being attempted.
|
|
67
|
+
|
|
68
|
+
## Refactor rule
|
|
69
|
+
|
|
70
|
+
If the real screen is coupled to live hooks/auth/API calls, do not clone the JSX. Extract a presentational view:
|
|
71
|
+
|
|
72
|
+
```txt
|
|
73
|
+
Before:
|
|
74
|
+
ScoresPage contains hooks + full JSX
|
|
75
|
+
|
|
76
|
+
After:
|
|
77
|
+
ScoresPage contains hooks and passes props
|
|
78
|
+
ScoresWorkspaceView contains the existing JSX
|
|
79
|
+
Remotion imports ScoresWorkspaceView
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Marketing overlay rule
|
|
83
|
+
|
|
84
|
+
New Remotion-only JSX is allowed for:
|
|
85
|
+
|
|
86
|
+
- hook cards
|
|
87
|
+
- captions
|
|
88
|
+
- CTA/end cards
|
|
89
|
+
- spotlights/highlights
|
|
90
|
+
- cursor/touch indicators
|
|
91
|
+
- camera masks/backgrounds
|
|
92
|
+
|
|
93
|
+
It is not allowed for replacing existing app screens.
|