loop-benchmarking

Controlled experiments across agentic coding configurations. Same task, one variable, what actually works.
git clone https://git.shiptheloop.com/loop-benchmarking.git
Log | Files | Refs | README

commit 1a2c295ec63ca714cee731ee809b08a5e795a027
parent 8f52d64f701bcfb3345b4eb50f9039c4e468f460
Author: Brian Graham <brian@buildingbetterteams.de>
Date:   Tue,  7 Apr 2026 01:36:49 +0200

Checkpoint: 20 runs (377 total)

Diffstat:
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package-lock.json | 2270+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package.json | 20++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/tetris.spec.ts | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/tetris.spec.ts | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package-lock.json | 2270+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package.json | 20++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/tetris.spec.ts | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/tetris.spec.ts | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package-lock.json | 2270+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package.json | 20++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/tetris.spec.ts | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/tetris.spec.ts | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package-lock.json | 2270+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package.json | 20++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/tetris.spec.ts | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/tetris.spec.ts | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package-lock.json | 2270+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package.json | 20++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/tetris.spec.ts | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/playwright.config.ts | 13+++++++++++++
Aartifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/tetris.spec.ts | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mresults/analysis/main_effects_build_quality.json | 246++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_code_quality.json | 250++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_cost.json | 300++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_gameplay.json | 252++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_score.json | 266++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_sonarqube.json | 268++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_structural.json | 258++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_transcript.json | 234++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_turns.json | 266++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/analysis/main_effects_wall_time.json | 256++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mresults/index.jsonl | 5+++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_output.json | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_stderr.log | 0
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/eval_results.json | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/meta.json | 41+++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/transcript.jsonl | 15+++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_output.json | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_stderr.log | 0
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/eval_results.json | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/meta.json | 41+++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/transcript.jsonl | 15+++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/claude_stderr.log | 0
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/meta.json | 38++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/transcript.jsonl | 9+++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=off_web=on_run1/meta.json | 38++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/claude_output.json | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/meta.json | 5++++-
Mresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/transcript.jsonl | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_output.json | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_stderr.log | 0
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/eval_results.json | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/meta.json | 5++++-
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/transcript.jsonl | 15+++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_output.json | 2++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_stderr.log | 0
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/meta.json | 41+++++++++++++++++++++++++++++++++++++++++
Aresults/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/transcript.jsonl | 15+++++++++++++++
69 files changed, 16696 insertions(+), 1300 deletions(-)

diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package-lock.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package-lock.json @@ -0,0 +1,2270 @@ +{ + "name": "loop-bench-xnyv85cl", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loop-bench-xnyv85cl", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", + "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.4", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", + "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", + "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", + "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", + "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jscpd/badge-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", + "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "badgen": "^3.2.3", + "colors": "^1.4.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@jscpd/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", + "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@jscpd/finder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", + "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "blamer": "^1.0.6", + "bytes": "^3.1.2", + "cli-table3": "^0.6.5", + "colors": "^1.4.0", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "markdown-table": "^2.0.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/html-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", + "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "1.4.0", + "fs-extra": "^11.2.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/tokenizer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", + "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "reprism": "^0.0.11", + "spark-md5": "^3.0.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/badgen": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", + "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/blamer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", + "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.4 <5 || >=6.9" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jscpd": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", + "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/badge-reporter": "4.0.4", + "@jscpd/core": "4.0.4", + "@jscpd/finder": "4.0.4", + "@jscpd/html-reporter": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "colors": "^1.4.0", + "commander": "^5.0.0", + "fs-extra": "^11.2.0", + "gitignore-to-glob": "^0.3.0", + "jscpd-sarif-reporter": "4.0.6" + }, + "bin": { + "jscpd": "bin/jscpd" + } + }, + "node_modules/jscpd-sarif-reporter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", + "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^11.2.0", + "node-sarif-builder": "^3.4.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reprism": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", + "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/package.json @@ -0,0 +1,20 @@ +{ + "name": "loop-bench-xnyv85cl", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 30_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-few/tetris.spec.ts @@ -0,0 +1,96 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + }); + + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Give the page a moment to finish initializing + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); + }); + + test("game board is visible", async ({ page }) => { + // A Tetris game should render either a <canvas> or a grid of DOM elements + const canvas = page.locator("canvas"); + const gridContainer = page.locator( + [ + '[class*="board"]', + '[class*="grid"]', + '[class*="game"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); + + const canvasCount = await canvas.count(); + const gridCount = await gridContainer.count(); + + expect( + canvasCount + gridCount, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + }); + + test("keyboard input does not crash the game", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Press every key a Tetris game should handle + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + for (const key of keys) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + } + + expect(errors).toEqual([]); + }); + + test("game state changes over time", async ({ page }) => { + // If the game is running, the visual output should change as pieces fall + const shot1 = await page.screenshot(); + await page.waitForTimeout(3000); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the page to visually change over 3 seconds (pieces should be falling)" + ).toBe(false); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/tests-full/tetris.spec.ts @@ -0,0 +1,474 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +// Find the game surface: canvas or a grid-like DOM container. +function gameBoard(page: Page) { + return page.locator( + [ + "canvas", + '[class*="board"]', + '[class*="grid"]', + '[class*="game-area"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); +} + +// Click the board area to make sure it has focus, then try common +// start interactions in case the game waits for user action. +async function ensureGameStarted(page: Page) { + const board = gameBoard(page); + const count = await board.count(); + if (count > 0) { + try { + await board.first().click({ timeout: 2000 }); + } catch { + // click failed, continue anyway + } + } + + // Some games need a key press or button click to start + const startButton = page.locator( + 'button:has-text("start"), button:has-text("Start"), button:has-text("play"), button:has-text("Play"), [class*="start"], [id*="start"]' + ); + if ((await startButton.count()) > 0) { + try { + await startButton.first().click({ timeout: 2000 }); + } catch { + // ignore + } + } + + // Press Enter/Space as a fallback start trigger + await page.keyboard.press("Enter"); + await page.waitForTimeout(300); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + await page.waitForTimeout(1000); + await ensureGameStarted(page); + }); + + // ---- 1. Page loads without errors ---- + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + await page.waitForTimeout(2000); + expect(errors).toEqual([]); + }); + + // ---- 2. Game board is visible ---- + test("game board is visible", async ({ page }) => { + const board = gameBoard(page); + const count = await board.count(); + + expect( + count, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + + // The board element should have meaningful dimensions + const box = await board.first().boundingBox(); + expect(box, "Game board should be visible on screen").not.toBeNull(); + expect(box!.width).toBeGreaterThan(50); + expect(box!.height).toBeGreaterThan(50); + }); + + // ---- 3. Game starts automatically or via interaction ---- + test("game starts", async ({ page }) => { + // After beforeEach, the game should be running. Verify by checking that + // the page is not static: take two screenshots separated by time. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the game to show visual activity after starting" + ).toBe(false); + }); + + // ---- 4. Piece falls automatically (auto-drop) ---- + test("piece falls automatically", async ({ page }) => { + // Take screenshots at intervals without pressing any keys. + // A falling piece should cause visual changes. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot3 = await page.screenshot(); + + const buf1 = Buffer.from(shot1); + const buf2 = Buffer.from(shot2); + const buf3 = Buffer.from(shot3); + + // At least one pair should differ (piece is moving down) + const changed = !buf1.equals(buf2) || !buf2.equals(buf3); + expect(changed, "Expected piece to fall over time without input").toBe( + true + ); + }); + + // ---- 5. Left arrow moves piece left ---- + test("left arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + // The piece should have moved, so the screenshots should differ + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing left arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 6. Right arrow moves piece right ---- + test("right arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing right arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 7. Down arrow moves piece down faster ---- + test("down arrow accelerates piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + for (let i = 0; i < 10; i++) { + await page.keyboard.press("ArrowDown"); + await page.waitForTimeout(50); + } + await page.waitForTimeout(200); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing down arrow repeatedly" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 8. Up arrow (or Z) rotates piece ---- + test("rotation changes the piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowUp"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing rotate key" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 9. Space bar hard-drops piece ---- + test("space bar hard-drops piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing space (hard drop)" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 10. Pieces lock at the bottom ---- + test("pieces lock at the bottom", async ({ page }) => { + // Hard-drop several pieces and check that the bottom of the board + // accumulates filled cells (the visual should change cumulatively). + const shots: Buffer[] = []; + + shots.push(Buffer.from(await page.screenshot())); + + for (let i = 0; i < 3; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(800); + } + + shots.push(Buffer.from(await page.screenshot())); + + // After 3 hard drops, the board should look different from the start + // because pieces have stacked up at the bottom. + expect( + shots[0].equals(shots[1]), + "Expected pieces to stack up at the bottom after hard drops" + ).toBe(false); + }); + + // ---- 11. New piece spawns after lock ---- + test("new piece spawns after locking", async ({ page }) => { + // Hard-drop to lock a piece, then wait and verify the game is still + // showing activity (a new piece should be falling). + await page.keyboard.press("Space"); + await page.waitForTimeout(1000); + + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + + // If a new piece spawned and is falling, the screen should change + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected a new piece to spawn and fall after the previous one locked" + ).toBe(false); + }); + + // ---- 12. Multiple different pieces appear ---- + test("multiple different pieces appear", async ({ page }) => { + // Play through several pieces and capture screenshots. Different piece + // shapes should produce visually distinct patterns. + const shots: Buffer[] = []; + + for (let i = 0; i < 6; i++) { + // Move each piece to a different column so they don't overlap identically + if (i % 2 === 0) { + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + } else { + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(600); + shots.push(Buffer.from(await page.screenshot())); + } + + // At least some consecutive screenshots should differ (different piece shapes) + let differences = 0; + for (let i = 1; i < shots.length; i++) { + if (!shots[i - 1].equals(shots[i])) differences++; + } + + expect( + differences, + "Expected to see visual differences between consecutive pieces (different shapes)" + ).toBeGreaterThanOrEqual(2); + }); + + // ---- 13. Completed line clears ---- + test("completed line clears", async ({ page }) => { + // Fill a row by dropping many pieces. Observe whether any row disappears. + // We can detect this by tracking the total filled area -- after a line clear, + // the board should have less filled content than just before the clear. + const pageText = async () => + (await page.evaluate(() => document.body.innerText)) || ""; + + // Drop many pieces rapidly to fill rows + for (let i = 0; i < 30; i++) { + // Vary positions to try to complete a row + const moves = (i % 5) - 2; // -2, -1, 0, 1, 2 + for (let m = 0; m < Math.abs(moves); m++) { + await page.keyboard.press( + moves < 0 ? "ArrowLeft" : "ArrowRight" + ); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + // Check if a score or lines counter changed (common indicators of line clears) + const text = await pageText(); + const numbers = (text.match(/\d+/g) || []).map(Number); + const hasNonZero = numbers.some((n) => n > 0); + + // Also check visual: the board should not be completely static + const shot1 = await page.screenshot(); + await page.waitForTimeout(1000); + const shot2 = await page.screenshot(); + + // Either: score/lines increased, or game is still active (meaning lines cleared + // and made room for more pieces instead of game over) + const stillActive = !Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + hasNonZero || stillActive, + "Expected evidence of line clearing (score > 0 or game still active after many drops)" + ).toBe(true); + }); + + // ---- 14. Score increases during play ---- + test("score increases during play", async ({ page }) => { + // Look for a score display on the page + const getNumbers = async () => { + const text = (await page.evaluate(() => document.body.innerText)) || ""; + return (text.match(/\d+/g) || []).map(Number); + }; + + const numbersBefore = await getNumbers(); + + // Play for a while: drop several pieces + for (let i = 0; i < 15; i++) { + const offset = (i % 5) - 2; + for (let m = 0; m < Math.abs(offset); m++) { + await page.keyboard.press(offset < 0 ? "ArrowLeft" : "ArrowRight"); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + const numbersAfter = await getNumbers(); + + // At least one number on the page should have increased + // (score, lines counter, level, etc.) + let anyIncreased = false; + const maxLen = Math.min(numbersBefore.length, numbersAfter.length); + for (let i = 0; i < maxLen; i++) { + if (numbersAfter[i] > numbersBefore[i]) { + anyIncreased = true; + break; + } + } + + // Also accept if new numbers appeared + if (!anyIncreased && numbersAfter.length > numbersBefore.length) { + anyIncreased = true; + } + + // Also accept if the max number increased + if (!anyIncreased) { + const maxBefore = numbersBefore.length > 0 ? Math.max(...numbersBefore) : 0; + const maxAfter = numbersAfter.length > 0 ? Math.max(...numbersAfter) : 0; + if (maxAfter > maxBefore) anyIncreased = true; + } + + expect( + anyIncreased, + "Expected at least one numeric value on the page to increase during play (score, lines, level)" + ).toBe(true); + }); + + // ---- 15. Game over when pieces reach top ---- + test("game over when pieces reach top", async ({ page }) => { + // Stack pieces in the center until the game ends. + // Drop as many pieces as possible straight down. + for (let i = 0; i < 50; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(200); + } + + await page.waitForTimeout(2000); + + // After stacking to overflow, the game should show some game-over indicator: + // - text saying "game over", "you lose", "try again", "restart", "end" + // - or the game stops updating (static screen) + const text = ((await page.evaluate(() => document.body.innerText)) || "").toLowerCase(); + const gameOverText = + text.includes("game over") || + text.includes("gameover") || + text.includes("you lose") || + text.includes("try again") || + text.includes("restart") || + text.includes("play again") || + text.includes("ended"); + + // Check if the game stopped (screen is static) + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + const isStatic = Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + gameOverText || isStatic, + "Expected game-over text or the game to stop after stacking pieces to the top" + ).toBe(true); + }); + + // ---- 16. Game runs for 30 seconds without crashing ---- + test("game runs for 30 seconds without crashing", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Simulate varied gameplay for 30 seconds + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + const start = Date.now(); + + while (Date.now() - start < 30_000) { + const key = keys[Math.floor(Math.random() * keys.length)]; + await page.keyboard.press(key); + await page.waitForTimeout(150 + Math.random() * 200); + } + + // The page should still be alive (not crashed, not blank) + const text = await page.evaluate(() => document.body.innerText); + expect(text, "Page body should not be empty after 30s of play").toBeTruthy(); + expect( + errors.length, + `Expected no console errors during 30s of play, got: ${errors.join("; ")}` + ).toBe(0); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package-lock.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package-lock.json @@ -0,0 +1,2270 @@ +{ + "name": "loop-bench-mdqvehsx", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loop-bench-mdqvehsx", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", + "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.4", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", + "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", + "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", + "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", + "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jscpd/badge-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", + "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "badgen": "^3.2.3", + "colors": "^1.4.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@jscpd/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", + "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@jscpd/finder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", + "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "blamer": "^1.0.6", + "bytes": "^3.1.2", + "cli-table3": "^0.6.5", + "colors": "^1.4.0", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "markdown-table": "^2.0.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/html-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", + "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "1.4.0", + "fs-extra": "^11.2.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/tokenizer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", + "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "reprism": "^0.0.11", + "spark-md5": "^3.0.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/badgen": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", + "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/blamer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", + "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.4 <5 || >=6.9" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jscpd": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", + "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/badge-reporter": "4.0.4", + "@jscpd/core": "4.0.4", + "@jscpd/finder": "4.0.4", + "@jscpd/html-reporter": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "colors": "^1.4.0", + "commander": "^5.0.0", + "fs-extra": "^11.2.0", + "gitignore-to-glob": "^0.3.0", + "jscpd-sarif-reporter": "4.0.6" + }, + "bin": { + "jscpd": "bin/jscpd" + } + }, + "node_modules/jscpd-sarif-reporter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", + "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^11.2.0", + "node-sarif-builder": "^3.4.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reprism": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", + "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/package.json @@ -0,0 +1,20 @@ +{ + "name": "loop-bench-mdqvehsx", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 30_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-few/tetris.spec.ts @@ -0,0 +1,96 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + }); + + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Give the page a moment to finish initializing + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); + }); + + test("game board is visible", async ({ page }) => { + // A Tetris game should render either a <canvas> or a grid of DOM elements + const canvas = page.locator("canvas"); + const gridContainer = page.locator( + [ + '[class*="board"]', + '[class*="grid"]', + '[class*="game"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); + + const canvasCount = await canvas.count(); + const gridCount = await gridContainer.count(); + + expect( + canvasCount + gridCount, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + }); + + test("keyboard input does not crash the game", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Press every key a Tetris game should handle + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + for (const key of keys) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + } + + expect(errors).toEqual([]); + }); + + test("game state changes over time", async ({ page }) => { + // If the game is running, the visual output should change as pieces fall + const shot1 = await page.screenshot(); + await page.waitForTimeout(3000); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the page to visually change over 3 seconds (pieces should be falling)" + ).toBe(false); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/tests-full/tetris.spec.ts @@ -0,0 +1,474 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +// Find the game surface: canvas or a grid-like DOM container. +function gameBoard(page: Page) { + return page.locator( + [ + "canvas", + '[class*="board"]', + '[class*="grid"]', + '[class*="game-area"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); +} + +// Click the board area to make sure it has focus, then try common +// start interactions in case the game waits for user action. +async function ensureGameStarted(page: Page) { + const board = gameBoard(page); + const count = await board.count(); + if (count > 0) { + try { + await board.first().click({ timeout: 2000 }); + } catch { + // click failed, continue anyway + } + } + + // Some games need a key press or button click to start + const startButton = page.locator( + 'button:has-text("start"), button:has-text("Start"), button:has-text("play"), button:has-text("Play"), [class*="start"], [id*="start"]' + ); + if ((await startButton.count()) > 0) { + try { + await startButton.first().click({ timeout: 2000 }); + } catch { + // ignore + } + } + + // Press Enter/Space as a fallback start trigger + await page.keyboard.press("Enter"); + await page.waitForTimeout(300); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + await page.waitForTimeout(1000); + await ensureGameStarted(page); + }); + + // ---- 1. Page loads without errors ---- + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + await page.waitForTimeout(2000); + expect(errors).toEqual([]); + }); + + // ---- 2. Game board is visible ---- + test("game board is visible", async ({ page }) => { + const board = gameBoard(page); + const count = await board.count(); + + expect( + count, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + + // The board element should have meaningful dimensions + const box = await board.first().boundingBox(); + expect(box, "Game board should be visible on screen").not.toBeNull(); + expect(box!.width).toBeGreaterThan(50); + expect(box!.height).toBeGreaterThan(50); + }); + + // ---- 3. Game starts automatically or via interaction ---- + test("game starts", async ({ page }) => { + // After beforeEach, the game should be running. Verify by checking that + // the page is not static: take two screenshots separated by time. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the game to show visual activity after starting" + ).toBe(false); + }); + + // ---- 4. Piece falls automatically (auto-drop) ---- + test("piece falls automatically", async ({ page }) => { + // Take screenshots at intervals without pressing any keys. + // A falling piece should cause visual changes. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot3 = await page.screenshot(); + + const buf1 = Buffer.from(shot1); + const buf2 = Buffer.from(shot2); + const buf3 = Buffer.from(shot3); + + // At least one pair should differ (piece is moving down) + const changed = !buf1.equals(buf2) || !buf2.equals(buf3); + expect(changed, "Expected piece to fall over time without input").toBe( + true + ); + }); + + // ---- 5. Left arrow moves piece left ---- + test("left arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + // The piece should have moved, so the screenshots should differ + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing left arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 6. Right arrow moves piece right ---- + test("right arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing right arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 7. Down arrow moves piece down faster ---- + test("down arrow accelerates piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + for (let i = 0; i < 10; i++) { + await page.keyboard.press("ArrowDown"); + await page.waitForTimeout(50); + } + await page.waitForTimeout(200); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing down arrow repeatedly" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 8. Up arrow (or Z) rotates piece ---- + test("rotation changes the piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowUp"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing rotate key" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 9. Space bar hard-drops piece ---- + test("space bar hard-drops piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing space (hard drop)" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 10. Pieces lock at the bottom ---- + test("pieces lock at the bottom", async ({ page }) => { + // Hard-drop several pieces and check that the bottom of the board + // accumulates filled cells (the visual should change cumulatively). + const shots: Buffer[] = []; + + shots.push(Buffer.from(await page.screenshot())); + + for (let i = 0; i < 3; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(800); + } + + shots.push(Buffer.from(await page.screenshot())); + + // After 3 hard drops, the board should look different from the start + // because pieces have stacked up at the bottom. + expect( + shots[0].equals(shots[1]), + "Expected pieces to stack up at the bottom after hard drops" + ).toBe(false); + }); + + // ---- 11. New piece spawns after lock ---- + test("new piece spawns after locking", async ({ page }) => { + // Hard-drop to lock a piece, then wait and verify the game is still + // showing activity (a new piece should be falling). + await page.keyboard.press("Space"); + await page.waitForTimeout(1000); + + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + + // If a new piece spawned and is falling, the screen should change + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected a new piece to spawn and fall after the previous one locked" + ).toBe(false); + }); + + // ---- 12. Multiple different pieces appear ---- + test("multiple different pieces appear", async ({ page }) => { + // Play through several pieces and capture screenshots. Different piece + // shapes should produce visually distinct patterns. + const shots: Buffer[] = []; + + for (let i = 0; i < 6; i++) { + // Move each piece to a different column so they don't overlap identically + if (i % 2 === 0) { + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + } else { + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(600); + shots.push(Buffer.from(await page.screenshot())); + } + + // At least some consecutive screenshots should differ (different piece shapes) + let differences = 0; + for (let i = 1; i < shots.length; i++) { + if (!shots[i - 1].equals(shots[i])) differences++; + } + + expect( + differences, + "Expected to see visual differences between consecutive pieces (different shapes)" + ).toBeGreaterThanOrEqual(2); + }); + + // ---- 13. Completed line clears ---- + test("completed line clears", async ({ page }) => { + // Fill a row by dropping many pieces. Observe whether any row disappears. + // We can detect this by tracking the total filled area -- after a line clear, + // the board should have less filled content than just before the clear. + const pageText = async () => + (await page.evaluate(() => document.body.innerText)) || ""; + + // Drop many pieces rapidly to fill rows + for (let i = 0; i < 30; i++) { + // Vary positions to try to complete a row + const moves = (i % 5) - 2; // -2, -1, 0, 1, 2 + for (let m = 0; m < Math.abs(moves); m++) { + await page.keyboard.press( + moves < 0 ? "ArrowLeft" : "ArrowRight" + ); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + // Check if a score or lines counter changed (common indicators of line clears) + const text = await pageText(); + const numbers = (text.match(/\d+/g) || []).map(Number); + const hasNonZero = numbers.some((n) => n > 0); + + // Also check visual: the board should not be completely static + const shot1 = await page.screenshot(); + await page.waitForTimeout(1000); + const shot2 = await page.screenshot(); + + // Either: score/lines increased, or game is still active (meaning lines cleared + // and made room for more pieces instead of game over) + const stillActive = !Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + hasNonZero || stillActive, + "Expected evidence of line clearing (score > 0 or game still active after many drops)" + ).toBe(true); + }); + + // ---- 14. Score increases during play ---- + test("score increases during play", async ({ page }) => { + // Look for a score display on the page + const getNumbers = async () => { + const text = (await page.evaluate(() => document.body.innerText)) || ""; + return (text.match(/\d+/g) || []).map(Number); + }; + + const numbersBefore = await getNumbers(); + + // Play for a while: drop several pieces + for (let i = 0; i < 15; i++) { + const offset = (i % 5) - 2; + for (let m = 0; m < Math.abs(offset); m++) { + await page.keyboard.press(offset < 0 ? "ArrowLeft" : "ArrowRight"); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + const numbersAfter = await getNumbers(); + + // At least one number on the page should have increased + // (score, lines counter, level, etc.) + let anyIncreased = false; + const maxLen = Math.min(numbersBefore.length, numbersAfter.length); + for (let i = 0; i < maxLen; i++) { + if (numbersAfter[i] > numbersBefore[i]) { + anyIncreased = true; + break; + } + } + + // Also accept if new numbers appeared + if (!anyIncreased && numbersAfter.length > numbersBefore.length) { + anyIncreased = true; + } + + // Also accept if the max number increased + if (!anyIncreased) { + const maxBefore = numbersBefore.length > 0 ? Math.max(...numbersBefore) : 0; + const maxAfter = numbersAfter.length > 0 ? Math.max(...numbersAfter) : 0; + if (maxAfter > maxBefore) anyIncreased = true; + } + + expect( + anyIncreased, + "Expected at least one numeric value on the page to increase during play (score, lines, level)" + ).toBe(true); + }); + + // ---- 15. Game over when pieces reach top ---- + test("game over when pieces reach top", async ({ page }) => { + // Stack pieces in the center until the game ends. + // Drop as many pieces as possible straight down. + for (let i = 0; i < 50; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(200); + } + + await page.waitForTimeout(2000); + + // After stacking to overflow, the game should show some game-over indicator: + // - text saying "game over", "you lose", "try again", "restart", "end" + // - or the game stops updating (static screen) + const text = ((await page.evaluate(() => document.body.innerText)) || "").toLowerCase(); + const gameOverText = + text.includes("game over") || + text.includes("gameover") || + text.includes("you lose") || + text.includes("try again") || + text.includes("restart") || + text.includes("play again") || + text.includes("ended"); + + // Check if the game stopped (screen is static) + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + const isStatic = Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + gameOverText || isStatic, + "Expected game-over text or the game to stop after stacking pieces to the top" + ).toBe(true); + }); + + // ---- 16. Game runs for 30 seconds without crashing ---- + test("game runs for 30 seconds without crashing", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Simulate varied gameplay for 30 seconds + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + const start = Date.now(); + + while (Date.now() - start < 30_000) { + const key = keys[Math.floor(Math.random() * keys.length)]; + await page.keyboard.press(key); + await page.waitForTimeout(150 + Math.random() * 200); + } + + // The page should still be alive (not crashed, not blank) + const text = await page.evaluate(() => document.body.innerText); + expect(text, "Page body should not be empty after 30s of play").toBeTruthy(); + expect( + errors.length, + `Expected no console errors during 30s of play, got: ${errors.join("; ")}` + ).toBe(0); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package-lock.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package-lock.json @@ -0,0 +1,2270 @@ +{ + "name": "loop-bench-shys4sjr", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loop-bench-shys4sjr", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", + "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.4", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", + "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", + "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", + "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", + "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jscpd/badge-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", + "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "badgen": "^3.2.3", + "colors": "^1.4.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@jscpd/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", + "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@jscpd/finder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", + "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "blamer": "^1.0.6", + "bytes": "^3.1.2", + "cli-table3": "^0.6.5", + "colors": "^1.4.0", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "markdown-table": "^2.0.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/html-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", + "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "1.4.0", + "fs-extra": "^11.2.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/tokenizer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", + "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "reprism": "^0.0.11", + "spark-md5": "^3.0.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/badgen": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", + "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/blamer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", + "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.4 <5 || >=6.9" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jscpd": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", + "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/badge-reporter": "4.0.4", + "@jscpd/core": "4.0.4", + "@jscpd/finder": "4.0.4", + "@jscpd/html-reporter": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "colors": "^1.4.0", + "commander": "^5.0.0", + "fs-extra": "^11.2.0", + "gitignore-to-glob": "^0.3.0", + "jscpd-sarif-reporter": "4.0.6" + }, + "bin": { + "jscpd": "bin/jscpd" + } + }, + "node_modules/jscpd-sarif-reporter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", + "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^11.2.0", + "node-sarif-builder": "^3.4.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reprism": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", + "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/package.json @@ -0,0 +1,20 @@ +{ + "name": "loop-bench-shys4sjr", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 30_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-few/tetris.spec.ts @@ -0,0 +1,96 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + }); + + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Give the page a moment to finish initializing + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); + }); + + test("game board is visible", async ({ page }) => { + // A Tetris game should render either a <canvas> or a grid of DOM elements + const canvas = page.locator("canvas"); + const gridContainer = page.locator( + [ + '[class*="board"]', + '[class*="grid"]', + '[class*="game"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); + + const canvasCount = await canvas.count(); + const gridCount = await gridContainer.count(); + + expect( + canvasCount + gridCount, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + }); + + test("keyboard input does not crash the game", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Press every key a Tetris game should handle + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + for (const key of keys) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + } + + expect(errors).toEqual([]); + }); + + test("game state changes over time", async ({ page }) => { + // If the game is running, the visual output should change as pieces fall + const shot1 = await page.screenshot(); + await page.waitForTimeout(3000); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the page to visually change over 3 seconds (pieces should be falling)" + ).toBe(false); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/tests-full/tetris.spec.ts @@ -0,0 +1,474 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +// Find the game surface: canvas or a grid-like DOM container. +function gameBoard(page: Page) { + return page.locator( + [ + "canvas", + '[class*="board"]', + '[class*="grid"]', + '[class*="game-area"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); +} + +// Click the board area to make sure it has focus, then try common +// start interactions in case the game waits for user action. +async function ensureGameStarted(page: Page) { + const board = gameBoard(page); + const count = await board.count(); + if (count > 0) { + try { + await board.first().click({ timeout: 2000 }); + } catch { + // click failed, continue anyway + } + } + + // Some games need a key press or button click to start + const startButton = page.locator( + 'button:has-text("start"), button:has-text("Start"), button:has-text("play"), button:has-text("Play"), [class*="start"], [id*="start"]' + ); + if ((await startButton.count()) > 0) { + try { + await startButton.first().click({ timeout: 2000 }); + } catch { + // ignore + } + } + + // Press Enter/Space as a fallback start trigger + await page.keyboard.press("Enter"); + await page.waitForTimeout(300); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + await page.waitForTimeout(1000); + await ensureGameStarted(page); + }); + + // ---- 1. Page loads without errors ---- + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + await page.waitForTimeout(2000); + expect(errors).toEqual([]); + }); + + // ---- 2. Game board is visible ---- + test("game board is visible", async ({ page }) => { + const board = gameBoard(page); + const count = await board.count(); + + expect( + count, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + + // The board element should have meaningful dimensions + const box = await board.first().boundingBox(); + expect(box, "Game board should be visible on screen").not.toBeNull(); + expect(box!.width).toBeGreaterThan(50); + expect(box!.height).toBeGreaterThan(50); + }); + + // ---- 3. Game starts automatically or via interaction ---- + test("game starts", async ({ page }) => { + // After beforeEach, the game should be running. Verify by checking that + // the page is not static: take two screenshots separated by time. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the game to show visual activity after starting" + ).toBe(false); + }); + + // ---- 4. Piece falls automatically (auto-drop) ---- + test("piece falls automatically", async ({ page }) => { + // Take screenshots at intervals without pressing any keys. + // A falling piece should cause visual changes. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot3 = await page.screenshot(); + + const buf1 = Buffer.from(shot1); + const buf2 = Buffer.from(shot2); + const buf3 = Buffer.from(shot3); + + // At least one pair should differ (piece is moving down) + const changed = !buf1.equals(buf2) || !buf2.equals(buf3); + expect(changed, "Expected piece to fall over time without input").toBe( + true + ); + }); + + // ---- 5. Left arrow moves piece left ---- + test("left arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + // The piece should have moved, so the screenshots should differ + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing left arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 6. Right arrow moves piece right ---- + test("right arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing right arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 7. Down arrow moves piece down faster ---- + test("down arrow accelerates piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + for (let i = 0; i < 10; i++) { + await page.keyboard.press("ArrowDown"); + await page.waitForTimeout(50); + } + await page.waitForTimeout(200); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing down arrow repeatedly" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 8. Up arrow (or Z) rotates piece ---- + test("rotation changes the piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowUp"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing rotate key" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 9. Space bar hard-drops piece ---- + test("space bar hard-drops piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing space (hard drop)" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 10. Pieces lock at the bottom ---- + test("pieces lock at the bottom", async ({ page }) => { + // Hard-drop several pieces and check that the bottom of the board + // accumulates filled cells (the visual should change cumulatively). + const shots: Buffer[] = []; + + shots.push(Buffer.from(await page.screenshot())); + + for (let i = 0; i < 3; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(800); + } + + shots.push(Buffer.from(await page.screenshot())); + + // After 3 hard drops, the board should look different from the start + // because pieces have stacked up at the bottom. + expect( + shots[0].equals(shots[1]), + "Expected pieces to stack up at the bottom after hard drops" + ).toBe(false); + }); + + // ---- 11. New piece spawns after lock ---- + test("new piece spawns after locking", async ({ page }) => { + // Hard-drop to lock a piece, then wait and verify the game is still + // showing activity (a new piece should be falling). + await page.keyboard.press("Space"); + await page.waitForTimeout(1000); + + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + + // If a new piece spawned and is falling, the screen should change + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected a new piece to spawn and fall after the previous one locked" + ).toBe(false); + }); + + // ---- 12. Multiple different pieces appear ---- + test("multiple different pieces appear", async ({ page }) => { + // Play through several pieces and capture screenshots. Different piece + // shapes should produce visually distinct patterns. + const shots: Buffer[] = []; + + for (let i = 0; i < 6; i++) { + // Move each piece to a different column so they don't overlap identically + if (i % 2 === 0) { + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + } else { + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(600); + shots.push(Buffer.from(await page.screenshot())); + } + + // At least some consecutive screenshots should differ (different piece shapes) + let differences = 0; + for (let i = 1; i < shots.length; i++) { + if (!shots[i - 1].equals(shots[i])) differences++; + } + + expect( + differences, + "Expected to see visual differences between consecutive pieces (different shapes)" + ).toBeGreaterThanOrEqual(2); + }); + + // ---- 13. Completed line clears ---- + test("completed line clears", async ({ page }) => { + // Fill a row by dropping many pieces. Observe whether any row disappears. + // We can detect this by tracking the total filled area -- after a line clear, + // the board should have less filled content than just before the clear. + const pageText = async () => + (await page.evaluate(() => document.body.innerText)) || ""; + + // Drop many pieces rapidly to fill rows + for (let i = 0; i < 30; i++) { + // Vary positions to try to complete a row + const moves = (i % 5) - 2; // -2, -1, 0, 1, 2 + for (let m = 0; m < Math.abs(moves); m++) { + await page.keyboard.press( + moves < 0 ? "ArrowLeft" : "ArrowRight" + ); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + // Check if a score or lines counter changed (common indicators of line clears) + const text = await pageText(); + const numbers = (text.match(/\d+/g) || []).map(Number); + const hasNonZero = numbers.some((n) => n > 0); + + // Also check visual: the board should not be completely static + const shot1 = await page.screenshot(); + await page.waitForTimeout(1000); + const shot2 = await page.screenshot(); + + // Either: score/lines increased, or game is still active (meaning lines cleared + // and made room for more pieces instead of game over) + const stillActive = !Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + hasNonZero || stillActive, + "Expected evidence of line clearing (score > 0 or game still active after many drops)" + ).toBe(true); + }); + + // ---- 14. Score increases during play ---- + test("score increases during play", async ({ page }) => { + // Look for a score display on the page + const getNumbers = async () => { + const text = (await page.evaluate(() => document.body.innerText)) || ""; + return (text.match(/\d+/g) || []).map(Number); + }; + + const numbersBefore = await getNumbers(); + + // Play for a while: drop several pieces + for (let i = 0; i < 15; i++) { + const offset = (i % 5) - 2; + for (let m = 0; m < Math.abs(offset); m++) { + await page.keyboard.press(offset < 0 ? "ArrowLeft" : "ArrowRight"); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + const numbersAfter = await getNumbers(); + + // At least one number on the page should have increased + // (score, lines counter, level, etc.) + let anyIncreased = false; + const maxLen = Math.min(numbersBefore.length, numbersAfter.length); + for (let i = 0; i < maxLen; i++) { + if (numbersAfter[i] > numbersBefore[i]) { + anyIncreased = true; + break; + } + } + + // Also accept if new numbers appeared + if (!anyIncreased && numbersAfter.length > numbersBefore.length) { + anyIncreased = true; + } + + // Also accept if the max number increased + if (!anyIncreased) { + const maxBefore = numbersBefore.length > 0 ? Math.max(...numbersBefore) : 0; + const maxAfter = numbersAfter.length > 0 ? Math.max(...numbersAfter) : 0; + if (maxAfter > maxBefore) anyIncreased = true; + } + + expect( + anyIncreased, + "Expected at least one numeric value on the page to increase during play (score, lines, level)" + ).toBe(true); + }); + + // ---- 15. Game over when pieces reach top ---- + test("game over when pieces reach top", async ({ page }) => { + // Stack pieces in the center until the game ends. + // Drop as many pieces as possible straight down. + for (let i = 0; i < 50; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(200); + } + + await page.waitForTimeout(2000); + + // After stacking to overflow, the game should show some game-over indicator: + // - text saying "game over", "you lose", "try again", "restart", "end" + // - or the game stops updating (static screen) + const text = ((await page.evaluate(() => document.body.innerText)) || "").toLowerCase(); + const gameOverText = + text.includes("game over") || + text.includes("gameover") || + text.includes("you lose") || + text.includes("try again") || + text.includes("restart") || + text.includes("play again") || + text.includes("ended"); + + // Check if the game stopped (screen is static) + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + const isStatic = Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + gameOverText || isStatic, + "Expected game-over text or the game to stop after stacking pieces to the top" + ).toBe(true); + }); + + // ---- 16. Game runs for 30 seconds without crashing ---- + test("game runs for 30 seconds without crashing", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Simulate varied gameplay for 30 seconds + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + const start = Date.now(); + + while (Date.now() - start < 30_000) { + const key = keys[Math.floor(Math.random() * keys.length)]; + await page.keyboard.press(key); + await page.waitForTimeout(150 + Math.random() * 200); + } + + // The page should still be alive (not crashed, not blank) + const text = await page.evaluate(() => document.body.innerText); + expect(text, "Page body should not be empty after 30s of play").toBeTruthy(); + expect( + errors.length, + `Expected no console errors during 30s of play, got: ${errors.join("; ")}` + ).toBe(0); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package-lock.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package-lock.json @@ -0,0 +1,2270 @@ +{ + "name": "loop-bench-ni0drvej", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loop-bench-ni0drvej", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", + "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.4", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", + "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", + "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", + "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", + "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jscpd/badge-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", + "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "badgen": "^3.2.3", + "colors": "^1.4.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@jscpd/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", + "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@jscpd/finder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", + "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "blamer": "^1.0.6", + "bytes": "^3.1.2", + "cli-table3": "^0.6.5", + "colors": "^1.4.0", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "markdown-table": "^2.0.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/html-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", + "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "1.4.0", + "fs-extra": "^11.2.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/tokenizer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", + "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "reprism": "^0.0.11", + "spark-md5": "^3.0.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/badgen": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", + "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/blamer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", + "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.4 <5 || >=6.9" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jscpd": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", + "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/badge-reporter": "4.0.4", + "@jscpd/core": "4.0.4", + "@jscpd/finder": "4.0.4", + "@jscpd/html-reporter": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "colors": "^1.4.0", + "commander": "^5.0.0", + "fs-extra": "^11.2.0", + "gitignore-to-glob": "^0.3.0", + "jscpd-sarif-reporter": "4.0.6" + }, + "bin": { + "jscpd": "bin/jscpd" + } + }, + "node_modules/jscpd-sarif-reporter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", + "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^11.2.0", + "node-sarif-builder": "^3.4.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reprism": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", + "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/package.json @@ -0,0 +1,20 @@ +{ + "name": "loop-bench-ni0drvej", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 30_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-few/tetris.spec.ts @@ -0,0 +1,96 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + }); + + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Give the page a moment to finish initializing + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); + }); + + test("game board is visible", async ({ page }) => { + // A Tetris game should render either a <canvas> or a grid of DOM elements + const canvas = page.locator("canvas"); + const gridContainer = page.locator( + [ + '[class*="board"]', + '[class*="grid"]', + '[class*="game"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); + + const canvasCount = await canvas.count(); + const gridCount = await gridContainer.count(); + + expect( + canvasCount + gridCount, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + }); + + test("keyboard input does not crash the game", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Press every key a Tetris game should handle + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + for (const key of keys) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + } + + expect(errors).toEqual([]); + }); + + test("game state changes over time", async ({ page }) => { + // If the game is running, the visual output should change as pieces fall + const shot1 = await page.screenshot(); + await page.waitForTimeout(3000); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the page to visually change over 3 seconds (pieces should be falling)" + ).toBe(false); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/tests-full/tetris.spec.ts @@ -0,0 +1,474 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +// Find the game surface: canvas or a grid-like DOM container. +function gameBoard(page: Page) { + return page.locator( + [ + "canvas", + '[class*="board"]', + '[class*="grid"]', + '[class*="game-area"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); +} + +// Click the board area to make sure it has focus, then try common +// start interactions in case the game waits for user action. +async function ensureGameStarted(page: Page) { + const board = gameBoard(page); + const count = await board.count(); + if (count > 0) { + try { + await board.first().click({ timeout: 2000 }); + } catch { + // click failed, continue anyway + } + } + + // Some games need a key press or button click to start + const startButton = page.locator( + 'button:has-text("start"), button:has-text("Start"), button:has-text("play"), button:has-text("Play"), [class*="start"], [id*="start"]' + ); + if ((await startButton.count()) > 0) { + try { + await startButton.first().click({ timeout: 2000 }); + } catch { + // ignore + } + } + + // Press Enter/Space as a fallback start trigger + await page.keyboard.press("Enter"); + await page.waitForTimeout(300); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + await page.waitForTimeout(1000); + await ensureGameStarted(page); + }); + + // ---- 1. Page loads without errors ---- + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + await page.waitForTimeout(2000); + expect(errors).toEqual([]); + }); + + // ---- 2. Game board is visible ---- + test("game board is visible", async ({ page }) => { + const board = gameBoard(page); + const count = await board.count(); + + expect( + count, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + + // The board element should have meaningful dimensions + const box = await board.first().boundingBox(); + expect(box, "Game board should be visible on screen").not.toBeNull(); + expect(box!.width).toBeGreaterThan(50); + expect(box!.height).toBeGreaterThan(50); + }); + + // ---- 3. Game starts automatically or via interaction ---- + test("game starts", async ({ page }) => { + // After beforeEach, the game should be running. Verify by checking that + // the page is not static: take two screenshots separated by time. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the game to show visual activity after starting" + ).toBe(false); + }); + + // ---- 4. Piece falls automatically (auto-drop) ---- + test("piece falls automatically", async ({ page }) => { + // Take screenshots at intervals without pressing any keys. + // A falling piece should cause visual changes. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot3 = await page.screenshot(); + + const buf1 = Buffer.from(shot1); + const buf2 = Buffer.from(shot2); + const buf3 = Buffer.from(shot3); + + // At least one pair should differ (piece is moving down) + const changed = !buf1.equals(buf2) || !buf2.equals(buf3); + expect(changed, "Expected piece to fall over time without input").toBe( + true + ); + }); + + // ---- 5. Left arrow moves piece left ---- + test("left arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + // The piece should have moved, so the screenshots should differ + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing left arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 6. Right arrow moves piece right ---- + test("right arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing right arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 7. Down arrow moves piece down faster ---- + test("down arrow accelerates piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + for (let i = 0; i < 10; i++) { + await page.keyboard.press("ArrowDown"); + await page.waitForTimeout(50); + } + await page.waitForTimeout(200); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing down arrow repeatedly" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 8. Up arrow (or Z) rotates piece ---- + test("rotation changes the piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowUp"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing rotate key" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 9. Space bar hard-drops piece ---- + test("space bar hard-drops piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing space (hard drop)" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 10. Pieces lock at the bottom ---- + test("pieces lock at the bottom", async ({ page }) => { + // Hard-drop several pieces and check that the bottom of the board + // accumulates filled cells (the visual should change cumulatively). + const shots: Buffer[] = []; + + shots.push(Buffer.from(await page.screenshot())); + + for (let i = 0; i < 3; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(800); + } + + shots.push(Buffer.from(await page.screenshot())); + + // After 3 hard drops, the board should look different from the start + // because pieces have stacked up at the bottom. + expect( + shots[0].equals(shots[1]), + "Expected pieces to stack up at the bottom after hard drops" + ).toBe(false); + }); + + // ---- 11. New piece spawns after lock ---- + test("new piece spawns after locking", async ({ page }) => { + // Hard-drop to lock a piece, then wait and verify the game is still + // showing activity (a new piece should be falling). + await page.keyboard.press("Space"); + await page.waitForTimeout(1000); + + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + + // If a new piece spawned and is falling, the screen should change + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected a new piece to spawn and fall after the previous one locked" + ).toBe(false); + }); + + // ---- 12. Multiple different pieces appear ---- + test("multiple different pieces appear", async ({ page }) => { + // Play through several pieces and capture screenshots. Different piece + // shapes should produce visually distinct patterns. + const shots: Buffer[] = []; + + for (let i = 0; i < 6; i++) { + // Move each piece to a different column so they don't overlap identically + if (i % 2 === 0) { + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + } else { + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(600); + shots.push(Buffer.from(await page.screenshot())); + } + + // At least some consecutive screenshots should differ (different piece shapes) + let differences = 0; + for (let i = 1; i < shots.length; i++) { + if (!shots[i - 1].equals(shots[i])) differences++; + } + + expect( + differences, + "Expected to see visual differences between consecutive pieces (different shapes)" + ).toBeGreaterThanOrEqual(2); + }); + + // ---- 13. Completed line clears ---- + test("completed line clears", async ({ page }) => { + // Fill a row by dropping many pieces. Observe whether any row disappears. + // We can detect this by tracking the total filled area -- after a line clear, + // the board should have less filled content than just before the clear. + const pageText = async () => + (await page.evaluate(() => document.body.innerText)) || ""; + + // Drop many pieces rapidly to fill rows + for (let i = 0; i < 30; i++) { + // Vary positions to try to complete a row + const moves = (i % 5) - 2; // -2, -1, 0, 1, 2 + for (let m = 0; m < Math.abs(moves); m++) { + await page.keyboard.press( + moves < 0 ? "ArrowLeft" : "ArrowRight" + ); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + // Check if a score or lines counter changed (common indicators of line clears) + const text = await pageText(); + const numbers = (text.match(/\d+/g) || []).map(Number); + const hasNonZero = numbers.some((n) => n > 0); + + // Also check visual: the board should not be completely static + const shot1 = await page.screenshot(); + await page.waitForTimeout(1000); + const shot2 = await page.screenshot(); + + // Either: score/lines increased, or game is still active (meaning lines cleared + // and made room for more pieces instead of game over) + const stillActive = !Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + hasNonZero || stillActive, + "Expected evidence of line clearing (score > 0 or game still active after many drops)" + ).toBe(true); + }); + + // ---- 14. Score increases during play ---- + test("score increases during play", async ({ page }) => { + // Look for a score display on the page + const getNumbers = async () => { + const text = (await page.evaluate(() => document.body.innerText)) || ""; + return (text.match(/\d+/g) || []).map(Number); + }; + + const numbersBefore = await getNumbers(); + + // Play for a while: drop several pieces + for (let i = 0; i < 15; i++) { + const offset = (i % 5) - 2; + for (let m = 0; m < Math.abs(offset); m++) { + await page.keyboard.press(offset < 0 ? "ArrowLeft" : "ArrowRight"); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + const numbersAfter = await getNumbers(); + + // At least one number on the page should have increased + // (score, lines counter, level, etc.) + let anyIncreased = false; + const maxLen = Math.min(numbersBefore.length, numbersAfter.length); + for (let i = 0; i < maxLen; i++) { + if (numbersAfter[i] > numbersBefore[i]) { + anyIncreased = true; + break; + } + } + + // Also accept if new numbers appeared + if (!anyIncreased && numbersAfter.length > numbersBefore.length) { + anyIncreased = true; + } + + // Also accept if the max number increased + if (!anyIncreased) { + const maxBefore = numbersBefore.length > 0 ? Math.max(...numbersBefore) : 0; + const maxAfter = numbersAfter.length > 0 ? Math.max(...numbersAfter) : 0; + if (maxAfter > maxBefore) anyIncreased = true; + } + + expect( + anyIncreased, + "Expected at least one numeric value on the page to increase during play (score, lines, level)" + ).toBe(true); + }); + + // ---- 15. Game over when pieces reach top ---- + test("game over when pieces reach top", async ({ page }) => { + // Stack pieces in the center until the game ends. + // Drop as many pieces as possible straight down. + for (let i = 0; i < 50; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(200); + } + + await page.waitForTimeout(2000); + + // After stacking to overflow, the game should show some game-over indicator: + // - text saying "game over", "you lose", "try again", "restart", "end" + // - or the game stops updating (static screen) + const text = ((await page.evaluate(() => document.body.innerText)) || "").toLowerCase(); + const gameOverText = + text.includes("game over") || + text.includes("gameover") || + text.includes("you lose") || + text.includes("try again") || + text.includes("restart") || + text.includes("play again") || + text.includes("ended"); + + // Check if the game stopped (screen is static) + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + const isStatic = Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + gameOverText || isStatic, + "Expected game-over text or the game to stop after stacking pieces to the top" + ).toBe(true); + }); + + // ---- 16. Game runs for 30 seconds without crashing ---- + test("game runs for 30 seconds without crashing", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Simulate varied gameplay for 30 seconds + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + const start = Date.now(); + + while (Date.now() - start < 30_000) { + const key = keys[Math.floor(Math.random() * keys.length)]; + await page.keyboard.press(key); + await page.waitForTimeout(150 + Math.random() * 200); + } + + // The page should still be alive (not crashed, not blank) + const text = await page.evaluate(() => document.body.innerText); + expect(text, "Page body should not be empty after 30s of play").toBeTruthy(); + expect( + errors.length, + `Expected no console errors during 30s of play, got: ${errors.join("; ")}` + ).toBe(0); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package-lock.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package-lock.json @@ -0,0 +1,2270 @@ +{ + "name": "loop-bench-r1v1vv8w", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loop-bench-r1v1vv8w", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", + "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.4", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", + "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", + "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", + "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", + "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jscpd/badge-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", + "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "badgen": "^3.2.3", + "colors": "^1.4.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@jscpd/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", + "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@jscpd/finder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", + "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "blamer": "^1.0.6", + "bytes": "^3.1.2", + "cli-table3": "^0.6.5", + "colors": "^1.4.0", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "markdown-table": "^2.0.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/html-reporter": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", + "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "1.4.0", + "fs-extra": "^11.2.0", + "pug": "^3.0.3" + } + }, + "node_modules/@jscpd/tokenizer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", + "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/core": "4.0.4", + "reprism": "^0.0.11", + "spark-md5": "^3.0.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/badgen": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", + "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/blamer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", + "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.4 <5 || >=6.9" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jscpd": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", + "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jscpd/badge-reporter": "4.0.4", + "@jscpd/core": "4.0.4", + "@jscpd/finder": "4.0.4", + "@jscpd/html-reporter": "4.0.4", + "@jscpd/tokenizer": "4.0.4", + "colors": "^1.4.0", + "commander": "^5.0.0", + "fs-extra": "^11.2.0", + "gitignore-to-glob": "^0.3.0", + "jscpd-sarif-reporter": "4.0.6" + }, + "bin": { + "jscpd": "bin/jscpd" + } + }, + "node_modules/jscpd-sarif-reporter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", + "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^11.2.0", + "node-sarif-builder": "^3.4.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reprism": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", + "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/package.json @@ -0,0 +1,20 @@ +{ + "name": "loop-bench-r1v1vv8w", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^25.5.2", + "eslint": "^10.2.0", + "jscpd": "^4.0.8", + "typescript": "^6.0.2" + } +} diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 30_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-few/tetris.spec.ts @@ -0,0 +1,96 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + }); + + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Give the page a moment to finish initializing + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); + }); + + test("game board is visible", async ({ page }) => { + // A Tetris game should render either a <canvas> or a grid of DOM elements + const canvas = page.locator("canvas"); + const gridContainer = page.locator( + [ + '[class*="board"]', + '[class*="grid"]', + '[class*="game"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); + + const canvasCount = await canvas.count(); + const gridCount = await gridContainer.count(); + + expect( + canvasCount + gridCount, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + }); + + test("keyboard input does not crash the game", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Press every key a Tetris game should handle + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + for (const key of keys) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + } + + expect(errors).toEqual([]); + }); + + test("game state changes over time", async ({ page }) => { + // If the game is running, the visual output should change as pieces fall + const shot1 = await page.screenshot(); + await page.waitForTimeout(3000); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the page to visually change over 3 seconds (pieces should be falling)" + ).toBe(false); + }); +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/playwright.config.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: "http://localhost:3000", + headless: true, + viewport: { width: 1280, height: 720 }, + }, +}); diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/tetris.spec.ts b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/tests-full/tetris.spec.ts @@ -0,0 +1,474 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Try common entry points until one loads successfully. +async function loadGame(page: Page) { + const candidates = [ + "/", + "/index.html", + "/dist/index.html", + "/public/index.html", + "/build/index.html", + ]; + + for (const path of candidates) { + try { + const resp = await page.goto(path, { timeout: 5000 }); + if (resp?.ok()) return; + } catch { + continue; + } + } +} + +// Find the game surface: canvas or a grid-like DOM container. +function gameBoard(page: Page) { + return page.locator( + [ + "canvas", + '[class*="board"]', + '[class*="grid"]', + '[class*="game-area"]', + '[class*="field"]', + '[id*="board"]', + '[id*="grid"]', + '[id*="game"]', + '[id*="field"]', + "table", + ].join(", ") + ); +} + +// Click the board area to make sure it has focus, then try common +// start interactions in case the game waits for user action. +async function ensureGameStarted(page: Page) { + const board = gameBoard(page); + const count = await board.count(); + if (count > 0) { + try { + await board.first().click({ timeout: 2000 }); + } catch { + // click failed, continue anyway + } + } + + // Some games need a key press or button click to start + const startButton = page.locator( + 'button:has-text("start"), button:has-text("Start"), button:has-text("play"), button:has-text("Play"), [class*="start"], [id*="start"]' + ); + if ((await startButton.count()) > 0) { + try { + await startButton.first().click({ timeout: 2000 }); + } catch { + // ignore + } + } + + // Press Enter/Space as a fallback start trigger + await page.keyboard.press("Enter"); + await page.waitForTimeout(300); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); +} + +test.describe("Tetris Game", () => { + test.beforeEach(async ({ page }) => { + await loadGame(page); + await page.waitForLoadState("domcontentloaded"); + await page.waitForTimeout(1000); + await ensureGameStarted(page); + }); + + // ---- 1. Page loads without errors ---- + test("page loads without console errors", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + await page.waitForTimeout(2000); + expect(errors).toEqual([]); + }); + + // ---- 2. Game board is visible ---- + test("game board is visible", async ({ page }) => { + const board = gameBoard(page); + const count = await board.count(); + + expect( + count, + "Expected a <canvas> or a container with board/grid/game/field in its class or id" + ).toBeGreaterThan(0); + + // The board element should have meaningful dimensions + const box = await board.first().boundingBox(); + expect(box, "Game board should be visible on screen").not.toBeNull(); + expect(box!.width).toBeGreaterThan(50); + expect(box!.height).toBeGreaterThan(50); + }); + + // ---- 3. Game starts automatically or via interaction ---- + test("game starts", async ({ page }) => { + // After beforeEach, the game should be running. Verify by checking that + // the page is not static: take two screenshots separated by time. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected the game to show visual activity after starting" + ).toBe(false); + }); + + // ---- 4. Piece falls automatically (auto-drop) ---- + test("piece falls automatically", async ({ page }) => { + // Take screenshots at intervals without pressing any keys. + // A falling piece should cause visual changes. + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot3 = await page.screenshot(); + + const buf1 = Buffer.from(shot1); + const buf2 = Buffer.from(shot2); + const buf3 = Buffer.from(shot3); + + // At least one pair should differ (piece is moving down) + const changed = !buf1.equals(buf2) || !buf2.equals(buf3); + expect(changed, "Expected piece to fall over time without input").toBe( + true + ); + }); + + // ---- 5. Left arrow moves piece left ---- + test("left arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + // The piece should have moved, so the screenshots should differ + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing left arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 6. Right arrow moves piece right ---- + test("right arrow moves piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(200); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing right arrow" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 7. Down arrow moves piece down faster ---- + test("down arrow accelerates piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + for (let i = 0; i < 10; i++) { + await page.keyboard.press("ArrowDown"); + await page.waitForTimeout(50); + } + await page.waitForTimeout(200); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing down arrow repeatedly" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 8. Up arrow (or Z) rotates piece ---- + test("rotation changes the piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("ArrowUp"); + await page.waitForTimeout(300); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing rotate key" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 9. Space bar hard-drops piece ---- + test("space bar hard-drops piece", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + const shot1 = await page.screenshot(); + await page.keyboard.press("Space"); + await page.waitForTimeout(500); + const shot2 = await page.screenshot(); + + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected visual change after pressing space (hard drop)" + ).toBe(false); + expect(errors).toEqual([]); + }); + + // ---- 10. Pieces lock at the bottom ---- + test("pieces lock at the bottom", async ({ page }) => { + // Hard-drop several pieces and check that the bottom of the board + // accumulates filled cells (the visual should change cumulatively). + const shots: Buffer[] = []; + + shots.push(Buffer.from(await page.screenshot())); + + for (let i = 0; i < 3; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(800); + } + + shots.push(Buffer.from(await page.screenshot())); + + // After 3 hard drops, the board should look different from the start + // because pieces have stacked up at the bottom. + expect( + shots[0].equals(shots[1]), + "Expected pieces to stack up at the bottom after hard drops" + ).toBe(false); + }); + + // ---- 11. New piece spawns after lock ---- + test("new piece spawns after locking", async ({ page }) => { + // Hard-drop to lock a piece, then wait and verify the game is still + // showing activity (a new piece should be falling). + await page.keyboard.press("Space"); + await page.waitForTimeout(1000); + + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + + // If a new piece spawned and is falling, the screen should change + expect( + Buffer.from(shot1).equals(Buffer.from(shot2)), + "Expected a new piece to spawn and fall after the previous one locked" + ).toBe(false); + }); + + // ---- 12. Multiple different pieces appear ---- + test("multiple different pieces appear", async ({ page }) => { + // Play through several pieces and capture screenshots. Different piece + // shapes should produce visually distinct patterns. + const shots: Buffer[] = []; + + for (let i = 0; i < 6; i++) { + // Move each piece to a different column so they don't overlap identically + if (i % 2 === 0) { + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowLeft"); + await page.waitForTimeout(100); + } else { + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + await page.keyboard.press("ArrowRight"); + await page.waitForTimeout(100); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(600); + shots.push(Buffer.from(await page.screenshot())); + } + + // At least some consecutive screenshots should differ (different piece shapes) + let differences = 0; + for (let i = 1; i < shots.length; i++) { + if (!shots[i - 1].equals(shots[i])) differences++; + } + + expect( + differences, + "Expected to see visual differences between consecutive pieces (different shapes)" + ).toBeGreaterThanOrEqual(2); + }); + + // ---- 13. Completed line clears ---- + test("completed line clears", async ({ page }) => { + // Fill a row by dropping many pieces. Observe whether any row disappears. + // We can detect this by tracking the total filled area -- after a line clear, + // the board should have less filled content than just before the clear. + const pageText = async () => + (await page.evaluate(() => document.body.innerText)) || ""; + + // Drop many pieces rapidly to fill rows + for (let i = 0; i < 30; i++) { + // Vary positions to try to complete a row + const moves = (i % 5) - 2; // -2, -1, 0, 1, 2 + for (let m = 0; m < Math.abs(moves); m++) { + await page.keyboard.press( + moves < 0 ? "ArrowLeft" : "ArrowRight" + ); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + // Check if a score or lines counter changed (common indicators of line clears) + const text = await pageText(); + const numbers = (text.match(/\d+/g) || []).map(Number); + const hasNonZero = numbers.some((n) => n > 0); + + // Also check visual: the board should not be completely static + const shot1 = await page.screenshot(); + await page.waitForTimeout(1000); + const shot2 = await page.screenshot(); + + // Either: score/lines increased, or game is still active (meaning lines cleared + // and made room for more pieces instead of game over) + const stillActive = !Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + hasNonZero || stillActive, + "Expected evidence of line clearing (score > 0 or game still active after many drops)" + ).toBe(true); + }); + + // ---- 14. Score increases during play ---- + test("score increases during play", async ({ page }) => { + // Look for a score display on the page + const getNumbers = async () => { + const text = (await page.evaluate(() => document.body.innerText)) || ""; + return (text.match(/\d+/g) || []).map(Number); + }; + + const numbersBefore = await getNumbers(); + + // Play for a while: drop several pieces + for (let i = 0; i < 15; i++) { + const offset = (i % 5) - 2; + for (let m = 0; m < Math.abs(offset); m++) { + await page.keyboard.press(offset < 0 ? "ArrowLeft" : "ArrowRight"); + await page.waitForTimeout(50); + } + await page.keyboard.press("Space"); + await page.waitForTimeout(300); + } + + const numbersAfter = await getNumbers(); + + // At least one number on the page should have increased + // (score, lines counter, level, etc.) + let anyIncreased = false; + const maxLen = Math.min(numbersBefore.length, numbersAfter.length); + for (let i = 0; i < maxLen; i++) { + if (numbersAfter[i] > numbersBefore[i]) { + anyIncreased = true; + break; + } + } + + // Also accept if new numbers appeared + if (!anyIncreased && numbersAfter.length > numbersBefore.length) { + anyIncreased = true; + } + + // Also accept if the max number increased + if (!anyIncreased) { + const maxBefore = numbersBefore.length > 0 ? Math.max(...numbersBefore) : 0; + const maxAfter = numbersAfter.length > 0 ? Math.max(...numbersAfter) : 0; + if (maxAfter > maxBefore) anyIncreased = true; + } + + expect( + anyIncreased, + "Expected at least one numeric value on the page to increase during play (score, lines, level)" + ).toBe(true); + }); + + // ---- 15. Game over when pieces reach top ---- + test("game over when pieces reach top", async ({ page }) => { + // Stack pieces in the center until the game ends. + // Drop as many pieces as possible straight down. + for (let i = 0; i < 50; i++) { + await page.keyboard.press("Space"); + await page.waitForTimeout(200); + } + + await page.waitForTimeout(2000); + + // After stacking to overflow, the game should show some game-over indicator: + // - text saying "game over", "you lose", "try again", "restart", "end" + // - or the game stops updating (static screen) + const text = ((await page.evaluate(() => document.body.innerText)) || "").toLowerCase(); + const gameOverText = + text.includes("game over") || + text.includes("gameover") || + text.includes("you lose") || + text.includes("try again") || + text.includes("restart") || + text.includes("play again") || + text.includes("ended"); + + // Check if the game stopped (screen is static) + const shot1 = await page.screenshot(); + await page.waitForTimeout(2000); + const shot2 = await page.screenshot(); + const isStatic = Buffer.from(shot1).equals(Buffer.from(shot2)); + + expect( + gameOverText || isStatic, + "Expected game-over text or the game to stop after stacking pieces to the top" + ).toBe(true); + }); + + // ---- 16. Game runs for 30 seconds without crashing ---- + test("game runs for 30 seconds without crashing", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", (err) => errors.push(err.message)); + + // Simulate varied gameplay for 30 seconds + const keys = [ + "ArrowLeft", + "ArrowRight", + "ArrowDown", + "ArrowUp", + "Space", + ]; + const start = Date.now(); + + while (Date.now() - start < 30_000) { + const key = keys[Math.floor(Math.random() * keys.length)]; + await page.keyboard.press(key); + await page.waitForTimeout(150 + Math.random() * 200); + } + + // The page should still be alive (not crashed, not blank) + const text = await page.evaluate(() => document.body.innerText); + expect(text, "Page body should not be empty after 30s of play").toBeTruthy(); + expect( + errors.length, + `Expected no console errors during 30s of play, got: ${errors.join("; ")}` + ).toBe(0); + }); +}); diff --git a/results/analysis/main_effects_build_quality.json b/results/analysis/main_effects_build_quality.json @@ -3,17 +3,17 @@ "values": { "javascript": { "mean": 1.0, - "effect": 0.1948, + "effect": 0.1968, "n": 18 }, "typescript": { - "mean": 0.8011, - "effect": -0.0041, - "n": 297 + "mean": 0.7989, + "effect": -0.0042, + "n": 302 }, "unspecified": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 17 } }, @@ -23,32 +23,32 @@ "values": { "glm-4.5-air": { "mean": 0.7057, - "effect": -0.0995, + "effect": -0.0975, "n": 37 }, "glm-4.7": { "mean": 0.6961, - "effect": -0.109, + "effect": -0.107, "n": 101 }, "glm-5.1": { - "mean": 0.7671, - "effect": -0.0381, - "n": 17 + "mean": 0.745, + "effect": -0.0582, + "n": 22 }, "haiku": { "mean": 0.7993, - "effect": -0.0059, + "effect": -0.0039, "n": 74 }, "opus": { "mean": 0.9676, - "effect": 0.1625, + "effect": 0.1645, "n": 51 }, "sonnet": { "mean": 0.9492, - "effect": 0.1441, + "effect": 0.1461, "n": 52 } }, @@ -58,42 +58,42 @@ "values": { "creative_validate": { "mean": 0.78, - "effect": -0.0252, + "effect": -0.0232, "n": 3 }, "delegate": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "iterate": { "mean": 0.78, - "effect": -0.0252, + "effect": -0.0232, "n": 3 }, "none": { - "mean": 0.7222, - "effect": -0.083, - "n": 158 + "mean": 0.7206, + "effect": -0.0826, + "n": 163 }, "plan_first": { "mean": 0.78, - "effect": -0.0252, + "effect": -0.0232, "n": 3 }, "review": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "split_work": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "use_subagents": { "mean": 0.8985, - "effect": 0.0933, + "effect": 0.0953, "n": 156 } }, @@ -103,18 +103,18 @@ "values": { "available": { "mean": 0.8907, - "effect": 0.0855, + "effect": 0.0875, "n": 160 }, "instructed": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 4 }, "off": { - "mean": 0.727, - "effect": -0.0782, - "n": 168 + "mean": 0.7253, + "effect": -0.0779, + "n": 173 } }, "spread": 0.2207 @@ -123,265 +123,265 @@ "values": { "canvas": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "dom": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "none": { - "mean": 0.8103, - "effect": 0.0051, - "n": 320 + "mean": 0.8081, + "effect": 0.0049, + "n": 325 }, "svg": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "webgl": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 } }, - "spread": 0.1403 + "spread": 0.1381 }, "architecture": { "values": { "best_practices": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "none": { - "mean": 0.8077, - "effect": 0.0025, - "n": 326 + "mean": 0.8056, + "effect": 0.0024, + "n": 331 }, "separation": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 } }, - "spread": 0.1377 + "spread": 0.1356 }, "design_guidance": { "values": { "none": { - "mean": 0.8077, - "effect": 0.0025, - "n": 326 + "mean": 0.8056, + "effect": 0.0024, + "n": 331 }, "specific": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 }, "vague": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 } }, - "spread": 0.1377 + "spread": 0.1356 }, "error_checking": { "values": { "none": { - "mean": 0.8064, + "mean": 0.8044, "effect": 0.0012, - "n": 329 + "n": 334 }, "self_verify": { "mean": 0.67, - "effect": -0.1352, + "effect": -0.1332, "n": 3 } }, - "spread": 0.1364 + "spread": 0.1344 }, "prompt_style": { "values": { "detailed": { "mean": 0.703, - "effect": -0.1022, + "effect": -0.1002, "n": 30 }, "simple": { - "mean": 0.8153, - "effect": 0.0102, - "n": 302 + "mean": 0.813, + "effect": 0.0098, + "n": 307 } }, - "spread": 0.1123 + "spread": 0.11 }, "tool_read": { "values": { "off": { - "mean": 0.7588, - "effect": -0.0463, - "n": 26 + "mean": 0.7525, + "effect": -0.0507, + "n": 28 }, "on": { - "mean": 0.8091, - "effect": 0.0039, - "n": 306 + "mean": 0.8078, + "effect": 0.0046, + "n": 309 } }, - "spread": 0.0503 + "spread": 0.0553 }, "max_budget": { "values": { "high": { "mean": 0.8515, - "effect": 0.0463, + "effect": 0.0483, "n": 20 }, "low": { - "mean": 0.8022, + "mean": 0.8001, "effect": -0.003, - "n": 312 + "n": 317 } }, - "spread": 0.0493 + "spread": 0.0514 }, "linter": { "values": { "off": { "mean": 0.7628, - "effect": -0.0424, + "effect": -0.0404, "n": 32 }, "on": { - "mean": 0.8097, - "effect": 0.0045, - "n": 300 + "mean": 0.8074, + "effect": 0.0042, + "n": 305 } }, - "spread": 0.0469 + "spread": 0.0446 }, "tool_edit": { "values": { "off": { "mean": 0.7643, - "effect": -0.0409, + "effect": -0.0389, "n": 28 }, "on": { - "mean": 0.8089, - "effect": 0.0038, - "n": 304 + "mean": 0.8067, + "effect": 0.0035, + "n": 309 } }, - "spread": 0.0446 + "spread": 0.0424 + }, + "human_language": { + "values": { + "en": { + "mean": 0.8063, + "effect": 0.0031, + "n": 310 + }, + "es": { + "mean": 0.7678, + "effect": -0.0354, + "n": 27 + } + }, + "spread": 0.0385 }, "tool_grep": { "values": { "off": { "mean": 0.7756, - "effect": -0.0296, + "effect": -0.0276, "n": 25 }, "on": { - "mean": 0.8076, - "effect": 0.0024, - "n": 307 + "mean": 0.8054, + "effect": 0.0022, + "n": 312 } }, - "spread": 0.032 + "spread": 0.0298 }, "tool_write": { "values": { "off": { "mean": 0.7756, - "effect": -0.0296, + "effect": -0.0276, "n": 25 }, "on": { - "mean": 0.8076, - "effect": 0.0024, - "n": 307 - } - }, - "spread": 0.032 - }, - "human_language": { - "values": { - "en": { - "mean": 0.8071, - "effect": 0.002, - "n": 308 - }, - "es": { - "mean": 0.78, - "effect": -0.0252, - "n": 24 + "mean": 0.8054, + "effect": 0.0022, + "n": 312 } }, - "spread": 0.0271 + "spread": 0.0298 }, "web_search": { "values": { "off": { "mean": 0.7871, - "effect": -0.0181, + "effect": -0.0161, "n": 31 }, "on": { - "mean": 0.807, - "effect": 0.0019, - "n": 301 + "mean": 0.8048, + "effect": 0.0016, + "n": 306 } }, - "spread": 0.0199 + "spread": 0.0177 }, "context_file": { "values": { "none": { - "mean": 0.8044, - "effect": -0.0008, - "n": 307 + "mean": 0.8022, + "effect": -0.001, + "n": 312 }, "provided": { "mean": 0.8152, - "effect": 0.01, + "effect": 0.012, "n": 25 } }, - "spread": 0.0108 + "spread": 0.013 }, "effort": { "values": { "high": { - "mean": 0.8056, - "effect": 0.0004, - "n": 314 + "mean": 0.8034, + "effect": 0.0003, + "n": 319 }, "max": { "mean": 0.7983, - "effect": -0.0068, + "effect": -0.0048, "n": 18 } }, - "spread": 0.0073 + "spread": 0.0051 }, "tool_glob": { "values": { "off": { "mean": 0.8075, - "effect": 0.0023, + "effect": 0.0043, "n": 24 }, "on": { - "mean": 0.805, - "effect": -0.0002, - "n": 308 + "mean": 0.8028, + "effect": -0.0003, + "n": 313 } }, - "spread": 0.0025 + "spread": 0.0047 } } \ No newline at end of file diff --git a/results/analysis/main_effects_code_quality.json b/results/analysis/main_effects_code_quality.json @@ -3,18 +3,18 @@ "values": { "available": { "mean": 0.8024, - "effect": 0.0967, + "effect": 0.099, "n": 160 }, "instructed": { "mean": 0.5, - "effect": -0.2057, + "effect": -0.2034, "n": 4 }, "off": { - "mean": 0.6185, - "effect": -0.0872, - "n": 168 + "mean": 0.6165, + "effect": -0.0869, + "n": 173 } }, "spread": 0.3024 @@ -23,32 +23,32 @@ "values": { "glm-4.5-air": { "mean": 0.6592, - "effect": -0.0465, + "effect": -0.0442, "n": 37 }, "glm-4.7": { "mean": 0.5674, - "effect": -0.1383, + "effect": -0.136, "n": 101 }, "glm-5.1": { - "mean": 0.6147, - "effect": -0.091, - "n": 17 + "mean": 0.6, + "effect": -0.1034, + "n": 22 }, "haiku": { "mean": 0.7176, - "effect": 0.0118, + "effect": 0.0142, "n": 74 }, "opus": { "mean": 0.8647, - "effect": 0.159, + "effect": 0.1613, "n": 51 }, "sonnet": { "mean": 0.8644, - "effect": 0.1587, + "effect": 0.161, "n": 52 } }, @@ -58,42 +58,42 @@ "values": { "creative_validate": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "delegate": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "iterate": { "mean": 0.7033, - "effect": -0.0024, + "effect": -0.0001, "n": 3 }, "none": { - "mean": 0.6204, - "effect": -0.0853, - "n": 158 + "mean": 0.6182, + "effect": -0.0852, + "n": 163 }, "plan_first": { "mean": 0.65, - "effect": -0.0557, + "effect": -0.0534, "n": 3 }, "review": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "split_work": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "use_subagents": { "mean": 0.8053, - "effect": 0.0995, + "effect": 0.1018, "n": 156 } }, @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "dom": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "none": { - "mean": 0.7116, - "effect": 0.0058, - "n": 320 + "mean": 0.7091, + "effect": 0.0057, + "n": 325 }, "svg": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "webgl": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 } }, - "spread": 0.1616 + "spread": 0.1591 }, "architecture": { "values": { "best_practices": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "none": { - "mean": 0.7086, - "effect": 0.0029, - "n": 326 + "mean": 0.7062, + "effect": 0.0028, + "n": 331 }, "separation": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 } }, - "spread": 0.1586 + "spread": 0.1562 }, "design_guidance": { "values": { "none": { - "mean": 0.7086, - "effect": 0.0029, - "n": 326 + "mean": 0.7062, + "effect": 0.0028, + "n": 331 }, "specific": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 }, "vague": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 } }, - "spread": 0.1586 + "spread": 0.1562 }, "error_checking": { "values": { "none": { - "mean": 0.7071, + "mean": 0.7048, "effect": 0.0014, - "n": 329 + "n": 334 }, "self_verify": { "mean": 0.55, - "effect": -0.1557, + "effect": -0.1534, "n": 3 } }, - "spread": 0.1571 + "spread": 0.1548 }, "tool_grep": { "values": { "off": { "mean": 0.7704, - "effect": 0.0647, + "effect": 0.067, "n": 25 }, "on": { - "mean": 0.7005, - "effect": -0.0053, - "n": 307 + "mean": 0.698, + "effect": -0.0054, + "n": 312 } }, - "spread": 0.0699 + "spread": 0.0724 }, "language": { "values": { "javascript": { "mean": 0.7639, - "effect": 0.0582, + "effect": 0.0605, "n": 18 }, "typescript": { - "mean": 0.6987, - "effect": -0.0071, - "n": 297 + "mean": 0.6962, + "effect": -0.0072, + "n": 302 }, "unspecified": { "mean": 0.7676, - "effect": 0.0619, + "effect": 0.0642, "n": 17 } }, - "spread": 0.0689 + "spread": 0.0714 }, "prompt_style": { "values": { "detailed": { "mean": 0.7617, - "effect": 0.0559, + "effect": 0.0583, "n": 30 }, "simple": { - "mean": 0.7002, - "effect": -0.0056, - "n": 302 + "mean": 0.6977, + "effect": -0.0057, + "n": 307 } }, - "spread": 0.0615 + "spread": 0.064 }, "max_budget": { "values": { "high": { "mean": 0.762, - "effect": 0.0563, + "effect": 0.0586, "n": 20 }, "low": { - "mean": 0.7021, - "effect": -0.0036, - "n": 312 + "mean": 0.6997, + "effect": -0.0037, + "n": 317 } }, - "spread": 0.0599 + "spread": 0.0623 }, "linter": { "values": { "off": { "mean": 0.7516, - "effect": 0.0458, + "effect": 0.0482, "n": 32 }, "on": { - "mean": 0.7008, - "effect": -0.0049, - "n": 300 - } - }, - "spread": 0.0508 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.75, - "effect": 0.0443, - "n": 26 - }, - "on": { - "mean": 0.702, - "effect": -0.0038, - "n": 306 + "mean": 0.6984, + "effect": -0.0051, + "n": 305 } }, - "spread": 0.048 + "spread": 0.0532 }, "tool_write": { "values": { "off": { "mean": 0.7496, - "effect": 0.0439, + "effect": 0.0462, "n": 25 }, "on": { - "mean": 0.7021, - "effect": -0.0036, - "n": 307 + "mean": 0.6997, + "effect": -0.0037, + "n": 312 } }, - "spread": 0.0475 + "spread": 0.0499 }, "tool_edit": { "values": { "off": { "mean": 0.7468, - "effect": 0.0411, + "effect": 0.0434, "n": 28 }, "on": { - "mean": 0.7019, - "effect": -0.0038, - "n": 304 + "mean": 0.6995, + "effect": -0.0039, + "n": 309 } }, - "spread": 0.0449 + "spread": 0.0473 }, "web_search": { "values": { "off": { "mean": 0.7461, - "effect": 0.0404, + "effect": 0.0427, "n": 31 }, "on": { - "mean": 0.7016, - "effect": -0.0042, - "n": 301 + "mean": 0.6991, + "effect": -0.0043, + "n": 306 + } + }, + "spread": 0.047 + }, + "tool_read": { + "values": { + "off": { + "mean": 0.7357, + "effect": 0.0323, + "n": 28 + }, + "on": { + "mean": 0.7005, + "effect": -0.0029, + "n": 309 } }, - "spread": 0.0445 + "spread": 0.0352 }, "tool_glob": { "values": { "off": { "mean": 0.7333, - "effect": 0.0276, + "effect": 0.0299, "n": 24 }, "on": { - "mean": 0.7036, - "effect": -0.0022, - "n": 308 + "mean": 0.7011, + "effect": -0.0023, + "n": 313 } }, - "spread": 0.0297 + "spread": 0.0322 }, "context_file": { "values": { "none": { - "mean": 0.7035, - "effect": -0.0022, - "n": 307 + "mean": 0.7011, + "effect": -0.0024, + "n": 312 }, "provided": { "mean": 0.7328, - "effect": 0.0271, + "effect": 0.0294, "n": 25 } }, - "spread": 0.0293 + "spread": 0.0317 }, "effort": { "values": { "high": { - "mean": 0.7072, - "effect": 0.0015, - "n": 314 + "mean": 0.7047, + "effect": 0.0013, + "n": 319 }, "max": { "mean": 0.68, - "effect": -0.0257, + "effect": -0.0234, "n": 18 } }, - "spread": 0.0272 + "spread": 0.0247 }, "human_language": { "values": { "en": { - "mean": 0.7049, - "effect": -0.0009, - "n": 308 + "mean": 0.7039, + "effect": 0.0005, + "n": 310 }, "es": { - "mean": 0.7167, - "effect": 0.0109, - "n": 24 + "mean": 0.6981, + "effect": -0.0053, + "n": 27 } }, - "spread": 0.0118 + "spread": 0.0058 } } \ No newline at end of file diff --git a/results/analysis/main_effects_cost.json b/results/analysis/main_effects_cost.json @@ -3,42 +3,42 @@ "values": { "creative_validate": { "mean": 1.797, - "effect": 1.361, + "effect": 1.3675, "n": 3 }, "delegate": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "iterate": { "mean": 0.9792, - "effect": 0.5432, + "effect": 0.5496, "n": 3 }, "none": { - "mean": 0.1627, - "effect": -0.2733, - "n": 158 + "mean": 0.1577, + "effect": -0.2719, + "n": 163 }, "plan_first": { "mean": 0.5439, - "effect": 0.1078, + "effect": 0.1143, "n": 3 }, "review": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "split_work": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "use_subagents": { "mean": 0.6993, - "effect": 0.2633, + "effect": 0.2698, "n": 156 } }, @@ -48,53 +48,53 @@ "values": { "glm-4.5-air": { "mean": 0.2575, - "effect": -0.1786, + "effect": -0.1721, "n": 37 }, "glm-4.7": { "mean": 0.1132, - "effect": -0.3229, + "effect": -0.3164, "n": 101 }, "glm-5.1": { - "mean": 0.0952, - "effect": -0.3409, - "n": 17 + "mean": 0.0735, + "effect": -0.356, + "n": 22 }, "haiku": { "mean": 0.266, - "effect": -0.1701, + "effect": -0.1636, "n": 74 }, "opus": { "mean": 0.6385, - "effect": 0.2024, + "effect": 0.2089, "n": 51 }, "sonnet": { "mean": 1.3451, - "effect": 0.9091, + "effect": 0.9156, "n": 52 } }, - "spread": 1.2499 + "spread": 1.2716 }, "playwright": { "values": { "available": { "mean": 0.6945, - "effect": 0.2585, + "effect": 0.2649, "n": 160 }, "instructed": { "mean": 0.0067, - "effect": -0.4293, + "effect": -0.4229, "n": 4 }, "off": { - "mean": 0.2001, - "effect": -0.2359, - "n": 168 + "mean": 0.1943, + "effect": -0.2353, + "n": 173 } }, "spread": 0.6878 @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "dom": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "none": { - "mean": 0.4524, - "effect": 0.0164, - "n": 320 + "mean": 0.4454, + "effect": 0.0159, + "n": 325 }, "svg": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "webgl": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 } }, - "spread": 0.4524 + "spread": 0.4454 }, "architecture": { "values": { "best_practices": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "none": { - "mean": 0.4441, - "effect": 0.008, - "n": 326 + "mean": 0.4373, + "effect": 0.0078, + "n": 331 }, "separation": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 } }, - "spread": 0.4441 + "spread": 0.4373 }, "design_guidance": { "values": { "none": { - "mean": 0.4441, - "effect": 0.008, - "n": 326 + "mean": 0.4373, + "effect": 0.0078, + "n": 331 }, "specific": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 }, "vague": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 } }, - "spread": 0.4441 + "spread": 0.4373 }, "error_checking": { "values": { "none": { - "mean": 0.44, - "effect": 0.004, - "n": 329 + "mean": 0.4334, + "effect": 0.0039, + "n": 334 }, "self_verify": { "mean": 0.0, - "effect": -0.436, + "effect": -0.4296, "n": 3 } }, - "spread": 0.44 + "spread": 0.4334 }, "effort": { "values": { "high": { - "mean": 0.4266, - "effect": -0.0094, - "n": 314 + "mean": 0.4199, + "effect": -0.0097, + "n": 319 }, "max": { "mean": 0.6006, - "effect": 0.1646, + "effect": 0.1711, "n": 18 } }, - "spread": 0.174 + "spread": 0.1807 }, "language": { "values": { "javascript": { "mean": 0.3246, - "effect": -0.1115, + "effect": -0.105, "n": 18 }, "typescript": { - "mean": 0.4469, - "effect": 0.0109, - "n": 297 + "mean": 0.4395, + "effect": 0.01, + "n": 302 }, "unspecified": { "mean": 0.3637, - "effect": -0.0723, + "effect": -0.0659, "n": 17 } }, - "spread": 0.1223 + "spread": 0.1149 }, "tool_edit": { "values": { "off": { "mean": 0.3515, - "effect": -0.0846, + "effect": -0.0781, "n": 28 }, "on": { - "mean": 0.4438, - "effect": 0.0078, - "n": 304 + "mean": 0.4366, + "effect": 0.0071, + "n": 309 } }, - "spread": 0.0923 + "spread": 0.0851 }, - "linter": { + "human_language": { "values": { - "off": { - "mean": 0.3933, - "effect": -0.0428, - "n": 32 + "en": { + "mean": 0.4332, + "effect": 0.0036, + "n": 310 }, - "on": { - "mean": 0.4406, - "effect": 0.0046, - "n": 300 + "es": { + "mean": 0.3879, + "effect": -0.0416, + "n": 27 } }, - "spread": 0.0473 + "spread": 0.0453 }, - "tool_glob": { + "tool_read": { "values": { "off": { - "mean": 0.4022, - "effect": -0.0338, - "n": 24 + "mean": 0.3884, + "effect": -0.0411, + "n": 28 }, "on": { - "mean": 0.4387, - "effect": 0.0026, - "n": 308 + "mean": 0.4333, + "effect": 0.0037, + "n": 309 } }, - "spread": 0.0365 + "spread": 0.0449 }, - "prompt_style": { + "linter": { "values": { - "detailed": { - "mean": 0.4041, - "effect": -0.032, - "n": 30 + "off": { + "mean": 0.3933, + "effect": -0.0363, + "n": 32 }, - "simple": { - "mean": 0.4392, - "effect": 0.0032, - "n": 302 + "on": { + "mean": 0.4334, + "effect": 0.0038, + "n": 305 } }, - "spread": 0.0351 + "spread": 0.0401 }, "web_search": { "values": { "off": { "mean": 0.4595, - "effect": 0.0234, + "effect": 0.0299, "n": 31 }, "on": { - "mean": 0.4336, - "effect": -0.0024, - "n": 301 + "mean": 0.4265, + "effect": -0.003, + "n": 306 } }, - "spread": 0.0259 + "spread": 0.033 }, - "tool_grep": { + "tool_glob": { "values": { "off": { - "mean": 0.4128, - "effect": -0.0233, - "n": 25 + "mean": 0.4022, + "effect": -0.0273, + "n": 24 }, "on": { - "mean": 0.4379, - "effect": 0.0019, - "n": 307 + "mean": 0.4317, + "effect": 0.0021, + "n": 313 } }, - "spread": 0.0251 + "spread": 0.0295 }, - "tool_write": { + "prompt_style": { "values": { - "off": { - "mean": 0.4164, - "effect": -0.0197, - "n": 25 + "detailed": { + "mean": 0.4041, + "effect": -0.0255, + "n": 30 }, - "on": { - "mean": 0.4376, - "effect": 0.0016, + "simple": { + "mean": 0.4321, + "effect": 0.0025, "n": 307 } }, - "spread": 0.0212 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.4183, - "effect": -0.0177, - "n": 26 - }, - "on": { - "mean": 0.4375, - "effect": 0.0015, - "n": 306 - } - }, - "spread": 0.0192 + "spread": 0.028 }, "context_file": { "values": { "none": { - "mean": 0.4349, - "effect": -0.0011, - "n": 307 + "mean": 0.4279, + "effect": -0.0016, + "n": 312 }, "provided": { "mean": 0.4501, - "effect": 0.0141, + "effect": 0.0206, + "n": 25 + } + }, + "spread": 0.0222 + }, + "tool_grep": { + "values": { + "off": { + "mean": 0.4128, + "effect": -0.0168, "n": 25 + }, + "on": { + "mean": 0.4309, + "effect": 0.0013, + "n": 312 } }, - "spread": 0.0152 + "spread": 0.0181 }, "max_budget": { "values": { "high": { "mean": 0.443, - "effect": 0.007, + "effect": 0.0135, "n": 20 }, "low": { - "mean": 0.4356, - "effect": -0.0004, - "n": 312 + "mean": 0.4287, + "effect": -0.0008, + "n": 317 } }, - "spread": 0.0074 + "spread": 0.0143 }, - "human_language": { + "tool_write": { "values": { - "en": { - "mean": 0.436, - "effect": -0.0, - "n": 308 + "off": { + "mean": 0.4164, + "effect": -0.0132, + "n": 25 }, - "es": { - "mean": 0.4364, - "effect": 0.0004, - "n": 24 + "on": { + "mean": 0.4306, + "effect": 0.0011, + "n": 312 } }, - "spread": 0.0004 + "spread": 0.0142 } } \ No newline at end of file diff --git a/results/analysis/main_effects_gameplay.json b/results/analysis/main_effects_gameplay.json @@ -3,32 +3,32 @@ "values": { "glm-4.5-air": { "mean": 0.313, - "effect": -0.0394, + "effect": -0.0341, "n": 37 }, "glm-4.7": { "mean": 0.0464, - "effect": -0.3059, + "effect": -0.3007, "n": 101 }, "glm-5.1": { - "mean": 0.1582, - "effect": -0.1941, - "n": 17 + "mean": 0.1223, + "effect": -0.2248, + "n": 22 }, "haiku": { "mean": 0.5473, - "effect": 0.1949, + "effect": 0.2002, "n": 74 }, "opus": { "mean": 0.661, - "effect": 0.3086, + "effect": 0.3139, "n": 51 }, "sonnet": { "mean": 0.4579, - "effect": 0.1055, + "effect": 0.1108, "n": 52 } }, @@ -38,18 +38,18 @@ "values": { "available": { "mean": 0.5426, - "effect": 0.1903, + "effect": 0.1955, "n": 160 }, "instructed": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 4 }, "off": { - "mean": 0.1795, + "mean": 0.1743, "effect": -0.1728, - "n": 168 + "n": 173 } }, "spread": 0.5426 @@ -58,42 +58,42 @@ "values": { "creative_validate": { "mean": 0.0833, - "effect": -0.269, + "effect": -0.2638, "n": 3 }, "delegate": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "iterate": { "mean": 0.3767, - "effect": 0.0243, + "effect": 0.0295, "n": 3 }, "none": { - "mean": 0.1977, - "effect": -0.1547, - "n": 158 + "mean": 0.1916, + "effect": -0.1555, + "n": 163 }, "plan_first": { "mean": 0.25, - "effect": -0.1023, + "effect": -0.0971, "n": 3 }, "review": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "split_work": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "use_subagents": { "mean": 0.536, - "effect": 0.1837, + "effect": 0.1889, "n": 156 } }, @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "dom": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "none": { - "mean": 0.3656, - "effect": 0.0132, - "n": 320 + "mean": 0.3599, + "effect": 0.0128, + "n": 325 }, "svg": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "webgl": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 } }, - "spread": 0.3656 + "spread": 0.3599 }, "architecture": { "values": { "best_practices": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "none": { - "mean": 0.3588, - "effect": 0.0065, - "n": 326 + "mean": 0.3534, + "effect": 0.0063, + "n": 331 }, "separation": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 } }, - "spread": 0.3588 + "spread": 0.3534 }, "design_guidance": { "values": { "none": { - "mean": 0.3588, - "effect": 0.0065, - "n": 326 + "mean": 0.3534, + "effect": 0.0063, + "n": 331 }, "specific": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 }, "vague": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 } }, - "spread": 0.3588 + "spread": 0.3534 }, "error_checking": { "values": { "none": { - "mean": 0.3556, - "effect": 0.0032, - "n": 329 + "mean": 0.3502, + "effect": 0.0031, + "n": 334 }, "self_verify": { "mean": 0.0, - "effect": -0.3523, + "effect": -0.3471, "n": 3 } }, - "spread": 0.3556 + "spread": 0.3502 }, "max_budget": { "values": { "high": { "mean": 0.6545, - "effect": 0.3022, + "effect": 0.3074, "n": 20 }, "low": { - "mean": 0.333, + "mean": 0.3277, "effect": -0.0194, - "n": 312 + "n": 317 } }, - "spread": 0.3215 + "spread": 0.3268 }, "tool_glob": { "values": { "off": { "mean": 0.6283, - "effect": 0.276, + "effect": 0.2812, "n": 24 }, "on": { - "mean": 0.3308, - "effect": -0.0215, - "n": 308 + "mean": 0.3256, + "effect": -0.0216, + "n": 313 } }, - "spread": 0.2975 + "spread": 0.3027 }, "context_file": { "values": { "none": { - "mean": 0.3304, - "effect": -0.0219, - "n": 307 + "mean": 0.3251, + "effect": -0.022, + "n": 312 }, "provided": { "mean": 0.6216, - "effect": 0.2693, + "effect": 0.2745, "n": 25 } }, - "spread": 0.2912 + "spread": 0.2965 }, "language": { "values": { "javascript": { "mean": 0.2367, - "effect": -0.1157, + "effect": -0.1105, "n": 18 }, "typescript": { - "mean": 0.3736, - "effect": 0.0213, - "n": 297 + "mean": 0.3675, + "effect": 0.0203, + "n": 302 }, "unspecified": { "mean": 0.1029, - "effect": -0.2494, + "effect": -0.2442, "n": 17 } }, - "spread": 0.2707 + "spread": 0.2646 }, "tool_grep": { "values": { "off": { "mean": 0.5536, - "effect": 0.2013, + "effect": 0.2065, "n": 25 }, "on": { - "mean": 0.336, - "effect": -0.0164, - "n": 307 + "mean": 0.3306, + "effect": -0.0165, + "n": 312 } }, - "spread": 0.2176 + "spread": 0.223 }, "tool_write": { "values": { "off": { "mean": 0.5384, - "effect": 0.1861, + "effect": 0.1913, "n": 25 }, "on": { - "mean": 0.3372, - "effect": -0.0152, - "n": 307 + "mean": 0.3318, + "effect": -0.0153, + "n": 312 } }, - "spread": 0.2012 + "spread": 0.2066 }, "tool_edit": { "values": { "off": { "mean": 0.5214, - "effect": 0.1691, + "effect": 0.1743, "n": 28 }, "on": { - "mean": 0.3368, - "effect": -0.0156, - "n": 304 + "mean": 0.3313, + "effect": -0.0158, + "n": 309 } }, - "spread": 0.1846 + "spread": 0.1901 }, "web_search": { "values": { "off": { "mean": 0.4519, - "effect": 0.0996, + "effect": 0.1048, "n": 31 }, "on": { - "mean": 0.3421, - "effect": -0.0103, - "n": 301 + "mean": 0.3365, + "effect": -0.0106, + "n": 306 } }, - "spread": 0.1098 + "spread": 0.1154 }, "effort": { "values": { "high": { - "mean": 0.3562, - "effect": 0.0039, - "n": 314 + "mean": 0.3506, + "effect": 0.0035, + "n": 319 }, "max": { "mean": 0.285, - "effect": -0.0673, + "effect": -0.0621, "n": 18 } }, - "spread": 0.0712 + "spread": 0.0656 }, "linter": { "values": { "off": { "mean": 0.4009, - "effect": 0.0486, + "effect": 0.0538, "n": 32 }, "on": { - "mean": 0.3472, - "effect": -0.0052, - "n": 300 + "mean": 0.3415, + "effect": -0.0056, + "n": 305 } }, - "spread": 0.0537 + "spread": 0.0594 + }, + "prompt_style": { + "values": { + "detailed": { + "mean": 0.3693, + "effect": 0.0222, + "n": 30 + }, + "simple": { + "mean": 0.345, + "effect": -0.0022, + "n": 307 + } + }, + "spread": 0.0243 }, "human_language": { "values": { "en": { - "mean": 0.3487, - "effect": -0.0036, - "n": 308 + "mean": 0.3465, + "effect": -0.0006, + "n": 310 }, "es": { - "mean": 0.3987, - "effect": 0.0464, - "n": 24 + "mean": 0.3544, + "effect": 0.0073, + "n": 27 } }, - "spread": 0.05 + "spread": 0.0079 }, "tool_read": { "values": { "off": { - "mean": 0.3785, - "effect": 0.0261, - "n": 26 + "mean": 0.3514, + "effect": 0.0043, + "n": 28 }, "on": { - "mean": 0.3501, - "effect": -0.0022, - "n": 306 - } - }, - "spread": 0.0284 - }, - "prompt_style": { - "values": { - "detailed": { - "mean": 0.3693, - "effect": 0.017, - "n": 30 - }, - "simple": { - "mean": 0.3507, - "effect": -0.0017, - "n": 302 + "mean": 0.3467, + "effect": -0.0004, + "n": 309 } }, - "spread": 0.0186 + "spread": 0.0047 } } \ No newline at end of file diff --git a/results/analysis/main_effects_score.json b/results/analysis/main_effects_score.json @@ -3,32 +3,32 @@ "values": { "glm-4.5-air": { "mean": 0.4032, - "effect": 0.0301, + "effect": 0.0356, "n": 37 }, "glm-4.7": { "mean": 0.0356, - "effect": -0.3376, + "effect": -0.3321, "n": 101 }, "glm-5.1": { - "mean": 0.1709, - "effect": -0.2023, - "n": 17 + "mean": 0.132, + "effect": -0.2356, + "n": 22 }, "haiku": { "mean": 0.5502, - "effect": 0.177, + "effect": 0.1825, "n": 74 }, "opus": { "mean": 0.6692, - "effect": 0.296, + "effect": 0.3016, "n": 51 }, "sonnet": { "mean": 0.5314, - "effect": 0.1582, + "effect": 0.1638, "n": 52 } }, @@ -38,42 +38,42 @@ "values": { "creative_validate": { "mean": 0.0417, - "effect": -0.3315, + "effect": -0.326, "n": 3 }, "delegate": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "iterate": { "mean": 0.1883, - "effect": -0.1849, + "effect": -0.1793, "n": 3 }, "none": { - "mean": 0.2166, - "effect": -0.1566, - "n": 158 + "mean": 0.2099, + "effect": -0.1577, + "n": 163 }, "plan_first": { "mean": 0.125, - "effect": -0.2482, + "effect": -0.2427, "n": 3 }, "review": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "split_work": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "use_subagents": { "mean": 0.568, - "effect": 0.1949, + "effect": 0.2004, "n": 156 } }, @@ -83,18 +83,18 @@ "values": { "available": { "mean": 0.5663, - "effect": 0.1931, + "effect": 0.1986, "n": 160 }, "instructed": { "mean": 0.1025, - "effect": -0.2707, + "effect": -0.2652, "n": 4 }, "off": { - "mean": 0.1957, - "effect": -0.1774, - "n": 168 + "mean": 0.1901, + "effect": -0.1776, + "n": 173 } }, "spread": 0.4638 @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "dom": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "none": { - "mean": 0.3872, - "effect": 0.014, - "n": 320 + "mean": 0.3812, + "effect": 0.0136, + "n": 325 }, "svg": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "webgl": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 } }, - "spread": 0.3872 + "spread": 0.3812 }, "architecture": { "values": { "best_practices": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "none": { - "mean": 0.3801, - "effect": 0.0069, - "n": 326 + "mean": 0.3743, + "effect": 0.0067, + "n": 331 }, "separation": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 } }, - "spread": 0.3801 + "spread": 0.3743 }, "design_guidance": { "values": { "none": { - "mean": 0.3801, - "effect": 0.0069, - "n": 326 + "mean": 0.3743, + "effect": 0.0067, + "n": 331 }, "specific": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 }, "vague": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 } }, - "spread": 0.3801 + "spread": 0.3743 }, "error_checking": { "values": { "none": { - "mean": 0.3766, - "effect": 0.0034, - "n": 329 + "mean": 0.371, + "effect": 0.0033, + "n": 334 }, "self_verify": { "mean": 0.0, - "effect": -0.3732, + "effect": -0.3677, "n": 3 } }, - "spread": 0.3766 + "spread": 0.371 }, "max_budget": { "values": { "high": { "mean": 0.5657, - "effect": 0.1926, + "effect": 0.1981, "n": 20 }, "low": { - "mean": 0.3608, - "effect": -0.0123, - "n": 312 + "mean": 0.3552, + "effect": -0.0125, + "n": 317 } }, - "spread": 0.2049 + "spread": 0.2105 }, "context_file": { "values": { "none": { - "mean": 0.3588, - "effect": -0.0144, - "n": 307 + "mean": 0.353, + "effect": -0.0146, + "n": 312 }, "provided": { "mean": 0.5504, - "effect": 0.1772, + "effect": 0.1827, "n": 25 } }, - "spread": 0.1916 + "spread": 0.1974 }, "tool_grep": { "values": { "off": { "mean": 0.5452, - "effect": 0.172, + "effect": 0.1775, "n": 25 }, "on": { - "mean": 0.3592, - "effect": -0.014, - "n": 307 + "mean": 0.3534, + "effect": -0.0142, + "n": 312 } }, - "spread": 0.186 + "spread": 0.1918 }, "tool_glob": { "values": { "off": { "mean": 0.5319, - "effect": 0.1587, + "effect": 0.1642, "n": 24 }, "on": { - "mean": 0.3608, - "effect": -0.0124, - "n": 308 + "mean": 0.3551, + "effect": -0.0126, + "n": 313 } }, - "spread": 0.1711 + "spread": 0.1768 }, "tool_write": { "values": { "off": { "mean": 0.5084, - "effect": 0.1352, + "effect": 0.1407, "n": 25 }, "on": { - "mean": 0.3622, - "effect": -0.011, - "n": 307 + "mean": 0.3564, + "effect": -0.0113, + "n": 312 } }, - "spread": 0.1462 + "spread": 0.152 }, "tool_edit": { "values": { "off": { "mean": 0.5007, - "effect": 0.1275, + "effect": 0.1331, "n": 28 }, "on": { - "mean": 0.3614, - "effect": -0.0117, - "n": 304 + "mean": 0.3556, + "effect": -0.0121, + "n": 309 } }, - "spread": 0.1393 + "spread": 0.1451 }, "web_search": { "values": { "off": { "mean": 0.4866, - "effect": 0.1134, + "effect": 0.119, "n": 31 }, "on": { - "mean": 0.3615, - "effect": -0.0117, - "n": 301 + "mean": 0.3556, + "effect": -0.0121, + "n": 306 } }, - "spread": 0.1251 + "spread": 0.131 }, "linter": { "values": { "off": { "mean": 0.483, - "effect": 0.1098, + "effect": 0.1153, "n": 32 }, "on": { - "mean": 0.3615, - "effect": -0.0117, - "n": 300 - } - }, - "spread": 0.1215 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.451, - "effect": 0.0778, - "n": 26 - }, - "on": { - "mean": 0.3666, - "effect": -0.0066, - "n": 306 - } - }, - "spread": 0.0844 - }, - "human_language": { - "values": { - "en": { - "mean": 0.3681, - "effect": -0.0051, - "n": 308 - }, - "es": { - "mean": 0.4387, - "effect": 0.0656, - "n": 24 + "mean": 0.3556, + "effect": -0.0121, + "n": 305 } }, - "spread": 0.0706 + "spread": 0.1274 }, "prompt_style": { "values": { "detailed": { "mean": 0.4348, - "effect": 0.0616, + "effect": 0.0672, "n": 30 }, "simple": { - "mean": 0.3671, - "effect": -0.0061, - "n": 302 + "mean": 0.3611, + "effect": -0.0066, + "n": 307 } }, - "spread": 0.0677 + "spread": 0.0737 }, "effort": { "values": { "high": { - "mean": 0.3767, - "effect": 0.0035, - "n": 314 + "mean": 0.3708, + "effect": 0.0031, + "n": 319 }, "max": { "mean": 0.3125, - "effect": -0.0607, + "effect": -0.0552, "n": 18 } }, - "spread": 0.0642 + "spread": 0.0583 + }, + "tool_read": { + "values": { + "off": { + "mean": 0.4188, + "effect": 0.0511, + "n": 28 + }, + "on": { + "mean": 0.363, + "effect": -0.0046, + "n": 309 + } + }, + "spread": 0.0558 }, "language": { "values": { "javascript": { "mean": 0.3767, - "effect": 0.0035, + "effect": 0.009, "n": 18 }, "typescript": { - "mean": 0.3759, - "effect": 0.0027, - "n": 297 + "mean": 0.3697, + "effect": 0.002, + "n": 302 }, "unspecified": { "mean": 0.3224, - "effect": -0.0508, + "effect": -0.0453, "n": 17 } }, "spread": 0.0543 + }, + "human_language": { + "values": { + "en": { + "mean": 0.3657, + "effect": -0.0019, + "n": 310 + }, + "es": { + "mean": 0.39, + "effect": 0.0223, + "n": 27 + } + }, + "spread": 0.0243 } } \ No newline at end of file diff --git a/results/analysis/main_effects_sonarqube.json b/results/analysis/main_effects_sonarqube.json @@ -3,32 +3,32 @@ "values": { "glm-4.5-air": { "mean": 0.4935, - "effect": 0.0995, + "effect": 0.1053, "n": 37 }, "glm-4.7": { "mean": 0.0248, - "effect": -0.3693, + "effect": -0.3634, "n": 101 }, "glm-5.1": { - "mean": 0.1835, - "effect": -0.2105, - "n": 17 + "mean": 0.1418, + "effect": -0.2464, + "n": 22 }, "haiku": { "mean": 0.5531, - "effect": 0.1591, + "effect": 0.1649, "n": 74 }, "opus": { "mean": 0.6775, - "effect": 0.2834, + "effect": 0.2893, "n": 51 }, "sonnet": { "mean": 0.605, - "effect": 0.211, + "effect": 0.2168, "n": 52 } }, @@ -38,42 +38,42 @@ "values": { "creative_validate": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "delegate": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "iterate": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "none": { - "mean": 0.2355, - "effect": -0.1585, - "n": 158 + "mean": 0.2283, + "effect": -0.1599, + "n": 163 }, "plan_first": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "review": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "split_work": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "use_subagents": { "mean": 0.6001, - "effect": 0.206, + "effect": 0.2119, "n": 156 } }, @@ -83,103 +83,103 @@ "values": { "canvas": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "dom": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "none": { - "mean": 0.4088, - "effect": 0.0148, - "n": 320 + "mean": 0.4025, + "effect": 0.0143, + "n": 325 }, "svg": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "webgl": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 } }, - "spread": 0.4088 + "spread": 0.4025 }, "architecture": { "values": { "best_practices": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "none": { - "mean": 0.4013, - "effect": 0.0073, - "n": 326 + "mean": 0.3952, + "effect": 0.007, + "n": 331 }, "separation": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 } }, - "spread": 0.4013 + "spread": 0.3952 }, "design_guidance": { "values": { "none": { - "mean": 0.4013, - "effect": 0.0073, - "n": 326 + "mean": 0.3952, + "effect": 0.007, + "n": 331 }, "specific": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 }, "vague": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 } }, - "spread": 0.4013 + "spread": 0.3952 }, "error_checking": { "values": { "none": { - "mean": 0.3976, - "effect": 0.0036, - "n": 329 + "mean": 0.3917, + "effect": 0.0035, + "n": 334 }, "self_verify": { "mean": 0.0, - "effect": -0.394, + "effect": -0.3882, "n": 3 } }, - "spread": 0.3976 + "spread": 0.3917 }, "playwright": { "values": { "available": { "mean": 0.5899, - "effect": 0.1959, + "effect": 0.2017, "n": 160 }, "instructed": { "mean": 0.205, - "effect": -0.189, + "effect": -0.1832, "n": 4 }, "off": { - "mean": 0.212, - "effect": -0.1821, - "n": 168 + "mean": 0.2058, + "effect": -0.1824, + "n": 173 } }, "spread": 0.3849 @@ -188,200 +188,200 @@ "values": { "off": { "mean": 0.565, - "effect": 0.171, + "effect": 0.1768, "n": 32 }, "on": { - "mean": 0.3758, - "effect": -0.0182, - "n": 300 + "mean": 0.3696, + "effect": -0.0186, + "n": 305 } }, - "spread": 0.1892 + "spread": 0.1954 }, "language": { "values": { "javascript": { "mean": 0.5167, - "effect": 0.1226, + "effect": 0.1285, "n": 18 }, "typescript": { - "mean": 0.3781, - "effect": -0.0159, - "n": 297 + "mean": 0.3719, + "effect": -0.0163, + "n": 302 }, "unspecified": { "mean": 0.5418, - "effect": 0.1477, + "effect": 0.1536, "n": 17 } }, - "spread": 0.1637 + "spread": 0.1699 }, "tool_grep": { "values": { "off": { "mean": 0.5368, - "effect": 0.1428, + "effect": 0.1486, "n": 25 }, "on": { - "mean": 0.3824, - "effect": -0.0116, - "n": 307 - } - }, - "spread": 0.1544 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.5235, - "effect": 0.1294, - "n": 26 - }, - "on": { - "mean": 0.383, - "effect": -0.011, - "n": 306 + "mean": 0.3763, + "effect": -0.0119, + "n": 312 } }, - "spread": 0.1405 + "spread": 0.1605 }, "web_search": { "values": { "off": { "mean": 0.5213, - "effect": 0.1273, + "effect": 0.1331, "n": 31 }, "on": { - "mean": 0.3809, - "effect": -0.0131, - "n": 301 + "mean": 0.3747, + "effect": -0.0135, + "n": 306 } }, - "spread": 0.1404 + "spread": 0.1466 }, "prompt_style": { "values": { "detailed": { "mean": 0.5003, - "effect": 0.1063, + "effect": 0.1121, "n": 30 }, "simple": { - "mean": 0.3835, - "effect": -0.0106, - "n": 302 + "mean": 0.3772, + "effect": -0.011, + "n": 307 } }, - "spread": 0.1168 + "spread": 0.1231 + }, + "tool_read": { + "values": { + "off": { + "mean": 0.4861, + "effect": 0.0979, + "n": 28 + }, + "on": { + "mean": 0.3793, + "effect": -0.0089, + "n": 309 + } + }, + "spread": 0.1068 }, "tool_edit": { "values": { "off": { "mean": 0.48, - "effect": 0.086, + "effect": 0.0918, "n": 28 }, "on": { - "mean": 0.3861, - "effect": -0.0079, - "n": 304 + "mean": 0.3799, + "effect": -0.0083, + "n": 309 } }, - "spread": 0.0939 + "spread": 0.1001 }, "context_file": { "values": { "none": { - "mean": 0.3871, - "effect": -0.0069, - "n": 307 + "mean": 0.3809, + "effect": -0.0073, + "n": 312 }, "provided": { "mean": 0.4792, - "effect": 0.0852, + "effect": 0.091, "n": 25 } }, - "spread": 0.0921 - }, - "human_language": { - "values": { - "en": { - "mean": 0.3874, - "effect": -0.0066, - "n": 308 - }, - "es": { - "mean": 0.4788, - "effect": 0.0847, - "n": 24 - } - }, - "spread": 0.0914 + "spread": 0.0983 }, "tool_write": { "values": { "off": { "mean": 0.4784, - "effect": 0.0844, + "effect": 0.0902, "n": 25 }, "on": { - "mean": 0.3872, - "effect": -0.0069, - "n": 307 + "mean": 0.381, + "effect": -0.0072, + "n": 312 } }, - "spread": 0.0912 + "spread": 0.0974 }, "max_budget": { "values": { "high": { "mean": 0.477, - "effect": 0.083, + "effect": 0.0888, "n": 20 }, "low": { - "mean": 0.3887, - "effect": -0.0053, - "n": 312 + "mean": 0.3826, + "effect": -0.0056, + "n": 317 } }, - "spread": 0.0883 + "spread": 0.0944 }, "effort": { "values": { "high": { - "mean": 0.3971, - "effect": 0.0031, - "n": 314 + "mean": 0.3909, + "effect": 0.0027, + "n": 319 }, "max": { "mean": 0.34, - "effect": -0.054, + "effect": -0.0482, "n": 18 } }, - "spread": 0.0571 + "spread": 0.0509 }, "tool_glob": { "values": { "off": { "mean": 0.4354, - "effect": 0.0414, + "effect": 0.0472, "n": 24 }, "on": { - "mean": 0.3908, - "effect": -0.0032, - "n": 308 + "mean": 0.3846, + "effect": -0.0036, + "n": 313 + } + }, + "spread": 0.0508 + }, + "human_language": { + "values": { + "en": { + "mean": 0.3849, + "effect": -0.0033, + "n": 310 + }, + "es": { + "mean": 0.4256, + "effect": 0.0374, + "n": 27 } }, - "spread": 0.0446 + "spread": 0.0407 } } \ No newline at end of file diff --git a/results/analysis/main_effects_structural.json b/results/analysis/main_effects_structural.json @@ -3,32 +3,32 @@ "values": { "glm-4.5-air": { "mean": 0.5973, - "effect": -0.1332, + "effect": -0.1298, "n": 37 }, "glm-4.7": { "mean": 0.5423, - "effect": -0.1882, + "effect": -0.1848, "n": 101 }, "glm-5.1": { - "mean": 0.6335, - "effect": -0.097, - "n": 17 + "mean": 0.6032, + "effect": -0.1239, + "n": 22 }, "haiku": { "mean": 0.7865, - "effect": 0.056, + "effect": 0.0594, "n": 74 }, "opus": { "mean": 0.9739, - "effect": 0.2434, + "effect": 0.2469, "n": 51 }, "sonnet": { "mean": 0.904, - "effect": 0.1736, + "effect": 0.177, "n": 52 } }, @@ -38,42 +38,42 @@ "values": { "creative_validate": { "mean": 0.75, - "effect": 0.0195, + "effect": 0.0229, "n": 3 }, "delegate": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "iterate": { "mean": 0.75, - "effect": 0.0195, + "effect": 0.0229, "n": 3 }, "none": { - "mean": 0.5996, - "effect": -0.1309, - "n": 158 + "mean": 0.5965, + "effect": -0.1306, + "n": 163 }, "plan_first": { "mean": 0.6667, - "effect": -0.0638, + "effect": -0.0604, "n": 3 }, "review": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "split_work": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "use_subagents": { "mean": 0.8769, - "effect": 0.1464, + "effect": 0.1498, "n": 156 } }, @@ -83,18 +83,18 @@ "values": { "available": { "mean": 0.8711, - "effect": 0.1406, + "effect": 0.144, "n": 160 }, "instructed": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 4 }, "off": { - "mean": 0.6021, - "effect": -0.1284, - "n": 168 + "mean": 0.5991, + "effect": -0.1279, + "n": 173 } }, "spread": 0.3711 @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "dom": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "none": { - "mean": 0.7391, - "effect": 0.0086, - "n": 320 + "mean": 0.7354, + "effect": 0.0084, + "n": 325 }, "svg": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "webgl": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 } }, - "spread": 0.2391 + "spread": 0.2354 }, "architecture": { "values": { "best_practices": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "none": { - "mean": 0.7347, - "effect": 0.0042, - "n": 326 + "mean": 0.7312, + "effect": 0.0041, + "n": 331 }, "separation": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 } }, - "spread": 0.2347 + "spread": 0.2312 }, "design_guidance": { "values": { "none": { - "mean": 0.7347, - "effect": 0.0042, - "n": 326 + "mean": 0.7312, + "effect": 0.0041, + "n": 331 }, "specific": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 }, "vague": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 } }, - "spread": 0.2347 + "spread": 0.2312 }, "error_checking": { "values": { "none": { - "mean": 0.7326, - "effect": 0.0021, - "n": 329 + "mean": 0.7291, + "effect": 0.002, + "n": 334 }, "self_verify": { "mean": 0.5, - "effect": -0.2305, + "effect": -0.2271, "n": 3 } }, - "spread": 0.2326 + "spread": 0.2291 }, "max_budget": { "values": { "high": { "mean": 0.8295, - "effect": 0.099, + "effect": 0.1024, "n": 20 }, "low": { - "mean": 0.7241, - "effect": -0.0063, - "n": 312 + "mean": 0.7206, + "effect": -0.0065, + "n": 317 } }, - "spread": 0.1054 + "spread": 0.1089 }, "language": { "values": { "javascript": { "mean": 0.7983, - "effect": 0.0679, + "effect": 0.0713, "n": 18 }, "typescript": { - "mean": 0.7265, - "effect": -0.004, - "n": 297 + "mean": 0.7227, + "effect": -0.0043, + "n": 302 }, "unspecified": { "mean": 0.7282, - "effect": -0.0022, + "effect": 0.0012, "n": 17 } }, - "spread": 0.0718 + "spread": 0.0756 }, "context_file": { "values": { "none": { - "mean": 0.7251, - "effect": -0.0054, - "n": 307 + "mean": 0.7215, + "effect": -0.0056, + "n": 312 }, "provided": { "mean": 0.7968, - "effect": 0.0663, + "effect": 0.0697, "n": 25 } }, - "spread": 0.0717 + "spread": 0.0753 }, "prompt_style": { "values": { "detailed": { "mean": 0.6673, - "effect": -0.0631, + "effect": -0.0597, "n": 30 }, "simple": { - "mean": 0.7368, - "effect": 0.0063, - "n": 302 + "mean": 0.7329, + "effect": 0.0058, + "n": 307 } }, - "spread": 0.0695 + "spread": 0.0656 }, "tool_write": { "values": { "off": { "mean": 0.7868, - "effect": 0.0563, + "effect": 0.0597, "n": 25 }, "on": { - "mean": 0.7259, - "effect": -0.0046, - "n": 307 + "mean": 0.7223, + "effect": -0.0048, + "n": 312 } }, - "spread": 0.0609 + "spread": 0.0645 }, "tool_glob": { "values": { "off": { "mean": 0.7675, - "effect": 0.037, + "effect": 0.0404, "n": 24 }, "on": { - "mean": 0.7276, - "effect": -0.0029, - "n": 308 + "mean": 0.724, + "effect": -0.0031, + "n": 313 } }, - "spread": 0.0399 + "spread": 0.0435 }, "web_search": { "values": { "off": { "mean": 0.7584, - "effect": 0.0279, + "effect": 0.0313, "n": 31 }, "on": { - "mean": 0.7276, - "effect": -0.0029, - "n": 301 + "mean": 0.7239, + "effect": -0.0032, + "n": 306 } }, - "spread": 0.0308 + "spread": 0.0345 }, - "human_language": { + "tool_read": { "values": { - "en": { - "mean": 0.7287, - "effect": -0.0018, - "n": 308 + "off": { + "mean": 0.7029, + "effect": -0.0242, + "n": 28 }, - "es": { - "mean": 0.7538, - "effect": 0.0233, - "n": 24 + "on": { + "mean": 0.7293, + "effect": 0.0022, + "n": 309 } }, - "spread": 0.0251 + "spread": 0.0264 }, "linter": { "values": { "off": { "mean": 0.7087, - "effect": -0.0217, + "effect": -0.0183, "n": 32 }, "on": { - "mean": 0.7328, - "effect": 0.0023, - "n": 300 + "mean": 0.729, + "effect": 0.0019, + "n": 305 } }, - "spread": 0.0241 + "spread": 0.0203 }, "effort": { "values": { "high": { - "mean": 0.7318, - "effect": 0.0013, - "n": 314 + "mean": 0.7281, + "effect": 0.0011, + "n": 319 }, "max": { "mean": 0.7083, - "effect": -0.0221, + "effect": -0.0187, "n": 18 } }, - "spread": 0.0235 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.7185, - "effect": -0.012, - "n": 26 - }, - "on": { - "mean": 0.7315, - "effect": 0.001, - "n": 306 - } - }, - "spread": 0.013 + "spread": 0.0198 }, "tool_edit": { "values": { "off": { "mean": 0.7325, - "effect": 0.002, + "effect": 0.0054, "n": 28 }, "on": { - "mean": 0.7303, - "effect": -0.0002, - "n": 304 + "mean": 0.7266, + "effect": -0.0005, + "n": 309 } }, - "spread": 0.0022 + "spread": 0.0059 }, "tool_grep": { "values": { "off": { "mean": 0.7304, - "effect": -0.0001, + "effect": 0.0033, "n": 25 }, "on": { - "mean": 0.7305, - "effect": 0.0, - "n": 307 + "mean": 0.7268, + "effect": -0.0003, + "n": 312 + } + }, + "spread": 0.0036 + }, + "human_language": { + "values": { + "en": { + "mean": 0.7272, + "effect": 0.0001, + "n": 310 + }, + "es": { + "mean": 0.7256, + "effect": -0.0015, + "n": 27 } }, - "spread": 0.0001 + "spread": 0.0016 } } \ No newline at end of file diff --git a/results/analysis/main_effects_transcript.json b/results/analysis/main_effects_transcript.json @@ -3,32 +3,32 @@ "values": { "glm-4.5-air": { "mean": 0.9622, - "effect": 0.021, + "effect": 0.0202, "n": 37 }, "glm-4.7": { "mean": 0.9842, - "effect": 0.043, + "effect": 0.0422, "n": 101 }, "glm-5.1": { "mean": 1.0, - "effect": 0.0589, - "n": 17 + "effect": 0.058, + "n": 22 }, "haiku": { "mean": 0.7872, - "effect": -0.154, + "effect": -0.1548, "n": 74 }, "opus": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 51 }, "sonnet": { "mean": 0.9846, - "effect": 0.0435, + "effect": 0.0426, "n": 52 } }, @@ -38,42 +38,42 @@ "values": { "creative_validate": { "mean": 0.95, - "effect": 0.0089, + "effect": 0.008, "n": 3 }, "delegate": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "iterate": { "mean": 0.8667, - "effect": -0.0744, + "effect": -0.0753, "n": 3 }, "none": { - "mean": 0.9639, - "effect": 0.0228, - "n": 158 + "mean": 0.965, + "effect": 0.023, + "n": 163 }, "plan_first": { "mean": 0.8167, - "effect": -0.1244, + "effect": -0.1253, "n": 3 }, "review": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "split_work": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "use_subagents": { "mean": 0.9183, - "effect": -0.0228, + "effect": -0.0237, "n": 156 } }, @@ -83,63 +83,63 @@ "values": { "off": { "mean": 0.8554, - "effect": -0.0858, + "effect": -0.0866, "n": 28 }, "on": { - "mean": 0.949, + "mean": 0.9498, "effect": 0.0079, - "n": 304 + "n": 309 } }, - "spread": 0.0936 + "spread": 0.0944 }, "tool_write": { "values": { "off": { "mean": 0.858, - "effect": -0.0831, + "effect": -0.084, "n": 25 }, "on": { - "mean": 0.9479, - "effect": 0.0068, - "n": 307 + "mean": 0.9487, + "effect": 0.0067, + "n": 312 } }, - "spread": 0.0899 + "spread": 0.0907 }, "context_file": { "values": { "none": { - "mean": 0.9477, + "mean": 0.9486, "effect": 0.0066, - "n": 307 + "n": 312 }, "provided": { "mean": 0.86, - "effect": -0.0811, + "effect": -0.082, "n": 25 } }, - "spread": 0.0877 + "spread": 0.0886 }, "playwright": { "values": { "available": { "mean": 0.9175, - "effect": -0.0236, + "effect": -0.0245, "n": 160 }, "instructed": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 4 }, "off": { - "mean": 0.9622, - "effect": 0.0211, - "n": 168 + "mean": 0.9633, + "effect": 0.0213, + "n": 173 } }, "spread": 0.0825 @@ -148,240 +148,240 @@ "values": { "off": { "mean": 0.866, - "effect": -0.0751, + "effect": -0.076, "n": 25 }, "on": { - "mean": 0.9472, + "mean": 0.9481, "effect": 0.0061, - "n": 307 + "n": 312 } }, - "spread": 0.0812 + "spread": 0.0821 }, "tool_glob": { "values": { "off": { "mean": 0.8667, - "effect": -0.0744, + "effect": -0.0753, "n": 24 }, "on": { - "mean": 0.9469, + "mean": 0.9478, "effect": 0.0058, - "n": 308 + "n": 313 } }, - "spread": 0.0802 + "spread": 0.0811 }, "max_budget": { "values": { "high": { "mean": 0.8675, - "effect": -0.0736, + "effect": -0.0745, "n": 20 }, "low": { - "mean": 0.9458, - "effect": 0.0047, - "n": 312 - } - }, - "spread": 0.0783 - }, - "tool_read": { - "values": { - "off": { - "mean": 0.875, - "effect": -0.0661, - "n": 26 - }, - "on": { "mean": 0.9467, - "effect": 0.0056, - "n": 306 + "effect": 0.0047, + "n": 317 } }, - "spread": 0.0717 + "spread": 0.0792 }, "web_search": { "values": { "off": { "mean": 0.8806, - "effect": -0.0605, + "effect": -0.0613, "n": 31 }, "on": { - "mean": 0.9473, + "mean": 0.9482, "effect": 0.0062, - "n": 301 + "n": 306 } }, - "spread": 0.0667 + "spread": 0.0676 }, "linter": { "values": { "off": { "mean": 0.8812, - "effect": -0.0599, + "effect": -0.0607, "n": 32 }, "on": { - "mean": 0.9475, + "mean": 0.9484, "effect": 0.0064, - "n": 300 + "n": 305 } }, - "spread": 0.0663 + "spread": 0.0672 }, "language": { "values": { "javascript": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 18 }, "typescript": { - "mean": 0.935, - "effect": -0.0061, - "n": 297 + "mean": 0.9361, + "effect": -0.0059, + "n": 302 }, "unspecified": { "mean": 0.9853, - "effect": 0.0442, + "effect": 0.0433, "n": 17 } }, - "spread": 0.065 + "spread": 0.0639 }, - "human_language": { + "tool_read": { "values": { - "en": { - "mean": 0.9458, - "effect": 0.0047, - "n": 308 + "off": { + "mean": 0.8839, + "effect": -0.0581, + "n": 28 }, - "es": { - "mean": 0.8812, - "effect": -0.0599, - "n": 24 + "on": { + "mean": 0.9472, + "effect": 0.0053, + "n": 309 } }, - "spread": 0.0646 + "spread": 0.0633 }, "renderer": { "values": { "canvas": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "dom": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "none": { - "mean": 0.9389, - "effect": -0.0022, - "n": 320 + "mean": 0.9398, + "effect": -0.0021, + "n": 325 }, "svg": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "webgl": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 } }, - "spread": 0.0611 + "spread": 0.0602 }, "architecture": { "values": { "best_practices": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "none": { - "mean": 0.94, + "mean": 0.9409, "effect": -0.0011, - "n": 326 + "n": 331 }, "separation": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 } }, - "spread": 0.06 + "spread": 0.0591 }, "design_guidance": { "values": { "none": { - "mean": 0.94, + "mean": 0.9409, "effect": -0.0011, - "n": 326 + "n": 331 }, "specific": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 }, "vague": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 } }, - "spread": 0.06 + "spread": 0.0591 }, "error_checking": { "values": { "none": { - "mean": 0.9406, + "mean": 0.9415, "effect": -0.0005, - "n": 329 + "n": 334 }, "self_verify": { "mean": 1.0, - "effect": 0.0589, + "effect": 0.058, "n": 3 } }, - "spread": 0.0594 + "spread": 0.0585 + }, + "human_language": { + "values": { + "en": { + "mean": 0.9461, + "effect": 0.0041, + "n": 310 + }, + "es": { + "mean": 0.8944, + "effect": -0.0475, + "n": 27 + } + }, + "spread": 0.0517 }, "prompt_style": { "values": { "detailed": { "mean": 0.905, - "effect": -0.0361, + "effect": -0.037, "n": 30 }, "simple": { - "mean": 0.9447, + "mean": 0.9456, "effect": 0.0036, - "n": 302 + "n": 307 } }, - "spread": 0.0397 + "spread": 0.0406 }, "effort": { "values": { "high": { - "mean": 0.9411, - "effect": -0.0, - "n": 314 + "mean": 0.942, + "effect": 0.0, + "n": 319 }, "max": { "mean": 0.9417, - "effect": 0.0006, + "effect": -0.0003, "n": 18 } }, - "spread": 0.0006 + "spread": 0.0003 } } \ No newline at end of file diff --git a/results/analysis/main_effects_turns.json b/results/analysis/main_effects_turns.json @@ -3,42 +3,42 @@ "values": { "creative_validate": { "mean": 69.3333, - "effect": 54.4267, + "effect": 54.633, "n": 3 }, "delegate": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "iterate": { "mean": 1.3333, - "effect": -13.5733, + "effect": -13.367, "n": 3 }, "none": { - "mean": 8.5506, - "effect": -6.356, - "n": 158 + "mean": 8.319, + "effect": -6.3813, + "n": 163 }, "plan_first": { "mean": 1.6667, - "effect": -13.24, + "effect": -13.0336, "n": 3 }, "review": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "split_work": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "use_subagents": { "mean": 21.6154, - "effect": 6.7088, + "effect": 6.9151, "n": 156 } }, @@ -48,32 +48,32 @@ "values": { "glm-4.5-air": { "mean": 13.2703, - "effect": -1.6364, + "effect": -1.43, "n": 37 }, "glm-4.7": { "mean": 3.7921, - "effect": -11.1145, + "effect": -10.9082, "n": 101 }, "glm-5.1": { - "mean": 6.4706, - "effect": -8.436, - "n": 17 + "mean": 5.2273, + "effect": -9.473, + "n": 22 }, "haiku": { "mean": 26.2838, - "effect": 11.3772, + "effect": 11.5835, "n": 74 }, "opus": { "mean": 19.2549, - "effect": 4.3483, + "effect": 4.5546, "n": 51 }, "sonnet": { "mean": 19.9615, - "effect": 5.0549, + "effect": 5.2612, "n": 52 } }, @@ -83,18 +83,18 @@ "values": { "available": { "mean": 21.5562, - "effect": 6.6496, + "effect": 6.856, "n": 160 }, "instructed": { "mean": 2.0, - "effect": -12.9066, + "effect": -12.7003, "n": 4 }, "off": { - "mean": 8.881, - "effect": -6.0257, - "n": 168 + "mean": 8.6532, + "effect": -6.0471, + "n": 173 } }, "spread": 19.5562 @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "dom": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "none": { - "mean": 15.4281, - "effect": 0.5215, - "n": 320 + "mean": 15.2062, + "effect": 0.5059, + "n": 325 }, "svg": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "webgl": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 } }, - "spread": 14.4281 + "spread": 14.2062 }, "architecture": { "values": { "best_practices": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "none": { - "mean": 15.1626, - "effect": 0.256, - "n": 326 + "mean": 14.9486, + "effect": 0.2483, + "n": 331 }, "separation": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 } }, - "spread": 14.1626 + "spread": 13.9486 }, "design_guidance": { "values": { "none": { - "mean": 15.1626, - "effect": 0.256, - "n": 326 + "mean": 14.9486, + "effect": 0.2483, + "n": 331 }, "specific": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 }, "vague": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 } }, - "spread": 14.1626 + "spread": 13.9486 }, "error_checking": { "values": { "none": { - "mean": 15.0334, - "effect": 0.1268, - "n": 329 + "mean": 14.8234, + "effect": 0.1231, + "n": 334 }, "self_verify": { "mean": 1.0, - "effect": -13.9066, + "effect": -13.7003, "n": 3 } }, - "spread": 14.0334 + "spread": 13.8234 }, "language": { "values": { "javascript": { "mean": 5.7778, - "effect": -9.1288, + "effect": -8.9225, "n": 18 }, "typescript": { - "mean": 15.9562, - "effect": 1.0496, - "n": 297 + "mean": 15.7086, + "effect": 1.0083, + "n": 302 }, "unspecified": { "mean": 6.2353, - "effect": -8.6713, + "effect": -8.465, "n": 17 } }, - "spread": 10.1784 + "spread": 9.9308 }, "tool_write": { "values": { "off": { "mean": 22.84, - "effect": 7.9334, + "effect": 8.1397, "n": 25 }, "on": { - "mean": 14.2606, - "effect": -0.646, - "n": 307 + "mean": 14.0481, + "effect": -0.6522, + "n": 312 } }, - "spread": 8.5794 + "spread": 8.7919 }, "context_file": { "values": { "none": { - "mean": 14.2866, - "effect": -0.62, - "n": 307 + "mean": 14.0737, + "effect": -0.6266, + "n": 312 }, "provided": { "mean": 22.52, - "effect": 7.6134, + "effect": 7.8197, "n": 25 } }, - "spread": 8.2334 + "spread": 8.4463 }, "web_search": { "values": { "off": { "mean": 22.2258, - "effect": 7.3192, + "effect": 7.5255, "n": 31 }, "on": { - "mean": 14.1528, - "effect": -0.7538, - "n": 301 + "mean": 13.9379, + "effect": -0.7624, + "n": 306 } }, - "spread": 8.073 + "spread": 8.2879 }, "max_budget": { "values": { "high": { "mean": 22.3, - "effect": 7.3934, + "effect": 7.5997, "n": 20 }, "low": { - "mean": 14.4327, - "effect": -0.4739, - "n": 312 + "mean": 14.2208, + "effect": -0.4795, + "n": 317 } }, - "spread": 7.8673 + "spread": 8.0792 }, - "human_language": { + "tool_glob": { "values": { - "en": { - "mean": 14.3701, - "effect": -0.5365, - "n": 308 - }, - "es": { - "mean": 21.7917, - "effect": 6.885, + "off": { + "mean": 20.7917, + "effect": 6.0914, "n": 24 + }, + "on": { + "mean": 14.2332, + "effect": -0.4671, + "n": 313 } }, - "spread": 7.4216 + "spread": 6.5585 }, - "tool_read": { + "tool_grep": { "values": { "off": { - "mean": 21.0385, - "effect": 6.1318, - "n": 26 + "mean": 20.28, + "effect": 5.5797, + "n": 25 }, "on": { - "mean": 14.3856, - "effect": -0.521, - "n": 306 + "mean": 14.2532, + "effect": -0.4471, + "n": 312 } }, - "spread": 6.6529 + "spread": 6.0268 }, - "tool_glob": { + "tool_edit": { "values": { "off": { - "mean": 20.7917, - "effect": 5.885, - "n": 24 + "mean": 20.1429, + "effect": 5.4426, + "n": 28 }, "on": { - "mean": 14.4481, - "effect": -0.4586, - "n": 308 + "mean": 14.2071, + "effect": -0.4932, + "n": 309 } }, - "spread": 6.3436 + "spread": 5.9358 }, - "tool_grep": { + "tool_read": { "values": { "off": { - "mean": 20.28, - "effect": 5.3734, - "n": 25 + "mean": 19.6071, + "effect": 4.9068, + "n": 28 }, "on": { - "mean": 14.4691, - "effect": -0.4376, - "n": 307 + "mean": 14.2557, + "effect": -0.4446, + "n": 309 } }, - "spread": 5.8109 + "spread": 5.3514 }, - "tool_edit": { + "human_language": { "values": { - "off": { - "mean": 20.1429, - "effect": 5.2362, - "n": 28 + "en": { + "mean": 14.2839, + "effect": -0.4164, + "n": 310 }, - "on": { - "mean": 14.4243, - "effect": -0.4823, - "n": 304 + "es": { + "mean": 19.4815, + "effect": 4.7812, + "n": 27 } }, - "spread": 5.7186 + "spread": 5.1976 }, "linter": { "values": { "off": { "mean": 19.1562, - "effect": 4.2496, + "effect": 4.456, "n": 32 }, "on": { - "mean": 14.4533, - "effect": -0.4533, - "n": 300 + "mean": 14.2328, + "effect": -0.4675, + "n": 305 } }, - "spread": 4.7029 + "spread": 4.9234 }, "effort": { "values": { "high": { - "mean": 14.6561, - "effect": -0.2506, - "n": 314 + "mean": 14.442, + "effect": -0.2583, + "n": 319 }, "max": { "mean": 19.2778, - "effect": 4.3712, + "effect": 4.5775, "n": 18 } }, - "spread": 4.6217 + "spread": 4.8358 }, "prompt_style": { "values": { "detailed": { "mean": 14.9, - "effect": -0.0066, + "effect": 0.1997, "n": 30 }, "simple": { - "mean": 14.9073, - "effect": 0.0007, - "n": 302 + "mean": 14.6808, + "effect": -0.0195, + "n": 307 } }, - "spread": 0.0073 + "spread": 0.2192 } } \ No newline at end of file diff --git a/results/analysis/main_effects_wall_time.json b/results/analysis/main_effects_wall_time.json @@ -3,42 +3,42 @@ "values": { "creative_validate": { "mean": 748.0, - "effect": 403.4819, + "effect": 405.6677, "n": 3 }, "delegate": { "mean": 201.0, - "effect": -143.5181, + "effect": -141.3323, "n": 3 }, "iterate": { "mean": 635.6667, - "effect": 291.1486, + "effect": 293.3343, "n": 3 }, "none": { - "mean": 272.2405, - "effect": -72.2776, - "n": 158 + "mean": 269.9387, + "effect": -72.3937, + "n": 163 }, "plan_first": { "mean": 926.0, - "effect": 581.4819, + "effect": 583.6677, "n": 3 }, "review": { "mean": 201.6667, - "effect": -142.8514, + "effect": -140.6657, "n": 3 }, "split_work": { "mean": 202.3333, - "effect": -142.1847, + "effect": -139.999, "n": 3 }, "use_subagents": { "mean": 401.4231, - "effect": 56.905, + "effect": 59.0907, "n": 156 } }, @@ -48,32 +48,32 @@ "values": { "glm-4.5-air": { "mean": 386.3784, - "effect": 41.8603, + "effect": 44.046, "n": 37 }, "glm-4.7": { "mean": 251.4455, - "effect": -93.0725, + "effect": -90.8868, "n": 101 }, "glm-5.1": { - "mean": 292.3529, - "effect": -52.1651, - "n": 17 + "mean": 270.7273, + "effect": -71.6051, + "n": 22 }, "haiku": { "mean": 219.973, - "effect": -124.5451, + "effect": -122.3594, "n": 74 }, "opus": { "mean": 224.3529, - "effect": -120.1651, + "effect": -117.9794, "n": 51 }, "sonnet": { "mean": 807.6538, - "effect": 463.1358, + "effect": 465.3215, "n": 52 } }, @@ -83,18 +83,18 @@ "values": { "available": { "mean": 397.6812, - "effect": 53.1632, + "effect": 55.3489, "n": 160 }, "instructed": { "mean": 218.25, - "effect": -126.2681, + "effect": -124.0823, "n": 4 }, "off": { - "mean": 296.8929, - "effect": -47.6252, - "n": 168 + "mean": 294.0116, + "effect": -48.3208, + "n": 173 } }, "spread": 179.4312 @@ -103,285 +103,285 @@ "values": { "canvas": { "mean": 197.3333, - "effect": -147.1847, + "effect": -144.999, "n": 3 }, "dom": { "mean": 203.3333, - "effect": -141.1847, + "effect": -138.999, "n": 3 }, "none": { - "mean": 349.9656, - "effect": 5.4476, - "n": 320 + "mean": 347.6154, + "effect": 5.283, + "n": 325 }, "svg": { "mean": 198.3333, - "effect": -146.1847, + "effect": -143.999, "n": 3 }, "webgl": { "mean": 198.0, - "effect": -146.5181, + "effect": -144.3323, "n": 3 } }, - "spread": 152.6323 + "spread": 150.2821 }, "design_guidance": { "values": { "none": { - "mean": 347.2055, - "effect": 2.6874, - "n": 326 + "mean": 344.9396, + "effect": 2.6072, + "n": 331 }, "specific": { "mean": 199.0, - "effect": -145.5181, + "effect": -143.3323, "n": 3 }, "vague": { "mean": 198.0, - "effect": -146.5181, + "effect": -144.3323, "n": 3 } }, - "spread": 149.2055 + "spread": 146.9396 }, "architecture": { "values": { "best_practices": { "mean": 208.0, - "effect": -136.5181, + "effect": -134.3323, "n": 3 }, "none": { - "mean": 347.1196, - "effect": 2.6016, - "n": 326 + "mean": 344.855, + "effect": 2.5226, + "n": 331 }, "separation": { "mean": 198.3333, - "effect": -146.1847, + "effect": -143.999, "n": 3 } }, - "spread": 148.7863 + "spread": 146.5217 }, "error_checking": { "values": { "none": { - "mean": 345.845, - "effect": 1.3269, - "n": 329 + "mean": 343.6198, + "effect": 1.2874, + "n": 334 }, "self_verify": { "mean": 199.0, - "effect": -145.5181, + "effect": -143.3323, "n": 3 } }, - "spread": 146.845 + "spread": 144.6198 }, "effort": { "values": { "high": { - "mean": 337.3535, - "effect": -7.1646, - "n": 314 + "mean": 335.1567, + "effect": -7.1756, + "n": 319 }, "max": { "mean": 469.5, - "effect": 124.9819, + "effect": 127.1677, "n": 18 } }, - "spread": 132.1465 + "spread": 134.3433 }, "tool_edit": { "values": { "off": { "mean": 282.8214, - "effect": -61.6966, + "effect": -59.5109, "n": 28 }, "on": { - "mean": 350.2007, - "effect": 5.6826, - "n": 304 + "mean": 347.7249, + "effect": 5.3926, + "n": 309 + } + }, + "spread": 64.9035 + }, + "context_file": { + "values": { + "none": { + "mean": 346.4583, + "effect": 4.126, + "n": 312 + }, + "provided": { + "mean": 290.84, + "effect": -51.4923, + "n": 25 } }, - "spread": 67.3793 + "spread": 55.6183 }, "language": { "values": { "javascript": { "mean": 291.6667, - "effect": -52.8514, + "effect": -50.6657, "n": 18 }, "typescript": { - "mean": 349.8047, - "effect": 5.2866, - "n": 297 + "mean": 347.2781, + "effect": 4.9458, + "n": 302 }, "unspecified": { "mean": 308.1176, - "effect": -36.4004, + "effect": -34.2147, "n": 17 } }, - "spread": 58.138 - }, - "context_file": { - "values": { - "none": { - "mean": 348.8893, - "effect": 4.3712, - "n": 307 - }, - "provided": { - "mean": 290.84, - "effect": -53.6781, - "n": 25 - } - }, - "spread": 58.0493 + "spread": 55.6114 }, "max_budget": { "values": { "high": { "mean": 294.5, - "effect": -50.0181, + "effect": -47.8323, "n": 20 }, "low": { - "mean": 347.7244, - "effect": 3.2063, - "n": 312 + "mean": 345.3502, + "effect": 3.0178, + "n": 317 } }, - "spread": 53.2244 + "spread": 50.8502 }, "tool_write": { "values": { "off": { "mean": 295.84, - "effect": -48.6781, + "effect": -46.4923, "n": 25 }, "on": { - "mean": 348.4821, - "effect": 3.964, - "n": 307 + "mean": 346.0577, + "effect": 3.7253, + "n": 312 } }, - "spread": 52.6421 + "spread": 50.2177 }, "prompt_style": { "values": { "detailed": { "mean": 297.6667, - "effect": -46.8514, + "effect": -44.6657, "n": 30 }, "simple": { - "mean": 349.1722, - "effect": 4.6541, - "n": 302 + "mean": 346.6971, + "effect": 4.3647, + "n": 307 } }, - "spread": 51.5055 + "spread": 49.0304 }, "tool_glob": { "values": { "off": { "mean": 300.6667, - "effect": -43.8514, + "effect": -41.6657, "n": 24 }, "on": { - "mean": 347.9351, - "effect": 3.417, - "n": 308 + "mean": 345.5272, + "effect": 3.1948, + "n": 313 } }, - "spread": 47.2684 + "spread": 44.8605 }, "tool_grep": { "values": { "off": { "mean": 302.12, - "effect": -42.3981, + "effect": -40.2123, "n": 25 }, "on": { - "mean": 347.9707, - "effect": 3.4526, - "n": 307 + "mean": 345.5545, + "effect": 3.2221, + "n": 312 } }, - "spread": 45.8507 + "spread": 43.4345 }, "web_search": { "values": { "off": { "mean": 369.129, - "effect": 24.611, + "effect": 26.7967, "n": 31 }, "on": { - "mean": 341.9834, - "effect": -2.5347, - "n": 301 + "mean": 339.6176, + "effect": -2.7147, + "n": 306 } }, - "spread": 27.1456 + "spread": 29.5114 }, "human_language": { "values": { "en": { - "mean": 345.0682, - "effect": 0.5501, - "n": 308 + "mean": 344.1419, + "effect": 1.8096, + "n": 310 }, "es": { - "mean": 337.4583, - "effect": -7.0597, - "n": 24 + "mean": 321.5556, + "effect": -20.7768, + "n": 27 } }, - "spread": 7.6099 + "spread": 22.5863 }, "tool_read": { "values": { "off": { - "mean": 338.5, - "effect": -6.0181, - "n": 26 + "mean": 328.7143, + "effect": -13.6181, + "n": 28 }, "on": { - "mean": 345.0294, - "effect": 0.5113, - "n": 306 + "mean": 343.5663, + "effect": 1.234, + "n": 309 } }, - "spread": 6.5294 + "spread": 14.852 }, "linter": { "values": { "off": { "mean": 338.8125, - "effect": -5.7056, + "effect": -3.5198, "n": 32 }, "on": { - "mean": 345.1267, - "effect": 0.6086, - "n": 300 + "mean": 342.7016, + "effect": 0.3693, + "n": 305 } }, - "spread": 6.3142 + "spread": 3.8891 } } \ No newline at end of file diff --git a/results/index.jsonl b/results/index.jsonl @@ -338,3 +338,8 @@ {"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "a1c761c9", "short_cell_id": "329334cb", "completed_at": "2026-04-06T23:26:15.770556+00:00"} {"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "c2541fee", "short_cell_id": "329334cb", "completed_at": "2026-04-06T23:26:30.791423+00:00"} {"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "d61bbd6f", "short_cell_id": "329334cb", "completed_at": "2026-04-06T23:29:30.995973+00:00"} +{"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "187c67ef", "short_cell_id": "c358a5f2", "completed_at": "2026-04-06T23:29:48.613041+00:00"} +{"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "5ca32e79", "short_cell_id": "c358a5f2", "completed_at": "2026-04-06T23:32:45.834386+00:00"} +{"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", "short_id": "9d78ce6d", "short_cell_id": "c358a5f2", "completed_at": "2026-04-06T23:33:11.419999+00:00"} +{"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on", "short_id": "5e839ecf", "short_cell_id": "a5e4f2ff", "completed_at": "2026-04-06T23:36:03.547927+00:00"} +{"run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2", "task": "tetris", "model": "glm-5.1", "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on", "short_id": "40e70ba8", "short_cell_id": "a5e4f2ff", "completed_at": "2026-04-06T23:36:47.293831+00:00"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_output.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_output.json @@ -0,0 +1 @@ +{"type":"result","subtype":"success","is_error":true,"duration_ms":190903,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"20260407073602cd46216b7b7444a4\"}","stop_reason":"stop_sequence","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"39ea789d-938a-47cd-b11b-5a2f817b94d9"} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_stderr.log b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/claude_stderr.log diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/eval_results.json @@ -0,0 +1,134 @@ +{ + "structural": { + "pass": false, + "checks": [ + { + "name": "entry_point_exists", + "pass": false, + "detail": "no index.html found in workspace root, dist/, or public/" + }, + { + "name": "package_json_exists", + "pass": true, + "detail": "package.json found" + }, + { + "name": "build_succeeds", + "pass": true, + "detail": "no build script defined (static project)" + }, + { + "name": "typescript_compiles", + "pass": false, + "detail": "TypeScript files found but no tsconfig.json" + } + ], + "score": 0.5 + }, + "quality": { + "lint": { + "pass": true, + "errors": 0, + "warnings": 0 + }, + "typecheck": { + "pass": false, + "error": "no tsconfig.json" + }, + "performance": { + "pass": true, + "bundle_size_bytes": 0, + "size_under_512kb": true + }, + "score": 0.67 + }, + "code_analysis": { + "files": { + "total": 6, + "code": 4, + "docs": 0, + "unnecessary": 0, + "unnecessary_list": [] + }, + "lines_of_code": 596, + "dependencies": { + "production": 0, + "dev": 4, + "total": 4 + }, + "complexity": "moderate", + "console_logs": 0, + "magic_numbers": { + "count": 37, + "excessive": true + }, + "function_length": { + "count": 16, + "average": 6.6, + "max": 16, + "long_functions": 0 + }, + "max_nesting_depth": 5, + "global_declarations": 0, + "naming": { + "dominant_style": "camelCase", + "consistency_pct": 100.0, + "camel_case": 141, + "snake_case": 0 + }, + "error_handling": { + "try_catch_blocks": 4, + "has_error_handling": true + }, + "comments": { + "comment_lines": 70, + "source_lines": 444, + "ratio_pct": 15.8 + }, + "separation_of_concerns": { + "verdict": "mixed", + "files_with_rendering": 2, + "files_with_logic": 1, + "files_with_both": 1 + }, + "html_validation": { + "valid": false, + "errors": 0 + }, + "duplication_percentage": 0.0, + "score": 0.55 + }, + "transcript_analysis": { + "total_events": 15, + "tool_calls": { + "total": 0, + "bash": 0, + "write": 0, + "edit": 0, + "read": 0 + }, + "wasted_turns": { + "total": 0, + "docs": 0, + "ascii_art": 0, + "server_starts": 0 + }, + "errors_encountered": 0, + "thinking_blocks": 0, + "text_blocks": 1, + "productivity_ratio": 0, + "self_tested": false, + "score": 1.0 + }, + "gameplay_bot": { + "pass": false, + "score": 0, + "error": "no HTML files in workspace - game was not built" + }, + "outcome_score": 0.0, + "score": 0.0, + "sonarqube": { + "error": "SonarQube not running at localhost:9000", + "score": 0 + } +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/meta.json @@ -0,0 +1,40 @@ +{ + "model": "glm-5.1", + "effort": "high", + "prompt_style": "simple", + "language": "typescript", + "human_language": "en", + "tool_read": "off", + "tool_write": "on", + "tool_edit": "on", + "tool_glob": "on", + "tool_grep": "on", + "linter": "on", + "playwright": "off", + "context_file": "none", + "web_search": "on", + "max_budget": "low", + "tests_provided": "none", + "strategy": "none", + "design_guidance": "none", + "architecture": "none", + "error_checking": "none", + "context_noise": "clean", + "renderer": "none", + "provider": "zai", + "task": "tetris", + "actual_model": "glm-5.1", + "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on", + "runs_per_cell": 3, + "timeout_seconds": 1200, + "max_budget_usd": 2.0, + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1", + "short_id": "5e839ecf", + "short_cell_id": "a5e4f2ff", + "run_number": 1, + "claude_version": "2.1.92 (Claude Code)", + "started_at": "2026-04-06T23:32:50.345581+00:00", + "wall_time_seconds": 191, + "exit_code": 1, + "completed_at": "2026-04-06T23:36:03.547927+00:00" +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run1/transcript.jsonl @@ -0,0 +1,15 @@ +{"type": "harness", "subtype": "config", "model": "glm-5.1", "effort": "high", "tools": ["Bash", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch"], "max_budget_usd": 2.0, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} +{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} +{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-xnyv85cl","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"glm-5.1","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"d81c1b8f-e4dd-43e9-9aa0-850b47cbd178","fast_mode_state":"off"} +{"type":"system","subtype":"api_retry","attempt":1,"max_retries":10,"retry_delay_ms":583.1017210306259,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"52025e05-57a3-4abc-a67d-b1b7b22a011a"} +{"type":"system","subtype":"api_retry","attempt":2,"max_retries":10,"retry_delay_ms":1061.3432638778352,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"01b4a1db-4325-4b4d-9cfd-f4b273ce9771"} +{"type":"system","subtype":"api_retry","attempt":3,"max_retries":10,"retry_delay_ms":2358.1673927823367,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"a9dfab47-f570-4159-b18b-d2fd579388ea"} +{"type":"system","subtype":"api_retry","attempt":4,"max_retries":10,"retry_delay_ms":4745.538776255855,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"330f5e5c-d779-4ac0-a118-2a2cc715b353"} +{"type":"system","subtype":"api_retry","attempt":5,"max_retries":10,"retry_delay_ms":8972.279377157904,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"0c7b9e26-88d9-4fbe-8fa7-b0c76b00dcab"} +{"type":"system","subtype":"api_retry","attempt":6,"max_retries":10,"retry_delay_ms":16862.67132843304,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"cb991080-43f9-405c-9c46-53299b523984"} +{"type":"system","subtype":"api_retry","attempt":7,"max_retries":10,"retry_delay_ms":32808.88606772545,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"ae77fc9c-4c04-41cc-a357-099e251fbc30"} +{"type":"system","subtype":"api_retry","attempt":8,"max_retries":10,"retry_delay_ms":35011.79813326103,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"25ef731d-af72-4080-8226-e59f90a7fb28"} +{"type":"system","subtype":"api_retry","attempt":9,"max_retries":10,"retry_delay_ms":36863.39847112808,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"1ed8b977-6d89-4ea9-a0fb-b347da3d71bb"} +{"type":"system","subtype":"api_retry","attempt":10,"max_retries":10,"retry_delay_ms":33559.113843513485,"error_status":429,"error":"rate_limit","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"bdf9428e-1350-40f5-aa28-1daa7d9ec683"} +{"type":"assistant","message":{"id":"f167411a-2d92-4ab0-9479-7206ecbd3a91","container":null,"model":"<synthetic>","role":"assistant","stop_reason":"stop_sequence","stop_sequence":"","type":"message","usage":{"input_tokens":0,"output_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":null,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":null,"iterations":null,"speed":null},"content":[{"type":"text","text":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"20260407073602cd46216b7b7444a4\"}"}],"context_management":null},"parent_tool_use_id":null,"session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","uuid":"3c65ceb0-0bd0-4349-8f10-f90886825255","error":"unknown"} +{"type":"result","subtype":"success","is_error":true,"duration_ms":190903,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"20260407073602cd46216b7b7444a4\"}","stop_reason":"stop_sequence","session_id":"3195b6a5-c80a-4beb-93eb-57184301fe78","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"39ea789d-938a-47cd-b11b-5a2f817b94d9"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_output.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_output.json @@ -0,0 +1 @@ +{"type":"result","subtype":"success","is_error":true,"duration_ms":211710,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070736460776deebbeb44355\"}","stop_reason":"stop_sequence","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"15f48a70-a121-4eb2-8c6f-f7d67ccbc2b7"} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_stderr.log b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/claude_stderr.log diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/eval_results.json @@ -0,0 +1,134 @@ +{ + "structural": { + "pass": false, + "checks": [ + { + "name": "entry_point_exists", + "pass": false, + "detail": "no index.html found in workspace root, dist/, or public/" + }, + { + "name": "package_json_exists", + "pass": true, + "detail": "package.json found" + }, + { + "name": "build_succeeds", + "pass": true, + "detail": "no build script defined (static project)" + }, + { + "name": "typescript_compiles", + "pass": false, + "detail": "TypeScript files found but no tsconfig.json" + } + ], + "score": 0.5 + }, + "quality": { + "lint": { + "pass": true, + "errors": 0, + "warnings": 0 + }, + "typecheck": { + "pass": false, + "error": "no tsconfig.json" + }, + "performance": { + "pass": true, + "bundle_size_bytes": 0, + "size_under_512kb": true + }, + "score": 0.67 + }, + "code_analysis": { + "files": { + "total": 6, + "code": 4, + "docs": 0, + "unnecessary": 0, + "unnecessary_list": [] + }, + "lines_of_code": 596, + "dependencies": { + "production": 0, + "dev": 4, + "total": 4 + }, + "complexity": "moderate", + "console_logs": 0, + "magic_numbers": { + "count": 37, + "excessive": true + }, + "function_length": { + "count": 16, + "average": 6.6, + "max": 16, + "long_functions": 0 + }, + "max_nesting_depth": 5, + "global_declarations": 0, + "naming": { + "dominant_style": "camelCase", + "consistency_pct": 100.0, + "camel_case": 141, + "snake_case": 0 + }, + "error_handling": { + "try_catch_blocks": 4, + "has_error_handling": true + }, + "comments": { + "comment_lines": 70, + "source_lines": 444, + "ratio_pct": 15.8 + }, + "separation_of_concerns": { + "verdict": "mixed", + "files_with_rendering": 2, + "files_with_logic": 1, + "files_with_both": 1 + }, + "html_validation": { + "valid": false, + "errors": 0 + }, + "duplication_percentage": 0.0, + "score": 0.55 + }, + "transcript_analysis": { + "total_events": 15, + "tool_calls": { + "total": 0, + "bash": 0, + "write": 0, + "edit": 0, + "read": 0 + }, + "wasted_turns": { + "total": 0, + "docs": 0, + "ascii_art": 0, + "server_starts": 0 + }, + "errors_encountered": 0, + "thinking_blocks": 0, + "text_blocks": 1, + "productivity_ratio": 0, + "self_tested": false, + "score": 1.0 + }, + "gameplay_bot": { + "pass": false, + "score": 0, + "error": "no HTML files in workspace - game was not built" + }, + "outcome_score": 0.0, + "score": 0.0, + "sonarqube": { + "error": "SonarQube not running at localhost:9000", + "score": 0 + } +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/meta.json @@ -0,0 +1,40 @@ +{ + "model": "glm-5.1", + "effort": "high", + "prompt_style": "simple", + "language": "typescript", + "human_language": "en", + "tool_read": "off", + "tool_write": "on", + "tool_edit": "on", + "tool_glob": "on", + "tool_grep": "on", + "linter": "on", + "playwright": "off", + "context_file": "none", + "web_search": "on", + "max_budget": "low", + "tests_provided": "none", + "strategy": "none", + "design_guidance": "none", + "architecture": "none", + "error_checking": "none", + "context_noise": "clean", + "renderer": "none", + "provider": "zai", + "task": "tetris", + "actual_model": "glm-5.1", + "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on", + "runs_per_cell": 3, + "timeout_seconds": 1200, + "max_budget_usd": 2.0, + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2", + "short_id": "40e70ba8", + "short_cell_id": "a5e4f2ff", + "run_number": 2, + "claude_version": "2.1.92 (Claude Code)", + "started_at": "2026-04-06T23:33:13.404569+00:00", + "wall_time_seconds": 212, + "exit_code": 1, + "completed_at": "2026-04-06T23:36:47.293831+00:00" +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run2/transcript.jsonl @@ -0,0 +1,15 @@ +{"type": "harness", "subtype": "config", "model": "glm-5.1", "effort": "high", "tools": ["Bash", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch"], "max_budget_usd": 2.0, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} +{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} +{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-mdqvehsx","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"glm-5.1","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"6da6aa1d-43b0-4ded-ba08-a900e610f3aa","fast_mode_state":"off"} +{"type":"system","subtype":"api_retry","attempt":1,"max_retries":10,"retry_delay_ms":531.0895172630778,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"bfcefc4f-9377-4bcc-9fde-813395788e10"} +{"type":"system","subtype":"api_retry","attempt":2,"max_retries":10,"retry_delay_ms":1158.040584862092,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"3c6ec7d8-9cf8-4bcd-a251-bb63a6b441c5"} +{"type":"system","subtype":"api_retry","attempt":3,"max_retries":10,"retry_delay_ms":2377.506502330428,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"1e09c27e-c903-4f2b-9051-e6dbe1ef112e"} +{"type":"system","subtype":"api_retry","attempt":4,"max_retries":10,"retry_delay_ms":4360.405271572787,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"aa41e843-21cf-4c2b-a78c-98ca27af335e"} +{"type":"system","subtype":"api_retry","attempt":5,"max_retries":10,"retry_delay_ms":8004.431317184725,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"be622400-28b0-4ad2-a66b-df8b91d0a506"} +{"type":"system","subtype":"api_retry","attempt":6,"max_retries":10,"retry_delay_ms":19236.84082954883,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"3cbb5fb0-dde9-4909-bbb9-302d63a6f0ca"} +{"type":"system","subtype":"api_retry","attempt":7,"max_retries":10,"retry_delay_ms":39200.349500703815,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"3c461257-ffa4-40ae-9a10-31006aeb1e96"} +{"type":"system","subtype":"api_retry","attempt":8,"max_retries":10,"retry_delay_ms":36941.05977870032,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"8d04ed06-bdd4-4d15-96c9-6b53133b9a8b"} +{"type":"system","subtype":"api_retry","attempt":9,"max_retries":10,"retry_delay_ms":38429.90999901948,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"eb80a137-7b9e-4f90-b243-bd3ee4b86f5d"} +{"type":"system","subtype":"api_retry","attempt":10,"max_retries":10,"retry_delay_ms":39199.79197877186,"error_status":429,"error":"rate_limit","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"6f3ae166-0951-4d6c-ab6c-1bd4538cc321"} +{"type":"assistant","message":{"id":"ecb40537-efed-43e3-9fe8-405d8cbe9c1b","container":null,"model":"<synthetic>","role":"assistant","stop_reason":"stop_sequence","stop_sequence":"","type":"message","usage":{"input_tokens":0,"output_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":null,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":null,"iterations":null,"speed":null},"content":[{"type":"text","text":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070736460776deebbeb44355\"}"}],"context_management":null},"parent_tool_use_id":null,"session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","uuid":"dd570c75-6620-4ac7-9c19-94eb1e1c1952","error":"unknown"} +{"type":"result","subtype":"success","is_error":true,"duration_ms":211710,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070736460776deebbeb44355\"}","stop_reason":"stop_sequence","session_id":"b9784d21-8e55-45e5-bf80-2dd845ca3bed","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"15f48a70-a121-4eb2-8c6f-f7d67ccbc2b7"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/claude_stderr.log b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/claude_stderr.log diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/meta.json @@ -0,0 +1,37 @@ +{ + "model": "glm-5.1", + "effort": "high", + "prompt_style": "simple", + "language": "typescript", + "human_language": "en", + "tool_read": "off", + "tool_write": "on", + "tool_edit": "on", + "tool_glob": "on", + "tool_grep": "on", + "linter": "on", + "playwright": "off", + "context_file": "none", + "web_search": "on", + "max_budget": "low", + "tests_provided": "none", + "strategy": "none", + "design_guidance": "none", + "architecture": "none", + "error_checking": "none", + "context_noise": "clean", + "renderer": "none", + "provider": "zai", + "task": "tetris", + "actual_model": "glm-5.1", + "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on", + "runs_per_cell": 3, + "timeout_seconds": 1200, + "max_budget_usd": 2.0, + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3", + "short_id": "2d900db2", + "short_cell_id": "a5e4f2ff", + "run_number": 3, + "claude_version": "2.1.92 (Claude Code)", + "started_at": "2026-04-06T23:36:05.765312+00:00" +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=off_twrite=on_web=on_run3/transcript.jsonl @@ -0,0 +1,9 @@ +{"type": "harness", "subtype": "config", "model": "glm-5.1", "effort": "high", "tools": ["Bash", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch"], "max_budget_usd": 2.0, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} +{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} +{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-2tdsxbvy","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"glm-5.1","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"4df0d9cb-e056-4e6c-9f1b-83f4a3e1b1bb","fast_mode_state":"off"} +{"type":"system","subtype":"api_retry","attempt":1,"max_retries":10,"retry_delay_ms":504.48528679497343,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"d36b2a35-4ee5-4fe2-94e5-b24ed33e2637"} +{"type":"system","subtype":"api_retry","attempt":2,"max_retries":10,"retry_delay_ms":1110.582102370137,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"2e4adbb3-78b9-4329-a123-810ea1a1616c"} +{"type":"system","subtype":"api_retry","attempt":3,"max_retries":10,"retry_delay_ms":2178.66048314636,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"5d907e14-bc38-4306-a498-d757262d029a"} +{"type":"system","subtype":"api_retry","attempt":4,"max_retries":10,"retry_delay_ms":4246.400425600607,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"439930e9-e48d-4aec-8b60-0794e107552f"} +{"type":"system","subtype":"api_retry","attempt":5,"max_retries":10,"retry_delay_ms":8006.152903226269,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"6f5f68b4-93f4-46ea-a1c3-8e4a9e086f77"} +{"type":"system","subtype":"api_retry","attempt":6,"max_retries":10,"retry_delay_ms":17678.815099357424,"error_status":429,"error":"rate_limit","session_id":"2d4c8c9a-66a8-4715-acc2-4f406ee17bd9","uuid":"2bf9720e-3afe-4ee3-a71a-5cd77c929fbd"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=off_web=on_run1/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=off_web=on_run1/meta.json @@ -0,0 +1,37 @@ +{ + "model": "glm-5.1", + "effort": "high", + "prompt_style": "simple", + "language": "typescript", + "human_language": "en", + "tool_read": "on", + "tool_write": "off", + "tool_edit": "on", + "tool_glob": "on", + "tool_grep": "on", + "linter": "on", + "playwright": "off", + "context_file": "none", + "web_search": "on", + "max_budget": "low", + "tests_provided": "none", + "strategy": "none", + "design_guidance": "none", + "architecture": "none", + "error_checking": "none", + "context_noise": "clean", + "renderer": "none", + "provider": "zai", + "task": "tetris", + "actual_model": "glm-5.1", + "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=off_web=on", + "runs_per_cell": 3, + "timeout_seconds": 1200, + "max_budget_usd": 2.0, + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=off_web=on_run1", + "short_id": "dec1df41", + "short_cell_id": "5f653f71", + "run_number": 1, + "claude_version": "2.1.92 (Claude Code)", + "started_at": "2026-04-06T23:36:49.278425+00:00" +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/claude_output.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/claude_output.json @@ -0,0 +1 @@ +{"type":"result","subtype":"success","is_error":true,"duration_ms":193464,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070729476b9e086956f2488b\"}","stop_reason":"stop_sequence","session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"00a27f6a-2197-4822-82ff-2ccee852f7c6"} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json @@ -0,0 +1,134 @@ +{ + "structural": { + "pass": false, + "checks": [ + { + "name": "entry_point_exists", + "pass": false, + "detail": "no index.html found in workspace root, dist/, or public/" + }, + { + "name": "package_json_exists", + "pass": true, + "detail": "package.json found" + }, + { + "name": "build_succeeds", + "pass": true, + "detail": "no build script defined (static project)" + }, + { + "name": "typescript_compiles", + "pass": false, + "detail": "TypeScript files found but no tsconfig.json" + } + ], + "score": 0.5 + }, + "quality": { + "lint": { + "pass": true, + "errors": 0, + "warnings": 0 + }, + "typecheck": { + "pass": false, + "error": "no tsconfig.json" + }, + "performance": { + "pass": true, + "bundle_size_bytes": 0, + "size_under_512kb": true + }, + "score": 0.67 + }, + "code_analysis": { + "files": { + "total": 6, + "code": 4, + "docs": 0, + "unnecessary": 0, + "unnecessary_list": [] + }, + "lines_of_code": 596, + "dependencies": { + "production": 0, + "dev": 4, + "total": 4 + }, + "complexity": "moderate", + "console_logs": 0, + "magic_numbers": { + "count": 37, + "excessive": true + }, + "function_length": { + "count": 16, + "average": 6.6, + "max": 16, + "long_functions": 0 + }, + "max_nesting_depth": 5, + "global_declarations": 0, + "naming": { + "dominant_style": "camelCase", + "consistency_pct": 100.0, + "camel_case": 141, + "snake_case": 0 + }, + "error_handling": { + "try_catch_blocks": 4, + "has_error_handling": true + }, + "comments": { + "comment_lines": 70, + "source_lines": 444, + "ratio_pct": 15.8 + }, + "separation_of_concerns": { + "verdict": "mixed", + "files_with_rendering": 2, + "files_with_logic": 1, + "files_with_both": 1 + }, + "html_validation": { + "valid": false, + "errors": 0 + }, + "duplication_percentage": 0.0, + "score": 0.55 + }, + "transcript_analysis": { + "total_events": 15, + "tool_calls": { + "total": 0, + "bash": 0, + "write": 0, + "edit": 0, + "read": 0 + }, + "wasted_turns": { + "total": 0, + "docs": 0, + "ascii_art": 0, + "server_starts": 0 + }, + "errors_encountered": 0, + "thinking_blocks": 0, + "text_blocks": 1, + "productivity_ratio": 0, + "self_tested": false, + "score": 1.0 + }, + "gameplay_bot": { + "pass": false, + "score": 0, + "error": "no HTML files in workspace - game was not built" + }, + "outcome_score": 0.0, + "score": 0.0, + "sonarqube": { + "error": "SonarQube not running at localhost:9000", + "score": 0 + } +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/meta.json @@ -33,5 +33,8 @@ "short_cell_id": "c358a5f2", "run_number": 1, "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-06T23:26:32.895648+00:00" + "started_at": "2026-04-06T23:26:32.895648+00:00", + "wall_time_seconds": 194, + "exit_code": 1, + "completed_at": "2026-04-06T23:29:48.613041+00:00" } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/transcript.jsonl @@ -11,3 +11,5 @@ {"type":"system","subtype":"api_retry","attempt":8,"max_retries":10,"retry_delay_ms":34450.430841709,"error_status":429,"error":"rate_limit","session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","uuid":"0d2a303c-e408-4ba9-ac49-5134c4060ab6"} {"type":"system","subtype":"api_retry","attempt":9,"max_retries":10,"retry_delay_ms":32269.467046315174,"error_status":429,"error":"rate_limit","session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","uuid":"9928acda-7fde-4e8a-b311-0b3659574bda"} {"type":"system","subtype":"api_retry","attempt":10,"max_retries":10,"retry_delay_ms":37725.5955572658,"error_status":429,"error":"rate_limit","session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","uuid":"9d6db7e6-febf-46d3-aaa9-441c8277b024"} +{"type":"assistant","message":{"id":"3be71ca6-740e-458a-93d3-9870e0f455b1","container":null,"model":"<synthetic>","role":"assistant","stop_reason":"stop_sequence","stop_sequence":"","type":"message","usage":{"input_tokens":0,"output_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":null,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":null,"iterations":null,"speed":null},"content":[{"type":"text","text":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070729476b9e086956f2488b\"}"}],"context_management":null},"parent_tool_use_id":null,"session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","uuid":"7b48624e-a1ef-468d-8e27-6ace54c1ac3b","error":"unknown"} +{"type":"result","subtype":"success","is_error":true,"duration_ms":193464,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070729476b9e086956f2488b\"}","stop_reason":"stop_sequence","session_id":"ff048c02-caf3-4273-aa27-c3aa9efec976","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"00a27f6a-2197-4822-82ff-2ccee852f7c6"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_output.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_output.json @@ -0,0 +1 @@ +{"type":"result","subtype":"success","is_error":true,"duration_ms":189471,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070732455205041aaaec454d\"}","stop_reason":"stop_sequence","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"edef0611-1552-4688-85b2-1cd7079bdb56"} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_stderr.log b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/claude_stderr.log diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/eval_results.json @@ -0,0 +1,134 @@ +{ + "structural": { + "pass": false, + "checks": [ + { + "name": "entry_point_exists", + "pass": false, + "detail": "no index.html found in workspace root, dist/, or public/" + }, + { + "name": "package_json_exists", + "pass": true, + "detail": "package.json found" + }, + { + "name": "build_succeeds", + "pass": true, + "detail": "no build script defined (static project)" + }, + { + "name": "typescript_compiles", + "pass": false, + "detail": "TypeScript files found but no tsconfig.json" + } + ], + "score": 0.5 + }, + "quality": { + "lint": { + "pass": true, + "errors": 0, + "warnings": 0 + }, + "typecheck": { + "pass": false, + "error": "no tsconfig.json" + }, + "performance": { + "pass": true, + "bundle_size_bytes": 0, + "size_under_512kb": true + }, + "score": 0.67 + }, + "code_analysis": { + "files": { + "total": 6, + "code": 4, + "docs": 0, + "unnecessary": 0, + "unnecessary_list": [] + }, + "lines_of_code": 596, + "dependencies": { + "production": 0, + "dev": 4, + "total": 4 + }, + "complexity": "moderate", + "console_logs": 0, + "magic_numbers": { + "count": 37, + "excessive": true + }, + "function_length": { + "count": 16, + "average": 6.6, + "max": 16, + "long_functions": 0 + }, + "max_nesting_depth": 5, + "global_declarations": 0, + "naming": { + "dominant_style": "camelCase", + "consistency_pct": 100.0, + "camel_case": 141, + "snake_case": 0 + }, + "error_handling": { + "try_catch_blocks": 4, + "has_error_handling": true + }, + "comments": { + "comment_lines": 70, + "source_lines": 444, + "ratio_pct": 15.8 + }, + "separation_of_concerns": { + "verdict": "mixed", + "files_with_rendering": 2, + "files_with_logic": 1, + "files_with_both": 1 + }, + "html_validation": { + "valid": false, + "errors": 0 + }, + "duplication_percentage": 0.0, + "score": 0.55 + }, + "transcript_analysis": { + "total_events": 15, + "tool_calls": { + "total": 0, + "bash": 0, + "write": 0, + "edit": 0, + "read": 0 + }, + "wasted_turns": { + "total": 0, + "docs": 0, + "ascii_art": 0, + "server_starts": 0 + }, + "errors_encountered": 0, + "thinking_blocks": 0, + "text_blocks": 1, + "productivity_ratio": 0, + "self_tested": false, + "score": 1.0 + }, + "gameplay_bot": { + "pass": false, + "score": 0, + "error": "no HTML files in workspace - game was not built" + }, + "outcome_score": 0.0, + "score": 0.0, + "sonarqube": { + "error": "SonarQube not running at localhost:9000", + "score": 0 + } +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/meta.json @@ -33,5 +33,8 @@ "short_cell_id": "c358a5f2", "run_number": 2, "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-06T23:29:32.957384+00:00" + "started_at": "2026-04-06T23:29:32.957384+00:00", + "wall_time_seconds": 190, + "exit_code": 1, + "completed_at": "2026-04-06T23:32:45.834386+00:00" } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2/transcript.jsonl @@ -0,0 +1,15 @@ +{"type": "harness", "subtype": "config", "model": "glm-5.1", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch"], "max_budget_usd": 2.0, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} +{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Construye un juego de Tetris jugable que funcione en un navegador web. Debe tener todas las mecanicas estandar: rotacion de piezas, eliminacion de lineas, puntuacion y velocidad creciente. Usa controles de teclado para el movimiento y la rotacion.\n\n\nUsa TypeScript."}} +{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-ni0drvej","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"glm-5.1","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"57386ea8-34dd-4845-8949-54290e5944f5","fast_mode_state":"off"} +{"type":"system","subtype":"api_retry","attempt":1,"max_retries":10,"retry_delay_ms":567.4170891003631,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"249b1f5e-d50d-4ff6-9d0c-5adb8bfa4db1"} +{"type":"system","subtype":"api_retry","attempt":2,"max_retries":10,"retry_delay_ms":1034.5923672238707,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"b9bb6bba-600f-45fd-94ba-ae9549ba9d30"} +{"type":"system","subtype":"api_retry","attempt":3,"max_retries":10,"retry_delay_ms":2347.802297650282,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"faf03765-784d-4bf4-a969-290746ae80e6"} +{"type":"system","subtype":"api_retry","attempt":4,"max_retries":10,"retry_delay_ms":4217.425849739093,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"497f6986-8360-451e-b301-e5b7cca49996"} +{"type":"system","subtype":"api_retry","attempt":5,"max_retries":10,"retry_delay_ms":9264.999815288416,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"a34a0e0a-f873-4729-a116-ff830ba82767"} +{"type":"system","subtype":"api_retry","attempt":6,"max_retries":10,"retry_delay_ms":18346.826759987354,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"abecf76b-04a8-4be3-9a1c-c0724ff6a3cc"} +{"type":"system","subtype":"api_retry","attempt":7,"max_retries":10,"retry_delay_ms":33209.45301909502,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"3bcfb52c-81fa-42a2-8b0e-af344875fbff"} +{"type":"system","subtype":"api_retry","attempt":8,"max_retries":10,"retry_delay_ms":36034.703649884636,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"18d3f6a6-cf45-4893-aaf8-567e6c2aa92c"} +{"type":"system","subtype":"api_retry","attempt":9,"max_retries":10,"retry_delay_ms":33641.563672024524,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"00f40fa2-15ca-4df8-bc44-c1063f6accec"} +{"type":"system","subtype":"api_retry","attempt":10,"max_retries":10,"retry_delay_ms":34189.997131148884,"error_status":429,"error":"rate_limit","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"12763415-f206-48ef-9555-a22de5742c9b"} +{"type":"assistant","message":{"id":"08fff35c-a0f1-48f1-a81a-0eec90b66b92","container":null,"model":"<synthetic>","role":"assistant","stop_reason":"stop_sequence","stop_sequence":"","type":"message","usage":{"input_tokens":0,"output_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":null,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":null,"iterations":null,"speed":null},"content":[{"type":"text","text":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070732455205041aaaec454d\"}"}],"context_management":null},"parent_tool_use_id":null,"session_id":"97113985-e64f-444b-8a80-379b9ce6a664","uuid":"c64e8a5b-ec42-454c-aec5-c79a547bfe2d","error":"unknown"} +{"type":"result","subtype":"success","is_error":true,"duration_ms":189471,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070732455205041aaaec454d\"}","stop_reason":"stop_sequence","session_id":"97113985-e64f-444b-8a80-379b9ce6a664","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"edef0611-1552-4688-85b2-1cd7079bdb56"} diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_output.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_output.json @@ -0,0 +1 @@ +{"type":"result","subtype":"success","is_error":true,"duration_ms":198518,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070733106353f7ccc75e4c44\"}","stop_reason":"stop_sequence","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"4e55898a-0b6f-42e7-8f0e-c4653a5f9e12"} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_stderr.log b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/claude_stderr.log diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json @@ -0,0 +1,134 @@ +{ + "structural": { + "pass": false, + "checks": [ + { + "name": "entry_point_exists", + "pass": false, + "detail": "no index.html found in workspace root, dist/, or public/" + }, + { + "name": "package_json_exists", + "pass": true, + "detail": "package.json found" + }, + { + "name": "build_succeeds", + "pass": true, + "detail": "no build script defined (static project)" + }, + { + "name": "typescript_compiles", + "pass": false, + "detail": "TypeScript files found but no tsconfig.json" + } + ], + "score": 0.5 + }, + "quality": { + "lint": { + "pass": true, + "errors": 0, + "warnings": 0 + }, + "typecheck": { + "pass": false, + "error": "no tsconfig.json" + }, + "performance": { + "pass": true, + "bundle_size_bytes": 0, + "size_under_512kb": true + }, + "score": 0.67 + }, + "code_analysis": { + "files": { + "total": 6, + "code": 4, + "docs": 0, + "unnecessary": 0, + "unnecessary_list": [] + }, + "lines_of_code": 596, + "dependencies": { + "production": 0, + "dev": 4, + "total": 4 + }, + "complexity": "moderate", + "console_logs": 0, + "magic_numbers": { + "count": 37, + "excessive": true + }, + "function_length": { + "count": 16, + "average": 6.6, + "max": 16, + "long_functions": 0 + }, + "max_nesting_depth": 5, + "global_declarations": 0, + "naming": { + "dominant_style": "camelCase", + "consistency_pct": 100.0, + "camel_case": 141, + "snake_case": 0 + }, + "error_handling": { + "try_catch_blocks": 4, + "has_error_handling": true + }, + "comments": { + "comment_lines": 70, + "source_lines": 444, + "ratio_pct": 15.8 + }, + "separation_of_concerns": { + "verdict": "mixed", + "files_with_rendering": 2, + "files_with_logic": 1, + "files_with_both": 1 + }, + "html_validation": { + "valid": false, + "errors": 0 + }, + "duplication_percentage": 0.0, + "score": 0.55 + }, + "transcript_analysis": { + "total_events": 15, + "tool_calls": { + "total": 0, + "bash": 0, + "write": 0, + "edit": 0, + "read": 0 + }, + "wasted_turns": { + "total": 0, + "docs": 0, + "ascii_art": 0, + "server_starts": 0 + }, + "errors_encountered": 0, + "thinking_blocks": 0, + "text_blocks": 1, + "productivity_ratio": 0, + "self_tested": false, + "score": 1.0 + }, + "gameplay_bot": { + "pass": false, + "score": 0, + "error": "no HTML files in workspace - game was not built" + }, + "outcome_score": 0.0, + "score": 0.0, + "sonarqube": { + "error": "SonarQube not running at localhost:9000", + "score": 0 + } +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/meta.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/meta.json @@ -0,0 +1,40 @@ +{ + "model": "glm-5.1", + "effort": "high", + "prompt_style": "simple", + "language": "typescript", + "human_language": "es", + "tool_read": "on", + "tool_write": "on", + "tool_edit": "on", + "tool_glob": "on", + "tool_grep": "on", + "linter": "on", + "playwright": "off", + "context_file": "none", + "web_search": "on", + "max_budget": "low", + "tests_provided": "none", + "strategy": "none", + "design_guidance": "none", + "architecture": "none", + "error_checking": "none", + "context_noise": "clean", + "renderer": "none", + "provider": "zai", + "task": "tetris", + "actual_model": "glm-5.1", + "cell_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on", + "runs_per_cell": 3, + "timeout_seconds": 1200, + "max_budget_usd": 2.0, + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", + "short_id": "9d78ce6d", + "short_cell_id": "c358a5f2", + "run_number": 3, + "claude_version": "2.1.92 (Claude Code)", + "started_at": "2026-04-06T23:29:50.728834+00:00", + "wall_time_seconds": 199, + "exit_code": 1, + "completed_at": "2026-04-06T23:33:11.419999+00:00" +} +\ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/transcript.jsonl b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/transcript.jsonl @@ -0,0 +1,15 @@ +{"type": "harness", "subtype": "config", "model": "glm-5.1", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch"], "max_budget_usd": 2.0, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} +{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Construye un juego de Tetris jugable que funcione en un navegador web. Debe tener todas las mecanicas estandar: rotacion de piezas, eliminacion de lineas, puntuacion y velocidad creciente. Usa controles de teclado para el movimiento y la rotacion.\n\n\nUsa TypeScript."}} +{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-r1v1vv8w","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"glm-5.1","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"015f2b14-485b-405c-a68c-67bc97a85a0b","fast_mode_state":"off"} +{"type":"system","subtype":"api_retry","attempt":1,"max_retries":10,"retry_delay_ms":598.95227665074,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"089547d9-e271-4835-bf87-b9b30305d85c"} +{"type":"system","subtype":"api_retry","attempt":2,"max_retries":10,"retry_delay_ms":1157.6103361789428,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"949b867f-2aa9-40c4-9379-88d099b2e0fb"} +{"type":"system","subtype":"api_retry","attempt":3,"max_retries":10,"retry_delay_ms":2073.419050065377,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"1c412c50-fd45-473c-ac9f-6d5c01da4210"} +{"type":"system","subtype":"api_retry","attempt":4,"max_retries":10,"retry_delay_ms":4033.9554491720455,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"b108a6ac-c9fe-46ce-8023-8cca5124e515"} +{"type":"system","subtype":"api_retry","attempt":5,"max_retries":10,"retry_delay_ms":8961.844354004239,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"308aed88-e1a4-427c-8768-1bea30dd0491"} +{"type":"system","subtype":"api_retry","attempt":6,"max_retries":10,"retry_delay_ms":19407.2277753838,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"9f4230d1-d772-4d37-a945-a86647a45723"} +{"type":"system","subtype":"api_retry","attempt":7,"max_retries":10,"retry_delay_ms":35113.13032086878,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"a3ac6064-15b7-481d-83c2-8696dff7f4e9"} +{"type":"system","subtype":"api_retry","attempt":8,"max_retries":10,"retry_delay_ms":38701.08414915083,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"c2ef92e3-90fa-4765-88e1-328f9d4f3171"} +{"type":"system","subtype":"api_retry","attempt":9,"max_retries":10,"retry_delay_ms":35020.755242224026,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"89ab68e2-88a9-4b85-adb6-8321db450e26"} +{"type":"system","subtype":"api_retry","attempt":10,"max_retries":10,"retry_delay_ms":34243.81853418608,"error_status":429,"error":"rate_limit","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"aec4f4c1-49b5-448b-8180-768bb5b1aed8"} +{"type":"assistant","message":{"id":"99e3db1b-c478-4a68-9680-11734c623cb0","container":null,"model":"<synthetic>","role":"assistant","stop_reason":"stop_sequence","stop_sequence":"","type":"message","usage":{"input_tokens":0,"output_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":null,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":null,"iterations":null,"speed":null},"content":[{"type":"text","text":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070733106353f7ccc75e4c44\"}"}],"context_management":null},"parent_tool_use_id":null,"session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","uuid":"51098ac7-49ee-466d-bb94-7c0eb3743357","error":"unknown"} +{"type":"result","subtype":"success","is_error":true,"duration_ms":198518,"duration_api_ms":0,"num_turns":1,"result":"API Error: 429 {\"error\":{\"code\":\"1308\",\"message\":\"Usage limit reached for 5 hour. Your limit will reset at 2026-04-07 09:39:11\"},\"request_id\":\"202604070733106353f7ccc75e4c44\"}","stop_reason":"stop_sequence","session_id":"dd7981ce-2a26-4453-bc38-697a1856deb5","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"4e55898a-0b6f-42e7-8f0e-c4653a5f9e12"}

Impressum · Datenschutz