

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
12345678910111213141516# Strict TypeScript: DuckPlayer1718## Task1920Fix all strict-mode TypeScript errors in 9 DuckPlayer files and add them to `CORE_FILES`.2122## Branch2324```25git checkout main && git pull origin main && git checkout -b cursor/strict/duckplayer26```2728## Files (41 errors total)2930### `injected/src/features/duck-player.js` (1 error)31```32(63,10): error TS7006: Parameter 'args' implicitly has an 'any' type.33```3435### `injected/src/features/duckplayer/components/ddg-video-drawer-mobile.js` (3 errors)36```37(31,5): error TS2564: Property 'container' has no initializer.38(33,5): error TS2564: Property 'drawer' has no initializer.39(35,5): error TS2564: Property 'overlay' has no initializer.40```4142### `injected/src/features/duckplayer/components/ddg-video-overlay.js` (2 errors)43```44(121,32): error TS7006: Parameter 'e' implicitly has an 'any' type.45(128,39): error TS7006: Parameter 'e' implicitly has an 'any' type.46```4748### `injected/src/features/duckplayer/environment.js` (2 errors)49```50(53,26): error TS7006: Parameter 'videoId' implicitly has an 'any' type.51(58,13): error TS7006: Parameter 'href' implicitly has an 'any' type.52```5354### `injected/src/features/duckplayer/icon-overlay.js` (10 errors)55```56(76,47): error TS2339: Property 'top' does not exist on type 'Object'.57(76,91): error TS2339: Property 'left' does not exist on type 'Object'.58(135,22): error TS7006: Parameter 'event' implicitly has an 'any' type.59(135,29): error TS7006: Parameter 'force' implicitly has an 'any' type.60(227,22): error TS7006: Parameter 'videoElement' implicitly has an 'any' type.61(231,13): error TS7053: Element implicitly has an 'any' type (number index on {}).62(236,30): error TS7006: Parameter 'width' implicitly has an 'any' type.63(236,37): error TS7006: Parameter 'height' implicitly has an 'any' type.64(247,28): error TS7053: Element implicitly has an 'any' type (number index on {}).65(247,68): error TS7053: Element implicitly has an 'any' type (number index on {}).66```6768### `injected/src/features/duckplayer/overlay-messages.js` (4 errors)69```70(89,64): error TS2345: Argument of type '(userValues: UserValues) => void' is not assignable to parameter of type '(value: unknown) => void'.71(97,62): error TS2345: Argument of type '(userValues: UISettings) => void' is not assignable to parameter of type '(value: unknown) => void'.72(104,26): error TS7006: Parameter 'kind' implicitly has an 'any' type.73(104,32): error TS7006: Parameter 'data' implicitly has an 'any' type.74```7576### `injected/src/features/duckplayer/thumbnails.js` (5 errors)77```78(105,35): error TS7006: Parameter 'e' implicitly has an 'any' type.79(129,36): error TS7006: Parameter 'element' implicitly has an 'any' type.80(136,39): error TS7006: Parameter 'e' implicitly has an 'any' type.81(203,35): error TS7006: Parameter 'e' implicitly has an 'any' type.82(207,32): error TS7006: Parameter 'href' implicitly has an 'any' type.83```8485### `injected/src/features/duckplayer/util.js` (10 errors)86```87(210,25): error TS7006: Parameter 'pathname' implicitly has an 'any' type.88(227,21): error TS7006: Parameter 'href' implicitly has an 'any' type.89(268,5): error TS7008: Member 'loadedCallbacks' implicitly has an 'any[]' type.90(276,14): error TS7006: Parameter 'loadedCallback' implicitly has an 'any' type.91(301,11): error TS7019: Rest parameter 'args' implicitly has an 'any[]' type.92(305,10): error TS7019: Rest parameter 'args' implicitly has an 'any[]' type.93(309,9): error TS7019: Rest parameter 'args' implicitly has an 'any[]' type.94(313,10): error TS7019: Rest parameter 'args' implicitly has an 'any[]' type.95(317,12): error TS7006: Parameter 'handler' implicitly has an 'any' type.96(317,21): error TS7006: Parameter 'args' implicitly has an 'any' type.97```9899### `injected/src/features/duckplayer/video-overlay.js` (4 errors)100```101(256,18): error TS2769: No overload matches this call.102(259,18): error TS2769: No overload matches this call.103(291,24): error TS2769: No overload matches this call.104(300,24): error TS2769: No overload matches this call.105```106107## Fix Patterns108109- **TS7006/TS7019** (Parameter/rest implicitly any): Add `@param` JSDoc. For rest params: `@param {...unknown[]} args`.110- **TS2564** (No initializer): Add definite assignment assertion `!` or initialize in declaration.111- **TS2339** (Property on Object): Cast param to proper shape or define `@typedef`.112- **TS7053** (Index signature): Cast objects to `Record<number, X>` or use proper array types.113- **TS2345** (subscribe callback type): The subscribe API expects `(value: unknown) => void`. Either cast the callback or add a type guard inside.114- **TS2769** (No overload matches): Check addEventListener/removeEventListener calls — likely need to narrow the event type string or cast.115- **TS7008** (Member implicitly any): Add `@type` annotation to class member.116117## Workflow1181191. `npm ci`1202. Add all 9 files to CORE_FILES in `scripts/check-strict-core.js`1213. Fix each file's errors1224. `npm run tsc-strict-core` — must pass1235. `npm run test-unit` — must pass1246. `npm run lint` — must pass (run `npm run lint-fix` first if needed)1257. Commit: `fix(types): add strict checking for duckplayer files`1268. `git push -u origin cursor/strict/duckplayer`127128## Constraints129130- Do NOT use `any` — use `unknown`, specific types, or proper interfaces131- Do NOT use `@ts-ignore` or `@ts-expect-error`132- Do NOT modify files outside the assigned list (except `scripts/check-strict-core.js`)133- Do NOT remove existing CORE_FILES entries134- Preserve existing behavior — type fixes only, no logic changes135
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| duckduckgo/content-scope-scriptstypes-generator/AGENTS.md · 70 | AGENTS.md | testarchtypesdo-not | 73/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-broker-protection-actions.mdc · 70 | Cursor rules | buildteststyletypes+4 | 93/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-broker-protection-rest.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-click-to-load.mdc · 70 | Cursor rules | teststyletypesgit+2 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-detectors.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-duckplayer-native.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-fingerprinting.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-message-bridge.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-standalone-features-a.mdc · 70 | Cursor rules | teststyletypesgit+4 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-standalone-features-b.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-standalone-features-c.mdc · 70 | Cursor rules | teststyletypesgit+4 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-web-compat-and-telemetry.mdc · 70 | Cursor rules | teststyletypesgit+3 | 89/100 | 14 days ago | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-zero-errors-batch.mdc · 70 | Cursor rules | testtypesgitdo-not+1 | 81/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsAGENTS.md · 70 | AGENTS.md | buildtestlint-formatstyle+5 | 83/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsinjected/AGENTS.md · 70 | AGENTS.md | buildteststylearch+2 | 92/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsmessaging/AGENTS.md · 70 | AGENTS.md | testarchtesting-strategyapi | 66/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| bybren-llc/safe-agentic-workflow.cursor/rules/10-backend-python.mdc · 399 | Cursor rules | testlint-formatstylegit+4 | 97/100 | today |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/duckduckgo-content-scope-scripts-cursor-rules-strict-duckplayer)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.