mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-10 17:59:43 +08:00
* fix(ci): resolve cross-platform test failures - Sanity check script (check-codex-global-state.sh) now falls back to grep -E when ripgrep is not available, fixing the codex-hooks sync test on all CI platforms. Patterns converted to POSIX ERE for portability. - Unicode safety test accepts both / and \ path separators so the executable-file assertion passes on Windows. - Gacha test sets PYTHONUTF8=1 so Python uses UTF-8 stdout encoding on Windows instead of cp1252, preventing UnicodeEncodeError on box-drawing characters. - Quoted-hook-path test skipped on Windows where NTFS disallows double-quote characters in filenames. * feat: port remotion-video-creation skill (29 rules), restore missing files New skill: - remotion-video-creation: 29 domain-specific Remotion rules covering 3D/Three.js, animations, audio, captions, charts, compositions, fonts, GIFs, Lottie, measuring, sequencing, tailwind, text animations, timing, transitions, trimming, and video embedding. Ported from personal skills. Restored: - autonomous-agent-harness/SKILL.md (was in commit but missing from worktree) - lead-intelligence/ (full directory restored from branch commit) Updated: - manifests/install-modules.json: added remotion-video-creation to media-generation - README.md + AGENTS.md: synced counts to 139 skills Catalog validates: 30 agents, 60 commands, 139 skills. * fix(security): pin MCP server versions, add dependabot, pin github-script SHA Critical: - Pin all npx -y MCP server packages to specific versions in .mcp.json to prevent supply chain attacks via version hijacking: - @modelcontextprotocol/server-github@2025.4.8 - @modelcontextprotocol/server-memory@2026.1.26 - @modelcontextprotocol/server-sequential-thinking@2025.12.18 - @playwright/mcp@0.0.69 (was 0.0.68) Medium: - Add .github/dependabot.yml for weekly npm + github-actions updates with grouped minor/patch PRs - Pin actions/github-script to SHA (was @v7 tag, now pinned to commit) * feat: add social-graph-ranker skill — weighted network proximity scoring New skill: social-graph-ranker - Weighted social graph traversal with exponential decay across hops - Bridge Score: B(m) = Σ w(t) · λ^(d(m,t)-1) ranks mutuals by target proximity - Extended Score incorporates 2nd-order network (mutual-of-mutual connections) - Final ranking includes engagement bonus for responsive connections - Runs in parallel with lead-intelligence skill for combined warm+cold outreach - Supports X API + LinkedIn CSV for graph harvesting - Outputs tiered action list: warm intros, direct outreach, network gap analysis Added to business-content install module. Catalog validates: 30/60/140. * fix(security): npm audit fix — resolve all dependency vulnerabilities Applied npm audit fix --force to resolve: - minimatch ReDoS (3 vulnerabilities, HIGH) - smol-toml DoS (MODERATE) - brace-expansion memory exhaustion (MODERATE) - markdownlint-cli upgraded from 0.47.0 to 0.48.0 npm audit now reports 0 vulnerabilities. * fix: resolve markdown lint and yarn lockfile sync - MD047: ensure single trailing newline on all remotion rule files - MD012: remove consecutive blank lines in lottie, measuring-dom-nodes, trimming - MD034: wrap bare URLs in angle brackets (tailwind, transcribe-captions) - yarn.lock: regenerated to sync with npm audit changes in package.json * fix: replace unicode arrows in lead-intelligence (CI unicode safety check)
109 lines
2.3 KiB
TypeScript
109 lines
2.3 KiB
TypeScript
import {loadFont} from '@remotion/google-fonts/Inter';
|
|
import React from 'react';
|
|
import {
|
|
AbsoluteFill,
|
|
spring,
|
|
useCurrentFrame,
|
|
useVideoConfig,
|
|
} from 'remotion';
|
|
|
|
/*
|
|
* Highlight a word in a sentence with a spring-animated wipe effect.
|
|
*/
|
|
|
|
// Ideal composition size: 1280x720
|
|
|
|
const COLOR_BG = '#ffffff';
|
|
const COLOR_TEXT = '#000000';
|
|
const COLOR_HIGHLIGHT = '#A7C7E7';
|
|
const FULL_TEXT = 'This is Remotion.';
|
|
const HIGHLIGHT_WORD = 'Remotion';
|
|
const FONT_SIZE = 72;
|
|
const FONT_WEIGHT = 700;
|
|
const HIGHLIGHT_START_FRAME = 30;
|
|
const HIGHLIGHT_WIPE_DURATION = 18;
|
|
|
|
const {fontFamily} = loadFont();
|
|
|
|
const Highlight: React.FC<{
|
|
word: string;
|
|
color: string;
|
|
delay: number;
|
|
durationInFrames: number;
|
|
}> = ({word, color, delay, durationInFrames}) => {
|
|
const frame = useCurrentFrame();
|
|
const {fps} = useVideoConfig();
|
|
|
|
const highlightProgress = spring({
|
|
fps,
|
|
frame,
|
|
config: {damping: 200},
|
|
delay,
|
|
durationInFrames,
|
|
});
|
|
const scaleX = Math.max(0, Math.min(1, highlightProgress));
|
|
|
|
return (
|
|
<span style={{position: 'relative', display: 'inline-block'}}>
|
|
<span
|
|
style={{
|
|
position: 'absolute',
|
|
left: 0,
|
|
right: 0,
|
|
top: '50%',
|
|
height: '1.05em',
|
|
transform: `translateY(-50%) scaleX(${scaleX})`,
|
|
transformOrigin: 'left center',
|
|
backgroundColor: color,
|
|
borderRadius: '0.18em',
|
|
zIndex: 0,
|
|
}}
|
|
/>
|
|
<span style={{position: 'relative', zIndex: 1}}>{word}</span>
|
|
</span>
|
|
);
|
|
};
|
|
|
|
export const MyAnimation = () => {
|
|
const highlightIndex = FULL_TEXT.indexOf(HIGHLIGHT_WORD);
|
|
const hasHighlight = highlightIndex >= 0;
|
|
const preText = hasHighlight ? FULL_TEXT.slice(0, highlightIndex) : FULL_TEXT;
|
|
const postText = hasHighlight
|
|
? FULL_TEXT.slice(highlightIndex + HIGHLIGHT_WORD.length)
|
|
: '';
|
|
|
|
return (
|
|
<AbsoluteFill
|
|
style={{
|
|
backgroundColor: COLOR_BG,
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
fontFamily,
|
|
}}
|
|
>
|
|
<div
|
|
style={{
|
|
color: COLOR_TEXT,
|
|
fontSize: FONT_SIZE,
|
|
fontWeight: FONT_WEIGHT,
|
|
}}
|
|
>
|
|
{hasHighlight ? (
|
|
<>
|
|
<span>{preText}</span>
|
|
<Highlight
|
|
word={HIGHLIGHT_WORD}
|
|
color={COLOR_HIGHLIGHT}
|
|
delay={HIGHLIGHT_START_FRAME}
|
|
durationInFrames={HIGHLIGHT_WIPE_DURATION}
|
|
/>
|
|
<span>{postText}</span>
|
|
</>
|
|
) : (
|
|
<span>{FULL_TEXT}</span>
|
|
)}
|
|
</div>
|
|
</AbsoluteFill>
|
|
);
|
|
};
|