@funpixel/tools 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +115 -0
- package/NOTICE +28 -0
- package/README.md +110 -2
- package/bench/LICENSE +674 -0
- package/bench/README.md +10 -0
- package/bench/entrypoint.py +94 -0
- package/bench/handlers/__init__.py +53 -0
- package/bench/handlers/apply_skin.py +192 -0
- package/bench/handlers/apply_texture.py +195 -0
- package/bench/handlers/audit_clips.py +351 -0
- package/bench/handlers/author_clips.py +297 -0
- package/bench/handlers/author_motion.py +298 -0
- package/bench/handlers/bake_emissive.py +136 -0
- package/bench/handlers/build_level.py +395 -0
- package/bench/handlers/decimate.py +220 -0
- package/bench/handlers/fit_rig.py +273 -0
- package/bench/handlers/fracture.py +233 -0
- package/bench/handlers/humanoid.py +119 -0
- package/bench/handlers/inspect.py +212 -0
- package/bench/handlers/level_check.py +68 -0
- package/bench/handlers/level_geo.py +150 -0
- package/bench/handlers/level_proof.py +117 -0
- package/bench/handlers/level_props.py +135 -0
- package/bench/handlers/lod.py +83 -0
- package/bench/handlers/merge_clips.py +122 -0
- package/bench/handlers/mirror_limb.py +336 -0
- package/bench/handlers/motion_specs.json +11 -0
- package/bench/handlers/normalize_materials.py +182 -0
- package/bench/handlers/normalize_transform.py +174 -0
- package/bench/handlers/prune_clips.py +141 -0
- package/bench/handlers/raster.py +98 -0
- package/bench/handlers/render.py +239 -0
- package/bench/handlers/render_views.py +101 -0
- package/bench/handlers/retarget_clips.py +185 -0
- package/bench/handlers/scene.py +311 -0
- package/bench/handlers/sheet.py +118 -0
- package/bench/handlers/texels.py +176 -0
- package/bench/handlers/views.py +232 -0
- package/dist/api/generated/openapi.js +1 -0
- package/dist/api/http.js +71 -0
- package/dist/api/jobs.js +94 -0
- package/dist/assets/bakeoff.js +61 -0
- package/dist/assets/counts.js +60 -0
- package/dist/assets/gen.js +230 -0
- package/dist/assets/lock.js +77 -0
- package/dist/assets/manifest.js +236 -0
- package/dist/assets/palette-fit.js +99 -0
- package/dist/assets/pixelart.js +192 -0
- package/dist/assets/pixels.js +131 -0
- package/dist/assets/plan.js +169 -0
- package/dist/assets/process.js +209 -0
- package/dist/assets/script.js +194 -0
- package/dist/assets/steps.js +294 -0
- package/dist/bin.js +8 -0
- package/dist/board/board.js +99 -0
- package/dist/cast/library.js +102 -0
- package/dist/cast/measure.js +222 -0
- package/dist/cli.js +2917 -0
- package/dist/clip/clip.js +83 -0
- package/dist/commands/account.js +158 -0
- package/dist/commands/assets-pixels.js +106 -0
- package/dist/commands/assets.js +473 -0
- package/dist/commands/beats.js +77 -0
- package/dist/commands/board.js +162 -0
- package/dist/commands/boxes.js +89 -0
- package/dist/commands/capture-all.js +92 -0
- package/dist/commands/cast.js +84 -0
- package/dist/commands/character.js +58 -0
- package/dist/commands/check.js +404 -0
- package/dist/commands/clip.js +112 -0
- package/dist/commands/compare-takes.js +204 -0
- package/dist/commands/compare-target.js +149 -0
- package/dist/commands/compare.js +117 -0
- package/dist/commands/compose-variations.js +202 -0
- package/dist/commands/compose.js +163 -0
- package/dist/commands/cut.js +13 -0
- package/dist/commands/decide.js +90 -0
- package/dist/commands/depth.js +171 -0
- package/dist/commands/dev.js +138 -0
- package/dist/commands/directions.js +106 -0
- package/dist/commands/doctor.js +281 -0
- package/dist/commands/export.js +88 -0
- package/dist/commands/feedback.js +496 -0
- package/dist/commands/feel.js +144 -0
- package/dist/commands/fidelity.js +95 -0
- package/dist/commands/find.js +116 -0
- package/dist/commands/firstlook.js +138 -0
- package/dist/commands/flow.js +600 -0
- package/dist/commands/framing.js +53 -0
- package/dist/commands/gdd.js +227 -0
- package/dist/commands/gen.js +512 -0
- package/dist/commands/greenlight.js +148 -0
- package/dist/commands/hook.js +171 -0
- package/dist/commands/init.js +234 -0
- package/dist/commands/inspect.js +161 -0
- package/dist/commands/job.js +41 -0
- package/dist/commands/jobs.js +87 -0
- package/dist/commands/journal.js +58 -0
- package/dist/commands/journey.js +228 -0
- package/dist/commands/judge.js +191 -0
- package/dist/commands/lanes.js +571 -0
- package/dist/commands/lessons.js +74 -0
- package/dist/commands/life.js +134 -0
- package/dist/commands/login.js +134 -0
- package/dist/commands/look-3d.js +105 -0
- package/dist/commands/look-fit.js +116 -0
- package/dist/commands/look-hud.js +180 -0
- package/dist/commands/look-read.js +162 -0
- package/dist/commands/look-sheet.js +152 -0
- package/dist/commands/look-theme.js +136 -0
- package/dist/commands/look.js +373 -0
- package/dist/commands/loop.js +112 -0
- package/dist/commands/loudness.js +69 -0
- package/dist/commands/mobile-qa.js +119 -0
- package/dist/commands/model.js +256 -0
- package/dist/commands/models.js +93 -0
- package/dist/commands/motion.js +305 -0
- package/dist/commands/next.js +72 -0
- package/dist/commands/note.js +294 -0
- package/dist/commands/optimize.js +212 -0
- package/dist/commands/owner.js +109 -0
- package/dist/commands/pack.js +66 -0
- package/dist/commands/parts.js +635 -0
- package/dist/commands/phone.js +398 -0
- package/dist/commands/pick.js +146 -0
- package/dist/commands/pitch.js +205 -0
- package/dist/commands/places.js +89 -0
- package/dist/commands/play.js +368 -0
- package/dist/commands/playable.js +51 -0
- package/dist/commands/playtest.js +262 -0
- package/dist/commands/profile.js +292 -0
- package/dist/commands/progress.js +537 -0
- package/dist/commands/publish.js +165 -0
- package/dist/commands/reach.js +72 -0
- package/dist/commands/reel.js +177 -0
- package/dist/commands/review.js +112 -0
- package/dist/commands/rooms.js +180 -0
- package/dist/commands/schema.js +29 -0
- package/dist/commands/score.js +326 -0
- package/dist/commands/serve.js +67 -0
- package/dist/commands/setup.js +254 -0
- package/dist/commands/sim.js +179 -0
- package/dist/commands/simulator.js +154 -0
- package/dist/commands/smoke-build.js +305 -0
- package/dist/commands/smoke.js +37 -0
- package/dist/commands/spec.js +114 -0
- package/dist/commands/store.js +154 -0
- package/dist/commands/test.js +104 -0
- package/dist/commands/trailer.js +255 -0
- package/dist/commands/unity-editor.js +322 -0
- package/dist/commands/unity-player.js +672 -0
- package/dist/commands/unity.js +198 -0
- package/dist/commands/upgrade.js +186 -0
- package/dist/commands/variety.js +108 -0
- package/dist/commands/verify.js +293 -0
- package/dist/commands/walk.js +449 -0
- package/dist/commands/widen.js +133 -0
- package/dist/commands/world.js +175 -0
- package/dist/commands/wow.js +143 -0
- package/dist/commands/zero.js +71 -0
- package/dist/compose/adsheet.js +61 -0
- package/dist/compose/contract.js +248 -0
- package/dist/compose/facts.js +81 -0
- package/dist/compose/hyperframes.js +102 -0
- package/dist/compose/page.js +216 -0
- package/dist/compose/probe.js +160 -0
- package/dist/compose/run.js +170 -0
- package/dist/compose/sheet.js +92 -0
- package/dist/compose/starters.js +247 -0
- package/dist/compose/variations.js +203 -0
- package/dist/criteria.js +35 -0
- package/dist/depth/experience.js +61 -0
- package/dist/depth/fill.js +102 -0
- package/dist/depth/inventory.js +161 -0
- package/dist/depth/pacing.js +173 -0
- package/dist/depth/story.js +97 -0
- package/dist/dev/devtools.js +119 -0
- package/dist/dev/hold.js +46 -0
- package/dist/dev/lan.js +15 -0
- package/dist/dev/open.js +30 -0
- package/dist/dev/qr.js +124 -0
- package/dist/devtools/LICENSES/pixi.js.LICENSE +21 -0
- package/dist/devtools/LICENSES/preact.LICENSE +21 -0
- package/dist/devtools/LICENSES/source-map-js.LICENSE +28 -0
- package/dist/devtools/LICENSES/three.LICENSE +21 -0
- package/dist/devtools/inspector/funpixel-inspector.pixi.min.js +1 -0
- package/dist/devtools/inspector/funpixel-inspector.threejs.min.js +1 -0
- package/dist/devtools/inspector/hooked-engines/pixi.min.js +8 -0
- package/dist/devtools/inspector/hooked-engines/preact.min.js +1 -0
- package/dist/devtools/inspector/hooked-engines/threejs.min.js +12 -0
- package/dist/devtools/kapture/funpixel-kapture.min.js +1 -0
- package/dist/devtools/profiler/funpixel-profiler.pixi.min.js +1 -0
- package/dist/devtools/profiler/funpixel-profiler.threejs.min.js +1 -0
- package/dist/direct/moves.js +234 -0
- package/dist/direct/read.js +59 -0
- package/dist/direct/round.js +80 -0
- package/dist/doctor/host.js +245 -0
- package/dist/doctor/unity-checks.js +380 -0
- package/dist/doctor/unity-history.js +589 -0
- package/dist/doctor/unity-host.js +160 -0
- package/dist/doctor/unity-import-rules.js +874 -0
- package/dist/doctor/unity-meta.js +225 -0
- package/dist/doctor/unity-project.js +297 -0
- package/dist/doctor/unity.js +171 -0
- package/dist/export/export.js +165 -0
- package/dist/export/metadata.js +25 -0
- package/dist/export/runtime.js +119 -0
- package/dist/export/scan.js +78 -0
- package/dist/export/select.js +193 -0
- package/dist/export/strip.js +42 -0
- package/dist/feedback/ab.js +55 -0
- package/dist/feedback/auto.js +44 -0
- package/dist/feedback/learn.js +255 -0
- package/dist/feedback/measure.js +49 -0
- package/dist/feedback/page.js +66 -0
- package/dist/feel/feedback.js +85 -0
- package/dist/feel/judge.js +420 -0
- package/dist/feel/run.js +185 -0
- package/dist/feel/spec.js +124 -0
- package/dist/feel/sweep.js +156 -0
- package/dist/fidelity/consistency.js +205 -0
- package/dist/fidelity/match.js +675 -0
- package/dist/fidelity/run.js +107 -0
- package/dist/find/keywords.js +97 -0
- package/dist/find/names.js +45 -0
- package/dist/find/route.js +59 -0
- package/dist/firstlook/quality.js +261 -0
- package/dist/firstlook/render.js +111 -0
- package/dist/firstlook/set.js +218 -0
- package/dist/flow/flow.js +455 -0
- package/dist/flow/look.js +139 -0
- package/dist/frame/behaviour.js +53 -0
- package/dist/frame/clock.js +117 -0
- package/dist/frame/contract.js +111 -0
- package/dist/frame/genre.js +65 -0
- package/dist/frame/idle.js +58 -0
- package/dist/frame/opening.js +171 -0
- package/dist/frames/loop.js +52 -0
- package/dist/frames/sheet.js +69 -0
- package/dist/gdd/book.js +483 -0
- package/dist/gdd/chapters.js +71 -0
- package/dist/gdd/design.js +135 -0
- package/dist/gdd/doc.js +32 -0
- package/dist/gdd/levelmap.js +428 -0
- package/dist/gdd/measures.js +477 -0
- package/dist/gdd/page.js +111 -0
- package/dist/gdd/rubric.js +250 -0
- package/dist/gdd/size.js +83 -0
- package/dist/gdd/tiers.js +148 -0
- package/dist/gdd/world.js +98 -0
- package/dist/gdd/worth.js +507 -0
- package/dist/gen/kinds.js +451 -0
- package/dist/gen/local/doctor.js +25 -0
- package/dist/gen/local/index.js +3 -0
- package/dist/gen/local/kokoro.js +334 -0
- package/dist/gen/local/master.js +248 -0
- package/dist/gen/local/provider.js +65 -0
- package/dist/gen/local/voice-rules.js +156 -0
- package/dist/gen/models.generated.js +469 -0
- package/dist/gen/models.js +53 -0
- package/dist/gen/prompt-lint.js +35 -0
- package/dist/gen/record.js +73 -0
- package/dist/gen/save.js +101 -0
- package/dist/gen/title.js +55 -0
- package/dist/gen/unity.js +334 -0
- package/dist/goals/goals.js +204 -0
- package/dist/goals/run.js +90 -0
- package/dist/greenlight/ambition.js +42 -0
- package/dist/greenlight/bible.js +138 -0
- package/dist/greenlight/lock.js +48 -0
- package/dist/greenlight/match.js +19 -0
- package/dist/greenlight/md.js +82 -0
- package/dist/greenlight/page.js +100 -0
- package/dist/greenlight/pitches.js +66 -0
- package/dist/greenlight/worth.js +90 -0
- package/dist/guidance.js +24 -0
- package/dist/init/bare.js +114 -0
- package/dist/init/git.js +56 -0
- package/dist/init/starter.js +166 -0
- package/dist/init/starters.js +179 -0
- package/dist/inspect/describe.js +125 -0
- package/dist/inspect/devserver.js +40 -0
- package/dist/journey/diff.js +74 -0
- package/dist/journey/from-round.js +44 -0
- package/dist/journey/record.js +76 -0
- package/dist/journey/run.js +139 -0
- package/dist/journey/script.js +223 -0
- package/dist/judge/common.js +60 -0
- package/dist/judge/identity.js +68 -0
- package/dist/judge/sources.js +37 -0
- package/dist/judge/structure.js +59 -0
- package/dist/keys/device.js +145 -0
- package/dist/keys/store.js +167 -0
- package/dist/lanes/fence.js +108 -0
- package/dist/lanes/gate.js +123 -0
- package/dist/lanes/lanes.js +355 -0
- package/dist/lanes/union.js +62 -0
- package/dist/lanes/where.js +49 -0
- package/dist/lessons/motifs.js +97 -0
- package/dist/lessons/store.js +56 -0
- package/dist/look/anim.js +206 -0
- package/dist/look/boxes.js +209 -0
- package/dist/look/dressing.js +24 -0
- package/dist/look/feedback.js +50 -0
- package/dist/look/fit.js +123 -0
- package/dist/look/held.js +92 -0
- package/dist/look/hook.js +169 -0
- package/dist/look/hud.js +189 -0
- package/dist/look/image-io.js +50 -0
- package/dist/look/life.js +96 -0
- package/dist/look/light.js +42 -0
- package/dist/look/look.js +85 -0
- package/dist/look/loops.js +108 -0
- package/dist/look/made-of.js +242 -0
- package/dist/look/moments.js +32 -0
- package/dist/look/motion.js +44 -0
- package/dist/look/phone-play.js +142 -0
- package/dist/look/player.js +32 -0
- package/dist/look/png.js +117 -0
- package/dist/look/readability.js +100 -0
- package/dist/look/roles.js +109 -0
- package/dist/look/sheet.js +104 -0
- package/dist/look/theme.js +278 -0
- package/dist/look/touch.js +129 -0
- package/dist/look/ui-style.js +102 -0
- package/dist/machine/procs.js +117 -0
- package/dist/managed.js +15 -0
- package/dist/mcp/hosted.js +174 -0
- package/dist/mcp/models.generated.js +538 -0
- package/dist/mcp/models.js +35 -0
- package/dist/mcp/server.js +330 -0
- package/dist/memory/decisions.js +138 -0
- package/dist/memory/journal.js +108 -0
- package/dist/model/bench.js +83 -0
- package/dist/model/blender.js +106 -0
- package/dist/model/clips.js +34 -0
- package/dist/model/finalize.js +33 -0
- package/dist/motion/checks.js +173 -0
- package/dist/motion/contract.js +177 -0
- package/dist/motion/encode.js +37 -0
- package/dist/motion/render.js +167 -0
- package/dist/motion/starter.js +54 -0
- package/dist/optimize/check.js +29 -0
- package/dist/optimize/helper.js +80 -0
- package/dist/owner/bar.js +285 -0
- package/dist/owner/match.js +105 -0
- package/dist/pack/build.js +97 -0
- package/dist/pack/deps.js +28 -0
- package/dist/pack/leaks.js +77 -0
- package/dist/pack/limits.js +51 -0
- package/dist/pack/report.js +35 -0
- package/dist/phone/baguette.js +139 -0
- package/dist/phone/listen.js +65 -0
- package/dist/pipeline/pipeline.js +929 -0
- package/dist/plan/actions.js +18 -0
- package/dist/plan/notes.js +15 -0
- package/dist/play/clock.js +40 -0
- package/dist/play/condition.js +45 -0
- package/dist/play/frames.js +60 -0
- package/dist/play/input.js +118 -0
- package/dist/play/pointer.js +21 -0
- package/dist/play/report.js +124 -0
- package/dist/play/server.js +274 -0
- package/dist/play/session.js +231 -0
- package/dist/play/steps.js +192 -0
- package/dist/playable/build.js +90 -0
- package/dist/playable/cta.js +88 -0
- package/dist/playable/networks.js +33 -0
- package/dist/playable/scan.js +46 -0
- package/dist/playtest/after-round.js +60 -0
- package/dist/playtest/assemble.js +168 -0
- package/dist/playtest/experience-run.js +69 -0
- package/dist/playtest/experience.js +77 -0
- package/dist/playtest/facts.js +90 -0
- package/dist/playtest/fidelity.js +179 -0
- package/dist/playtest/history.js +115 -0
- package/dist/playtest/hits.js +48 -0
- package/dist/playtest/hosted.js +98 -0
- package/dist/playtest/keep.js +110 -0
- package/dist/playtest/ledger.js +77 -0
- package/dist/playtest/length.js +113 -0
- package/dist/playtest/measure.js +181 -0
- package/dist/playtest/mobile-qa.js +391 -0
- package/dist/playtest/mockups.js +198 -0
- package/dist/playtest/moments.js +28 -0
- package/dist/playtest/prepare.js +162 -0
- package/dist/playtest/rank.js +184 -0
- package/dist/playtest/report.js +209 -0
- package/dist/playtest/route.js +139 -0
- package/dist/playtest/seats.js +128 -0
- package/dist/playtest/sheet.js +38 -0
- package/dist/playtest/stop.js +54 -0
- package/dist/playtest/stuck.js +47 -0
- package/dist/production/contract.js +61 -0
- package/dist/production/mirror.js +96 -0
- package/dist/production/tier.js +66 -0
- package/dist/profile/compare.js +171 -0
- package/dist/progress/answers.js +35 -0
- package/dist/progress/holds.js +106 -0
- package/dist/progress/notify.js +25 -0
- package/dist/progress/progress.js +300 -0
- package/dist/publish/build.js +54 -0
- package/dist/publish/folder.js +106 -0
- package/dist/publish/funpixel.js +96 -0
- package/dist/publish/hosts.js +48 -0
- package/dist/reach/envelope.js +111 -0
- package/dist/reach/load.js +84 -0
- package/dist/reach/side.js +320 -0
- package/dist/reach/spec3d.js +338 -0
- package/dist/reach/tiles.js +163 -0
- package/dist/reel/encode.js +34 -0
- package/dist/reel/tour.js +81 -0
- package/dist/relay/bots.js +62 -0
- package/dist/relay/bridge.js +54 -0
- package/dist/relay/local.js +82 -0
- package/dist/relay/redis.js +40 -0
- package/dist/review/audio.js +72 -0
- package/dist/review/ledger.js +60 -0
- package/dist/review/media.js +114 -0
- package/dist/review/model.js +348 -0
- package/dist/review/picture.js +113 -0
- package/dist/review/specs.js +134 -0
- package/dist/review/video.js +248 -0
- package/dist/schema/game.js +308 -0
- package/dist/score/comfort.js +79 -0
- package/dist/score/light.js +62 -0
- package/dist/score/measure.js +386 -0
- package/dist/score/vision.js +59 -0
- package/dist/serve/webgl.js +415 -0
- package/dist/setup/lsp.js +42 -0
- package/dist/sim/curve.js +122 -0
- package/dist/sim/judge.js +240 -0
- package/dist/sim/skeleton.js +65 -0
- package/dist/simulator/lease.js +159 -0
- package/dist/simulator/orient.js +57 -0
- package/dist/simulator/screen.js +113 -0
- package/dist/simulator/simctl.js +79 -0
- package/dist/smoke/art.js +20 -0
- package/dist/smoke/checks.js +165 -0
- package/dist/smoke/logic.js +73 -0
- package/dist/smoke/orphans.js +78 -0
- package/dist/smoke/palette.js +16 -0
- package/dist/smoke/sources.js +36 -0
- package/dist/sound/beats.js +95 -0
- package/dist/sound/loudness.js +94 -0
- package/dist/spec/extract.js +123 -0
- package/dist/spec/lint.js +261 -0
- package/dist/spec/presets.js +30 -0
- package/dist/spec/rooms.js +188 -0
- package/dist/spec/scaffold.js +457 -0
- package/dist/spec/sections.js +16 -0
- package/dist/spec/tunables.js +74 -0
- package/dist/stage/harnessignore.js +90 -0
- package/dist/stage/stage.js +57 -0
- package/dist/stage/tar.js +41 -0
- package/dist/status/board.js +172 -0
- package/dist/status/file.js +112 -0
- package/dist/status/inbox.js +55 -0
- package/dist/status/status.js +311 -0
- package/dist/store/answers.js +47 -0
- package/dist/store/doctor.js +120 -0
- package/dist/store/images.js +65 -0
- package/dist/store/init.js +101 -0
- package/dist/store/lint.js +392 -0
- package/dist/store/plan.js +133 -0
- package/dist/store/sdks.js +107 -0
- package/dist/studio/forks.js +93 -0
- package/dist/studio/pitch.js +294 -0
- package/dist/studio/widen.js +212 -0
- package/dist/suite/node-run.js +81 -0
- package/dist/suite/test-types.js +71 -0
- package/dist/trailer/assemble.js +90 -0
- package/dist/trailer/beats.js +74 -0
- package/dist/trailer/cards.js +77 -0
- package/dist/trailer/cues.js +78 -0
- package/dist/trailer/cut.js +49 -0
- package/dist/trailer/find.js +33 -0
- package/dist/trailer/mix.js +109 -0
- package/dist/trailer/placement.js +30 -0
- package/dist/types.js +1 -0
- package/dist/ui.js +79 -0
- package/dist/unity/bridge.js +251 -0
- package/dist/unity/disk.js +666 -0
- package/dist/unity/editor.js +471 -0
- package/dist/unity/gc.js +140 -0
- package/dist/unity/mcp-stdio.js +141 -0
- package/dist/unity/probe/budgets.js +84 -0
- package/dist/unity/probe/client.js +93 -0
- package/dist/unity/probe/install.js +118 -0
- package/dist/unity/probe/player.js +255 -0
- package/dist/unity/probe/report.js +102 -0
- package/dist/unity/probe/script.js +225 -0
- package/dist/unity/queue.js +353 -0
- package/dist/unity/run.js +172 -0
- package/dist/update.js +111 -0
- package/dist/variety/compare.js +104 -0
- package/dist/variety/places.js +109 -0
- package/dist/variety/profile.js +127 -0
- package/dist/vendor/verify/README.md +19 -0
- package/dist/vendor/verify/package.json +14 -0
- package/dist/vendor/verify/src/index.d.ts +105 -0
- package/dist/vendor/verify/src/index.js +78 -0
- package/dist/vendor/verify/src/init/preview_shim.js +63 -0
- package/dist/vendor/verify/src/page/actors.js +258 -0
- package/dist/vendor/verify/src/page/audio.js +106 -0
- package/dist/vendor/verify/src/page/audio_cues.js +141 -0
- package/dist/vendor/verify/src/page/audio_files.js +56 -0
- package/dist/vendor/verify/src/page/bot_sweep.js +72 -0
- package/dist/vendor/verify/src/page/capture_view.js +164 -0
- package/dist/vendor/verify/src/page/context_loss_listener.js +23 -0
- package/dist/vendor/verify/src/page/dressing.js +106 -0
- package/dist/vendor/verify/src/page/enter_view.js +33 -0
- package/dist/vendor/verify/src/page/feel.js +126 -0
- package/dist/vendor/verify/src/page/feel_sweep.js +75 -0
- package/dist/vendor/verify/src/page/first_paint.js +54 -0
- package/dist/vendor/verify/src/page/fonts.js +50 -0
- package/dist/vendor/verify/src/page/frame_honesty.js +44 -0
- package/dist/vendor/verify/src/page/front_door.js +197 -0
- package/dist/vendor/verify/src/page/grounding.js +448 -0
- package/dist/vendor/verify/src/page/hooks.js +74 -0
- package/dist/vendor/verify/src/page/hud.js +261 -0
- package/dist/vendor/verify/src/page/inventory.js +15 -0
- package/dist/vendor/verify/src/page/layout.js +378 -0
- package/dist/vendor/verify/src/page/levels.js +40 -0
- package/dist/vendor/verify/src/page/life.js +123 -0
- package/dist/vendor/verify/src/page/life_anim.js +501 -0
- package/dist/vendor/verify/src/page/made_of.js +83 -0
- package/dist/vendor/verify/src/page/mechanic_check.js +272 -0
- package/dist/vendor/verify/src/page/moments.js +36 -0
- package/dist/vendor/verify/src/page/motion.js +139 -0
- package/dist/vendor/verify/src/page/perf.js +255 -0
- package/dist/vendor/verify/src/page/phone_check.js +229 -0
- package/dist/vendor/verify/src/page/play.js +117 -0
- package/dist/vendor/verify/src/page/play_act.js +164 -0
- package/dist/vendor/verify/src/page/preview.js +33 -0
- package/dist/vendor/verify/src/page/recorder.js +54 -0
- package/dist/vendor/verify/src/page/render_health.js +83 -0
- package/dist/vendor/verify/src/page/renderer.js +75 -0
- package/dist/vendor/verify/src/page/scene.js +222 -0
- package/dist/vendor/verify/src/page/self_test.js +25 -0
- package/dist/vendor/verify/src/page/step_clock.js +247 -0
- package/dist/vendor/verify/src/page/surfaces.js +261 -0
- package/dist/vendor/verify/src/page/world_actors.js +264 -0
- package/dist/verify/browser.js +245 -0
- package/dist/verify/console.js +34 -0
- package/dist/verify/fingerprint.js +72 -0
- package/dist/verify/gpu.js +33 -0
- package/dist/verify/health.js +172 -0
- package/dist/verify/hooks.js +34 -0
- package/dist/verify/judge.js +303 -0
- package/dist/verify/players.js +123 -0
- package/dist/verify/probe.js +236 -0
- package/dist/verify/reads.js +32 -0
- package/dist/verify/run.js +56 -0
- package/dist/verify/serve.js +36 -0
- package/dist/walk/film.js +37 -0
- package/dist/walk/judge.js +287 -0
- package/dist/walk/routes.js +199 -0
- package/dist/walk/world.js +292 -0
- package/dist/world/brief.js +86 -0
- package/dist/world/check.js +254 -0
- package/dist/world/forge.js +542 -0
- package/dist/world/format.js +40 -0
- package/dist/world/variety.js +59 -0
- package/dist/wow/catalogue.js +86 -0
- package/dist/wow/picks.js +74 -0
- package/package.json +51 -4
- package/panel/asset-identity.md +61 -0
- package/panel/asset-structure.md +55 -0
- package/panel/blockers.md +47 -0
- package/panel/brief.md +89 -0
- package/panel/clip.md +54 -0
- package/panel/experience-personas.json +4 -0
- package/panel/experience.md +96 -0
- package/panel/fidelity-ui.md +74 -0
- package/panel/fidelity.md +83 -0
- package/panel/greenlight-pitch.md +69 -0
- package/panel/greenlight.md +87 -0
- package/panel/mobile-qa.md +128 -0
- package/panel/personas.json +6 -0
- package/panel/reference-match.md +12 -0
- package/panel/versus.md +31 -0
- package/plugins/.agents/plugins/marketplace.json +18 -0
- package/plugins/.claude-plugin/marketplace.json +17 -0
- package/plugins/.cursor-plugin/marketplace.json +13 -0
- package/plugins/LICENSE +115 -0
- package/plugins/README.md +16 -0
- package/plugins/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/claude/.claude-plugin/plugin.json +19 -0
- package/plugins/claude/.mcp.json +10 -0
- package/plugins/claude/LICENSE +115 -0
- package/plugins/claude/README.md +14 -0
- package/plugins/claude/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/claude/agents/art-director.md +54 -0
- package/plugins/claude/agents/audio-director.md +51 -0
- package/plugins/claude/agents/critic.md +113 -0
- package/plugins/claude/agents/lane.md +38 -0
- package/plugins/claude/agents/level-designer.md +45 -0
- package/plugins/claude/agents/mobile-qa.md +71 -0
- package/plugins/claude/agents/player.md +144 -0
- package/plugins/claude/agents/qa-lead.md +52 -0
- package/plugins/claude/commands/first-look.md +59 -0
- package/plugins/claude/commands/flow.md +50 -0
- package/plugins/claude/commands/lanes.md +38 -0
- package/plugins/claude/commands/mobile-qa.md +28 -0
- package/plugins/claude/commands/new.md +94 -0
- package/plugins/claude/commands/playtest.md +66 -0
- package/plugins/claude/commands/publish.md +23 -0
- package/plugins/claude/commands/smoke-build.md +25 -0
- package/plugins/claude/commands/verify.md +20 -0
- package/plugins/claude/hooks/brief.md +135 -0
- package/plugins/claude/hooks/critic-receipts.mjs +86 -0
- package/plugins/claude/hooks/durable.mjs +56 -0
- package/plugins/claude/hooks/fence.mjs +30 -0
- package/plugins/claude/hooks/floors.mjs +181 -0
- package/plugins/claude/hooks/flow.mjs +154 -0
- package/plugins/claude/hooks/front-door.mjs +68 -0
- package/plugins/claude/hooks/guidance.json +3 -0
- package/plugins/claude/hooks/hints.mjs +183 -0
- package/plugins/claude/hooks/hooks.json +62 -0
- package/plugins/claude/hooks/lib.mjs +362 -0
- package/plugins/claude/hooks/memory.mjs +92 -0
- package/plugins/claude/hooks/mobile-qa.mjs +43 -0
- package/plugins/claude/hooks/note.mjs +63 -0
- package/plugins/claude/hooks/nudge.mjs +98 -0
- package/plugins/claude/hooks/pipeline.mjs +207 -0
- package/plugins/claude/hooks/prompt.mjs +51 -0
- package/plugins/claude/hooks/quality.mjs +310 -0
- package/plugins/claude/hooks/reach.mjs +93 -0
- package/plugins/claude/hooks/scope.mjs +44 -0
- package/plugins/claude/hooks/session-log.mjs +101 -0
- package/plugins/claude/hooks/session-start.mjs +194 -0
- package/plugins/claude/hooks/skill-names.json +19 -0
- package/plugins/claude/hooks/stop-gate.mjs +303 -0
- package/plugins/claude/hooks/vendor/direct/round.mjs +81 -0
- package/plugins/claude/hooks/vendor/find/names.mjs +46 -0
- package/plugins/claude/hooks/vendor/firstlook/set.mjs +219 -0
- package/plugins/claude/hooks/vendor/flow/flow.mjs +456 -0
- package/plugins/claude/hooks/vendor/flow/look.mjs +140 -0
- package/plugins/claude/hooks/vendor/gdd/book.mjs +484 -0
- package/plugins/claude/hooks/vendor/gdd/chapters.mjs +72 -0
- package/plugins/claude/hooks/vendor/gdd/doc.mjs +33 -0
- package/plugins/claude/hooks/vendor/gdd/levelmap.mjs +429 -0
- package/plugins/claude/hooks/vendor/gdd/rubric.mjs +251 -0
- package/plugins/claude/hooks/vendor/gdd/worth.mjs +508 -0
- package/plugins/claude/hooks/vendor/lanes/fence.mjs +109 -0
- package/plugins/claude/hooks/vendor/lanes/lanes.mjs +356 -0
- package/plugins/claude/hooks/vendor/lanes/union.mjs +63 -0
- package/plugins/claude/hooks/vendor/lessons/motifs.mjs +98 -0
- package/plugins/claude/hooks/vendor/lessons/store.mjs +57 -0
- package/plugins/claude/hooks/vendor/look/made-of.mjs +243 -0
- package/plugins/claude/hooks/vendor/look/roles.mjs +110 -0
- package/plugins/claude/hooks/vendor/memory/decisions.mjs +139 -0
- package/plugins/claude/hooks/vendor/memory/journal.mjs +109 -0
- package/plugins/claude/hooks/vendor/owner/bar.mjs +286 -0
- package/plugins/claude/hooks/vendor/pipeline/pipeline.mjs +930 -0
- package/plugins/claude/hooks/vendor/playtest/keep.mjs +111 -0
- package/plugins/claude/hooks/vendor/playtest/stuck.mjs +48 -0
- package/plugins/claude/hooks/vendor/progress/holds.mjs +107 -0
- package/plugins/claude/hooks/vendor/progress/progress.mjs +301 -0
- package/plugins/claude/hooks/vendor/sim/judge.mjs +241 -0
- package/plugins/claude/hooks/vendor/spec/rooms.mjs +189 -0
- package/plugins/claude/hooks/vendor/spec/tunables.mjs +75 -0
- package/plugins/claude/hooks/vendor/stage/harnessignore.mjs +91 -0
- package/plugins/claude/hooks/vendor/stage/stage.mjs +58 -0
- package/plugins/claude/hooks/vendor/status/board.mjs +173 -0
- package/plugins/claude/hooks/vendor/status/file.mjs +113 -0
- package/plugins/claude/hooks/vendor/studio/forks.mjs +94 -0
- package/plugins/claude/hooks/vendor/studio/pitch.mjs +295 -0
- package/plugins/claude/hooks/vendor/verify/fingerprint.mjs +73 -0
- package/plugins/claude/hooks/vendor/verify/reads.mjs +33 -0
- package/plugins/claude/hooks/vendor/wow/picks.mjs +75 -0
- package/plugins/claude/skills/3d/SKILL.md +89 -0
- package/plugins/claude/skills/3d/references/bake-off.md +48 -0
- package/plugins/claude/skills/3d/references/bench.md +103 -0
- package/plugins/claude/skills/3d/references/budgets.md +48 -0
- package/plugins/claude/skills/3d/references/characters.md +67 -0
- package/plugins/claude/skills/3d/references/concept-image.md +47 -0
- package/plugins/claude/skills/3d/references/engine-targets.md +31 -0
- package/plugins/claude/skills/3d/references/hero-route.md +104 -0
- package/plugins/claude/skills/3d/references/level-spec.md +109 -0
- package/plugins/claude/skills/3d/references/levels.md +84 -0
- package/plugins/claude/skills/3d/references/light-and-places.md +141 -0
- package/plugins/claude/skills/3d/references/models.md +111 -0
- package/plugins/claude/skills/3d/references/painted-target.md +184 -0
- package/plugins/claude/skills/3d/references/reading.md +41 -0
- package/plugins/claude/skills/3d/references/skin.md +85 -0
- package/plugins/claude/skills/3d/references/skyboxes.md +65 -0
- package/plugins/claude/skills/3d/references/textures.md +71 -0
- package/plugins/claude/skills/3d/references/three-loading.md +199 -0
- package/plugins/claude/skills/3d/references/unity.md +78 -0
- package/plugins/claude/skills/art/SKILL.md +104 -0
- package/plugins/claude/skills/art/references/2d-assets.md +108 -0
- package/plugins/claude/skills/art/references/animation.md +126 -0
- package/plugins/claude/skills/art/references/cast.md +73 -0
- package/plugins/claude/skills/art/references/characters.md +49 -0
- package/plugins/claude/skills/art/references/cost.md +107 -0
- package/plugins/claude/skills/art/references/effects.md +85 -0
- package/plugins/claude/skills/art/references/frames.md +87 -0
- package/plugins/claude/skills/art/references/judging-frames.md +64 -0
- package/plugins/claude/skills/art/references/look.md +102 -0
- package/plugins/claude/skills/art/references/measure.md +119 -0
- package/plugins/claude/skills/art/references/pipeline.md +185 -0
- package/plugins/claude/skills/art/references/pixi.md +277 -0
- package/plugins/claude/skills/art/references/planes.md +27 -0
- package/plugins/claude/skills/art/references/prompts.md +171 -0
- package/plugins/claude/skills/art/references/sheets.md +141 -0
- package/plugins/claude/skills/art/references/style-file.md +39 -0
- package/plugins/claude/skills/art/references/three.md +232 -0
- package/plugins/claude/skills/art/references/ui.md +163 -0
- package/plugins/claude/skills/art/references/unity.md +78 -0
- package/plugins/claude/skills/art/references/wiring.md +41 -0
- package/plugins/claude/skills/audio/SKILL.md +92 -0
- package/plugins/claude/skills/audio/references/adaptive-music.md +204 -0
- package/plugins/claude/skills/audio/references/engine.md +78 -0
- package/plugins/claude/skills/audio/references/measure.md +101 -0
- package/plugins/claude/skills/audio/references/unity.md +74 -0
- package/plugins/claude/skills/feedback/SKILL.md +120 -0
- package/plugins/claude/skills/feedback/references/memory.md +99 -0
- package/plugins/claude/skills/game-feel/SKILL.md +104 -0
- package/plugins/claude/skills/game-feel/references/contact.md +110 -0
- package/plugins/claude/skills/game-feel/references/measure.md +125 -0
- package/plugins/claude/skills/game-feel/references/motion.md +134 -0
- package/plugins/claude/skills/game-feel/references/payoffs.md +35 -0
- package/plugins/claude/skills/game-feel/references/recipes.md +107 -0
- package/plugins/claude/skills/game-feel/references/unity.md +73 -0
- package/plugins/claude/skills/game-logic/SKILL.md +113 -0
- package/plugins/claude/skills/game-logic/references/balance.md +88 -0
- package/plugins/claude/skills/game-logic/references/content-at-scale.md +147 -0
- package/plugins/claude/skills/game-logic/references/depth.md +89 -0
- package/plugins/claude/skills/game-logic/references/escalation.md +41 -0
- package/plugins/claude/skills/game-logic/references/levels.md +61 -0
- package/plugins/claude/skills/game-logic/references/probes.md +122 -0
- package/plugins/claude/skills/game-logic/references/unity.md +108 -0
- package/plugins/claude/skills/game-spine/SKILL.md +118 -0
- package/plugins/claude/skills/game-spine/references/camera.md +94 -0
- package/plugins/claude/skills/game-spine/references/multiplayer.md +101 -0
- package/plugins/claude/skills/game-spine/references/patterns.md +103 -0
- package/plugins/claude/skills/game-spine/references/performance.md +96 -0
- package/plugins/claude/skills/game-spine/references/pixi.md +26 -0
- package/plugins/claude/skills/game-spine/references/replay.md +102 -0
- package/plugins/claude/skills/game-spine/references/room-api.md +63 -0
- package/plugins/claude/skills/game-spine/references/room-modes.md +40 -0
- package/plugins/claude/skills/game-spine/references/sdk.md +114 -0
- package/plugins/claude/skills/game-spine/references/three.md +62 -0
- package/plugins/claude/skills/gdd/SKILL.md +116 -0
- package/plugins/claude/skills/gdd/references/as-built.md +40 -0
- package/plugins/claude/skills/gdd/references/design-measures.md +24 -0
- package/plugins/claude/skills/gdd/references/design-note.md +88 -0
- package/plugins/claude/skills/gdd/references/experience.md +92 -0
- package/plugins/claude/skills/gdd/references/first-look.md +226 -0
- package/plugins/claude/skills/gdd/references/floors.md +62 -0
- package/plugins/claude/skills/gdd/references/frame.md +75 -0
- package/plugins/claude/skills/gdd/references/gameplay-contract.md +81 -0
- package/plugins/claude/skills/gdd/references/gdd-template.md +417 -0
- package/plugins/claude/skills/gdd/references/genre-card.md +109 -0
- package/plugins/claude/skills/gdd/references/genre-platformer.md +159 -0
- package/plugins/claude/skills/gdd/references/genre-puzzle.md +145 -0
- package/plugins/claude/skills/gdd/references/genre-racing.md +137 -0
- package/plugins/claude/skills/gdd/references/genre-rpg.md +125 -0
- package/plugins/claude/skills/gdd/references/genre-shooter.md +128 -0
- package/plugins/claude/skills/gdd/references/genre-simulation.md +112 -0
- package/plugins/claude/skills/gdd/references/genre-strategy.md +116 -0
- package/plugins/claude/skills/gdd/references/genre-survival.md +122 -0
- package/plugins/claude/skills/gdd/references/in-the-loop.md +106 -0
- package/plugins/claude/skills/gdd/references/invent-first.md +131 -0
- package/plugins/claude/skills/gdd/references/level-and-fun.md +112 -0
- package/plugins/claude/skills/gdd/references/pages.md +47 -0
- package/plugins/claude/skills/gdd/references/plan-at-size.md +140 -0
- package/plugins/claude/skills/gdd/references/production-tiers.md +117 -0
- package/plugins/claude/skills/gdd/references/sections.md +148 -0
- package/plugins/claude/skills/gdd/references/spec-folder.md +131 -0
- package/plugins/claude/skills/gdd/references/start.md +110 -0
- package/plugins/claude/skills/gdd/references/starters.md +175 -0
- package/plugins/claude/skills/gdd/references/the-path.md +133 -0
- package/plugins/claude/skills/gdd/references/track.md +29 -0
- package/plugins/claude/skills/gdd/references/world-and-identity.md +165 -0
- package/plugins/claude/skills/gdd/references/worth.md +74 -0
- package/plugins/claude/skills/mobile-ui/SKILL.md +107 -0
- package/plugins/claude/skills/mobile-ui/references/contrast.md +123 -0
- package/plugins/claude/skills/mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/claude/skills/mobile-ui/references/hud-genres.md +124 -0
- package/plugins/claude/skills/mobile-ui/references/phone-check.md +156 -0
- package/plugins/claude/skills/mobile-ui/references/recipes.md +279 -0
- package/plugins/claude/skills/mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/claude/skills/mobile-ui/references/unity.md +61 -0
- package/plugins/claude/skills/publishing/SKILL.md +109 -0
- package/plugins/claude/skills/publishing/references/compose.md +113 -0
- package/plugins/claude/skills/publishing/references/motion.md +120 -0
- package/plugins/claude/skills/publishing/references/networks.md +75 -0
- package/plugins/claude/skills/publishing/references/other-hosts.md +65 -0
- package/plugins/claude/skills/publishing/references/playable-ad.md +90 -0
- package/plugins/claude/skills/publishing/references/server-build.md +85 -0
- package/plugins/claude/skills/publishing/references/store-shots.md +85 -0
- package/plugins/claude/skills/publishing/references/trailer.md +55 -0
- package/plugins/claude/skills/publishing/references/what-ships.md +30 -0
- package/plugins/claude/skills/store/SKILL.md +81 -0
- package/plugins/claude/skills/store/references/app-store.md +73 -0
- package/plugins/claude/skills/store/references/google-play.md +141 -0
- package/plugins/claude/skills/store/references/ios-release.md +63 -0
- package/plugins/claude/skills/store/references/money.md +66 -0
- package/plugins/claude/skills/store/references/purchases-and-review.md +74 -0
- package/plugins/claude/skills/store/references/readiness-page.md +24 -0
- package/plugins/claude/skills/store/references/readiness.md +107 -0
- package/plugins/claude/skills/store/references/steam.md +38 -0
- package/plugins/claude/skills/store/references/unity-store.md +55 -0
- package/plugins/claude/skills/store/references/web-portals.md +43 -0
- package/plugins/claude/skills/unity-game/SKILL.md +103 -0
- package/plugins/claude/skills/unity-game/references/agent-ops.md +54 -0
- package/plugins/claude/skills/unity-game/references/fixes.md +40 -0
- package/plugins/claude/skills/unity-game/references/from-a-web-game.md +108 -0
- package/plugins/claude/skills/unity-game/references/handing-off.md +42 -0
- package/plugins/claude/skills/unity-game/references/performance.md +59 -0
- package/plugins/claude/skills/unity-game/references/probe.md +80 -0
- package/plugins/claude/skills/unity-game/references/shared-mac.md +121 -0
- package/plugins/claude/skills/unity-game/references/traps.md +108 -0
- package/plugins/claude/skills/verifying/SKILL.md +109 -0
- package/plugins/claude/skills/verifying/references/actors.md +94 -0
- package/plugins/claude/skills/verifying/references/bar.md +62 -0
- package/plugins/claude/skills/verifying/references/checks.md +69 -0
- package/plugins/claude/skills/verifying/references/experience.md +67 -0
- package/plugins/claude/skills/verifying/references/eyes.md +54 -0
- package/plugins/claude/skills/verifying/references/fidelity.md +126 -0
- package/plugins/claude/skills/verifying/references/hit-bar.md +31 -0
- package/plugins/claude/skills/verifying/references/journeys.md +77 -0
- package/plugins/claude/skills/verifying/references/mobile-qa.md +123 -0
- package/plugins/claude/skills/verifying/references/playtest.md +161 -0
- package/plugins/claude/skills/verifying/references/review.md +105 -0
- package/plugins/claude/skills/verifying/references/rubric.md +67 -0
- package/plugins/claude/skills/verifying/references/scenes.md +49 -0
- package/plugins/claude/skills/verifying/references/unity.md +60 -0
- package/plugins/claude/skills/world-and-story/SKILL.md +99 -0
- package/plugins/claude/skills/world-and-story/references/atmosphere.md +208 -0
- package/plugins/claude/skills/world-and-story/references/forged-world.md +79 -0
- package/plugins/claude/skills/world-and-story/references/living-world.md +237 -0
- package/plugins/claude/skills/world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/claude/skills/world-and-story/references/shelf.md +80 -0
- package/plugins/claude/skills/world-and-story/references/story-at-size.md +159 -0
- package/plugins/claude/skills/world-and-story/references/voice.md +175 -0
- package/plugins/claude/skills/world-and-story/references/world-kit.md +154 -0
- package/plugins/codex/.codex-plugin/plugin.json +27 -0
- package/plugins/codex/.mcp.json +7 -0
- package/plugins/codex/AGENTS.md +135 -0
- package/plugins/codex/LICENSE +115 -0
- package/plugins/codex/README.md +17 -0
- package/plugins/codex/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/codex/hooks/brief.md +135 -0
- package/plugins/codex/hooks/codex-critic.mjs +15 -0
- package/plugins/codex/hooks/critic-receipts.mjs +86 -0
- package/plugins/codex/hooks/durable.mjs +56 -0
- package/plugins/codex/hooks/fence.mjs +30 -0
- package/plugins/codex/hooks/floors.mjs +181 -0
- package/plugins/codex/hooks/flow.mjs +154 -0
- package/plugins/codex/hooks/front-door.mjs +68 -0
- package/plugins/codex/hooks/guidance.json +3 -0
- package/plugins/codex/hooks/hints.mjs +183 -0
- package/plugins/codex/hooks/hooks.json +59 -0
- package/plugins/codex/hooks/host.md +54 -0
- package/plugins/codex/hooks/lib.mjs +362 -0
- package/plugins/codex/hooks/memory.mjs +92 -0
- package/plugins/codex/hooks/mobile-qa.mjs +43 -0
- package/plugins/codex/hooks/note.mjs +63 -0
- package/plugins/codex/hooks/nudge.mjs +98 -0
- package/plugins/codex/hooks/pipeline.mjs +207 -0
- package/plugins/codex/hooks/prompt.mjs +51 -0
- package/plugins/codex/hooks/quality.mjs +310 -0
- package/plugins/codex/hooks/reach.mjs +93 -0
- package/plugins/codex/hooks/scope.mjs +44 -0
- package/plugins/codex/hooks/session-log.mjs +101 -0
- package/plugins/codex/hooks/session-start.mjs +194 -0
- package/plugins/codex/hooks/stop-gate.mjs +303 -0
- package/plugins/codex/hooks/vendor/direct/round.mjs +81 -0
- package/plugins/codex/hooks/vendor/find/names.mjs +46 -0
- package/plugins/codex/hooks/vendor/firstlook/set.mjs +219 -0
- package/plugins/codex/hooks/vendor/flow/flow.mjs +456 -0
- package/plugins/codex/hooks/vendor/flow/look.mjs +140 -0
- package/plugins/codex/hooks/vendor/gdd/book.mjs +484 -0
- package/plugins/codex/hooks/vendor/gdd/chapters.mjs +72 -0
- package/plugins/codex/hooks/vendor/gdd/doc.mjs +33 -0
- package/plugins/codex/hooks/vendor/gdd/levelmap.mjs +429 -0
- package/plugins/codex/hooks/vendor/gdd/rubric.mjs +251 -0
- package/plugins/codex/hooks/vendor/gdd/worth.mjs +508 -0
- package/plugins/codex/hooks/vendor/lanes/fence.mjs +109 -0
- package/plugins/codex/hooks/vendor/lanes/lanes.mjs +356 -0
- package/plugins/codex/hooks/vendor/lanes/union.mjs +63 -0
- package/plugins/codex/hooks/vendor/lessons/motifs.mjs +98 -0
- package/plugins/codex/hooks/vendor/lessons/store.mjs +57 -0
- package/plugins/codex/hooks/vendor/look/made-of.mjs +243 -0
- package/plugins/codex/hooks/vendor/look/roles.mjs +110 -0
- package/plugins/codex/hooks/vendor/memory/decisions.mjs +139 -0
- package/plugins/codex/hooks/vendor/memory/journal.mjs +109 -0
- package/plugins/codex/hooks/vendor/owner/bar.mjs +286 -0
- package/plugins/codex/hooks/vendor/pipeline/pipeline.mjs +930 -0
- package/plugins/codex/hooks/vendor/playtest/keep.mjs +111 -0
- package/plugins/codex/hooks/vendor/playtest/stuck.mjs +48 -0
- package/plugins/codex/hooks/vendor/progress/holds.mjs +107 -0
- package/plugins/codex/hooks/vendor/progress/progress.mjs +301 -0
- package/plugins/codex/hooks/vendor/sim/judge.mjs +241 -0
- package/plugins/codex/hooks/vendor/spec/rooms.mjs +189 -0
- package/plugins/codex/hooks/vendor/spec/tunables.mjs +75 -0
- package/plugins/codex/hooks/vendor/stage/harnessignore.mjs +91 -0
- package/plugins/codex/hooks/vendor/stage/stage.mjs +58 -0
- package/plugins/codex/hooks/vendor/status/board.mjs +173 -0
- package/plugins/codex/hooks/vendor/status/file.mjs +113 -0
- package/plugins/codex/hooks/vendor/studio/forks.mjs +94 -0
- package/plugins/codex/hooks/vendor/studio/pitch.mjs +295 -0
- package/plugins/codex/hooks/vendor/verify/fingerprint.mjs +73 -0
- package/plugins/codex/hooks/vendor/verify/reads.mjs +33 -0
- package/plugins/codex/hooks/vendor/wow/picks.mjs +75 -0
- package/plugins/codex/mcp.json +9 -0
- package/plugins/codex/plugin.json +26 -0
- package/plugins/codex/skills/fp-art-director/SKILL.md +58 -0
- package/plugins/codex/skills/fp-art-director/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-art-director/references/codex.md +54 -0
- package/plugins/codex/skills/fp-audio-director/SKILL.md +55 -0
- package/plugins/codex/skills/fp-audio-director/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-audio-director/references/codex.md +54 -0
- package/plugins/codex/skills/fp-critic/SKILL.md +117 -0
- package/plugins/codex/skills/fp-critic/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-critic/references/codex.md +54 -0
- package/plugins/codex/skills/fp-first-look/SKILL.md +59 -0
- package/plugins/codex/skills/fp-first-look/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-flow/SKILL.md +50 -0
- package/plugins/codex/skills/fp-flow/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-lane/SKILL.md +41 -0
- package/plugins/codex/skills/fp-lane/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-lane/references/codex.md +54 -0
- package/plugins/codex/skills/fp-lanes/SKILL.md +38 -0
- package/plugins/codex/skills/fp-lanes/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-level-designer/SKILL.md +49 -0
- package/plugins/codex/skills/fp-level-designer/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-level-designer/references/codex.md +54 -0
- package/plugins/codex/skills/fp-mobile-qa/SKILL.md +28 -0
- package/plugins/codex/skills/fp-mobile-qa/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-mobile-qa-seat/SKILL.md +74 -0
- package/plugins/codex/skills/fp-mobile-qa-seat/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-mobile-qa-seat/references/codex.md +54 -0
- package/plugins/codex/skills/fp-new/SKILL.md +94 -0
- package/plugins/codex/skills/fp-new/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-player/SKILL.md +147 -0
- package/plugins/codex/skills/fp-player/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-player/references/codex.md +54 -0
- package/plugins/codex/skills/fp-playtest/SKILL.md +66 -0
- package/plugins/codex/skills/fp-playtest/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-publish/SKILL.md +23 -0
- package/plugins/codex/skills/fp-publish/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-qa-lead/SKILL.md +56 -0
- package/plugins/codex/skills/fp-qa-lead/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-qa-lead/references/codex.md +54 -0
- package/plugins/codex/skills/fp-smoke-build/SKILL.md +25 -0
- package/plugins/codex/skills/fp-smoke-build/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-studio/SKILL.md +59 -0
- package/plugins/codex/skills/fp-studio/agents/openai.yaml +12 -0
- package/plugins/codex/skills/fp-verify/SKILL.md +20 -0
- package/plugins/codex/skills/fp-verify/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-3d/SKILL.md +89 -0
- package/plugins/codex/skills/funpixel-3d/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-3d/references/bake-off.md +48 -0
- package/plugins/codex/skills/funpixel-3d/references/bench.md +103 -0
- package/plugins/codex/skills/funpixel-3d/references/budgets.md +48 -0
- package/plugins/codex/skills/funpixel-3d/references/characters.md +67 -0
- package/plugins/codex/skills/funpixel-3d/references/concept-image.md +47 -0
- package/plugins/codex/skills/funpixel-3d/references/engine-targets.md +31 -0
- package/plugins/codex/skills/funpixel-3d/references/hero-route.md +104 -0
- package/plugins/codex/skills/funpixel-3d/references/level-spec.md +109 -0
- package/plugins/codex/skills/funpixel-3d/references/levels.md +84 -0
- package/plugins/codex/skills/funpixel-3d/references/light-and-places.md +141 -0
- package/plugins/codex/skills/funpixel-3d/references/models.md +111 -0
- package/plugins/codex/skills/funpixel-3d/references/painted-target.md +184 -0
- package/plugins/codex/skills/funpixel-3d/references/reading.md +41 -0
- package/plugins/codex/skills/funpixel-3d/references/skin.md +85 -0
- package/plugins/codex/skills/funpixel-3d/references/skyboxes.md +65 -0
- package/plugins/codex/skills/funpixel-3d/references/textures.md +71 -0
- package/plugins/codex/skills/funpixel-3d/references/three-loading.md +199 -0
- package/plugins/codex/skills/funpixel-3d/references/unity.md +78 -0
- package/plugins/codex/skills/funpixel-art/SKILL.md +104 -0
- package/plugins/codex/skills/funpixel-art/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-art/references/2d-assets.md +108 -0
- package/plugins/codex/skills/funpixel-art/references/animation.md +126 -0
- package/plugins/codex/skills/funpixel-art/references/cast.md +73 -0
- package/plugins/codex/skills/funpixel-art/references/characters.md +49 -0
- package/plugins/codex/skills/funpixel-art/references/cost.md +107 -0
- package/plugins/codex/skills/funpixel-art/references/effects.md +85 -0
- package/plugins/codex/skills/funpixel-art/references/frames.md +87 -0
- package/plugins/codex/skills/funpixel-art/references/judging-frames.md +64 -0
- package/plugins/codex/skills/funpixel-art/references/look.md +102 -0
- package/plugins/codex/skills/funpixel-art/references/measure.md +119 -0
- package/plugins/codex/skills/funpixel-art/references/pipeline.md +185 -0
- package/plugins/codex/skills/funpixel-art/references/pixi.md +277 -0
- package/plugins/codex/skills/funpixel-art/references/planes.md +27 -0
- package/plugins/codex/skills/funpixel-art/references/prompts.md +171 -0
- package/plugins/codex/skills/funpixel-art/references/sheets.md +141 -0
- package/plugins/codex/skills/funpixel-art/references/style-file.md +39 -0
- package/plugins/codex/skills/funpixel-art/references/three.md +232 -0
- package/plugins/codex/skills/funpixel-art/references/ui.md +163 -0
- package/plugins/codex/skills/funpixel-art/references/unity.md +78 -0
- package/plugins/codex/skills/funpixel-art/references/wiring.md +41 -0
- package/plugins/codex/skills/funpixel-audio/SKILL.md +92 -0
- package/plugins/codex/skills/funpixel-audio/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-audio/references/adaptive-music.md +204 -0
- package/plugins/codex/skills/funpixel-audio/references/engine.md +78 -0
- package/plugins/codex/skills/funpixel-audio/references/measure.md +101 -0
- package/plugins/codex/skills/funpixel-audio/references/unity.md +74 -0
- package/plugins/codex/skills/funpixel-feedback/SKILL.md +120 -0
- package/plugins/codex/skills/funpixel-feedback/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-feedback/references/memory.md +99 -0
- package/plugins/codex/skills/funpixel-game-feel/SKILL.md +104 -0
- package/plugins/codex/skills/funpixel-game-feel/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-game-feel/references/contact.md +110 -0
- package/plugins/codex/skills/funpixel-game-feel/references/measure.md +125 -0
- package/plugins/codex/skills/funpixel-game-feel/references/motion.md +134 -0
- package/plugins/codex/skills/funpixel-game-feel/references/payoffs.md +35 -0
- package/plugins/codex/skills/funpixel-game-feel/references/recipes.md +107 -0
- package/plugins/codex/skills/funpixel-game-feel/references/unity.md +73 -0
- package/plugins/codex/skills/funpixel-game-logic/SKILL.md +113 -0
- package/plugins/codex/skills/funpixel-game-logic/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-game-logic/references/balance.md +88 -0
- package/plugins/codex/skills/funpixel-game-logic/references/content-at-scale.md +147 -0
- package/plugins/codex/skills/funpixel-game-logic/references/depth.md +89 -0
- package/plugins/codex/skills/funpixel-game-logic/references/escalation.md +41 -0
- package/plugins/codex/skills/funpixel-game-logic/references/levels.md +61 -0
- package/plugins/codex/skills/funpixel-game-logic/references/probes.md +122 -0
- package/plugins/codex/skills/funpixel-game-logic/references/unity.md +108 -0
- package/plugins/codex/skills/funpixel-game-spine/SKILL.md +118 -0
- package/plugins/codex/skills/funpixel-game-spine/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-game-spine/references/camera.md +94 -0
- package/plugins/codex/skills/funpixel-game-spine/references/multiplayer.md +101 -0
- package/plugins/codex/skills/funpixel-game-spine/references/patterns.md +103 -0
- package/plugins/codex/skills/funpixel-game-spine/references/performance.md +96 -0
- package/plugins/codex/skills/funpixel-game-spine/references/pixi.md +26 -0
- package/plugins/codex/skills/funpixel-game-spine/references/replay.md +102 -0
- package/plugins/codex/skills/funpixel-game-spine/references/room-api.md +63 -0
- package/plugins/codex/skills/funpixel-game-spine/references/room-modes.md +40 -0
- package/plugins/codex/skills/funpixel-game-spine/references/sdk.md +114 -0
- package/plugins/codex/skills/funpixel-game-spine/references/three.md +62 -0
- package/plugins/codex/skills/funpixel-gdd/SKILL.md +116 -0
- package/plugins/codex/skills/funpixel-gdd/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-gdd/references/as-built.md +40 -0
- package/plugins/codex/skills/funpixel-gdd/references/design-measures.md +24 -0
- package/plugins/codex/skills/funpixel-gdd/references/design-note.md +88 -0
- package/plugins/codex/skills/funpixel-gdd/references/experience.md +92 -0
- package/plugins/codex/skills/funpixel-gdd/references/first-look.md +226 -0
- package/plugins/codex/skills/funpixel-gdd/references/floors.md +62 -0
- package/plugins/codex/skills/funpixel-gdd/references/frame.md +75 -0
- package/plugins/codex/skills/funpixel-gdd/references/gameplay-contract.md +81 -0
- package/plugins/codex/skills/funpixel-gdd/references/gdd-template.md +417 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-card.md +109 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-platformer.md +159 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-puzzle.md +145 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-racing.md +137 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-rpg.md +125 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-shooter.md +128 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-simulation.md +112 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-strategy.md +116 -0
- package/plugins/codex/skills/funpixel-gdd/references/genre-survival.md +122 -0
- package/plugins/codex/skills/funpixel-gdd/references/in-the-loop.md +106 -0
- package/plugins/codex/skills/funpixel-gdd/references/invent-first.md +131 -0
- package/plugins/codex/skills/funpixel-gdd/references/level-and-fun.md +112 -0
- package/plugins/codex/skills/funpixel-gdd/references/pages.md +47 -0
- package/plugins/codex/skills/funpixel-gdd/references/plan-at-size.md +140 -0
- package/plugins/codex/skills/funpixel-gdd/references/production-tiers.md +117 -0
- package/plugins/codex/skills/funpixel-gdd/references/sections.md +148 -0
- package/plugins/codex/skills/funpixel-gdd/references/spec-folder.md +131 -0
- package/plugins/codex/skills/funpixel-gdd/references/start.md +110 -0
- package/plugins/codex/skills/funpixel-gdd/references/starters.md +175 -0
- package/plugins/codex/skills/funpixel-gdd/references/the-path.md +133 -0
- package/plugins/codex/skills/funpixel-gdd/references/track.md +29 -0
- package/plugins/codex/skills/funpixel-gdd/references/world-and-identity.md +165 -0
- package/plugins/codex/skills/funpixel-gdd/references/worth.md +74 -0
- package/plugins/codex/skills/funpixel-mobile-ui/SKILL.md +107 -0
- package/plugins/codex/skills/funpixel-mobile-ui/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/contrast.md +123 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/hud-genres.md +124 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/phone-check.md +156 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/recipes.md +279 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/codex/skills/funpixel-mobile-ui/references/unity.md +61 -0
- package/plugins/codex/skills/funpixel-publish/SKILL.md +109 -0
- package/plugins/codex/skills/funpixel-publish/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-publish/references/compose.md +113 -0
- package/plugins/codex/skills/funpixel-publish/references/motion.md +120 -0
- package/plugins/codex/skills/funpixel-publish/references/networks.md +75 -0
- package/plugins/codex/skills/funpixel-publish/references/other-hosts.md +65 -0
- package/plugins/codex/skills/funpixel-publish/references/playable-ad.md +90 -0
- package/plugins/codex/skills/funpixel-publish/references/server-build.md +85 -0
- package/plugins/codex/skills/funpixel-publish/references/store-shots.md +85 -0
- package/plugins/codex/skills/funpixel-publish/references/trailer.md +55 -0
- package/plugins/codex/skills/funpixel-publish/references/what-ships.md +30 -0
- package/plugins/codex/skills/funpixel-store/SKILL.md +81 -0
- package/plugins/codex/skills/funpixel-store/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-store/references/app-store.md +73 -0
- package/plugins/codex/skills/funpixel-store/references/google-play.md +141 -0
- package/plugins/codex/skills/funpixel-store/references/ios-release.md +63 -0
- package/plugins/codex/skills/funpixel-store/references/money.md +66 -0
- package/plugins/codex/skills/funpixel-store/references/purchases-and-review.md +74 -0
- package/plugins/codex/skills/funpixel-store/references/readiness-page.md +24 -0
- package/plugins/codex/skills/funpixel-store/references/readiness.md +107 -0
- package/plugins/codex/skills/funpixel-store/references/steam.md +38 -0
- package/plugins/codex/skills/funpixel-store/references/unity-store.md +55 -0
- package/plugins/codex/skills/funpixel-store/references/web-portals.md +43 -0
- package/plugins/codex/skills/funpixel-unity-game/SKILL.md +103 -0
- package/plugins/codex/skills/funpixel-unity-game/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-unity-game/references/agent-ops.md +54 -0
- package/plugins/codex/skills/funpixel-unity-game/references/fixes.md +40 -0
- package/plugins/codex/skills/funpixel-unity-game/references/from-a-web-game.md +108 -0
- package/plugins/codex/skills/funpixel-unity-game/references/handing-off.md +42 -0
- package/plugins/codex/skills/funpixel-unity-game/references/performance.md +59 -0
- package/plugins/codex/skills/funpixel-unity-game/references/probe.md +80 -0
- package/plugins/codex/skills/funpixel-unity-game/references/shared-mac.md +121 -0
- package/plugins/codex/skills/funpixel-unity-game/references/traps.md +108 -0
- package/plugins/codex/skills/funpixel-verify/SKILL.md +109 -0
- package/plugins/codex/skills/funpixel-verify/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-verify/references/actors.md +94 -0
- package/plugins/codex/skills/funpixel-verify/references/bar.md +62 -0
- package/plugins/codex/skills/funpixel-verify/references/checks.md +69 -0
- package/plugins/codex/skills/funpixel-verify/references/experience.md +67 -0
- package/plugins/codex/skills/funpixel-verify/references/eyes.md +54 -0
- package/plugins/codex/skills/funpixel-verify/references/fidelity.md +126 -0
- package/plugins/codex/skills/funpixel-verify/references/hit-bar.md +31 -0
- package/plugins/codex/skills/funpixel-verify/references/journeys.md +77 -0
- package/plugins/codex/skills/funpixel-verify/references/mobile-qa.md +123 -0
- package/plugins/codex/skills/funpixel-verify/references/playtest.md +161 -0
- package/plugins/codex/skills/funpixel-verify/references/review.md +105 -0
- package/plugins/codex/skills/funpixel-verify/references/rubric.md +67 -0
- package/plugins/codex/skills/funpixel-verify/references/scenes.md +49 -0
- package/plugins/codex/skills/funpixel-verify/references/unity.md +60 -0
- package/plugins/codex/skills/funpixel-world-and-story/SKILL.md +99 -0
- package/plugins/codex/skills/funpixel-world-and-story/agents/openai.yaml +12 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/atmosphere.md +208 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/forged-world.md +79 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/living-world.md +237 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/shelf.md +80 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/story-at-size.md +159 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/voice.md +175 -0
- package/plugins/codex/skills/funpixel-world-and-story/references/world-kit.md +154 -0
- package/plugins/cursor/.cursor-plugin/plugin.json +26 -0
- package/plugins/cursor/LICENSE +115 -0
- package/plugins/cursor/README.md +13 -0
- package/plugins/cursor/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/cursor/agents/art-director.md +54 -0
- package/plugins/cursor/agents/audio-director.md +51 -0
- package/plugins/cursor/agents/critic.md +113 -0
- package/plugins/cursor/agents/lane.md +37 -0
- package/plugins/cursor/agents/level-designer.md +45 -0
- package/plugins/cursor/agents/mobile-qa.md +70 -0
- package/plugins/cursor/agents/player.md +143 -0
- package/plugins/cursor/agents/qa-lead.md +52 -0
- package/plugins/cursor/commands/first-look.md +59 -0
- package/plugins/cursor/commands/flow.md +50 -0
- package/plugins/cursor/commands/lanes.md +38 -0
- package/plugins/cursor/commands/mobile-qa.md +28 -0
- package/plugins/cursor/commands/new.md +94 -0
- package/plugins/cursor/commands/playtest.md +66 -0
- package/plugins/cursor/commands/publish.md +23 -0
- package/plugins/cursor/commands/smoke-build.md +25 -0
- package/plugins/cursor/commands/verify.md +20 -0
- package/plugins/cursor/hooks/brief.md +135 -0
- package/plugins/cursor/hooks/critic-receipts.mjs +86 -0
- package/plugins/cursor/hooks/durable.mjs +56 -0
- package/plugins/cursor/hooks/fence.mjs +30 -0
- package/plugins/cursor/hooks/floors.mjs +181 -0
- package/plugins/cursor/hooks/flow.mjs +154 -0
- package/plugins/cursor/hooks/front-door.mjs +68 -0
- package/plugins/cursor/hooks/guidance.json +3 -0
- package/plugins/cursor/hooks/hints.mjs +183 -0
- package/plugins/cursor/hooks/hooks.json +26 -0
- package/plugins/cursor/hooks/lib.mjs +362 -0
- package/plugins/cursor/hooks/memory.mjs +92 -0
- package/plugins/cursor/hooks/mobile-qa.mjs +43 -0
- package/plugins/cursor/hooks/note.mjs +63 -0
- package/plugins/cursor/hooks/nudge.mjs +98 -0
- package/plugins/cursor/hooks/pipeline.mjs +207 -0
- package/plugins/cursor/hooks/prompt.mjs +51 -0
- package/plugins/cursor/hooks/quality.mjs +310 -0
- package/plugins/cursor/hooks/reach.mjs +93 -0
- package/plugins/cursor/hooks/scope.mjs +44 -0
- package/plugins/cursor/hooks/session-log.mjs +101 -0
- package/plugins/cursor/hooks/session-start.mjs +194 -0
- package/plugins/cursor/hooks/stop-gate.mjs +303 -0
- package/plugins/cursor/hooks/vendor/direct/round.mjs +81 -0
- package/plugins/cursor/hooks/vendor/find/names.mjs +46 -0
- package/plugins/cursor/hooks/vendor/firstlook/set.mjs +219 -0
- package/plugins/cursor/hooks/vendor/flow/flow.mjs +456 -0
- package/plugins/cursor/hooks/vendor/flow/look.mjs +140 -0
- package/plugins/cursor/hooks/vendor/gdd/book.mjs +484 -0
- package/plugins/cursor/hooks/vendor/gdd/chapters.mjs +72 -0
- package/plugins/cursor/hooks/vendor/gdd/doc.mjs +33 -0
- package/plugins/cursor/hooks/vendor/gdd/levelmap.mjs +429 -0
- package/plugins/cursor/hooks/vendor/gdd/rubric.mjs +251 -0
- package/plugins/cursor/hooks/vendor/gdd/worth.mjs +508 -0
- package/plugins/cursor/hooks/vendor/lanes/fence.mjs +109 -0
- package/plugins/cursor/hooks/vendor/lanes/lanes.mjs +356 -0
- package/plugins/cursor/hooks/vendor/lanes/union.mjs +63 -0
- package/plugins/cursor/hooks/vendor/lessons/motifs.mjs +98 -0
- package/plugins/cursor/hooks/vendor/lessons/store.mjs +57 -0
- package/plugins/cursor/hooks/vendor/look/made-of.mjs +243 -0
- package/plugins/cursor/hooks/vendor/look/roles.mjs +110 -0
- package/plugins/cursor/hooks/vendor/memory/decisions.mjs +139 -0
- package/plugins/cursor/hooks/vendor/memory/journal.mjs +109 -0
- package/plugins/cursor/hooks/vendor/owner/bar.mjs +286 -0
- package/plugins/cursor/hooks/vendor/pipeline/pipeline.mjs +930 -0
- package/plugins/cursor/hooks/vendor/playtest/keep.mjs +111 -0
- package/plugins/cursor/hooks/vendor/playtest/stuck.mjs +48 -0
- package/plugins/cursor/hooks/vendor/progress/holds.mjs +107 -0
- package/plugins/cursor/hooks/vendor/progress/progress.mjs +301 -0
- package/plugins/cursor/hooks/vendor/sim/judge.mjs +241 -0
- package/plugins/cursor/hooks/vendor/spec/rooms.mjs +189 -0
- package/plugins/cursor/hooks/vendor/spec/tunables.mjs +75 -0
- package/plugins/cursor/hooks/vendor/stage/harnessignore.mjs +91 -0
- package/plugins/cursor/hooks/vendor/stage/stage.mjs +58 -0
- package/plugins/cursor/hooks/vendor/status/board.mjs +173 -0
- package/plugins/cursor/hooks/vendor/status/file.mjs +113 -0
- package/plugins/cursor/hooks/vendor/studio/forks.mjs +94 -0
- package/plugins/cursor/hooks/vendor/studio/pitch.mjs +295 -0
- package/plugins/cursor/hooks/vendor/verify/fingerprint.mjs +73 -0
- package/plugins/cursor/hooks/vendor/verify/reads.mjs +33 -0
- package/plugins/cursor/hooks/vendor/wow/picks.mjs +75 -0
- package/plugins/cursor/mcp.json +10 -0
- package/plugins/cursor/rules/funpixel-brief.mdc +141 -0
- package/plugins/cursor/skills/funpixel-3d/SKILL.md +89 -0
- package/plugins/cursor/skills/funpixel-3d/references/bake-off.md +48 -0
- package/plugins/cursor/skills/funpixel-3d/references/bench.md +103 -0
- package/plugins/cursor/skills/funpixel-3d/references/budgets.md +48 -0
- package/plugins/cursor/skills/funpixel-3d/references/characters.md +67 -0
- package/plugins/cursor/skills/funpixel-3d/references/concept-image.md +47 -0
- package/plugins/cursor/skills/funpixel-3d/references/engine-targets.md +31 -0
- package/plugins/cursor/skills/funpixel-3d/references/hero-route.md +104 -0
- package/plugins/cursor/skills/funpixel-3d/references/level-spec.md +109 -0
- package/plugins/cursor/skills/funpixel-3d/references/levels.md +84 -0
- package/plugins/cursor/skills/funpixel-3d/references/light-and-places.md +141 -0
- package/plugins/cursor/skills/funpixel-3d/references/models.md +111 -0
- package/plugins/cursor/skills/funpixel-3d/references/painted-target.md +184 -0
- package/plugins/cursor/skills/funpixel-3d/references/reading.md +41 -0
- package/plugins/cursor/skills/funpixel-3d/references/skin.md +85 -0
- package/plugins/cursor/skills/funpixel-3d/references/skyboxes.md +65 -0
- package/plugins/cursor/skills/funpixel-3d/references/textures.md +71 -0
- package/plugins/cursor/skills/funpixel-3d/references/three-loading.md +199 -0
- package/plugins/cursor/skills/funpixel-3d/references/unity.md +78 -0
- package/plugins/cursor/skills/funpixel-art/SKILL.md +104 -0
- package/plugins/cursor/skills/funpixel-art/references/2d-assets.md +108 -0
- package/plugins/cursor/skills/funpixel-art/references/animation.md +126 -0
- package/plugins/cursor/skills/funpixel-art/references/cast.md +73 -0
- package/plugins/cursor/skills/funpixel-art/references/characters.md +49 -0
- package/plugins/cursor/skills/funpixel-art/references/cost.md +107 -0
- package/plugins/cursor/skills/funpixel-art/references/effects.md +85 -0
- package/plugins/cursor/skills/funpixel-art/references/frames.md +87 -0
- package/plugins/cursor/skills/funpixel-art/references/judging-frames.md +64 -0
- package/plugins/cursor/skills/funpixel-art/references/look.md +102 -0
- package/plugins/cursor/skills/funpixel-art/references/measure.md +119 -0
- package/plugins/cursor/skills/funpixel-art/references/pipeline.md +185 -0
- package/plugins/cursor/skills/funpixel-art/references/pixi.md +277 -0
- package/plugins/cursor/skills/funpixel-art/references/planes.md +27 -0
- package/plugins/cursor/skills/funpixel-art/references/prompts.md +171 -0
- package/plugins/cursor/skills/funpixel-art/references/sheets.md +141 -0
- package/plugins/cursor/skills/funpixel-art/references/style-file.md +39 -0
- package/plugins/cursor/skills/funpixel-art/references/three.md +232 -0
- package/plugins/cursor/skills/funpixel-art/references/ui.md +163 -0
- package/plugins/cursor/skills/funpixel-art/references/unity.md +78 -0
- package/plugins/cursor/skills/funpixel-art/references/wiring.md +41 -0
- package/plugins/cursor/skills/funpixel-audio/SKILL.md +92 -0
- package/plugins/cursor/skills/funpixel-audio/references/adaptive-music.md +204 -0
- package/plugins/cursor/skills/funpixel-audio/references/engine.md +78 -0
- package/plugins/cursor/skills/funpixel-audio/references/measure.md +101 -0
- package/plugins/cursor/skills/funpixel-audio/references/unity.md +74 -0
- package/plugins/cursor/skills/funpixel-feedback/SKILL.md +120 -0
- package/plugins/cursor/skills/funpixel-feedback/references/memory.md +99 -0
- package/plugins/cursor/skills/funpixel-game-feel/SKILL.md +104 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/contact.md +110 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/measure.md +125 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/motion.md +134 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/payoffs.md +35 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/recipes.md +107 -0
- package/plugins/cursor/skills/funpixel-game-feel/references/unity.md +73 -0
- package/plugins/cursor/skills/funpixel-game-logic/SKILL.md +113 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/balance.md +88 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/content-at-scale.md +147 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/depth.md +89 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/escalation.md +41 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/levels.md +61 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/probes.md +122 -0
- package/plugins/cursor/skills/funpixel-game-logic/references/unity.md +108 -0
- package/plugins/cursor/skills/funpixel-game-spine/SKILL.md +118 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/camera.md +94 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/multiplayer.md +101 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/patterns.md +103 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/performance.md +96 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/pixi.md +26 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/replay.md +102 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/room-api.md +63 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/room-modes.md +40 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/sdk.md +114 -0
- package/plugins/cursor/skills/funpixel-game-spine/references/three.md +62 -0
- package/plugins/cursor/skills/funpixel-gdd/SKILL.md +116 -0
- package/plugins/cursor/skills/funpixel-gdd/references/as-built.md +40 -0
- package/plugins/cursor/skills/funpixel-gdd/references/design-measures.md +24 -0
- package/plugins/cursor/skills/funpixel-gdd/references/design-note.md +88 -0
- package/plugins/cursor/skills/funpixel-gdd/references/experience.md +92 -0
- package/plugins/cursor/skills/funpixel-gdd/references/first-look.md +226 -0
- package/plugins/cursor/skills/funpixel-gdd/references/floors.md +62 -0
- package/plugins/cursor/skills/funpixel-gdd/references/frame.md +75 -0
- package/plugins/cursor/skills/funpixel-gdd/references/gameplay-contract.md +81 -0
- package/plugins/cursor/skills/funpixel-gdd/references/gdd-template.md +417 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-card.md +109 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-platformer.md +159 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-puzzle.md +145 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-racing.md +137 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-rpg.md +125 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-shooter.md +128 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-simulation.md +112 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-strategy.md +116 -0
- package/plugins/cursor/skills/funpixel-gdd/references/genre-survival.md +122 -0
- package/plugins/cursor/skills/funpixel-gdd/references/in-the-loop.md +106 -0
- package/plugins/cursor/skills/funpixel-gdd/references/invent-first.md +131 -0
- package/plugins/cursor/skills/funpixel-gdd/references/level-and-fun.md +112 -0
- package/plugins/cursor/skills/funpixel-gdd/references/pages.md +47 -0
- package/plugins/cursor/skills/funpixel-gdd/references/plan-at-size.md +140 -0
- package/plugins/cursor/skills/funpixel-gdd/references/production-tiers.md +117 -0
- package/plugins/cursor/skills/funpixel-gdd/references/sections.md +148 -0
- package/plugins/cursor/skills/funpixel-gdd/references/spec-folder.md +131 -0
- package/plugins/cursor/skills/funpixel-gdd/references/start.md +110 -0
- package/plugins/cursor/skills/funpixel-gdd/references/starters.md +175 -0
- package/plugins/cursor/skills/funpixel-gdd/references/the-path.md +133 -0
- package/plugins/cursor/skills/funpixel-gdd/references/track.md +29 -0
- package/plugins/cursor/skills/funpixel-gdd/references/world-and-identity.md +165 -0
- package/plugins/cursor/skills/funpixel-gdd/references/worth.md +74 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/SKILL.md +107 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/contrast.md +123 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/hud-genres.md +124 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/phone-check.md +156 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/recipes.md +279 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/cursor/skills/funpixel-mobile-ui/references/unity.md +61 -0
- package/plugins/cursor/skills/funpixel-publish/SKILL.md +109 -0
- package/plugins/cursor/skills/funpixel-publish/references/compose.md +113 -0
- package/plugins/cursor/skills/funpixel-publish/references/motion.md +120 -0
- package/plugins/cursor/skills/funpixel-publish/references/networks.md +75 -0
- package/plugins/cursor/skills/funpixel-publish/references/other-hosts.md +65 -0
- package/plugins/cursor/skills/funpixel-publish/references/playable-ad.md +90 -0
- package/plugins/cursor/skills/funpixel-publish/references/server-build.md +85 -0
- package/plugins/cursor/skills/funpixel-publish/references/store-shots.md +85 -0
- package/plugins/cursor/skills/funpixel-publish/references/trailer.md +55 -0
- package/plugins/cursor/skills/funpixel-publish/references/what-ships.md +30 -0
- package/plugins/cursor/skills/funpixel-store/SKILL.md +81 -0
- package/plugins/cursor/skills/funpixel-store/references/app-store.md +73 -0
- package/plugins/cursor/skills/funpixel-store/references/google-play.md +141 -0
- package/plugins/cursor/skills/funpixel-store/references/ios-release.md +63 -0
- package/plugins/cursor/skills/funpixel-store/references/money.md +66 -0
- package/plugins/cursor/skills/funpixel-store/references/purchases-and-review.md +74 -0
- package/plugins/cursor/skills/funpixel-store/references/readiness-page.md +24 -0
- package/plugins/cursor/skills/funpixel-store/references/readiness.md +107 -0
- package/plugins/cursor/skills/funpixel-store/references/steam.md +38 -0
- package/plugins/cursor/skills/funpixel-store/references/unity-store.md +55 -0
- package/plugins/cursor/skills/funpixel-store/references/web-portals.md +43 -0
- package/plugins/cursor/skills/funpixel-unity-game/SKILL.md +103 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/agent-ops.md +54 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/fixes.md +40 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/from-a-web-game.md +108 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/handing-off.md +42 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/performance.md +59 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/probe.md +80 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/shared-mac.md +121 -0
- package/plugins/cursor/skills/funpixel-unity-game/references/traps.md +108 -0
- package/plugins/cursor/skills/funpixel-verify/SKILL.md +109 -0
- package/plugins/cursor/skills/funpixel-verify/references/actors.md +94 -0
- package/plugins/cursor/skills/funpixel-verify/references/bar.md +62 -0
- package/plugins/cursor/skills/funpixel-verify/references/checks.md +69 -0
- package/plugins/cursor/skills/funpixel-verify/references/experience.md +67 -0
- package/plugins/cursor/skills/funpixel-verify/references/eyes.md +54 -0
- package/plugins/cursor/skills/funpixel-verify/references/fidelity.md +126 -0
- package/plugins/cursor/skills/funpixel-verify/references/hit-bar.md +31 -0
- package/plugins/cursor/skills/funpixel-verify/references/journeys.md +77 -0
- package/plugins/cursor/skills/funpixel-verify/references/mobile-qa.md +123 -0
- package/plugins/cursor/skills/funpixel-verify/references/playtest.md +161 -0
- package/plugins/cursor/skills/funpixel-verify/references/review.md +105 -0
- package/plugins/cursor/skills/funpixel-verify/references/rubric.md +67 -0
- package/plugins/cursor/skills/funpixel-verify/references/scenes.md +49 -0
- package/plugins/cursor/skills/funpixel-verify/references/unity.md +60 -0
- package/plugins/cursor/skills/funpixel-world-and-story/SKILL.md +99 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/atmosphere.md +208 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/forged-world.md +79 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/living-world.md +237 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/shelf.md +80 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/story-at-size.md +159 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/voice.md +175 -0
- package/plugins/cursor/skills/funpixel-world-and-story/references/world-kit.md +154 -0
- package/plugins/kiro/AGENTS.md +135 -0
- package/plugins/kiro/LICENSE +115 -0
- package/plugins/kiro/README.md +17 -0
- package/plugins/kiro/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/kiro/agent.template.json +45 -0
- package/plugins/kiro/hooks/brief.md +135 -0
- package/plugins/kiro/hooks/critic-receipts.mjs +86 -0
- package/plugins/kiro/hooks/durable.mjs +56 -0
- package/plugins/kiro/hooks/fence.mjs +30 -0
- package/plugins/kiro/hooks/floors.mjs +181 -0
- package/plugins/kiro/hooks/flow.mjs +154 -0
- package/plugins/kiro/hooks/front-door.mjs +68 -0
- package/plugins/kiro/hooks/guidance.json +3 -0
- package/plugins/kiro/hooks/hints.mjs +183 -0
- package/plugins/kiro/hooks/host.md +43 -0
- package/plugins/kiro/hooks/kiro-prompt.mjs +26 -0
- package/plugins/kiro/hooks/lib.mjs +362 -0
- package/plugins/kiro/hooks/memory.mjs +92 -0
- package/plugins/kiro/hooks/mobile-qa.mjs +43 -0
- package/plugins/kiro/hooks/note.mjs +63 -0
- package/plugins/kiro/hooks/nudge.mjs +98 -0
- package/plugins/kiro/hooks/pipeline.mjs +207 -0
- package/plugins/kiro/hooks/prompt.mjs +51 -0
- package/plugins/kiro/hooks/quality.mjs +310 -0
- package/plugins/kiro/hooks/reach.mjs +93 -0
- package/plugins/kiro/hooks/scope.mjs +44 -0
- package/plugins/kiro/hooks/session-log.mjs +101 -0
- package/plugins/kiro/hooks/session-start.mjs +194 -0
- package/plugins/kiro/hooks/stop-gate.mjs +303 -0
- package/plugins/kiro/hooks/vendor/direct/round.mjs +81 -0
- package/plugins/kiro/hooks/vendor/find/names.mjs +46 -0
- package/plugins/kiro/hooks/vendor/firstlook/set.mjs +219 -0
- package/plugins/kiro/hooks/vendor/flow/flow.mjs +456 -0
- package/plugins/kiro/hooks/vendor/flow/look.mjs +140 -0
- package/plugins/kiro/hooks/vendor/gdd/book.mjs +484 -0
- package/plugins/kiro/hooks/vendor/gdd/chapters.mjs +72 -0
- package/plugins/kiro/hooks/vendor/gdd/doc.mjs +33 -0
- package/plugins/kiro/hooks/vendor/gdd/levelmap.mjs +429 -0
- package/plugins/kiro/hooks/vendor/gdd/rubric.mjs +251 -0
- package/plugins/kiro/hooks/vendor/gdd/worth.mjs +508 -0
- package/plugins/kiro/hooks/vendor/lanes/fence.mjs +109 -0
- package/plugins/kiro/hooks/vendor/lanes/lanes.mjs +356 -0
- package/plugins/kiro/hooks/vendor/lanes/union.mjs +63 -0
- package/plugins/kiro/hooks/vendor/lessons/motifs.mjs +98 -0
- package/plugins/kiro/hooks/vendor/lessons/store.mjs +57 -0
- package/plugins/kiro/hooks/vendor/look/made-of.mjs +243 -0
- package/plugins/kiro/hooks/vendor/look/roles.mjs +110 -0
- package/plugins/kiro/hooks/vendor/memory/decisions.mjs +139 -0
- package/plugins/kiro/hooks/vendor/memory/journal.mjs +109 -0
- package/plugins/kiro/hooks/vendor/owner/bar.mjs +286 -0
- package/plugins/kiro/hooks/vendor/pipeline/pipeline.mjs +930 -0
- package/plugins/kiro/hooks/vendor/playtest/keep.mjs +111 -0
- package/plugins/kiro/hooks/vendor/playtest/stuck.mjs +48 -0
- package/plugins/kiro/hooks/vendor/progress/holds.mjs +107 -0
- package/plugins/kiro/hooks/vendor/progress/progress.mjs +301 -0
- package/plugins/kiro/hooks/vendor/sim/judge.mjs +241 -0
- package/plugins/kiro/hooks/vendor/spec/rooms.mjs +189 -0
- package/plugins/kiro/hooks/vendor/spec/tunables.mjs +75 -0
- package/plugins/kiro/hooks/vendor/stage/harnessignore.mjs +91 -0
- package/plugins/kiro/hooks/vendor/stage/stage.mjs +58 -0
- package/plugins/kiro/hooks/vendor/status/board.mjs +173 -0
- package/plugins/kiro/hooks/vendor/status/file.mjs +113 -0
- package/plugins/kiro/hooks/vendor/studio/forks.mjs +94 -0
- package/plugins/kiro/hooks/vendor/studio/pitch.mjs +295 -0
- package/plugins/kiro/hooks/vendor/verify/fingerprint.mjs +73 -0
- package/plugins/kiro/hooks/vendor/verify/reads.mjs +33 -0
- package/plugins/kiro/hooks/vendor/wow/picks.mjs +75 -0
- package/plugins/kiro/install.mjs +37 -0
- package/plugins/kiro/skills/fp-art-director/SKILL.md +58 -0
- package/plugins/kiro/skills/fp-art-director/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-audio-director/SKILL.md +55 -0
- package/plugins/kiro/skills/fp-audio-director/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-critic/SKILL.md +117 -0
- package/plugins/kiro/skills/fp-critic/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-first-look/SKILL.md +61 -0
- package/plugins/kiro/skills/fp-flow/SKILL.md +52 -0
- package/plugins/kiro/skills/fp-lane/SKILL.md +41 -0
- package/plugins/kiro/skills/fp-lane/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-lanes/SKILL.md +40 -0
- package/plugins/kiro/skills/fp-level-designer/SKILL.md +49 -0
- package/plugins/kiro/skills/fp-level-designer/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-mobile-qa/SKILL.md +30 -0
- package/plugins/kiro/skills/fp-mobile-qa-seat/SKILL.md +74 -0
- package/plugins/kiro/skills/fp-mobile-qa-seat/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-new/SKILL.md +96 -0
- package/plugins/kiro/skills/fp-player/SKILL.md +147 -0
- package/plugins/kiro/skills/fp-player/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-playtest/SKILL.md +68 -0
- package/plugins/kiro/skills/fp-publish/SKILL.md +25 -0
- package/plugins/kiro/skills/fp-qa-lead/SKILL.md +56 -0
- package/plugins/kiro/skills/fp-qa-lead/references/kiro.md +43 -0
- package/plugins/kiro/skills/fp-smoke-build/SKILL.md +27 -0
- package/plugins/kiro/skills/fp-studio/SKILL.md +48 -0
- package/plugins/kiro/skills/fp-verify/SKILL.md +22 -0
- package/plugins/kiro/skills/funpixel-3d/SKILL.md +89 -0
- package/plugins/kiro/skills/funpixel-3d/references/bake-off.md +48 -0
- package/plugins/kiro/skills/funpixel-3d/references/bench.md +103 -0
- package/plugins/kiro/skills/funpixel-3d/references/budgets.md +48 -0
- package/plugins/kiro/skills/funpixel-3d/references/characters.md +67 -0
- package/plugins/kiro/skills/funpixel-3d/references/concept-image.md +47 -0
- package/plugins/kiro/skills/funpixel-3d/references/engine-targets.md +31 -0
- package/plugins/kiro/skills/funpixel-3d/references/hero-route.md +104 -0
- package/plugins/kiro/skills/funpixel-3d/references/level-spec.md +109 -0
- package/plugins/kiro/skills/funpixel-3d/references/levels.md +84 -0
- package/plugins/kiro/skills/funpixel-3d/references/light-and-places.md +141 -0
- package/plugins/kiro/skills/funpixel-3d/references/models.md +111 -0
- package/plugins/kiro/skills/funpixel-3d/references/painted-target.md +184 -0
- package/plugins/kiro/skills/funpixel-3d/references/reading.md +41 -0
- package/plugins/kiro/skills/funpixel-3d/references/skin.md +85 -0
- package/plugins/kiro/skills/funpixel-3d/references/skyboxes.md +65 -0
- package/plugins/kiro/skills/funpixel-3d/references/textures.md +71 -0
- package/plugins/kiro/skills/funpixel-3d/references/three-loading.md +199 -0
- package/plugins/kiro/skills/funpixel-3d/references/unity.md +78 -0
- package/plugins/kiro/skills/funpixel-art/SKILL.md +104 -0
- package/plugins/kiro/skills/funpixel-art/references/2d-assets.md +108 -0
- package/plugins/kiro/skills/funpixel-art/references/animation.md +126 -0
- package/plugins/kiro/skills/funpixel-art/references/cast.md +73 -0
- package/plugins/kiro/skills/funpixel-art/references/characters.md +49 -0
- package/plugins/kiro/skills/funpixel-art/references/cost.md +107 -0
- package/plugins/kiro/skills/funpixel-art/references/effects.md +85 -0
- package/plugins/kiro/skills/funpixel-art/references/frames.md +87 -0
- package/plugins/kiro/skills/funpixel-art/references/judging-frames.md +64 -0
- package/plugins/kiro/skills/funpixel-art/references/look.md +102 -0
- package/plugins/kiro/skills/funpixel-art/references/measure.md +119 -0
- package/plugins/kiro/skills/funpixel-art/references/pipeline.md +185 -0
- package/plugins/kiro/skills/funpixel-art/references/pixi.md +277 -0
- package/plugins/kiro/skills/funpixel-art/references/planes.md +27 -0
- package/plugins/kiro/skills/funpixel-art/references/prompts.md +171 -0
- package/plugins/kiro/skills/funpixel-art/references/sheets.md +141 -0
- package/plugins/kiro/skills/funpixel-art/references/style-file.md +39 -0
- package/plugins/kiro/skills/funpixel-art/references/three.md +232 -0
- package/plugins/kiro/skills/funpixel-art/references/ui.md +163 -0
- package/plugins/kiro/skills/funpixel-art/references/unity.md +78 -0
- package/plugins/kiro/skills/funpixel-art/references/wiring.md +41 -0
- package/plugins/kiro/skills/funpixel-audio/SKILL.md +92 -0
- package/plugins/kiro/skills/funpixel-audio/references/adaptive-music.md +204 -0
- package/plugins/kiro/skills/funpixel-audio/references/engine.md +78 -0
- package/plugins/kiro/skills/funpixel-audio/references/measure.md +101 -0
- package/plugins/kiro/skills/funpixel-audio/references/unity.md +74 -0
- package/plugins/kiro/skills/funpixel-feedback/SKILL.md +120 -0
- package/plugins/kiro/skills/funpixel-feedback/references/memory.md +99 -0
- package/plugins/kiro/skills/funpixel-game-feel/SKILL.md +104 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/contact.md +110 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/measure.md +125 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/motion.md +134 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/payoffs.md +35 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/recipes.md +107 -0
- package/plugins/kiro/skills/funpixel-game-feel/references/unity.md +73 -0
- package/plugins/kiro/skills/funpixel-game-logic/SKILL.md +113 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/balance.md +88 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/content-at-scale.md +147 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/depth.md +89 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/escalation.md +41 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/levels.md +61 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/probes.md +122 -0
- package/plugins/kiro/skills/funpixel-game-logic/references/unity.md +108 -0
- package/plugins/kiro/skills/funpixel-game-spine/SKILL.md +118 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/camera.md +94 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/multiplayer.md +101 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/patterns.md +103 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/performance.md +96 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/pixi.md +26 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/replay.md +102 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/room-api.md +63 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/room-modes.md +40 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/sdk.md +114 -0
- package/plugins/kiro/skills/funpixel-game-spine/references/three.md +62 -0
- package/plugins/kiro/skills/funpixel-gdd/SKILL.md +116 -0
- package/plugins/kiro/skills/funpixel-gdd/references/as-built.md +40 -0
- package/plugins/kiro/skills/funpixel-gdd/references/design-measures.md +24 -0
- package/plugins/kiro/skills/funpixel-gdd/references/design-note.md +88 -0
- package/plugins/kiro/skills/funpixel-gdd/references/experience.md +92 -0
- package/plugins/kiro/skills/funpixel-gdd/references/first-look.md +226 -0
- package/plugins/kiro/skills/funpixel-gdd/references/floors.md +62 -0
- package/plugins/kiro/skills/funpixel-gdd/references/frame.md +75 -0
- package/plugins/kiro/skills/funpixel-gdd/references/gameplay-contract.md +81 -0
- package/plugins/kiro/skills/funpixel-gdd/references/gdd-template.md +417 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-card.md +109 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-platformer.md +159 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-puzzle.md +145 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-racing.md +137 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-rpg.md +125 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-shooter.md +128 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-simulation.md +112 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-strategy.md +116 -0
- package/plugins/kiro/skills/funpixel-gdd/references/genre-survival.md +122 -0
- package/plugins/kiro/skills/funpixel-gdd/references/in-the-loop.md +106 -0
- package/plugins/kiro/skills/funpixel-gdd/references/invent-first.md +131 -0
- package/plugins/kiro/skills/funpixel-gdd/references/level-and-fun.md +112 -0
- package/plugins/kiro/skills/funpixel-gdd/references/pages.md +47 -0
- package/plugins/kiro/skills/funpixel-gdd/references/plan-at-size.md +140 -0
- package/plugins/kiro/skills/funpixel-gdd/references/production-tiers.md +117 -0
- package/plugins/kiro/skills/funpixel-gdd/references/sections.md +148 -0
- package/plugins/kiro/skills/funpixel-gdd/references/spec-folder.md +131 -0
- package/plugins/kiro/skills/funpixel-gdd/references/start.md +110 -0
- package/plugins/kiro/skills/funpixel-gdd/references/starters.md +175 -0
- package/plugins/kiro/skills/funpixel-gdd/references/the-path.md +133 -0
- package/plugins/kiro/skills/funpixel-gdd/references/track.md +29 -0
- package/plugins/kiro/skills/funpixel-gdd/references/world-and-identity.md +165 -0
- package/plugins/kiro/skills/funpixel-gdd/references/worth.md +74 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/SKILL.md +107 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/contrast.md +123 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/hud-genres.md +124 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/phone-check.md +156 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/recipes.md +279 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/kiro/skills/funpixel-mobile-ui/references/unity.md +61 -0
- package/plugins/kiro/skills/funpixel-publish/SKILL.md +109 -0
- package/plugins/kiro/skills/funpixel-publish/references/compose.md +113 -0
- package/plugins/kiro/skills/funpixel-publish/references/motion.md +120 -0
- package/plugins/kiro/skills/funpixel-publish/references/networks.md +75 -0
- package/plugins/kiro/skills/funpixel-publish/references/other-hosts.md +65 -0
- package/plugins/kiro/skills/funpixel-publish/references/playable-ad.md +90 -0
- package/plugins/kiro/skills/funpixel-publish/references/server-build.md +85 -0
- package/plugins/kiro/skills/funpixel-publish/references/store-shots.md +85 -0
- package/plugins/kiro/skills/funpixel-publish/references/trailer.md +55 -0
- package/plugins/kiro/skills/funpixel-publish/references/what-ships.md +30 -0
- package/plugins/kiro/skills/funpixel-store/SKILL.md +81 -0
- package/plugins/kiro/skills/funpixel-store/references/app-store.md +73 -0
- package/plugins/kiro/skills/funpixel-store/references/google-play.md +141 -0
- package/plugins/kiro/skills/funpixel-store/references/ios-release.md +63 -0
- package/plugins/kiro/skills/funpixel-store/references/money.md +66 -0
- package/plugins/kiro/skills/funpixel-store/references/purchases-and-review.md +74 -0
- package/plugins/kiro/skills/funpixel-store/references/readiness-page.md +24 -0
- package/plugins/kiro/skills/funpixel-store/references/readiness.md +107 -0
- package/plugins/kiro/skills/funpixel-store/references/steam.md +38 -0
- package/plugins/kiro/skills/funpixel-store/references/unity-store.md +55 -0
- package/plugins/kiro/skills/funpixel-store/references/web-portals.md +43 -0
- package/plugins/kiro/skills/funpixel-unity-game/SKILL.md +103 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/agent-ops.md +54 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/fixes.md +40 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/from-a-web-game.md +108 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/handing-off.md +42 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/performance.md +59 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/probe.md +80 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/shared-mac.md +121 -0
- package/plugins/kiro/skills/funpixel-unity-game/references/traps.md +108 -0
- package/plugins/kiro/skills/funpixel-verify/SKILL.md +109 -0
- package/plugins/kiro/skills/funpixel-verify/references/actors.md +94 -0
- package/plugins/kiro/skills/funpixel-verify/references/bar.md +62 -0
- package/plugins/kiro/skills/funpixel-verify/references/checks.md +69 -0
- package/plugins/kiro/skills/funpixel-verify/references/experience.md +67 -0
- package/plugins/kiro/skills/funpixel-verify/references/eyes.md +54 -0
- package/plugins/kiro/skills/funpixel-verify/references/fidelity.md +126 -0
- package/plugins/kiro/skills/funpixel-verify/references/hit-bar.md +31 -0
- package/plugins/kiro/skills/funpixel-verify/references/journeys.md +77 -0
- package/plugins/kiro/skills/funpixel-verify/references/mobile-qa.md +123 -0
- package/plugins/kiro/skills/funpixel-verify/references/playtest.md +161 -0
- package/plugins/kiro/skills/funpixel-verify/references/review.md +105 -0
- package/plugins/kiro/skills/funpixel-verify/references/rubric.md +67 -0
- package/plugins/kiro/skills/funpixel-verify/references/scenes.md +49 -0
- package/plugins/kiro/skills/funpixel-verify/references/unity.md +60 -0
- package/plugins/kiro/skills/funpixel-world-and-story/SKILL.md +99 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/atmosphere.md +208 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/forged-world.md +79 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/living-world.md +237 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/shelf.md +80 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/story-at-size.md +159 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/voice.md +175 -0
- package/plugins/kiro/skills/funpixel-world-and-story/references/world-kit.md +154 -0
- package/plugins/robin/LICENSE +115 -0
- package/plugins/robin/README.md +27 -0
- package/plugins/robin/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/robin/claude/.claude-plugin/plugin.json +19 -0
- package/plugins/robin/claude/.mcp.json +10 -0
- package/plugins/robin/claude/LICENSE +115 -0
- package/plugins/robin/claude/README.md +14 -0
- package/plugins/robin/claude/THIRD_PARTY_NOTICES.md +75 -0
- package/plugins/robin/claude/agents/art-director.md +54 -0
- package/plugins/robin/claude/agents/audio-director.md +51 -0
- package/plugins/robin/claude/agents/critic.md +113 -0
- package/plugins/robin/claude/agents/lane.md +38 -0
- package/plugins/robin/claude/agents/level-designer.md +45 -0
- package/plugins/robin/claude/agents/mobile-qa.md +71 -0
- package/plugins/robin/claude/agents/player.md +144 -0
- package/plugins/robin/claude/agents/qa-lead.md +52 -0
- package/plugins/robin/claude/commands/first-look.md +59 -0
- package/plugins/robin/claude/commands/flow.md +50 -0
- package/plugins/robin/claude/commands/lanes.md +38 -0
- package/plugins/robin/claude/commands/mobile-qa.md +28 -0
- package/plugins/robin/claude/commands/new.md +94 -0
- package/plugins/robin/claude/commands/playtest.md +66 -0
- package/plugins/robin/claude/commands/publish.md +23 -0
- package/plugins/robin/claude/commands/smoke-build.md +25 -0
- package/plugins/robin/claude/commands/verify.md +20 -0
- package/plugins/robin/claude/hooks/brief.md +135 -0
- package/plugins/robin/claude/hooks/critic-receipts.mjs +86 -0
- package/plugins/robin/claude/hooks/durable.mjs +56 -0
- package/plugins/robin/claude/hooks/fence.mjs +30 -0
- package/plugins/robin/claude/hooks/floors.mjs +181 -0
- package/plugins/robin/claude/hooks/flow.mjs +154 -0
- package/plugins/robin/claude/hooks/front-door.mjs +68 -0
- package/plugins/robin/claude/hooks/guidance.json +3 -0
- package/plugins/robin/claude/hooks/hints.mjs +183 -0
- package/plugins/robin/claude/hooks/hooks.json +62 -0
- package/plugins/robin/claude/hooks/lib.mjs +362 -0
- package/plugins/robin/claude/hooks/memory.mjs +92 -0
- package/plugins/robin/claude/hooks/mobile-qa.mjs +43 -0
- package/plugins/robin/claude/hooks/note.mjs +63 -0
- package/plugins/robin/claude/hooks/nudge.mjs +98 -0
- package/plugins/robin/claude/hooks/pipeline.mjs +207 -0
- package/plugins/robin/claude/hooks/prompt.mjs +51 -0
- package/plugins/robin/claude/hooks/quality.mjs +310 -0
- package/plugins/robin/claude/hooks/reach.mjs +93 -0
- package/plugins/robin/claude/hooks/scope.mjs +44 -0
- package/plugins/robin/claude/hooks/session-log.mjs +101 -0
- package/plugins/robin/claude/hooks/session-start.mjs +194 -0
- package/plugins/robin/claude/hooks/skill-names.json +19 -0
- package/plugins/robin/claude/hooks/stop-gate.mjs +303 -0
- package/plugins/robin/claude/hooks/vendor/direct/round.mjs +81 -0
- package/plugins/robin/claude/hooks/vendor/find/names.mjs +46 -0
- package/plugins/robin/claude/hooks/vendor/firstlook/set.mjs +219 -0
- package/plugins/robin/claude/hooks/vendor/flow/flow.mjs +456 -0
- package/plugins/robin/claude/hooks/vendor/flow/look.mjs +140 -0
- package/plugins/robin/claude/hooks/vendor/gdd/book.mjs +484 -0
- package/plugins/robin/claude/hooks/vendor/gdd/chapters.mjs +72 -0
- package/plugins/robin/claude/hooks/vendor/gdd/doc.mjs +33 -0
- package/plugins/robin/claude/hooks/vendor/gdd/levelmap.mjs +429 -0
- package/plugins/robin/claude/hooks/vendor/gdd/rubric.mjs +251 -0
- package/plugins/robin/claude/hooks/vendor/gdd/worth.mjs +508 -0
- package/plugins/robin/claude/hooks/vendor/lanes/fence.mjs +109 -0
- package/plugins/robin/claude/hooks/vendor/lanes/lanes.mjs +356 -0
- package/plugins/robin/claude/hooks/vendor/lanes/union.mjs +63 -0
- package/plugins/robin/claude/hooks/vendor/lessons/motifs.mjs +98 -0
- package/plugins/robin/claude/hooks/vendor/lessons/store.mjs +57 -0
- package/plugins/robin/claude/hooks/vendor/look/made-of.mjs +243 -0
- package/plugins/robin/claude/hooks/vendor/look/roles.mjs +110 -0
- package/plugins/robin/claude/hooks/vendor/memory/decisions.mjs +139 -0
- package/plugins/robin/claude/hooks/vendor/memory/journal.mjs +109 -0
- package/plugins/robin/claude/hooks/vendor/owner/bar.mjs +286 -0
- package/plugins/robin/claude/hooks/vendor/pipeline/pipeline.mjs +930 -0
- package/plugins/robin/claude/hooks/vendor/playtest/keep.mjs +111 -0
- package/plugins/robin/claude/hooks/vendor/playtest/stuck.mjs +48 -0
- package/plugins/robin/claude/hooks/vendor/progress/holds.mjs +107 -0
- package/plugins/robin/claude/hooks/vendor/progress/progress.mjs +301 -0
- package/plugins/robin/claude/hooks/vendor/sim/judge.mjs +241 -0
- package/plugins/robin/claude/hooks/vendor/spec/rooms.mjs +189 -0
- package/plugins/robin/claude/hooks/vendor/spec/tunables.mjs +75 -0
- package/plugins/robin/claude/hooks/vendor/stage/harnessignore.mjs +91 -0
- package/plugins/robin/claude/hooks/vendor/stage/stage.mjs +58 -0
- package/plugins/robin/claude/hooks/vendor/status/board.mjs +173 -0
- package/plugins/robin/claude/hooks/vendor/status/file.mjs +113 -0
- package/plugins/robin/claude/hooks/vendor/studio/forks.mjs +94 -0
- package/plugins/robin/claude/hooks/vendor/studio/pitch.mjs +295 -0
- package/plugins/robin/claude/hooks/vendor/verify/fingerprint.mjs +73 -0
- package/plugins/robin/claude/hooks/vendor/verify/reads.mjs +33 -0
- package/plugins/robin/claude/hooks/vendor/wow/picks.mjs +75 -0
- package/plugins/robin/claude/skills/3d/SKILL.md +89 -0
- package/plugins/robin/claude/skills/3d/references/bake-off.md +48 -0
- package/plugins/robin/claude/skills/3d/references/bench.md +103 -0
- package/plugins/robin/claude/skills/3d/references/budgets.md +48 -0
- package/plugins/robin/claude/skills/3d/references/characters.md +67 -0
- package/plugins/robin/claude/skills/3d/references/concept-image.md +47 -0
- package/plugins/robin/claude/skills/3d/references/engine-targets.md +31 -0
- package/plugins/robin/claude/skills/3d/references/hero-route.md +104 -0
- package/plugins/robin/claude/skills/3d/references/level-spec.md +109 -0
- package/plugins/robin/claude/skills/3d/references/levels.md +84 -0
- package/plugins/robin/claude/skills/3d/references/light-and-places.md +141 -0
- package/plugins/robin/claude/skills/3d/references/models.md +111 -0
- package/plugins/robin/claude/skills/3d/references/painted-target.md +184 -0
- package/plugins/robin/claude/skills/3d/references/reading.md +41 -0
- package/plugins/robin/claude/skills/3d/references/skin.md +85 -0
- package/plugins/robin/claude/skills/3d/references/skyboxes.md +65 -0
- package/plugins/robin/claude/skills/3d/references/textures.md +71 -0
- package/plugins/robin/claude/skills/3d/references/three-loading.md +199 -0
- package/plugins/robin/claude/skills/3d/references/unity.md +78 -0
- package/plugins/robin/claude/skills/art/SKILL.md +104 -0
- package/plugins/robin/claude/skills/art/references/2d-assets.md +108 -0
- package/plugins/robin/claude/skills/art/references/animation.md +126 -0
- package/plugins/robin/claude/skills/art/references/cast.md +73 -0
- package/plugins/robin/claude/skills/art/references/characters.md +49 -0
- package/plugins/robin/claude/skills/art/references/cost.md +107 -0
- package/plugins/robin/claude/skills/art/references/effects.md +85 -0
- package/plugins/robin/claude/skills/art/references/frames.md +87 -0
- package/plugins/robin/claude/skills/art/references/judging-frames.md +64 -0
- package/plugins/robin/claude/skills/art/references/look.md +102 -0
- package/plugins/robin/claude/skills/art/references/measure.md +119 -0
- package/plugins/robin/claude/skills/art/references/pipeline.md +185 -0
- package/plugins/robin/claude/skills/art/references/pixi.md +277 -0
- package/plugins/robin/claude/skills/art/references/planes.md +27 -0
- package/plugins/robin/claude/skills/art/references/prompts.md +171 -0
- package/plugins/robin/claude/skills/art/references/sheets.md +141 -0
- package/plugins/robin/claude/skills/art/references/style-file.md +39 -0
- package/plugins/robin/claude/skills/art/references/three.md +232 -0
- package/plugins/robin/claude/skills/art/references/ui.md +163 -0
- package/plugins/robin/claude/skills/art/references/unity.md +78 -0
- package/plugins/robin/claude/skills/art/references/wiring.md +41 -0
- package/plugins/robin/claude/skills/audio/SKILL.md +92 -0
- package/plugins/robin/claude/skills/audio/references/adaptive-music.md +204 -0
- package/plugins/robin/claude/skills/audio/references/engine.md +78 -0
- package/plugins/robin/claude/skills/audio/references/measure.md +101 -0
- package/plugins/robin/claude/skills/audio/references/unity.md +74 -0
- package/plugins/robin/claude/skills/feedback/SKILL.md +120 -0
- package/plugins/robin/claude/skills/feedback/references/memory.md +99 -0
- package/plugins/robin/claude/skills/game-feel/SKILL.md +104 -0
- package/plugins/robin/claude/skills/game-feel/references/contact.md +110 -0
- package/plugins/robin/claude/skills/game-feel/references/measure.md +125 -0
- package/plugins/robin/claude/skills/game-feel/references/motion.md +134 -0
- package/plugins/robin/claude/skills/game-feel/references/payoffs.md +35 -0
- package/plugins/robin/claude/skills/game-feel/references/recipes.md +107 -0
- package/plugins/robin/claude/skills/game-feel/references/unity.md +73 -0
- package/plugins/robin/claude/skills/game-logic/SKILL.md +113 -0
- package/plugins/robin/claude/skills/game-logic/references/balance.md +88 -0
- package/plugins/robin/claude/skills/game-logic/references/content-at-scale.md +147 -0
- package/plugins/robin/claude/skills/game-logic/references/depth.md +89 -0
- package/plugins/robin/claude/skills/game-logic/references/escalation.md +41 -0
- package/plugins/robin/claude/skills/game-logic/references/levels.md +61 -0
- package/plugins/robin/claude/skills/game-logic/references/probes.md +122 -0
- package/plugins/robin/claude/skills/game-logic/references/unity.md +108 -0
- package/plugins/robin/claude/skills/game-spine/SKILL.md +118 -0
- package/plugins/robin/claude/skills/game-spine/references/camera.md +94 -0
- package/plugins/robin/claude/skills/game-spine/references/multiplayer.md +101 -0
- package/plugins/robin/claude/skills/game-spine/references/patterns.md +103 -0
- package/plugins/robin/claude/skills/game-spine/references/performance.md +96 -0
- package/plugins/robin/claude/skills/game-spine/references/pixi.md +26 -0
- package/plugins/robin/claude/skills/game-spine/references/replay.md +102 -0
- package/plugins/robin/claude/skills/game-spine/references/room-api.md +63 -0
- package/plugins/robin/claude/skills/game-spine/references/room-modes.md +40 -0
- package/plugins/robin/claude/skills/game-spine/references/sdk.md +114 -0
- package/plugins/robin/claude/skills/game-spine/references/three.md +62 -0
- package/plugins/robin/claude/skills/gdd/SKILL.md +116 -0
- package/plugins/robin/claude/skills/gdd/references/as-built.md +40 -0
- package/plugins/robin/claude/skills/gdd/references/design-measures.md +24 -0
- package/plugins/robin/claude/skills/gdd/references/design-note.md +88 -0
- package/plugins/robin/claude/skills/gdd/references/experience.md +92 -0
- package/plugins/robin/claude/skills/gdd/references/first-look.md +226 -0
- package/plugins/robin/claude/skills/gdd/references/floors.md +62 -0
- package/plugins/robin/claude/skills/gdd/references/frame.md +75 -0
- package/plugins/robin/claude/skills/gdd/references/gameplay-contract.md +81 -0
- package/plugins/robin/claude/skills/gdd/references/gdd-template.md +417 -0
- package/plugins/robin/claude/skills/gdd/references/genre-card.md +109 -0
- package/plugins/robin/claude/skills/gdd/references/genre-platformer.md +159 -0
- package/plugins/robin/claude/skills/gdd/references/genre-puzzle.md +145 -0
- package/plugins/robin/claude/skills/gdd/references/genre-racing.md +137 -0
- package/plugins/robin/claude/skills/gdd/references/genre-rpg.md +125 -0
- package/plugins/robin/claude/skills/gdd/references/genre-shooter.md +128 -0
- package/plugins/robin/claude/skills/gdd/references/genre-simulation.md +112 -0
- package/plugins/robin/claude/skills/gdd/references/genre-strategy.md +116 -0
- package/plugins/robin/claude/skills/gdd/references/genre-survival.md +122 -0
- package/plugins/robin/claude/skills/gdd/references/in-the-loop.md +106 -0
- package/plugins/robin/claude/skills/gdd/references/invent-first.md +131 -0
- package/plugins/robin/claude/skills/gdd/references/level-and-fun.md +112 -0
- package/plugins/robin/claude/skills/gdd/references/pages.md +47 -0
- package/plugins/robin/claude/skills/gdd/references/plan-at-size.md +140 -0
- package/plugins/robin/claude/skills/gdd/references/production-tiers.md +117 -0
- package/plugins/robin/claude/skills/gdd/references/sections.md +148 -0
- package/plugins/robin/claude/skills/gdd/references/spec-folder.md +131 -0
- package/plugins/robin/claude/skills/gdd/references/start.md +110 -0
- package/plugins/robin/claude/skills/gdd/references/starters.md +175 -0
- package/plugins/robin/claude/skills/gdd/references/the-path.md +133 -0
- package/plugins/robin/claude/skills/gdd/references/track.md +29 -0
- package/plugins/robin/claude/skills/gdd/references/world-and-identity.md +165 -0
- package/plugins/robin/claude/skills/gdd/references/worth.md +74 -0
- package/plugins/robin/claude/skills/mobile-ui/SKILL.md +107 -0
- package/plugins/robin/claude/skills/mobile-ui/references/contrast.md +123 -0
- package/plugins/robin/claude/skills/mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/robin/claude/skills/mobile-ui/references/hud-genres.md +124 -0
- package/plugins/robin/claude/skills/mobile-ui/references/phone-check.md +156 -0
- package/plugins/robin/claude/skills/mobile-ui/references/recipes.md +279 -0
- package/plugins/robin/claude/skills/mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/robin/claude/skills/mobile-ui/references/unity.md +61 -0
- package/plugins/robin/claude/skills/publishing/SKILL.md +109 -0
- package/plugins/robin/claude/skills/publishing/references/compose.md +113 -0
- package/plugins/robin/claude/skills/publishing/references/motion.md +120 -0
- package/plugins/robin/claude/skills/publishing/references/networks.md +75 -0
- package/plugins/robin/claude/skills/publishing/references/other-hosts.md +65 -0
- package/plugins/robin/claude/skills/publishing/references/playable-ad.md +90 -0
- package/plugins/robin/claude/skills/publishing/references/server-build.md +85 -0
- package/plugins/robin/claude/skills/publishing/references/store-shots.md +85 -0
- package/plugins/robin/claude/skills/publishing/references/trailer.md +55 -0
- package/plugins/robin/claude/skills/publishing/references/what-ships.md +30 -0
- package/plugins/robin/claude/skills/store/SKILL.md +81 -0
- package/plugins/robin/claude/skills/store/references/app-store.md +73 -0
- package/plugins/robin/claude/skills/store/references/google-play.md +141 -0
- package/plugins/robin/claude/skills/store/references/ios-release.md +63 -0
- package/plugins/robin/claude/skills/store/references/money.md +66 -0
- package/plugins/robin/claude/skills/store/references/purchases-and-review.md +74 -0
- package/plugins/robin/claude/skills/store/references/readiness-page.md +24 -0
- package/plugins/robin/claude/skills/store/references/readiness.md +107 -0
- package/plugins/robin/claude/skills/store/references/steam.md +38 -0
- package/plugins/robin/claude/skills/store/references/unity-store.md +55 -0
- package/plugins/robin/claude/skills/store/references/web-portals.md +43 -0
- package/plugins/robin/claude/skills/unity-game/SKILL.md +103 -0
- package/plugins/robin/claude/skills/unity-game/references/agent-ops.md +54 -0
- package/plugins/robin/claude/skills/unity-game/references/fixes.md +40 -0
- package/plugins/robin/claude/skills/unity-game/references/from-a-web-game.md +108 -0
- package/plugins/robin/claude/skills/unity-game/references/handing-off.md +42 -0
- package/plugins/robin/claude/skills/unity-game/references/performance.md +59 -0
- package/plugins/robin/claude/skills/unity-game/references/probe.md +80 -0
- package/plugins/robin/claude/skills/unity-game/references/shared-mac.md +121 -0
- package/plugins/robin/claude/skills/unity-game/references/traps.md +108 -0
- package/plugins/robin/claude/skills/verifying/SKILL.md +109 -0
- package/plugins/robin/claude/skills/verifying/references/actors.md +94 -0
- package/plugins/robin/claude/skills/verifying/references/bar.md +62 -0
- package/plugins/robin/claude/skills/verifying/references/checks.md +69 -0
- package/plugins/robin/claude/skills/verifying/references/experience.md +67 -0
- package/plugins/robin/claude/skills/verifying/references/eyes.md +54 -0
- package/plugins/robin/claude/skills/verifying/references/fidelity.md +126 -0
- package/plugins/robin/claude/skills/verifying/references/hit-bar.md +31 -0
- package/plugins/robin/claude/skills/verifying/references/journeys.md +77 -0
- package/plugins/robin/claude/skills/verifying/references/mobile-qa.md +123 -0
- package/plugins/robin/claude/skills/verifying/references/playtest.md +161 -0
- package/plugins/robin/claude/skills/verifying/references/review.md +105 -0
- package/plugins/robin/claude/skills/verifying/references/rubric.md +67 -0
- package/plugins/robin/claude/skills/verifying/references/scenes.md +49 -0
- package/plugins/robin/claude/skills/verifying/references/unity.md +60 -0
- package/plugins/robin/claude/skills/world-and-story/SKILL.md +99 -0
- package/plugins/robin/claude/skills/world-and-story/references/atmosphere.md +208 -0
- package/plugins/robin/claude/skills/world-and-story/references/forged-world.md +79 -0
- package/plugins/robin/claude/skills/world-and-story/references/living-world.md +237 -0
- package/plugins/robin/claude/skills/world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/robin/claude/skills/world-and-story/references/shelf.md +80 -0
- package/plugins/robin/claude/skills/world-and-story/references/story-at-size.md +159 -0
- package/plugins/robin/claude/skills/world-and-story/references/voice.md +175 -0
- package/plugins/robin/claude/skills/world-and-story/references/world-kit.md +154 -0
- package/plugins/robin/mcp-servers.json +25 -0
- package/plugins/robin/plugin.json +20 -0
- package/plugins/robin/skills/fp-first-look/SKILL.md +59 -0
- package/plugins/robin/skills/fp-flow/SKILL.md +50 -0
- package/plugins/robin/skills/fp-lanes/SKILL.md +38 -0
- package/plugins/robin/skills/fp-mobile-qa/SKILL.md +28 -0
- package/plugins/robin/skills/fp-new/SKILL.md +94 -0
- package/plugins/robin/skills/fp-playtest/SKILL.md +66 -0
- package/plugins/robin/skills/fp-publish/SKILL.md +23 -0
- package/plugins/robin/skills/fp-smoke-build/SKILL.md +25 -0
- package/plugins/robin/skills/fp-verify/SKILL.md +20 -0
- package/plugins/robin/skills/funpixel-3d/SKILL.md +89 -0
- package/plugins/robin/skills/funpixel-3d/references/bake-off.md +48 -0
- package/plugins/robin/skills/funpixel-3d/references/bench.md +103 -0
- package/plugins/robin/skills/funpixel-3d/references/budgets.md +48 -0
- package/plugins/robin/skills/funpixel-3d/references/characters.md +67 -0
- package/plugins/robin/skills/funpixel-3d/references/concept-image.md +47 -0
- package/plugins/robin/skills/funpixel-3d/references/engine-targets.md +31 -0
- package/plugins/robin/skills/funpixel-3d/references/hero-route.md +104 -0
- package/plugins/robin/skills/funpixel-3d/references/level-spec.md +109 -0
- package/plugins/robin/skills/funpixel-3d/references/levels.md +84 -0
- package/plugins/robin/skills/funpixel-3d/references/light-and-places.md +141 -0
- package/plugins/robin/skills/funpixel-3d/references/models.md +111 -0
- package/plugins/robin/skills/funpixel-3d/references/painted-target.md +184 -0
- package/plugins/robin/skills/funpixel-3d/references/reading.md +41 -0
- package/plugins/robin/skills/funpixel-3d/references/skin.md +85 -0
- package/plugins/robin/skills/funpixel-3d/references/skyboxes.md +65 -0
- package/plugins/robin/skills/funpixel-3d/references/textures.md +71 -0
- package/plugins/robin/skills/funpixel-3d/references/three-loading.md +199 -0
- package/plugins/robin/skills/funpixel-3d/references/unity.md +78 -0
- package/plugins/robin/skills/funpixel-art/SKILL.md +104 -0
- package/plugins/robin/skills/funpixel-art/references/2d-assets.md +108 -0
- package/plugins/robin/skills/funpixel-art/references/animation.md +126 -0
- package/plugins/robin/skills/funpixel-art/references/cast.md +73 -0
- package/plugins/robin/skills/funpixel-art/references/characters.md +49 -0
- package/plugins/robin/skills/funpixel-art/references/cost.md +107 -0
- package/plugins/robin/skills/funpixel-art/references/effects.md +85 -0
- package/plugins/robin/skills/funpixel-art/references/frames.md +87 -0
- package/plugins/robin/skills/funpixel-art/references/judging-frames.md +64 -0
- package/plugins/robin/skills/funpixel-art/references/look.md +102 -0
- package/plugins/robin/skills/funpixel-art/references/measure.md +119 -0
- package/plugins/robin/skills/funpixel-art/references/pipeline.md +185 -0
- package/plugins/robin/skills/funpixel-art/references/pixi.md +277 -0
- package/plugins/robin/skills/funpixel-art/references/planes.md +27 -0
- package/plugins/robin/skills/funpixel-art/references/prompts.md +171 -0
- package/plugins/robin/skills/funpixel-art/references/sheets.md +141 -0
- package/plugins/robin/skills/funpixel-art/references/style-file.md +39 -0
- package/plugins/robin/skills/funpixel-art/references/three.md +232 -0
- package/plugins/robin/skills/funpixel-art/references/ui.md +163 -0
- package/plugins/robin/skills/funpixel-art/references/unity.md +78 -0
- package/plugins/robin/skills/funpixel-art/references/wiring.md +41 -0
- package/plugins/robin/skills/funpixel-audio/SKILL.md +92 -0
- package/plugins/robin/skills/funpixel-audio/references/adaptive-music.md +204 -0
- package/plugins/robin/skills/funpixel-audio/references/engine.md +78 -0
- package/plugins/robin/skills/funpixel-audio/references/measure.md +101 -0
- package/plugins/robin/skills/funpixel-audio/references/unity.md +74 -0
- package/plugins/robin/skills/funpixel-brief/SKILL.md +163 -0
- package/plugins/robin/skills/funpixel-feedback/SKILL.md +120 -0
- package/plugins/robin/skills/funpixel-feedback/references/memory.md +99 -0
- package/plugins/robin/skills/funpixel-game-feel/SKILL.md +104 -0
- package/plugins/robin/skills/funpixel-game-feel/references/contact.md +110 -0
- package/plugins/robin/skills/funpixel-game-feel/references/measure.md +125 -0
- package/plugins/robin/skills/funpixel-game-feel/references/motion.md +134 -0
- package/plugins/robin/skills/funpixel-game-feel/references/payoffs.md +35 -0
- package/plugins/robin/skills/funpixel-game-feel/references/recipes.md +107 -0
- package/plugins/robin/skills/funpixel-game-feel/references/unity.md +73 -0
- package/plugins/robin/skills/funpixel-game-logic/SKILL.md +113 -0
- package/plugins/robin/skills/funpixel-game-logic/references/balance.md +88 -0
- package/plugins/robin/skills/funpixel-game-logic/references/content-at-scale.md +147 -0
- package/plugins/robin/skills/funpixel-game-logic/references/depth.md +89 -0
- package/plugins/robin/skills/funpixel-game-logic/references/escalation.md +41 -0
- package/plugins/robin/skills/funpixel-game-logic/references/levels.md +61 -0
- package/plugins/robin/skills/funpixel-game-logic/references/probes.md +122 -0
- package/plugins/robin/skills/funpixel-game-logic/references/unity.md +108 -0
- package/plugins/robin/skills/funpixel-game-spine/SKILL.md +118 -0
- package/plugins/robin/skills/funpixel-game-spine/references/camera.md +94 -0
- package/plugins/robin/skills/funpixel-game-spine/references/multiplayer.md +101 -0
- package/plugins/robin/skills/funpixel-game-spine/references/patterns.md +103 -0
- package/plugins/robin/skills/funpixel-game-spine/references/performance.md +96 -0
- package/plugins/robin/skills/funpixel-game-spine/references/pixi.md +26 -0
- package/plugins/robin/skills/funpixel-game-spine/references/replay.md +102 -0
- package/plugins/robin/skills/funpixel-game-spine/references/room-api.md +63 -0
- package/plugins/robin/skills/funpixel-game-spine/references/room-modes.md +40 -0
- package/plugins/robin/skills/funpixel-game-spine/references/sdk.md +114 -0
- package/plugins/robin/skills/funpixel-game-spine/references/three.md +62 -0
- package/plugins/robin/skills/funpixel-gdd/SKILL.md +116 -0
- package/plugins/robin/skills/funpixel-gdd/references/as-built.md +40 -0
- package/plugins/robin/skills/funpixel-gdd/references/design-measures.md +24 -0
- package/plugins/robin/skills/funpixel-gdd/references/design-note.md +88 -0
- package/plugins/robin/skills/funpixel-gdd/references/experience.md +92 -0
- package/plugins/robin/skills/funpixel-gdd/references/first-look.md +226 -0
- package/plugins/robin/skills/funpixel-gdd/references/floors.md +62 -0
- package/plugins/robin/skills/funpixel-gdd/references/frame.md +75 -0
- package/plugins/robin/skills/funpixel-gdd/references/gameplay-contract.md +81 -0
- package/plugins/robin/skills/funpixel-gdd/references/gdd-template.md +417 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-card.md +109 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-platformer.md +159 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-puzzle.md +145 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-racing.md +137 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-rpg.md +125 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-shooter.md +128 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-simulation.md +112 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-strategy.md +116 -0
- package/plugins/robin/skills/funpixel-gdd/references/genre-survival.md +122 -0
- package/plugins/robin/skills/funpixel-gdd/references/in-the-loop.md +106 -0
- package/plugins/robin/skills/funpixel-gdd/references/invent-first.md +131 -0
- package/plugins/robin/skills/funpixel-gdd/references/level-and-fun.md +112 -0
- package/plugins/robin/skills/funpixel-gdd/references/pages.md +47 -0
- package/plugins/robin/skills/funpixel-gdd/references/plan-at-size.md +140 -0
- package/plugins/robin/skills/funpixel-gdd/references/production-tiers.md +117 -0
- package/plugins/robin/skills/funpixel-gdd/references/sections.md +148 -0
- package/plugins/robin/skills/funpixel-gdd/references/spec-folder.md +131 -0
- package/plugins/robin/skills/funpixel-gdd/references/start.md +110 -0
- package/plugins/robin/skills/funpixel-gdd/references/starters.md +175 -0
- package/plugins/robin/skills/funpixel-gdd/references/the-path.md +133 -0
- package/plugins/robin/skills/funpixel-gdd/references/track.md +29 -0
- package/plugins/robin/skills/funpixel-gdd/references/world-and-identity.md +165 -0
- package/plugins/robin/skills/funpixel-gdd/references/worth.md +74 -0
- package/plugins/robin/skills/funpixel-mobile-ui/SKILL.md +107 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/contrast.md +123 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/hud-and-title.md +108 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/hud-genres.md +124 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/phone-check.md +156 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/recipes.md +279 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/restyle-ui.md +229 -0
- package/plugins/robin/skills/funpixel-mobile-ui/references/unity.md +61 -0
- package/plugins/robin/skills/funpixel-publish/SKILL.md +109 -0
- package/plugins/robin/skills/funpixel-publish/references/compose.md +113 -0
- package/plugins/robin/skills/funpixel-publish/references/motion.md +120 -0
- package/plugins/robin/skills/funpixel-publish/references/networks.md +75 -0
- package/plugins/robin/skills/funpixel-publish/references/other-hosts.md +65 -0
- package/plugins/robin/skills/funpixel-publish/references/playable-ad.md +90 -0
- package/plugins/robin/skills/funpixel-publish/references/server-build.md +85 -0
- package/plugins/robin/skills/funpixel-publish/references/store-shots.md +85 -0
- package/plugins/robin/skills/funpixel-publish/references/trailer.md +55 -0
- package/plugins/robin/skills/funpixel-publish/references/what-ships.md +30 -0
- package/plugins/robin/skills/funpixel-store/SKILL.md +81 -0
- package/plugins/robin/skills/funpixel-store/references/app-store.md +73 -0
- package/plugins/robin/skills/funpixel-store/references/google-play.md +141 -0
- package/plugins/robin/skills/funpixel-store/references/ios-release.md +63 -0
- package/plugins/robin/skills/funpixel-store/references/money.md +66 -0
- package/plugins/robin/skills/funpixel-store/references/purchases-and-review.md +74 -0
- package/plugins/robin/skills/funpixel-store/references/readiness-page.md +24 -0
- package/plugins/robin/skills/funpixel-store/references/readiness.md +107 -0
- package/plugins/robin/skills/funpixel-store/references/steam.md +38 -0
- package/plugins/robin/skills/funpixel-store/references/unity-store.md +55 -0
- package/plugins/robin/skills/funpixel-store/references/web-portals.md +43 -0
- package/plugins/robin/skills/funpixel-unity-game/SKILL.md +103 -0
- package/plugins/robin/skills/funpixel-unity-game/references/agent-ops.md +54 -0
- package/plugins/robin/skills/funpixel-unity-game/references/fixes.md +40 -0
- package/plugins/robin/skills/funpixel-unity-game/references/from-a-web-game.md +108 -0
- package/plugins/robin/skills/funpixel-unity-game/references/handing-off.md +42 -0
- package/plugins/robin/skills/funpixel-unity-game/references/performance.md +59 -0
- package/plugins/robin/skills/funpixel-unity-game/references/probe.md +80 -0
- package/plugins/robin/skills/funpixel-unity-game/references/shared-mac.md +121 -0
- package/plugins/robin/skills/funpixel-unity-game/references/traps.md +108 -0
- package/plugins/robin/skills/funpixel-verify/SKILL.md +109 -0
- package/plugins/robin/skills/funpixel-verify/references/actors.md +94 -0
- package/plugins/robin/skills/funpixel-verify/references/bar.md +62 -0
- package/plugins/robin/skills/funpixel-verify/references/checks.md +69 -0
- package/plugins/robin/skills/funpixel-verify/references/experience.md +67 -0
- package/plugins/robin/skills/funpixel-verify/references/eyes.md +54 -0
- package/plugins/robin/skills/funpixel-verify/references/fidelity.md +126 -0
- package/plugins/robin/skills/funpixel-verify/references/hit-bar.md +31 -0
- package/plugins/robin/skills/funpixel-verify/references/journeys.md +77 -0
- package/plugins/robin/skills/funpixel-verify/references/mobile-qa.md +123 -0
- package/plugins/robin/skills/funpixel-verify/references/playtest.md +161 -0
- package/plugins/robin/skills/funpixel-verify/references/review.md +105 -0
- package/plugins/robin/skills/funpixel-verify/references/rubric.md +67 -0
- package/plugins/robin/skills/funpixel-verify/references/scenes.md +49 -0
- package/plugins/robin/skills/funpixel-verify/references/unity.md +60 -0
- package/plugins/robin/skills/funpixel-world-and-story/SKILL.md +99 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/atmosphere.md +208 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/forged-world.md +79 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/living-world.md +237 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/opening-and-chapters.md +215 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/shelf.md +80 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/story-at-size.md +159 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/voice.md +175 -0
- package/plugins/robin/skills/funpixel-world-and-story/references/world-kit.md +154 -0
- package/templates/common/.agents/skills/funpixel-3d/SKILL.md +89 -0
- package/templates/common/.agents/skills/funpixel-3d/references/bake-off.md +48 -0
- package/templates/common/.agents/skills/funpixel-3d/references/bench.md +103 -0
- package/templates/common/.agents/skills/funpixel-3d/references/budgets.md +48 -0
- package/templates/common/.agents/skills/funpixel-3d/references/characters.md +67 -0
- package/templates/common/.agents/skills/funpixel-3d/references/concept-image.md +47 -0
- package/templates/common/.agents/skills/funpixel-3d/references/engine-targets.md +31 -0
- package/templates/common/.agents/skills/funpixel-3d/references/hero-route.md +104 -0
- package/templates/common/.agents/skills/funpixel-3d/references/level-spec.md +109 -0
- package/templates/common/.agents/skills/funpixel-3d/references/levels.md +84 -0
- package/templates/common/.agents/skills/funpixel-3d/references/light-and-places.md +141 -0
- package/templates/common/.agents/skills/funpixel-3d/references/models.md +111 -0
- package/templates/common/.agents/skills/funpixel-3d/references/painted-target.md +184 -0
- package/templates/common/.agents/skills/funpixel-3d/references/reading.md +41 -0
- package/templates/common/.agents/skills/funpixel-3d/references/skin.md +85 -0
- package/templates/common/.agents/skills/funpixel-3d/references/skyboxes.md +65 -0
- package/templates/common/.agents/skills/funpixel-3d/references/textures.md +71 -0
- package/templates/common/.agents/skills/funpixel-3d/references/three-loading.md +199 -0
- package/templates/common/.agents/skills/funpixel-3d/references/unity.md +78 -0
- package/templates/common/.agents/skills/funpixel-art/SKILL.md +104 -0
- package/templates/common/.agents/skills/funpixel-art/references/2d-assets.md +108 -0
- package/templates/common/.agents/skills/funpixel-art/references/animation.md +126 -0
- package/templates/common/.agents/skills/funpixel-art/references/cast.md +73 -0
- package/templates/common/.agents/skills/funpixel-art/references/characters.md +49 -0
- package/templates/common/.agents/skills/funpixel-art/references/cost.md +107 -0
- package/templates/common/.agents/skills/funpixel-art/references/effects.md +85 -0
- package/templates/common/.agents/skills/funpixel-art/references/frames.md +87 -0
- package/templates/common/.agents/skills/funpixel-art/references/judging-frames.md +64 -0
- package/templates/common/.agents/skills/funpixel-art/references/look.md +102 -0
- package/templates/common/.agents/skills/funpixel-art/references/measure.md +119 -0
- package/templates/common/.agents/skills/funpixel-art/references/pipeline.md +185 -0
- package/templates/common/.agents/skills/funpixel-art/references/pixi.md +277 -0
- package/templates/common/.agents/skills/funpixel-art/references/planes.md +27 -0
- package/templates/common/.agents/skills/funpixel-art/references/prompts.md +171 -0
- package/templates/common/.agents/skills/funpixel-art/references/sheets.md +141 -0
- package/templates/common/.agents/skills/funpixel-art/references/style-file.md +39 -0
- package/templates/common/.agents/skills/funpixel-art/references/three.md +232 -0
- package/templates/common/.agents/skills/funpixel-art/references/ui.md +163 -0
- package/templates/common/.agents/skills/funpixel-art/references/unity.md +78 -0
- package/templates/common/.agents/skills/funpixel-art/references/wiring.md +41 -0
- package/templates/common/.agents/skills/funpixel-audio/SKILL.md +92 -0
- package/templates/common/.agents/skills/funpixel-audio/references/adaptive-music.md +204 -0
- package/templates/common/.agents/skills/funpixel-audio/references/engine.md +78 -0
- package/templates/common/.agents/skills/funpixel-audio/references/measure.md +101 -0
- package/templates/common/.agents/skills/funpixel-audio/references/unity.md +74 -0
- package/templates/common/.agents/skills/funpixel-feedback/SKILL.md +120 -0
- package/templates/common/.agents/skills/funpixel-feedback/references/memory.md +99 -0
- package/templates/common/.agents/skills/funpixel-game-feel/SKILL.md +104 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/contact.md +110 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/measure.md +125 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/motion.md +134 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/payoffs.md +35 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/recipes.md +107 -0
- package/templates/common/.agents/skills/funpixel-game-feel/references/unity.md +73 -0
- package/templates/common/.agents/skills/funpixel-game-logic/SKILL.md +113 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/balance.md +88 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/content-at-scale.md +147 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/depth.md +89 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/escalation.md +41 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/levels.md +61 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/probes.md +122 -0
- package/templates/common/.agents/skills/funpixel-game-logic/references/unity.md +108 -0
- package/templates/common/.agents/skills/funpixel-game-spine/SKILL.md +118 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/camera.md +94 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/multiplayer.md +101 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/patterns.md +103 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/performance.md +96 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/pixi.md +26 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/replay.md +102 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/room-api.md +63 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/room-modes.md +40 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/sdk.md +114 -0
- package/templates/common/.agents/skills/funpixel-game-spine/references/three.md +62 -0
- package/templates/common/.agents/skills/funpixel-gdd/SKILL.md +116 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/as-built.md +40 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/design-measures.md +24 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/design-note.md +88 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/experience.md +92 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/first-look.md +226 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/floors.md +62 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/frame.md +75 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/gameplay-contract.md +81 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/gdd-template.md +417 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-card.md +109 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-platformer.md +159 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-puzzle.md +145 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-racing.md +137 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-rpg.md +125 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-shooter.md +128 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-simulation.md +112 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-strategy.md +116 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-survival.md +122 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/in-the-loop.md +106 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/invent-first.md +131 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/level-and-fun.md +112 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/pages.md +47 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/plan-at-size.md +140 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/production-tiers.md +117 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/sections.md +148 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/spec-folder.md +131 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/start.md +110 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/starters.md +175 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/the-path.md +133 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/track.md +29 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/world-and-identity.md +165 -0
- package/templates/common/.agents/skills/funpixel-gdd/references/worth.md +74 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/SKILL.md +107 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/contrast.md +123 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/hud-and-title.md +108 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/hud-genres.md +124 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/phone-check.md +156 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/recipes.md +279 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/restyle-ui.md +229 -0
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/unity.md +61 -0
- package/templates/common/.agents/skills/funpixel-publish/SKILL.md +109 -0
- package/templates/common/.agents/skills/funpixel-publish/references/compose.md +113 -0
- package/templates/common/.agents/skills/funpixel-publish/references/motion.md +120 -0
- package/templates/common/.agents/skills/funpixel-publish/references/networks.md +75 -0
- package/templates/common/.agents/skills/funpixel-publish/references/other-hosts.md +65 -0
- package/templates/common/.agents/skills/funpixel-publish/references/playable-ad.md +90 -0
- package/templates/common/.agents/skills/funpixel-publish/references/server-build.md +85 -0
- package/templates/common/.agents/skills/funpixel-publish/references/store-shots.md +85 -0
- package/templates/common/.agents/skills/funpixel-publish/references/trailer.md +55 -0
- package/templates/common/.agents/skills/funpixel-publish/references/what-ships.md +30 -0
- package/templates/common/.agents/skills/funpixel-store/SKILL.md +81 -0
- package/templates/common/.agents/skills/funpixel-store/references/app-store.md +73 -0
- package/templates/common/.agents/skills/funpixel-store/references/google-play.md +141 -0
- package/templates/common/.agents/skills/funpixel-store/references/ios-release.md +63 -0
- package/templates/common/.agents/skills/funpixel-store/references/money.md +66 -0
- package/templates/common/.agents/skills/funpixel-store/references/purchases-and-review.md +74 -0
- package/templates/common/.agents/skills/funpixel-store/references/readiness-page.md +24 -0
- package/templates/common/.agents/skills/funpixel-store/references/readiness.md +107 -0
- package/templates/common/.agents/skills/funpixel-store/references/steam.md +38 -0
- package/templates/common/.agents/skills/funpixel-store/references/unity-store.md +55 -0
- package/templates/common/.agents/skills/funpixel-store/references/web-portals.md +43 -0
- package/templates/common/.agents/skills/funpixel-unity-game/SKILL.md +103 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/agent-ops.md +54 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/fixes.md +40 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/from-a-web-game.md +108 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/handing-off.md +42 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/performance.md +59 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/probe.md +80 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/shared-mac.md +121 -0
- package/templates/common/.agents/skills/funpixel-unity-game/references/traps.md +108 -0
- package/templates/common/.agents/skills/funpixel-verify/SKILL.md +109 -0
- package/templates/common/.agents/skills/funpixel-verify/references/actors.md +94 -0
- package/templates/common/.agents/skills/funpixel-verify/references/bar.md +62 -0
- package/templates/common/.agents/skills/funpixel-verify/references/checks.md +69 -0
- package/templates/common/.agents/skills/funpixel-verify/references/experience.md +67 -0
- package/templates/common/.agents/skills/funpixel-verify/references/eyes.md +54 -0
- package/templates/common/.agents/skills/funpixel-verify/references/fidelity.md +126 -0
- package/templates/common/.agents/skills/funpixel-verify/references/hit-bar.md +31 -0
- package/templates/common/.agents/skills/funpixel-verify/references/journeys.md +77 -0
- package/templates/common/.agents/skills/funpixel-verify/references/mobile-qa.md +123 -0
- package/templates/common/.agents/skills/funpixel-verify/references/playtest.md +161 -0
- package/templates/common/.agents/skills/funpixel-verify/references/review.md +105 -0
- package/templates/common/.agents/skills/funpixel-verify/references/rubric.md +67 -0
- package/templates/common/.agents/skills/funpixel-verify/references/scenes.md +49 -0
- package/templates/common/.agents/skills/funpixel-verify/references/unity.md +60 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/SKILL.md +99 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/atmosphere.md +208 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/forged-world.md +79 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/living-world.md +237 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/opening-and-chapters.md +215 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/shelf.md +80 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/story-at-size.md +159 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/voice.md +175 -0
- package/templates/common/.agents/skills/funpixel-world-and-story/references/world-kit.md +154 -0
- package/templates/common/.claude/settings.json +3 -0
- package/templates/common/.harnessignore +28 -0
- package/templates/common/AGENTS.md +135 -0
- package/templates/common/CLAUDE.md +1 -0
- package/templates/common/assets/assets.example.json +9 -0
- package/templates/common/index.html +13 -0
- package/templates/common/src/art/files.mjs +27 -0
- package/templates/common/src/assets.ts +62 -0
- package/templates/common/src/beat.ts +50 -0
- package/templates/common/src/characters.ts +54 -0
- package/templates/common/src/expose.ts +63 -0
- package/templates/common/src/feel.ts +78 -0
- package/templates/common/src/fpx-hooks.ts +46 -0
- package/templates/common/src/frame.ts +63 -0
- package/templates/common/src/grade.ts +47 -0
- package/templates/common/src/hud-kit.css +29 -0
- package/templates/common/src/hud-kit.tsx +85 -0
- package/templates/common/src/hud.tsx +55 -0
- package/templates/common/src/icons.tsx +35 -0
- package/templates/common/src/input.ts +70 -0
- package/templates/common/src/juice.ts +92 -0
- package/templates/common/src/levels.ts +43 -0
- package/templates/common/src/living.ts +91 -0
- package/templates/common/src/look.json +19 -0
- package/templates/common/src/look.ts +54 -0
- package/templates/common/src/main.tsx +31 -0
- package/templates/common/src/markers.ts +60 -0
- package/templates/common/src/motion-sample.ts +71 -0
- package/templates/common/src/motion.ts +92 -0
- package/templates/common/src/pin.ts +32 -0
- package/templates/common/src/platform.ts +67 -0
- package/templates/common/src/pose.ts +22 -0
- package/templates/common/src/probe-human.ts +29 -0
- package/templates/common/src/probe-kit.ts +99 -0
- package/templates/common/src/rules.ts +99 -0
- package/templates/common/src/save.ts +21 -0
- package/templates/common/src/screens.css +34 -0
- package/templates/common/src/screens.tsx +95 -0
- package/templates/common/src/selftests.ts +22 -0
- package/templates/common/src/session.ts +99 -0
- package/templates/common/src/sound.ts +85 -0
- package/templates/common/src/splash-funpixel/OFL.txt +94 -0
- package/templates/common/src/splash-funpixel/card.css +18 -0
- package/templates/common/src/splash-funpixel/card.tsx +22 -0
- package/templates/common/src/splash.css +15 -0
- package/templates/common/src/splash.tsx +86 -0
- package/templates/common/src/store.ts +68 -0
- package/templates/common/src/strike.ts +82 -0
- package/templates/common/src/styles.css +81 -0
- package/templates/common/src/toasts.ts +75 -0
- package/templates/common/src/world.ts +91 -0
- package/templates/common/test/feel.json +36 -0
- package/templates/common/test/platform.test.ts +42 -0
- package/templates/common/test/probes.ts +72 -0
- package/templates/common/test/rules.test.ts +88 -0
- package/templates/common/tsconfig.json +16 -0
- package/templates/common/vite.config.ts +6 -0
- package/templates/pixi/src/character.ts +63 -0
- package/templates/pixi/src/game.ts +99 -0
- package/templates/pixi/src/world-hud.ts +16 -0
- package/templates/spec/common/src/chapters.ts +97 -0
- package/templates/spec/common/src/levels.ts +68 -0
- package/templates/spec/common/src/probe-rooms.ts +63 -0
- package/templates/spec/common/src/room-map.tsx +30 -0
- package/templates/spec/common/src/tune.ts +93 -0
- package/templates/spec/common/test/rooms.test.ts +59 -0
- package/templates/spec/common/test/rooms.ts +53 -0
- package/templates/spec/three-world/test/rooms.ts +54 -0
- package/templates/three/src/character.ts +65 -0
- package/templates/three/src/game.ts +99 -0
- package/templates/three/src/world-hud.ts +22 -0
- package/templates/three-world/src/bot.ts +43 -0
- package/templates/three-world/src/budget.ts +73 -0
- package/templates/three-world/src/camera-rig.ts +99 -0
- package/templates/three-world/src/controls.tsx +49 -0
- package/templates/three-world/src/cutout-atlas.ts +26 -0
- package/templates/three-world/src/cutout-math.ts +47 -0
- package/templates/three-world/src/cutouts.ts +99 -0
- package/templates/three-world/src/dressing-math.ts +98 -0
- package/templates/three-world/src/dressing.ts +84 -0
- package/templates/three-world/src/expose.ts +82 -0
- package/templates/three-world/src/feel.ts +79 -0
- package/templates/three-world/src/game.ts +99 -0
- package/templates/three-world/src/hud.tsx +44 -0
- package/templates/three-world/src/icons.tsx +36 -0
- package/templates/three-world/src/input.ts +73 -0
- package/templates/three-world/src/juice.ts +91 -0
- package/templates/three-world/src/layout.ts +73 -0
- package/templates/three-world/src/light-math.ts +78 -0
- package/templates/three-world/src/light.ts +77 -0
- package/templates/three-world/src/look.json +30 -0
- package/templates/three-world/src/main.tsx +38 -0
- package/templates/three-world/src/models.ts +62 -0
- package/templates/three-world/src/palette.ts +21 -0
- package/templates/three-world/src/places.json +50 -0
- package/templates/three-world/src/places.ts +56 -0
- package/templates/three-world/src/pose.ts +22 -0
- package/templates/three-world/src/post.ts +47 -0
- package/templates/three-world/src/rest-math.ts +29 -0
- package/templates/three-world/src/rules.ts +89 -0
- package/templates/three-world/src/screens.css +45 -0
- package/templates/three-world/src/screens.tsx +96 -0
- package/templates/three-world/src/selftests.ts +25 -0
- package/templates/three-world/src/session.ts +99 -0
- package/templates/three-world/src/shots.ts +59 -0
- package/templates/three-world/src/sky.ts +48 -0
- package/templates/three-world/src/stage.ts +83 -0
- package/templates/three-world/src/styles.css +95 -0
- package/templates/three-world/src/surfaces.ts +55 -0
- package/templates/three-world/src/world.ts +70 -0
- package/templates/three-world/test/feel.json +29 -0
- package/templates/three-world/test/probes.ts +65 -0
- package/templates/three-world/test/resolve.mjs +13 -0
- package/templates/three-world/test/rules.test.ts +81 -0
- package/unity/com.funpixel.probe/Editor/Funpixel.Probe.Editor.asmdef +16 -0
- package/unity/com.funpixel.probe/Editor/Funpixel.Probe.Editor.asmdef.meta +7 -0
- package/unity/com.funpixel.probe/Editor/ProbeBuild.cs +97 -0
- package/unity/com.funpixel.probe/Editor/ProbeBuild.cs.meta +11 -0
- package/unity/com.funpixel.probe/Editor/ReleaseGuard.cs +23 -0
- package/unity/com.funpixel.probe/Editor/ReleaseGuard.cs.meta +11 -0
- package/unity/com.funpixel.probe/Editor.meta +8 -0
- package/unity/com.funpixel.probe/Runtime/Api/Funpixel.Probe.asmdef +14 -0
- package/unity/com.funpixel.probe/Runtime/Api/Funpixel.Probe.asmdef.meta +7 -0
- package/unity/com.funpixel.probe/Runtime/Api/FunpixelProbe.cs +146 -0
- package/unity/com.funpixel.probe/Runtime/Api/FunpixelProbe.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Api.meta +8 -0
- package/unity/com.funpixel.probe/Runtime/Player/Args.cs +87 -0
- package/unity/com.funpixel.probe/Runtime/Player/Args.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Boot.cs +67 -0
- package/unity/com.funpixel.probe/Runtime/Player/Boot.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Bridge.cs +559 -0
- package/unity/com.funpixel.probe/Runtime/Player/Bridge.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Capture.cs +145 -0
- package/unity/com.funpixel.probe/Runtime/Player/Capture.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Funpixel.Probe.Player.asmdef +32 -0
- package/unity/com.funpixel.probe/Runtime/Player/Funpixel.Probe.Player.asmdef.meta +7 -0
- package/unity/com.funpixel.probe/Runtime/Player/Inject.cs +127 -0
- package/unity/com.funpixel.probe/Runtime/Player/Inject.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Json.cs +246 -0
- package/unity/com.funpixel.probe/Runtime/Player/Json.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Probe.cs +194 -0
- package/unity/com.funpixel.probe/Runtime/Player/Probe.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/Stats.cs +266 -0
- package/unity/com.funpixel.probe/Runtime/Player/Stats.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player/UiTargets.cs +134 -0
- package/unity/com.funpixel.probe/Runtime/Player/UiTargets.cs.meta +11 -0
- package/unity/com.funpixel.probe/Runtime/Player.meta +8 -0
- package/unity/com.funpixel.probe/Runtime/link.xml +7 -0
- package/unity/com.funpixel.probe/Runtime/link.xml.meta +7 -0
- package/unity/com.funpixel.probe/Runtime.meta +8 -0
- package/unity/com.funpixel.probe/Tests/Editor/Funpixel.Probe.Tests.asmdef +25 -0
- package/unity/com.funpixel.probe/Tests/Editor/Funpixel.Probe.Tests.asmdef.meta +7 -0
- package/unity/com.funpixel.probe/Tests/Editor/StatsTests.cs +147 -0
- package/unity/com.funpixel.probe/Tests/Editor/StatsTests.cs.meta +11 -0
- package/unity/com.funpixel.probe/Tests/Editor/WireTests.cs +86 -0
- package/unity/com.funpixel.probe/Tests/Editor/WireTests.cs.meta +11 -0
- package/unity/com.funpixel.probe/Tests/Editor.meta +8 -0
- package/unity/com.funpixel.probe/Tests.meta +8 -0
- package/unity/com.funpixel.probe/package.json +14 -0
- package/unity/com.funpixel.probe/package.json.meta +7 -0
package/dist/dev/hold.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function holdReloads(opts) {
|
|
2
|
+
const min = opts.minClients ?? 2, poll = opts.pollMs ?? 1000, maxHold = opts.maxHoldMs ?? 10 * 60_000;
|
|
3
|
+
const now = opts.now ?? Date.now;
|
|
4
|
+
return {
|
|
5
|
+
name: 'funtools-hold-reloads',
|
|
6
|
+
apply: 'serve',
|
|
7
|
+
configureServer(server) {
|
|
8
|
+
const ws = server.ws;
|
|
9
|
+
const send = ws.send.bind(ws);
|
|
10
|
+
let held = null, since = 0, changes = 0;
|
|
11
|
+
const pages = () => ws.clients?.size ?? 0;
|
|
12
|
+
const release = (why) => {
|
|
13
|
+
if (!held)
|
|
14
|
+
return;
|
|
15
|
+
const p = held;
|
|
16
|
+
held = null;
|
|
17
|
+
opts.log(`reload released (${why}; ${changes} change(s) held)`);
|
|
18
|
+
changes = 0;
|
|
19
|
+
send(p);
|
|
20
|
+
};
|
|
21
|
+
ws.send = (...args) => {
|
|
22
|
+
const p = args[0];
|
|
23
|
+
if (p && typeof p === 'object' && p.type === 'full-reload' && pages() >= min) {
|
|
24
|
+
if (!held) {
|
|
25
|
+
since = now();
|
|
26
|
+
opts.log(`reload held: ${pages()} pages are in the dev room, and a reload would end their match; it goes out when the room empties`);
|
|
27
|
+
}
|
|
28
|
+
held = p;
|
|
29
|
+
changes++;
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return send(...args);
|
|
33
|
+
};
|
|
34
|
+
const timer = setInterval(() => {
|
|
35
|
+
if (!held)
|
|
36
|
+
return;
|
|
37
|
+
if (pages() < min)
|
|
38
|
+
release('the room emptied');
|
|
39
|
+
else if (now() - since >= maxHold)
|
|
40
|
+
release(`held ${Math.round(maxHold / 60_000)} min`);
|
|
41
|
+
}, poll);
|
|
42
|
+
timer.unref?.();
|
|
43
|
+
server.httpServer?.on('close', () => clearInterval(timer));
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
package/dist/dev/lan.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { networkInterfaces } from 'node:os';
|
|
2
|
+
export function lanAddress(ifaces = networkInterfaces()) {
|
|
3
|
+
const privateV4 = /^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.)/;
|
|
4
|
+
const found = [];
|
|
5
|
+
for (const [name, list] of Object.entries(ifaces)) {
|
|
6
|
+
for (const i of list ?? []) {
|
|
7
|
+
if (i.family === 'IPv4' && !i.internal && privateV4.test(i.address) && !/^(utun|ipsec|tun|tap|bridge|vmnet|docker|veth)/.test(name))
|
|
8
|
+
found.push({ name, address: i.address });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
found.sort((a, b) => rank(a.name) - rank(b.name) || a.name.localeCompare(b.name));
|
|
12
|
+
return found[0]?.address ?? null;
|
|
13
|
+
}
|
|
14
|
+
const rank = (name) => (name === 'en0' ? 0 : /^(en|eth|wl)/.test(name) ? 1 : 2);
|
|
15
|
+
export const LAN_WARNING = 'this serves the dev server to everyone on your local network (the game\'s source and devtools); use it on a network you trust and stop it (Ctrl-C) when you are done';
|
package/dist/dev/open.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export function opener(platform = process.platform) {
|
|
3
|
+
if (platform === 'darwin')
|
|
4
|
+
return { cmd: 'open', args: (t) => [t] };
|
|
5
|
+
if (platform === 'win32')
|
|
6
|
+
return { cmd: 'cmd', args: (t) => ['/c', 'start', '""', t] };
|
|
7
|
+
return { cmd: 'xdg-open', args: (t) => [t] };
|
|
8
|
+
}
|
|
9
|
+
export function mayOpen(env = process.env, platform = process.platform) {
|
|
10
|
+
if (env.CI || env.FUNPIXEL_NO_OPEN)
|
|
11
|
+
return false;
|
|
12
|
+
if (platform === 'linux' && !env.DISPLAY && !env.WAYLAND_DISPLAY)
|
|
13
|
+
return false;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
export function openTarget(target, o = {}) {
|
|
17
|
+
const platform = o.platform ?? process.platform;
|
|
18
|
+
if (!mayOpen(o.env ?? process.env, platform))
|
|
19
|
+
return false;
|
|
20
|
+
const { cmd, args } = opener(platform);
|
|
21
|
+
try {
|
|
22
|
+
const child = (o.run ?? spawn)(cmd, args(target), { detached: true, stdio: 'ignore' });
|
|
23
|
+
child.on('error', () => { });
|
|
24
|
+
child.unref();
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/dist/dev/qr.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
const CAPACITY = { 1: [19, 7], 2: [34, 10], 3: [55, 15], 4: [80, 20], 5: [108, 26] };
|
|
2
|
+
const ALIGN = { 2: 18, 3: 22, 4: 26, 5: 30 };
|
|
3
|
+
function rsMul(x, y) {
|
|
4
|
+
let z = 0;
|
|
5
|
+
for (let i = 7; i >= 0; i--) {
|
|
6
|
+
z = (z << 1) ^ ((z >>> 7) * 0x11d);
|
|
7
|
+
z ^= ((y >>> i) & 1) * x;
|
|
8
|
+
}
|
|
9
|
+
return z & 0xff;
|
|
10
|
+
}
|
|
11
|
+
function rsDivisor(degree) {
|
|
12
|
+
const r = new Array(degree).fill(0);
|
|
13
|
+
r[degree - 1] = 1;
|
|
14
|
+
let root = 1;
|
|
15
|
+
for (let i = 0; i < degree; i++) {
|
|
16
|
+
for (let j = 0; j < r.length; j++) {
|
|
17
|
+
r[j] = rsMul(r[j], root);
|
|
18
|
+
if (j + 1 < r.length)
|
|
19
|
+
r[j] ^= r[j + 1];
|
|
20
|
+
}
|
|
21
|
+
root = rsMul(root, 0x02);
|
|
22
|
+
}
|
|
23
|
+
return r;
|
|
24
|
+
}
|
|
25
|
+
export function rsRemainder(data, degree) {
|
|
26
|
+
const div = rsDivisor(degree), r = new Array(degree).fill(0);
|
|
27
|
+
for (const b of data) {
|
|
28
|
+
const f = b ^ r.shift();
|
|
29
|
+
r.push(0);
|
|
30
|
+
div.forEach((c, i) => { r[i] ^= rsMul(c, f); });
|
|
31
|
+
}
|
|
32
|
+
return r;
|
|
33
|
+
}
|
|
34
|
+
export function qr(text) {
|
|
35
|
+
const bytes = [...new TextEncoder().encode(text)];
|
|
36
|
+
const version = Object.keys(CAPACITY).map(Number).find((v) => bytes.length <= CAPACITY[v][0] - 2);
|
|
37
|
+
if (!version)
|
|
38
|
+
return null;
|
|
39
|
+
const [dataLen, ecLen] = CAPACITY[version];
|
|
40
|
+
const bits = [];
|
|
41
|
+
const put = (v, n) => { for (let i = n - 1; i >= 0; i--)
|
|
42
|
+
bits.push((v >>> i) & 1); };
|
|
43
|
+
put(4, 4);
|
|
44
|
+
put(bytes.length, 8);
|
|
45
|
+
for (const b of bytes)
|
|
46
|
+
put(b, 8);
|
|
47
|
+
put(0, Math.min(4, dataLen * 8 - bits.length));
|
|
48
|
+
while (bits.length % 8)
|
|
49
|
+
bits.push(0);
|
|
50
|
+
const data = [];
|
|
51
|
+
for (let i = 0; i < bits.length; i += 8)
|
|
52
|
+
data.push(bits.slice(i, i + 8).reduce((a, b) => (a << 1) | b, 0));
|
|
53
|
+
for (let pad = 0xec; data.length < dataLen; pad ^= 0xec ^ 0x11)
|
|
54
|
+
data.push(pad);
|
|
55
|
+
const all = [...data, ...rsRemainder(data, ecLen)];
|
|
56
|
+
const size = version * 4 + 17;
|
|
57
|
+
const m = Array.from({ length: size }, () => new Array(size).fill(false));
|
|
58
|
+
const fn = Array.from({ length: size }, () => new Array(size).fill(false));
|
|
59
|
+
const set = (x, y, dark) => { m[y][x] = dark; fn[y][x] = true; };
|
|
60
|
+
for (let i = 0; i < size; i++) {
|
|
61
|
+
set(6, i, i % 2 === 0);
|
|
62
|
+
set(i, 6, i % 2 === 0);
|
|
63
|
+
}
|
|
64
|
+
for (const [cx, cy] of [[3, 3], [size - 4, 3], [3, size - 4]]) {
|
|
65
|
+
for (let dy = -4; dy <= 4; dy++)
|
|
66
|
+
for (let dx = -4; dx <= 4; dx++) {
|
|
67
|
+
const x = cx + dx, y = cy + dy, d = Math.max(Math.abs(dx), Math.abs(dy));
|
|
68
|
+
if (x >= 0 && x < size && y >= 0 && y < size)
|
|
69
|
+
set(x, y, d !== 2 && d !== 4);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (ALIGN[version]) {
|
|
73
|
+
const p = ALIGN[version];
|
|
74
|
+
for (let dy = -2; dy <= 2; dy++)
|
|
75
|
+
for (let dx = -2; dx <= 2; dx++)
|
|
76
|
+
set(p + dx, p + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);
|
|
77
|
+
}
|
|
78
|
+
const fmt = 1 << 3;
|
|
79
|
+
let rem = fmt;
|
|
80
|
+
for (let i = 0; i < 10; i++)
|
|
81
|
+
rem = (rem << 1) ^ ((rem >>> 9) * 0x537);
|
|
82
|
+
const f = ((fmt << 10) | rem) ^ 0x5412;
|
|
83
|
+
const bit = (i) => ((f >>> i) & 1) === 1;
|
|
84
|
+
for (let i = 0; i <= 5; i++)
|
|
85
|
+
set(8, i, bit(i));
|
|
86
|
+
set(8, 7, bit(6));
|
|
87
|
+
set(8, 8, bit(7));
|
|
88
|
+
set(7, 8, bit(8));
|
|
89
|
+
for (let i = 9; i < 15; i++)
|
|
90
|
+
set(14 - i, 8, bit(i));
|
|
91
|
+
for (let i = 0; i < 8; i++)
|
|
92
|
+
set(size - 1 - i, 8, bit(i));
|
|
93
|
+
for (let i = 8; i < 15; i++)
|
|
94
|
+
set(8, size - 15 + i, bit(i));
|
|
95
|
+
set(8, size - 8, true);
|
|
96
|
+
let i = 0;
|
|
97
|
+
for (let right = size - 1; right >= 1; right -= 2) {
|
|
98
|
+
if (right === 6)
|
|
99
|
+
right = 5;
|
|
100
|
+
for (let vert = 0; vert < size; vert++) {
|
|
101
|
+
for (let j = 0; j < 2; j++) {
|
|
102
|
+
const x = right - j, y = ((right + 1) & 2) === 0 ? size - 1 - vert : vert;
|
|
103
|
+
if (fn[y][x])
|
|
104
|
+
continue;
|
|
105
|
+
const dark = i < all.length * 8 && ((all[i >>> 3] >>> (7 - (i & 7))) & 1) === 1;
|
|
106
|
+
i++;
|
|
107
|
+
m[y][x] = dark !== ((x + y) % 2 === 0);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return m;
|
|
112
|
+
}
|
|
113
|
+
export function qrLines(modules, quiet = 2) {
|
|
114
|
+
const n = modules.length + quiet * 2;
|
|
115
|
+
const at = (x, y) => { const X = x - quiet, Y = y - quiet; return X >= 0 && Y >= 0 && X < modules.length && Y < modules.length && modules[Y][X]; };
|
|
116
|
+
const lines = [];
|
|
117
|
+
for (let y = 0; y < n; y += 2) {
|
|
118
|
+
let line = '';
|
|
119
|
+
for (let x = 0; x < n; x++)
|
|
120
|
+
line += `\x1b[${at(x, y) ? 30 : 97};${at(x, y + 1) ? 40 : 107}m▀`;
|
|
121
|
+
lines.push(`${line}\x1b[0m`);
|
|
122
|
+
}
|
|
123
|
+
return lines;
|
|
124
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2013-2023 Mathew Groves, Chad Engler
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2015-present Jason Miller
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
Copyright (c) 2009-2011, Mozilla Foundation and contributors
|
|
3
|
+
All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
* Neither the names of the Mozilla Foundation nor the names of project
|
|
16
|
+
contributors may be used to endorse or promote products derived from this
|
|
17
|
+
software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright © 2010-2026 three.js authors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var FunpixelInspector=function(e){"use strict";var t;!function(e){e[e.UI=1e3]="UI",e[e.Interactive=500]="Interactive",e[e.Object=100]="Object",e[e.Background=0]="Background"}(t||(t={}));const n={selected:"rgba(0, 200, 255, 0.8)",hovered:"rgba(255, 200, 0, 0.6)",label:"rgba(0, 0, 0, 0.8)",labelText:"#ffffff"};class r{userFilePatterns=[/https?:\/\/[^\/]+\/(?:src\/)?([^?:]+\.(ts|js|tsx|jsx))(?:\?[^:]*)?:(\d+):(\d+)/,/\((?:[^()]*\/)?([^\/\\()]+\.(ts|js|tsx|jsx)):(\d+):(\d+)\)/,/@(?:[^@]*\/)?([^\/\\@]+\.(ts|js|tsx|jsx)):(\d+):(\d+)/,/[\s(@]([^\/\\()\s@]+\.(ts|js|tsx|jsx)):(\d+)/];skipPatterns=[/funpixel-inspector/i,/funpixel-hooked/i,/hookFactory/i,/captureSource/i,/animation-runtime/i,/node_modules/,/webpack/,/\/@vite\//,/\/vite\/dist\//,/chunk-/i,/vendor/i];parse(){const e=(new Error).stack;return e?this.parseLines(e.split("\n"),2):null}parseStack(e){return this.parseLines(e.split("\n"),0)}parseLines(e,t){for(let n=t;n<e.length;n++){const t=e[n];if(!this.skipPatterns.some(e=>e.test(t)))for(const e of this.userFilePatterns){const n=t.match(e);if(n){const e=n[1];return{file:e.includes("/")&&e.split("/").pop()||e,line:parseInt(n[3],10),column:n[4]?parseInt(n[4],10):void 0}}}}return null}getCodeRange(e,t=5){return{startLine:Math.max(1,e-t),endLine:e+t}}}const i=/funpixel-|__FUNPIXEL|hooked-|hookFactory|makeHooked|node_modules|\/@vite\/|\/@fs\/|webpack|rollup|chunk-/;class o{resolveEngineVersion;engine;handlers=new Map;isListening=!1;boundHandleMessage=this.handleMessage.bind(this);constructor(e,t){this.resolveEngineVersion=t,this.engine=e}send(e){const t=this.resolveEngineVersion?.(),n={...e,engine:this.engine,...t?{engineVersion:t}:{}};window.parent.postMessage(n,"*")}on(e,t){const n=this.handlers.get(e)||[];n.push(t),this.handlers.set(e,n),this.isListening||this.startListening()}off(e,t){const n=this.handlers.get(e)||[],r=n.indexOf(t);r>-1&&n.splice(r,1)}startListening(){this.isListening||(this.isListening=!0,window.addEventListener("message",this.boundHandleMessage))}handleMessage(e){const t=e.data;if(!t?.type)return;const n=this.normalizeMessageType(t.type);if(!n)return;const r=this.handlers.get(n);if(r){const e={type:n,target:t.target};r.forEach(t=>t(e))}}normalizeMessageType(e){switch(e){case"FUNPIXEL_PAUSE":case"ENABLE_INSPECTOR":case"PAUSE_GAME":return"FUNPIXEL_PAUSE";case"FUNPIXEL_RESUME":case"RESUME_GAME":return"FUNPIXEL_RESUME";case"FUNPIXEL_GET_TREE":return"FUNPIXEL_GET_TREE";case"GET_SCENE_TREE":return"GET_SCENE_TREE";case"REQUEST_SCREENSHOT":case"FUNPIXEL_SCREENSHOT_REQUEST":return"REQUEST_SCREENSHOT";case"REQUEST_AREA_SCREENSHOT":case"FUNPIXEL_AREA_SCREENSHOT_REQUEST":return"REQUEST_AREA_SCREENSHOT";case"DETECT_ENGINE":return"DETECT_ENGINE";case"FOCUS_OBJECT":return"FOCUS_OBJECT";case"SELECT_OBJECT":return"SELECT_OBJECT";case"FUNPIXEL_CLEAR_SELECTION":return"FUNPIXEL_CLEAR_SELECTION";default:return null}}destroy(){this.isListening&&(window.removeEventListener("message",this.boundHandleMessage),this.isListening=!1),this.handlers.clear()}}class s{canvas=null;ctx=null;colors;animationFrame=null;gameCanvas=null;constructor(e=n){this.colors=e}create(e){if(!e)return;this.canvas&&this.remove(),this.canvas=document.createElement("canvas"),this.canvas.id="funpixel-inspector-overlay",this.gameCanvas=e,this.positionCanvas(),this.ctx=this.canvas.getContext("2d");const t=window.devicePixelRatio||1;this.ctx&&this.ctx.scale(t,t),document.documentElement.appendChild(this.canvas),this.setupResizeObserver(e)}positionCanvas(){if(!this.canvas||!this.gameCanvas)return;const e=this.gameCanvas.getBoundingClientRect(),t=window.devicePixelRatio||1;this.canvas.width=Math.max(1,Math.round(e.width*t)),this.canvas.height=Math.max(1,Math.round(e.height*t)),this.canvas.style.cssText=`\n position: fixed;\n top: ${e.top}px;\n left: ${e.left}px;\n width: ${e.width}px;\n height: ${e.height}px;\n pointer-events: none;\n z-index: 9999;\n `;const n=this.canvas.getContext("2d");n&&(n.setTransform(1,0,0,1,0,0),n.scale(t,t))}remove(){this.animationFrame&&(cancelAnimationFrame(this.animationFrame),this.animationFrame=null),this.canvas&&(this.canvas.remove(),this.canvas=null,this.ctx=null),this.gameCanvas=null}clear(){this.ctx&&this.canvas&&(this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.restore())}render(e){if(this.ctx&&this.canvas){this.clear();for(const t of e)t.isSelected?this.drawSelection(t.bounds,t.label):t.isHovered&&this.drawHover(t.bounds,t.label)}}drawSelection(e,t){if(!this.ctx)return;const{x:n,y:r,width:i,height:o}=e;this.ctx.strokeStyle=this.colors.selected,this.ctx.lineWidth=3,this.ctx.setLineDash([]),this.ctx.strokeRect(n,r,i,o);const s=10;this.ctx.fillStyle=this.colors.selected,this.ctx.fillRect(n-2,r-2,s,4),this.ctx.fillRect(n-2,r-2,4,s),this.ctx.fillRect(n+i-s+2,r-2,s,4),this.ctx.fillRect(n+i-2,r-2,4,s),this.ctx.fillRect(n-2,r+o-2,s,4),this.ctx.fillRect(n-2,r+o-s+2,4,s),this.ctx.fillRect(n+i-s+2,r+o-2,s,4),this.ctx.fillRect(n+i-2,r+o-s+2,4,s),t&&this.drawLabel(n,r-25,t,!0)}drawHover(e,t){if(!this.ctx)return;const{x:n,y:r,width:i,height:o}=e;this.ctx.strokeStyle=this.colors.hovered,this.ctx.lineWidth=2,this.ctx.setLineDash([5,5]),this.ctx.strokeRect(n,r,i,o),t&&this.drawLabel(n,r-20,t,!1)}drawLabel(e,t,n,r){if(!this.ctx)return;this.ctx.font="12px monospace";const i=this.ctx.measureText(n).width+8,o=window.devicePixelRatio||1,s=(this.canvas?.width||0)/o,a=Math.max(0,Math.min(e,s-i)),l=Math.max(20,t);this.ctx.fillStyle=this.colors.label,this.ctx.fillRect(a,l-20,i,20),this.ctx.fillStyle=this.colors.labelText,this.ctx.fillText(n,a+4,l-4),r&&(this.ctx.fillStyle=this.colors.selected,this.ctx.fillRect(a,l-20,3,20))}drawConnectionLine(e,t){if(!this.ctx)return;const n={x:e.x+e.width/2,y:e.y+e.height/2},r={x:t.x+t.width/2,y:t.y+t.height/2};this.ctx.strokeStyle="rgba(255, 255, 255, 0.5)",this.ctx.lineWidth=1,this.ctx.setLineDash([3,3]),this.ctx.beginPath(),this.ctx.moveTo(n.x,n.y),this.ctx.lineTo(r.x,r.y),this.ctx.stroke()}setupResizeObserver(e){new ResizeObserver(()=>{this.canvas&&this.gameCanvas&&this.positionCanvas()}).observe(e)}setColors(e){this.colors={...this.colors,...e}}isActive(){return null!==this.canvas}}class a{objects=new WeakMap;count=0;stackParser;constructor(e){this.stackParser=e||new r}track(e,t,n){const r=n??this.stackParser.parse();this.objects.set(e,{type:t,source:r}),this.count++}get(e){return this.objects.get(e)}has(e){return this.objects.has(e)}getCount(){return this.count}createHook(e,t){const n=this;return function(...r){const i=e.apply(this,r),o=t(r,i);return n.track(i,o),i}}hookConstructor(e,t){const n=this,r=e,i=function(...e){const i=Reflect.construct(r,e,new.target||r),o=t(e,i);return n.track(i,o),i};return i.prototype=r.prototype,Object.setPrototypeOf(i,r),i}}class l{messages;sourceMapResolver;errors=[];maxErrors=50;errorHashes=new Set;inflight=new Set;originalConsoleError;constructor(e,t){this.messages=e,this.sourceMapResolver=t,this.originalConsoleError=console.error}init(){window.addEventListener("error",this.handleError),window.addEventListener("unhandledrejection",this.handleRejection),console.error=this.handleConsoleError}handleError=e=>{const t={type:"error",message:e.message,filename:e.filename,line:e.lineno,column:e.colno,stack:e.error?.stack,timestamp:Date.now()};this.trackError(t)};handleRejection=e=>{const t=e.reason,n={type:"unhandledrejection",message:t?.message||String(t),stack:t?.stack,timestamp:Date.now()};this.trackError(n)};handleConsoleError=(...e)=>{this.originalConsoleError.apply(console,e);const t={type:"console_error",message:e.map(e=>e instanceof Error?e.message:"string"==typeof e?e:String(e)).join(" "),stack:e[0]instanceof Error?e[0].stack:void 0,timestamp:Date.now()};this.trackError(t)};trackError(e){const t=`${e.message}-${e.filename||""}-${e.line||0}-${e.column||0}`;if(this.errorHashes.has(t))return;if(this.errorHashes.add(t),this.errors.push(e),this.errors.length>this.maxErrors){const e=this.errors.shift();if(e){const t=`${e.message}-${e.filename||""}-${e.line||0}-${e.column||0}`;this.errorHashes.delete(t)}}const n=this.resolveAndSend(e);this.inflight.add(n),n.finally(()=>this.inflight.delete(n))}async settled(){for(;this.inflight.size;)await Promise.allSettled([...this.inflight])}async resolveAndSend(e){const t=e.filename&&null!=e.line&&null!=e.column?{f:e.filename,l:e.line,c:e.column}:function(e){if(!e)return null;for(const t of e.split("\n")){if(i.test(t))continue;const e=t.match(/(?:\(|@)((?:https?|file):\/\/[^\s)]+):(\d+):(\d+)/)||t.match(/at\s+((?:https?|file):\/\/[^\s)]+):(\d+):(\d+)/);if(e)return{f:e[1],l:+e[2],c:+e[3]}}return null}(e.stack);if(t)try{const n=await this.sourceMapResolver.resolve(t);n&&(e.originalSource=n.source,e.originalLine=n.line,e.originalColumn=n.column,e.originalSourceLine=n.sourceLine)}catch{}this.messages.send({type:"RUNTIME_ERROR",error:e})}getErrors(){return this.errors}clearErrors(){this.errors=[],this.errorHashes.clear()}destroy(){window.removeEventListener("error",this.handleError),window.removeEventListener("unhandledrejection",this.handleRejection),console.error=this.originalConsoleError}}const c=["[funpixel:","[funpixel]","[bridge","[juice","[tilemap","[audio","[camera","[pathfinding","[dialogue","[physics","[save","[animations","[assets","[inspector","[profiler"];class u{messages;entryCount=0;originalLog;originalWarn;constructor(e){this.messages=e,this.originalLog=console.log,this.originalWarn=console.warn}init(){console.log=this.interceptLog,console.warn=this.interceptWarn}send(e,t){if(this.entryCount>=200)return;const n=t.map(e=>{if("string"==typeof e)return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}).join(" ");"error"!==e&&function(e){const t=e.toLowerCase();return c.some(e=>t.startsWith(e.toLowerCase()))}(n)||(this.entryCount++,this.messages.send({type:"CONSOLE_LOG",entry:{level:e,message:n,timestamp:Date.now()}}))}interceptLog=(...e)=>{this.originalLog.apply(console,e),this.send("log",e)};interceptWarn=(...e)=>{this.originalWarn.apply(console,e),this.send("warn",e)};resetCount(){this.entryCount=0}destroy(){console.log=this.originalLog,console.warn=this.originalWarn}}var h,d,p={},g={},f={},m={};function y(){if(h)return m;h=1;var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");return m.encode=function(t){if(0<=t&&t<e.length)return e[t];throw new TypeError("Must be between 0 and 63: "+t)},m.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1},m}function v(){if(d)return f;d=1;var e=y();return f.encode=function(t){var n,r="",i=function(e){return e<0?1+(-e<<1):0+(e<<1)}(t);do{n=31&i,(i>>>=5)>0&&(n|=32),r+=e.encode(n)}while(i>0);return r},f.decode=function(t,n,r){var i,o,s,a,l=t.length,c=0,u=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(o=e.decode(t.charCodeAt(n++))))throw new Error("Invalid base64 digit: "+t.charAt(n-1));i=!!(32&o),c+=(o&=31)<<u,u+=5}while(i);r.value=(a=(s=c)>>1,1&~s?a:-a),r.rest=n},f}var _,C={};function b(){return _||(_=1,function(e){e.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')};var t=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,n=/^data:.+\,.+$/;function r(e){var n=e.match(t);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function i(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}e.urlParse=r,e.urlGenerate=i;var o,s,a=(o=function(t){var n=t,o=r(t);if(o){if(!o.path)return t;n=o.path}for(var s=e.isAbsolute(n),a=[],l=0,c=0;;){if(l=c,-1===(c=n.indexOf("/",l))){a.push(n.slice(l));break}for(a.push(n.slice(l,c));c<n.length&&"/"===n[c];)c++}var u,h=0;for(c=a.length-1;c>=0;c--)"."===(u=a[c])?a.splice(c,1):".."===u?h++:h>0&&(""===u?(a.splice(c+1,h),h=0):(a.splice(c,2),h--));return""===(n=a.join("/"))&&(n=s?"/":"."),o?(o.path=n,i(o)):n},s=[],function(e){for(var t=0;t<s.length;t++)if(s[t].input===e){var n=s[0];return s[0]=s[t],s[t]=n,s[0].result}var r=o(e);return s.unshift({input:e,result:r}),s.length>32&&s.pop(),r});function l(e,t){""===e&&(e="."),""===t&&(t=".");var o=r(t),s=r(e);if(s&&(e=s.path||"/"),o&&!o.scheme)return s&&(o.scheme=s.scheme),i(o);if(o||t.match(n))return t;if(s&&!s.host&&!s.path)return s.host=t,i(s);var l="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=l,i(s)):l}e.normalize=a,e.join=l,e.isAbsolute=function(e){return"/"===e.charAt(0)||t.test(e)},e.relative=function(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)};var c=!("__proto__"in Object.create(null));function u(e){return e}function h(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function d(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}e.toSetString=c?u:function(e){return h(e)?"$"+e:e},e.fromSetString=c?u:function(e){return h(e)?e.slice(1):e},e.compareByOriginalPositions=function(e,t,n){var r=d(e.source,t.source);return 0!==r||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)||n||0!==(r=e.generatedColumn-t.generatedColumn)||0!==(r=e.generatedLine-t.generatedLine)?r:d(e.name,t.name)},e.compareByOriginalPositionsNoSource=function(e,t,n){var r;return 0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)||n||0!==(r=e.generatedColumn-t.generatedColumn)||0!==(r=e.generatedLine-t.generatedLine)?r:d(e.name,t.name)},e.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r||0!==(r=e.generatedColumn-t.generatedColumn)||n||0!==(r=d(e.source,t.source))||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)?r:d(e.name,t.name)},e.compareByGeneratedPositionsDeflatedNoLine=function(e,t,n){var r=e.generatedColumn-t.generatedColumn;return 0!==r||n||0!==(r=d(e.source,t.source))||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)?r:d(e.name,t.name)},e.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n||0!==(n=e.generatedColumn-t.generatedColumn)||0!==(n=d(e.source,t.source))||0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)?n:d(e.name,t.name)},e.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))},e.computeSourceURL=function(e,t,n){if(t=t||"",e&&("/"!==e[e.length-1]&&"/"!==t[0]&&(e+="/"),t=e+t),n){var o=r(n);if(!o)throw new Error("sourceMapURL could not be parsed");if(o.path){var s=o.path.lastIndexOf("/");s>=0&&(o.path=o.path.substring(0,s+1))}t=l(i(o),t)}return a(t)}}(C)),C}var w,E={};function x(){if(w)return E;w=1;var e=b(),t=Object.prototype.hasOwnProperty,n="undefined"!=typeof Map;function r(){this._array=[],this._set=n?new Map:Object.create(null)}return r.fromArray=function(e,t){for(var n=new r,i=0,o=e.length;i<o;i++)n.add(e[i],t);return n},r.prototype.size=function(){return n?this._set.size:Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(r,i){var o=n?r:e.toSetString(r),s=n?this.has(r):t.call(this._set,o),a=this._array.length;s&&!i||this._array.push(r),s||(n?this._set.set(r,a):this._set[o]=a)},r.prototype.has=function(r){if(n)return this._set.has(r);var i=e.toSetString(r);return t.call(this._set,i)},r.prototype.indexOf=function(r){if(n){var i=this._set.get(r);if(i>=0)return i}else{var o=e.toSetString(r);if(t.call(this._set,o))return this._set[o]}throw new Error('"'+r+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},r.prototype.toArray=function(){return this._array.slice()},E.ArraySet=r,E}var S,L,M={};function A(){if(S)return M;S=1;var e=b();function t(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}return t.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},t.prototype.add=function(t){var n,r,i,o,s,a;n=this._last,r=t,i=n.generatedLine,o=r.generatedLine,s=n.generatedColumn,a=r.generatedColumn,o>i||o==i&&a>=s||e.compareByGeneratedPositionsInflated(n,r)<=0?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))},t.prototype.toArray=function(){return this._sorted||(this._array.sort(e.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},M.MappingList=t,M}function T(){if(L)return g;L=1;var e=v(),t=b(),n=x().ArraySet,r=A().MappingList;function i(e){e||(e={}),this._file=t.getArg(e,"file",null),this._sourceRoot=t.getArg(e,"sourceRoot",null),this._skipValidation=t.getArg(e,"skipValidation",!1),this._ignoreInvalidMapping=t.getArg(e,"ignoreInvalidMapping",!1),this._sources=new n,this._names=new n,this._mappings=new r,this._sourcesContents=null}return i.prototype._version=3,i.fromSourceMap=function(e,n){var r=e.sourceRoot,o=new i(Object.assign(n||{},{file:e.file,sourceRoot:r}));return e.eachMapping(function(e){var n={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(n.source=e.source,null!=r&&(n.source=t.relative(r,n.source)),n.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(n.name=e.name)),o.addMapping(n)}),e.sources.forEach(function(n){var i=n;null!==r&&(i=t.relative(r,n)),o._sources.has(i)||o._sources.add(i);var s=e.sourceContentFor(n);null!=s&&o.setSourceContent(n,s)}),o},i.prototype.addMapping=function(e){var n=t.getArg(e,"generated"),r=t.getArg(e,"original",null),i=t.getArg(e,"source",null),o=t.getArg(e,"name",null);(this._skipValidation||!1!==this._validateMapping(n,r,i,o))&&(null!=i&&(i=String(i),this._sources.has(i)||this._sources.add(i)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:i,name:o}))},i.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=t.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[t.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[t.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},i.prototype.applySourceMap=function(e,r,i){var o=r;if(null==r){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');o=e.file}var s=this._sourceRoot;null!=s&&(o=t.relative(s,o));var a=new n,l=new n;this._mappings.unsortedForEach(function(n){if(n.source===o&&null!=n.originalLine){var r=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=r.source&&(n.source=r.source,null!=i&&(n.source=t.join(i,n.source)),null!=s&&(n.source=t.relative(s,n.source)),n.originalLine=r.line,n.originalColumn=r.column,null!=r.name&&(n.name=r.name))}var c=n.source;null==c||a.has(c)||a.add(c);var u=n.name;null==u||l.has(u)||l.add(u)},this),this._sources=a,this._names=l,e.sources.forEach(function(n){var r=e.sourceContentFor(n);null!=r&&(null!=i&&(n=t.join(i,n)),null!=s&&(n=t.relative(s,n)),this.setSourceContent(n,r))},this)},i.prototype._validateMapping=function(e,t,n,r){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column){var i="original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.";if(this._ignoreInvalidMapping)return"undefined"!=typeof console&&console.warn&&console.warn(i),!1;throw new Error(i)}if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n)){i="Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r});if(this._ignoreInvalidMapping)return"undefined"!=typeof console&&console.warn&&console.warn(i),!1;throw new Error(i)}},i.prototype._serializeMappings=function(){for(var n,r,i,o,s=0,a=1,l=0,c=0,u=0,h=0,d="",p=this._mappings.toArray(),g=0,f=p.length;g<f;g++){if(n="",(r=p[g]).generatedLine!==a)for(s=0;r.generatedLine!==a;)n+=";",a++;else if(g>0){if(!t.compareByGeneratedPositionsInflated(r,p[g-1]))continue;n+=","}n+=e.encode(r.generatedColumn-s),s=r.generatedColumn,null!=r.source&&(o=this._sources.indexOf(r.source),n+=e.encode(o-h),h=o,n+=e.encode(r.originalLine-1-c),c=r.originalLine-1,n+=e.encode(r.originalColumn-l),l=r.originalColumn,null!=r.name&&(i=this._names.indexOf(r.name),n+=e.encode(i-u),u=i)),d+=n}return d},i.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=t.relative(n,e));var r=t.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},i.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},i.prototype.toString=function(){return JSON.stringify(this.toJSON())},g.SourceMapGenerator=i,g}var O,R={},k={};function P(){return O||(O=1,function(e){function t(n,r,i,o,s,a){var l=Math.floor((r-n)/2)+n,c=s(i,o[l],!0);return 0===c?l:c>0?r-l>1?t(l,r,i,o,s,a):a==e.LEAST_UPPER_BOUND?r<o.length?r:-1:l:l-n>1?t(n,l,i,o,s,a):a==e.LEAST_UPPER_BOUND?l:n<0?-1:n}e.GREATEST_LOWER_BOUND=1,e.LEAST_UPPER_BOUND=2,e.search=function(n,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,n,r,i,o||e.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}}(k)),k}var I,j,N={};function U(){if(I)return N;function e(e){function t(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}return function e(n,r,i,o){if(i<o){var s=i-1;t(n,(u=i,h=o,Math.round(u+Math.random()*(h-u))),o);for(var a=n[o],l=i;l<o;l++)r(n[l],a,!1)<=0&&t(n,s+=1,l);t(n,s+1,l);var c=s+1;e(n,r,i,c-1),e(n,r,c+1,o)}var u,h}}I=1;let t=new WeakMap;return N.quickSort=function(n,r,i=0){let o=t.get(r);void 0===o&&(o=function(t){let n=e.toString();return new Function(`return ${n}`)()(t)}(r),t.set(r,o)),o(n,r,i,n.length-1)},N}var $,D,H={};var F=(D||(D=1,p.SourceMapGenerator=T().SourceMapGenerator,p.SourceMapConsumer=function(){if(j)return R;j=1;var e=b(),t=P(),n=x().ArraySet,r=v(),i=U().quickSort;function o(t,n){var r=t;return"string"==typeof t&&(r=e.parseSourceMapInput(t)),null!=r.sections?new u(r,n):new s(r,n)}function s(t,r){var i=t;"string"==typeof t&&(i=e.parseSourceMapInput(t));var o=e.getArg(i,"version"),s=e.getArg(i,"sources"),a=e.getArg(i,"names",[]),l=e.getArg(i,"sourceRoot",null),c=e.getArg(i,"sourcesContent",null),u=e.getArg(i,"mappings"),h=e.getArg(i,"file",null);if(o!=this._version)throw new Error("Unsupported version: "+o);l&&(l=e.normalize(l)),s=s.map(String).map(e.normalize).map(function(t){return l&&e.isAbsolute(l)&&e.isAbsolute(t)?e.relative(l,t):t}),this._names=n.fromArray(a.map(String),!0),this._sources=n.fromArray(s,!0),this._absoluteSources=this._sources.toArray().map(function(t){return e.computeSourceURL(l,t,r)}),this.sourceRoot=l,this.sourcesContent=c,this._mappings=u,this._sourceMapURL=r,this.file=h}function a(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}o.fromSourceMap=function(e,t){return s.fromSourceMap(e,t)},o.prototype._version=3,o.prototype.__generatedMappings=null,Object.defineProperty(o.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),o.prototype.__originalMappings=null,Object.defineProperty(o.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),o.prototype._charIsMappingSeparator=function(e,t){var n=e.charAt(t);return";"===n||","===n},o.prototype._parseMappings=function(e,t){throw new Error("Subclasses must implement _parseMappings")},o.GENERATED_ORDER=1,o.ORIGINAL_ORDER=2,o.GREATEST_LOWER_BOUND=1,o.LEAST_UPPER_BOUND=2,o.prototype.eachMapping=function(t,n,r){var i,s=n||null;switch(r||o.GENERATED_ORDER){case o.GENERATED_ORDER:i=this._generatedMappings;break;case o.ORIGINAL_ORDER:i=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}for(var a=this.sourceRoot,l=t.bind(s),c=this._names,u=this._sources,h=this._sourceMapURL,d=0,p=i.length;d<p;d++){var g=i[d],f=null===g.source?null:u.at(g.source);null!==f&&(f=e.computeSourceURL(a,f,h)),l({source:f,generatedLine:g.generatedLine,generatedColumn:g.generatedColumn,originalLine:g.originalLine,originalColumn:g.originalColumn,name:null===g.name?null:c.at(g.name)})}},o.prototype.allGeneratedPositionsFor=function(n){var r=e.getArg(n,"line"),i={source:e.getArg(n,"source"),originalLine:r,originalColumn:e.getArg(n,"column",0)};if(i.source=this._findSourceIndex(i.source),i.source<0)return[];var o=[],s=this._findMapping(i,this._originalMappings,"originalLine","originalColumn",e.compareByOriginalPositions,t.LEAST_UPPER_BOUND);if(s>=0){var a=this._originalMappings[s];if(void 0===n.column)for(var l=a.originalLine;a&&a.originalLine===l;)o.push({line:e.getArg(a,"generatedLine",null),column:e.getArg(a,"generatedColumn",null),lastColumn:e.getArg(a,"lastGeneratedColumn",null)}),a=this._originalMappings[++s];else for(var c=a.originalColumn;a&&a.originalLine===r&&a.originalColumn==c;)o.push({line:e.getArg(a,"generatedLine",null),column:e.getArg(a,"generatedColumn",null),lastColumn:e.getArg(a,"lastGeneratedColumn",null)}),a=this._originalMappings[++s]}return o},R.SourceMapConsumer=o,s.prototype=Object.create(o.prototype),s.prototype.consumer=o,s.prototype._findSourceIndex=function(t){var n,r=t;if(null!=this.sourceRoot&&(r=e.relative(this.sourceRoot,r)),this._sources.has(r))return this._sources.indexOf(r);for(n=0;n<this._absoluteSources.length;++n)if(this._absoluteSources[n]==t)return n;return-1},s.fromSourceMap=function(t,r){var o=Object.create(s.prototype),l=o._names=n.fromArray(t._names.toArray(),!0),c=o._sources=n.fromArray(t._sources.toArray(),!0);o.sourceRoot=t._sourceRoot,o.sourcesContent=t._generateSourcesContent(o._sources.toArray(),o.sourceRoot),o.file=t._file,o._sourceMapURL=r,o._absoluteSources=o._sources.toArray().map(function(t){return e.computeSourceURL(o.sourceRoot,t,r)});for(var u=t._mappings.toArray().slice(),h=o.__generatedMappings=[],d=o.__originalMappings=[],p=0,g=u.length;p<g;p++){var f=u[p],m=new a;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=c.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=l.indexOf(f.name)),d.push(m)),h.push(m)}return i(o.__originalMappings,e.compareByOriginalPositions),o},s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});const l=e.compareByGeneratedPositionsDeflatedNoLine;function c(e,t){let n=e.length,r=e.length-t;if(!(r<=1))if(2==r){let n=e[t],r=e[t+1];l(n,r)>0&&(e[t]=r,e[t+1]=n)}else if(r<20)for(let r=t;r<n;r++)for(let n=r;n>t;n--){let t=e[n-1],r=e[n];if(l(t,r)<=0)break;e[n-1]=r,e[n]=t}else i(e,l,t)}function u(t,r){var i=t;"string"==typeof t&&(i=e.parseSourceMapInput(t));var s=e.getArg(i,"version"),a=e.getArg(i,"sections");if(s!=this._version)throw new Error("Unsupported version: "+s);this._sources=new n,this._names=new n;var l={line:-1,column:0};this._sections=a.map(function(t){if(t.url)throw new Error("Support for url field in sections not implemented.");var n=e.getArg(t,"offset"),i=e.getArg(n,"line"),s=e.getArg(n,"column");if(i<l.line||i===l.line&&s<l.column)throw new Error("Section offsets must be ordered and non-overlapping.");return l=n,{generatedOffset:{generatedLine:i+1,generatedColumn:s+1},consumer:new o(e.getArg(t,"map"),r)}})}return s.prototype._parseMappings=function(t,n){var o,s,l,u,h=1,d=0,p=0,g=0,f=0,m=0,y=t.length,v=0,_={},C=[],b=[];let w=0;for(;v<y;)if(";"===t.charAt(v))h++,v++,d=0,c(b,w),w=b.length;else if(","===t.charAt(v))v++;else{for((o=new a).generatedLine=h,l=v;l<y&&!this._charIsMappingSeparator(t,l);l++);for(t.slice(v,l),s=[];v<l;)r.decode(t,v,_),u=_.value,v=_.rest,s.push(u);if(2===s.length)throw new Error("Found a source, but no line and column");if(3===s.length)throw new Error("Found a source and line, but no column");if(o.generatedColumn=d+s[0],d=o.generatedColumn,s.length>1&&(o.source=f+s[1],f+=s[1],o.originalLine=p+s[2],p=o.originalLine,o.originalLine+=1,o.originalColumn=g+s[3],g=o.originalColumn,s.length>4&&(o.name=m+s[4],m+=s[4])),b.push(o),"number"==typeof o.originalLine){let e=o.source;for(;C.length<=e;)C.push(null);null===C[e]&&(C[e]=[]),C[e].push(o)}}c(b,w),this.__generatedMappings=b;for(var E=0;E<C.length;E++)null!=C[E]&&i(C[E],e.compareByOriginalPositionsNoSource);this.__originalMappings=[].concat(...C)},s.prototype._findMapping=function(e,n,r,i,o,s){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[i]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[i]);return t.search(e,n,o,s)},s.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(t.generatedLine===n.generatedLine){t.lastGeneratedColumn=n.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0}},s.prototype.originalPositionFor=function(t){var n={generatedLine:e.getArg(t,"line"),generatedColumn:e.getArg(t,"column")},r=this._findMapping(n,this._generatedMappings,"generatedLine","generatedColumn",e.compareByGeneratedPositionsDeflated,e.getArg(t,"bias",o.GREATEST_LOWER_BOUND));if(r>=0){var i=this._generatedMappings[r];if(i.generatedLine===n.generatedLine){var s=e.getArg(i,"source",null);null!==s&&(s=this._sources.at(s),s=e.computeSourceURL(this.sourceRoot,s,this._sourceMapURL));var a=e.getArg(i,"name",null);return null!==a&&(a=this._names.at(a)),{source:s,line:e.getArg(i,"originalLine",null),column:e.getArg(i,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},s.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e})},s.prototype.sourceContentFor=function(t,n){if(!this.sourcesContent)return null;var r=this._findSourceIndex(t);if(r>=0)return this.sourcesContent[r];var i,o=t;if(null!=this.sourceRoot&&(o=e.relative(this.sourceRoot,o)),null!=this.sourceRoot&&(i=e.urlParse(this.sourceRoot))){var s=o.replace(/^file:\/\//,"");if("file"==i.scheme&&this._sources.has(s))return this.sourcesContent[this._sources.indexOf(s)];if((!i.path||"/"==i.path)&&this._sources.has("/"+o))return this.sourcesContent[this._sources.indexOf("/"+o)]}if(n)return null;throw new Error('"'+o+'" is not in the SourceMap.')},s.prototype.generatedPositionFor=function(t){var n=e.getArg(t,"source");if((n=this._findSourceIndex(n))<0)return{line:null,column:null,lastColumn:null};var r={source:n,originalLine:e.getArg(t,"line"),originalColumn:e.getArg(t,"column")},i=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",e.compareByOriginalPositions,e.getArg(t,"bias",o.GREATEST_LOWER_BOUND));if(i>=0){var s=this._originalMappings[i];if(s.source===r.source)return{line:e.getArg(s,"generatedLine",null),column:e.getArg(s,"generatedColumn",null),lastColumn:e.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},R.BasicSourceMapConsumer=s,u.prototype=Object.create(o.prototype),u.prototype.constructor=o,u.prototype._version=3,Object.defineProperty(u.prototype,"sources",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var n=0;n<this._sections[t].consumer.sources.length;n++)e.push(this._sections[t].consumer.sources[n]);return e}}),u.prototype.originalPositionFor=function(n){var r={generatedLine:e.getArg(n,"line"),generatedColumn:e.getArg(n,"column")},i=t.search(r,this._sections,function(e,t){return e.generatedLine-t.generatedOffset.generatedLine||e.generatedColumn-t.generatedOffset.generatedColumn}),o=this._sections[i];return o?o.consumer.originalPositionFor({line:r.generatedLine-(o.generatedOffset.generatedLine-1),column:r.generatedColumn-(o.generatedOffset.generatedLine===r.generatedLine?o.generatedOffset.generatedColumn-1:0),bias:n.bias}):{source:null,line:null,column:null,name:null}},u.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},u.prototype.sourceContentFor=function(e,t){for(var n=0;n<this._sections.length;n++){var r=this._sections[n].consumer.sourceContentFor(e,!0);if(r||""===r)return r}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},u.prototype.generatedPositionFor=function(t){for(var n=0;n<this._sections.length;n++){var r=this._sections[n];if(-1!==r.consumer._findSourceIndex(e.getArg(t,"source"))){var i=r.consumer.generatedPositionFor(t);if(i)return{line:i.line+(r.generatedOffset.generatedLine-1),column:i.column+(r.generatedOffset.generatedLine===i.line?r.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},u.prototype._parseMappings=function(t,n){this.__generatedMappings=[],this.__originalMappings=[];for(var r=0;r<this._sections.length;r++)for(var o=this._sections[r],s=o.consumer._generatedMappings,a=0;a<s.length;a++){var l=s[a],c=o.consumer._sources.at(l.source);null!==c&&(c=e.computeSourceURL(o.consumer.sourceRoot,c,this._sourceMapURL)),this._sources.add(c),c=this._sources.indexOf(c);var u=null;l.name&&(u=o.consumer._names.at(l.name),this._names.add(u),u=this._names.indexOf(u));var h={source:c,generatedLine:l.generatedLine+(o.generatedOffset.generatedLine-1),generatedColumn:l.generatedColumn+(o.generatedOffset.generatedLine===l.generatedLine?o.generatedOffset.generatedColumn-1:0),originalLine:l.originalLine,originalColumn:l.originalColumn,name:u};this.__generatedMappings.push(h),"number"==typeof h.originalLine&&this.__originalMappings.push(h)}i(this.__generatedMappings,e.compareByGeneratedPositionsDeflated),i(this.__originalMappings,e.compareByOriginalPositions)},R.IndexedSourceMapConsumer=u,R}().SourceMapConsumer,p.SourceNode=function(){if($)return H;$=1;var e=T().SourceMapGenerator,t=b(),n=/(\r?\n)/,r="$$$isSourceNode$$$";function i(e,t,n,i,o){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==n?null:n,this.name=null==o?null:o,this[r]=!0,null!=i&&this.add(i)}return i.fromStringWithSourceMap=function(e,r,o){var s=new i,a=e.split(n),l=0,c=function(){return e()+(e()||"");function e(){return l<a.length?a[l++]:void 0}},u=1,h=0,d=null;return r.eachMapping(function(e){if(null!==d){if(!(u<e.generatedLine)){var t=(n=a[l]||"").substr(0,e.generatedColumn-h);return a[l]=n.substr(e.generatedColumn-h),h=e.generatedColumn,p(d,t),void(d=e)}p(d,c()),u++,h=0}for(;u<e.generatedLine;)s.add(c()),u++;if(h<e.generatedColumn){var n=a[l]||"";s.add(n.substr(0,e.generatedColumn)),a[l]=n.substr(e.generatedColumn),h=e.generatedColumn}d=e},this),l<a.length&&(d&&p(d,c()),s.add(a.splice(l).join(""))),r.sources.forEach(function(e){var n=r.sourceContentFor(e);null!=n&&(null!=o&&(e=t.join(o,e)),s.setSourceContent(e,n))}),s;function p(e,n){if(null===e||void 0===e.source)s.add(n);else{var r=o?t.join(o,e.source):e.source;s.add(new i(e.originalLine,e.originalColumn,r,n,e.name))}}},i.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[r]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},i.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[r]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},i.prototype.walk=function(e){for(var t,n=0,i=this.children.length;n<i;n++)(t=this.children[n])[r]?t.walk(e):""!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name})},i.prototype.join=function(e){var t,n,r=this.children.length;if(r>0){for(t=[],n=0;n<r-1;n++)t.push(this.children[n]),t.push(e);t.push(this.children[n]),this.children=t}return this},i.prototype.replaceRight=function(e,t){var n=this.children[this.children.length-1];return n[r]?n.replaceRight(e,t):"string"==typeof n?this.children[this.children.length-1]=n.replace(e,t):this.children.push("".replace(e,t)),this},i.prototype.setSourceContent=function(e,n){this.sourceContents[t.toSetString(e)]=n},i.prototype.walkSourceContents=function(e){for(var n=0,i=this.children.length;n<i;n++)this.children[n][r]&&this.children[n].walkSourceContents(e);var o=Object.keys(this.sourceContents);for(n=0,i=o.length;n<i;n++)e(t.fromSetString(o[n]),this.sourceContents[o[n]])},i.prototype.toString=function(){var e="";return this.walk(function(t){e+=t}),e},i.prototype.toStringWithSourceMap=function(t){var n={code:"",line:1,column:0},r=new e(t),i=!1,o=null,s=null,a=null,l=null;return this.walk(function(e,t){n.code+=e,null!==t.source&&null!==t.line&&null!==t.column?(o===t.source&&s===t.line&&a===t.column&&l===t.name||r.addMapping({source:t.source,original:{line:t.line,column:t.column},generated:{line:n.line,column:n.column},name:t.name}),o=t.source,s=t.line,a=t.column,l=t.name,i=!0):i&&(r.addMapping({generated:{line:n.line,column:n.column}}),o=null,i=!1);for(var c=0,u=e.length;c<u;c++)10===e.charCodeAt(c)?(n.line++,n.column=0,c+1===u?(o=null,i=!1):i&&r.addMapping({source:t.source,original:{line:t.line,column:t.column},generated:{line:n.line,column:n.column},name:t.name})):n.column++}),this.walkSourceContents(function(e,t){r.setSourceContent(e,t)}),{code:n.code,map:r}},H.SourceNode=i,H}().SourceNode),p);class B{consumers=new Map;pending=new Map;async resolve(e){if(!function(e){try{const t=new URL(e),n=t.pathname;return!!/\.(?:js|mjs|cjs)$/.test(n)&&(!t.searchParams.has("t")&&(!!/-[A-Za-z0-9_-]{6,}\.(?:js|mjs|cjs)$/.test(n)||!!n.startsWith("/assets/")))}catch{return!1}}(e.f)){let t=e.f;try{t=new URL(e.f).pathname}catch{}if(function(e){try{const t=new URL(e);return!t.pathname.includes("/node_modules/")&&!t.pathname.startsWith("/@")&&(/\.(?:ts|tsx|jsx|mts|vue|svelte)$/.test(t.pathname)||t.searchParams.has("t"))}catch{return!1}}(e.f)){const n=await this.getInlineConsumer(e.f);if(n){const r=n.originalPositionFor({line:e.l,column:e.c});if(r.source&&r.line){const e={source:t,line:r.line,column:r.column??void 0};return this.fillSourceLine(n,r.source,r.line,e),e}}}return{source:t,line:e.l,column:e.c}}const t=await this.getConsumer(e.f);if(!t)return{source:this.extractPath(e.f),line:e.l,column:e.c};const n=t.originalPositionFor({line:e.l,column:e.c});if(!n.source)return console.warn(`[funpixel-inspector] source map present but no mapping for ${e.f}:${e.l}:${e.c} (position outside mapped ranges — bundler boilerplate or generated code)`),null;const r={source:this.normalizePath(n.source),line:n.line,column:n.column??void 0};return n.line&&this.fillSourceLine(t,n.source,n.line,r),r}fillSourceLine(e,t,n,r){try{const i=e.sourceContentFor(t,!0),o=i?.split("\n")[n-1];if(!o)return;r.sourceLine=o.trim();const s=o.match(/(?:const|let|var)\s+(\w+)\s*=|this\.(\w+)\s*=/);s&&(r.varName=s[1]||s[2])}catch{}}getInlineConsumer(e){const t=`inline:${e}`;if(this.consumers.has(t))return Promise.resolve(this.consumers.get(t));let n=this.pending.get(t);return n||(n=fetch(e).then(e=>e.ok?e.text():"").then(e=>{const t=function(e){const t=/\/\/[#@]\s*sourceMappingURL=data:application\/json[^,]*;base64,([A-Za-z0-9+/=]+)\s*$/.exec(e);if(!t)return null;try{const e=Uint8Array.from(atob(t[1]),e=>e.charCodeAt(0));return JSON.parse((new TextDecoder).decode(e))}catch{return null}}(e);return t?new F.SourceMapConsumer(t):null}).catch(()=>null).then(e=>(this.consumers.set(t,e),this.pending.delete(t),e)),this.pending.set(t,n)),n}async getConsumer(e){if(this.consumers.has(e))return this.consumers.get(e);if(this.pending.has(e))return this.pending.get(e);const t=this.fetchMap(e);this.pending.set(e,t);const n=await t;return this.consumers.set(e,n),this.pending.delete(e),n}async fetchMap(e){const t=e+".map";try{const e=await fetch(t);if(!e.ok)return console.warn(`[funpixel-inspector] source map fetch failed for ${t}: HTTP ${e.status} (build did not emit a .map alongside the bundle, or preview server is not serving it)`),null;const n=await e.json();return new F.SourceMapConsumer(n)}catch(e){return console.warn(`[funpixel-inspector] source map fetch/parse error for ${t}:`,e),null}}extractPath(e){try{return new URL(e).pathname}catch{return e}}normalizePath(e){return e.replace(/^(\.\.\/)+/,"")}}const G=new Set(["DIV","SPAN","SECTION","ARTICLE","HEADER","FOOTER","MAIN","NAV","P"]),X=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A","LABEL","PROGRESS","METER","CANVAS","VIDEO","IMG","SVG"]);class z{isInspectorChrome(e){return null!==e.closest('[id^="funpixel-inspector-"], #funpixel-dom-highlighter, #funpixel-screenshot-selection')||e.hasAttribute("data-funpixel-inspector")}isGameCanvas(e){return"CANVAS"===e.tagName&&!this.isInspectorChrome(e)}isCanvasAncestor(e,t){return!(!e.classList.contains("canvas-host")&&!e.classList.contains("canvas-container"))||!!t&&(e===t||e.contains(t))}isTransparentViewportWrapper(e){if(e.hasAttribute("data-funpixel-component"))return!1;if(X.has(e.tagName))return!1;const t=e.getBoundingClientRect();if(t.width<.9*window.innerWidth||t.height<.9*window.innerHeight)return!1;const n=getComputedStyle(e),r=n.backgroundColor;if(r&&"transparent"!==r&&!/^rgba\([^)]*,\s*0\s*\)$/.test(r))return!1;if(n.backgroundImage&&"none"!==n.backgroundImage)return!1;if(n.boxShadow&&"none"!==n.boxShadow)return!1;if(parseFloat(n.borderTopWidth||"0")>0)return!1;for(const t of Array.from(e.childNodes))if(3===t.nodeType&&t.textContent&&t.textContent.trim())return!1;return!0}findComponentAt(e,t){const n=document.elementsFromPoint(e,t),r=[];for(const e of n)e instanceof HTMLElement&&(this.isInspectorChrome(e)||this.isTransparentViewportWrapper(e)||r.push(e));const i=r.find(e=>this.isGameCanvas(e))??null,o=r.filter(e=>!this.isGameCanvas(e)&&!this.isCanvasAncestor(e,i));if(0===o.length)return null;const s=o[0],a=s.getAttribute("data-funpixel-component");if(a)return this.isFxComponent(s)?null:{element:s,name:a};for(const e of o)if(X.has(e.tagName)){const t=e.getAttribute("data-funpixel-component");return t&&this.isFxComponent(e)?null:{element:e,name:t??this.inferRawName(e)}}let l=s;for(;l;){const e=l.getAttribute("data-funpixel-component");if(e)return this.isFxComponent(l)?null:{element:l,name:e};l=l.parentElement}return{element:s,name:this.inferRawName(s)}}getComponentMetadata(e,t){const n=e.getAttribute("data-funpixel-component")||this.inferRawName(e)||"UI Element",r=e.getAttribute("data-funpixel-props"),i=r?this.safeParseJson(r):this.inferRawProps(e),o=e.getBoundingClientRect(),s=t?this.toCanvasBounds(o,t):{x:o.left,y:o.top,width:o.width,height:o.height};return{type:n,typeName:n,layer:1e3,position:{x:Math.round(o.left),y:Math.round(o.top)},scale:{x:1,y:1},alpha:this.getComputedAlpha(e),visible:null!==e.offsetParent||"fixed"===e.style.position,childCount:e.querySelectorAll("[data-funpixel-component]").length,bounds:s,parentLabel:this.getParentLabel(e),sourceFile:null,sourceLine:null,sourceColumn:null,sourceLineRange:null,isDomComponent:!0,cssClass:e.className||void 0,componentProps:i}}buildDomTree(){return this.walkDomTree(document.body)}findComponentNamed(e,t=document.body){for(const n of Array.from(t.children)){if(!(n instanceof HTMLElement))continue;if(this.isInspectorChrome(n)||this.isGameCanvas(n))continue;const t=n.getAttribute("data-funpixel-component");if(t===e)return n;if(!t&&this.hasStrongIdentity(n)&&this.inferRawName(n)===e)return n;const r=this.findComponentNamed(e,n);if(r)return r}return null}isFxComponent(e){return"true"===e.getAttribute("data-funpixel-fx")}walkDomTree(e){const t=[];for(const n of Array.from(e.children)){if(!(n instanceof HTMLElement))continue;if(this.isInspectorChrome(n)||this.isGameCanvas(n))continue;const e=n.getAttribute("data-funpixel-component");if(e){const r=this.isFxComponent(n);t.push({name:e,type:e,layer:r?"fx":"hud",children:this.walkDomTree(n)})}else if(this.hasStrongIdentity(n)){const e=this.inferRawName(n);t.push({name:e,type:n.tagName.toLowerCase(),layer:"hud",children:this.walkDomTree(n)})}else t.push(...this.walkDomTree(n))}return t}toCanvasBounds(e,t){const n=t.getBoundingClientRect(),r=t.width/n.width,i=t.height/n.height;return{x:(e.left-n.left)*r,y:(e.top-n.top)*i,width:e.width*r,height:e.height*i}}getComputedAlpha(e){const t=getComputedStyle(e).opacity;return t?parseFloat(t):1}getParentLabel(e){let t=e.parentElement;for(;t;){const e=t.getAttribute("data-funpixel-component");if(e)return e;t=t.parentElement}return"overlay"}safeParseJson(e){try{return JSON.parse(e)}catch{return{}}}inferRawName(e){if(e.id)return`#${e.id}`;const t=e.tagName;if(X.has(t)){const n=e.textContent?.trim().slice(0,24);if(n)return`${t.toLowerCase()}: "${n}"`;if("INPUT"===t){const t=e;return`input[${t.type}]${t.placeholder?` "${t.placeholder}"`:""}`}return t.toLowerCase()}const n=this.getMeaningfulClass(e);if(n)return`.${n}`;const r=e.getAttribute("role");if(r)return r;const i=e.getAttribute("aria-label");if(i)return i.slice(0,32);const o=e.textContent?.trim();return o&&o.length<=24?`"${o}"`:t.toLowerCase()}hasStrongIdentity(e){return!!e.id||(!!X.has(e.tagName)||(!!this.getMeaningfulClass(e)||!G.has(e.tagName)))}getMeaningfulClass(e){for(const t of e.classList)if(!(t.length<4||/^[a-z][-a-z0-9]{0,2}$/.test(t)))return t;return null}inferRawProps(e){const t={},n=e.textContent?.trim();return n&&n.length<=60&&(t.text=n),e.getAttribute("role")&&(t.role=e.getAttribute("role")),e.getAttribute("aria-label")&&(t["aria-label"]=e.getAttribute("aria-label")),e.id&&(t.id=e.id),e.className&&(t.class=e.className),t}}class W{container=null;selectionEl=null;hoverEl=null;labelEl=null;create(){if(this.container)return;const e=document.querySelector(".funpixel-shell")??document.documentElement;e&&(this.container=document.createElement("div"),this.container.id="funpixel-dom-highlighter",this.container.style.cssText="\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 2147483000;\n ",e.appendChild(this.container))}showSelection(e,t){if(!this.container)return;this.clearSelection();const r=e.getBoundingClientRect(),i=r.left,o=r.top;this.selectionEl=document.createElement("div"),this.selectionEl.style.cssText=`\n position: fixed;\n left: ${i}px;\n top: ${o}px;\n width: ${r.width}px;\n height: ${r.height}px;\n border: 3px solid ${n.selected};\n border-radius: 2px;\n pointer-events: none;\n box-sizing: border-box;\n `;const s=this.createCornerMarkers(n.selected);for(const e of s)this.selectionEl.appendChild(e);this.container.appendChild(this.selectionEl)}showHover(e,t){if(!this.container)return;this.clearHover();const r=e.getBoundingClientRect();if(r.width<=0||r.height<=0)return;const i=r.left,o=r.top;this.hoverEl=document.createElement("div"),this.hoverEl.style.cssText=`\n position: fixed;\n left: ${i}px;\n top: ${o}px;\n width: ${r.width}px;\n height: ${r.height}px;\n border: 2px dashed ${n.hovered};\n border-radius: 2px;\n pointer-events: none;\n box-sizing: border-box;\n `,this.container.appendChild(this.hoverEl);const s=this.createLabel(0,-24,t,!1);this.hoverEl.appendChild(s)}clearSelection(){this.selectionEl&&(this.selectionEl.remove(),this.selectionEl=null),this.labelEl&&(this.labelEl.remove(),this.labelEl=null)}clearHover(){this.hoverEl&&(this.hoverEl.remove(),this.hoverEl=null)}clear(){this.clearSelection(),this.clearHover()}remove(){this.clear(),this.container&&(this.container.remove(),this.container=null)}isActive(){return null!==this.container}createLabel(e,t,r,i,o=!1){const s=document.createElement("div"),a=i?n.selected:n.hovered;return s.style.cssText=`\n position: ${o?"fixed":"absolute"};\n left: ${Math.max(0,e)}px;\n top: ${Math.max(0,t)}px;\n background: ${n.label};\n color: ${n.labelText};\n font: 12px monospace;\n padding: 2px 6px;\n border-left: 3px solid ${a};\n white-space: nowrap;\n pointer-events: none;\n `,s.textContent=r,s}createCornerMarkers(e){const t=10,n=[],r=[{left:-1,top:-1,bTop:3,bLeft:3,bRight:0,bBottom:0,w:t,h:t},{right:-1,top:-1,bTop:3,bRight:3,bLeft:0,bBottom:0,w:t,h:t},{left:-1,bottom:-1,bBottom:3,bLeft:3,bRight:0,bTop:0,w:t,h:t},{right:-1,bottom:-1,bBottom:3,bRight:3,bLeft:0,bTop:0,w:t,h:t}];for(const t of r){const r=document.createElement("div");r.style.cssText=`\n position: absolute;\n width: ${t.w}px;\n height: ${t.h}px;\n border-color: ${e};\n border-style: solid;\n border-width: ${t.bTop||0}px ${t.bRight||0}px ${t.bBottom||0}px ${t.bLeft||0}px;\n pointer-events: none;\n ${"left"in t?`left: ${t.left}px;`:""}\n ${"right"in t?`right: ${t.right}px;`:""}\n ${"top"in t?`top: ${t.top}px;`:""}\n ${"bottom"in t?`bottom: ${t.bottom}px;`:""}\n `,n.push(r)}return n}}const J={sceneCheckInterval:100,sceneCheckTimeout:1e4,debug:!1},V=.82;function q(e,t={}){const n=Math.min(1,1280/Math.max(1,e.width)),r=t.alpha?"image/png":"image/jpeg";if(1===n)return"image/jpeg"===r?e.toDataURL(r,V):e.toDataURL(r);try{const t=document.createElement("canvas");t.width=Math.max(1,Math.round(e.width*n)),t.height=Math.max(1,Math.round(e.height*n));const i=t.getContext("2d");return i?(i.drawImage(e,0,0,t.width,t.height),"image/jpeg"===r?t.toDataURL(r,V):t.toDataURL(r)):e.toDataURL(r,V)}catch{return e.toDataURL(r,V)}}class Y{stackParser;messages;canvasHighlighter;tracker;errorTracker;consoleLogTracker;sourceMapResolver;domInspector;domHighlighter;isPaused=!1;sceneReady=!1;isDomSelection=!1;pendingPause=!1;selectedObject=null;hoveredObject=null;config;boundHandleClick;boundHandleMouseMove;boundHandleKeyDown;boundHandleMouseOut;lastMouseMoveTime=0;inputShield=null;initOverlay=null;constructor(e={}){this.config={...J,...e},this.stackParser=new r,this.canvasHighlighter=new s,this.tracker=new a(this.stackParser),this.sourceMapResolver=new B,this.domInspector=new z,this.domHighlighter=new W,this.boundHandleClick=this.handleClick.bind(this),this.boundHandleMouseMove=this.handleMouseMove.bind(this),this.boundHandleKeyDown=this.handleKeyDown.bind(this),this.boundHandleMouseOut=this.handleMouseOut.bind(this),this.messages=null,this.errorTracker=null,this.consoleLogTracker=null}selectByName(e){const t=this.domInspector.findComponentNamed(e);if(t)return this.selectedObject=t,this.isDomSelection=!0,this.canvasHighlighter.clear(),this.domHighlighter.showSelection(t,e),void this.messages.send({type:"OBJECT_SELECTED",metadata:this.domInspector.getComponentMetadata(t,this.getCanvas())});const n=this.findObjectByName(e);if(!n)return void this.log(`selectByName: "${e}" not found`);this.isDomSelection=!1,this.domHighlighter.clearSelection(),this.selectedObject=n;const r=this.getObjectMetadata(n);this.enrichMetadata(n,r).then(t=>{this.messages.send({type:"OBJECT_SELECTED",metadata:t}),this.log(`Selected by name: ${e}`)})}forEachSceneObject(e){}scheduleFrame(e){requestAnimationFrame(e)}getEngineVersion(){const e=window;if("threejs"===this.engineType){const t=e.THREE?.REVISION;return null!=t?`r${t}`:void 0}if("pixi"===this.engineType)return e.PIXI?.VERSION??void 0}init(){this.messages=new o(this.engineType,()=>this.getEngineVersion()),this.errorTracker=new l(this.messages,this.sourceMapResolver),this.errorTracker.init(),this.consoleLogTracker=new u(this.messages),this.consoleLogTracker.init(),this.hookConstructors(),this.setupMessageHandlers(),this.waitForScene(),this.exposeGlobalAPI(),this.log("Inspector initialized with error tracking")}waitForScene(){const e=Date.now(),t=setInterval(()=>{this.isSceneReady()?(clearInterval(t),this.onSceneReady()):Date.now()-e>this.config.sceneCheckTimeout&&(clearInterval(t),this.log("Scene not found after timeout","warn"))},this.config.sceneCheckInterval)}onSceneReady(){this.log("Scene detected"),this.sceneReady=!0,this.messages.send({type:"FUNPIXEL_READY"}),this.sendEngineDetected(),this.pendingPause&&(this.log("Executing pending pause"),this.pause())}setupMessageHandlers(){this.messages.on("FUNPIXEL_PAUSE",()=>this.pause()),this.messages.on("FUNPIXEL_RESUME",()=>this.resume()),this.messages.on("FUNPIXEL_CLEAR_SELECTION",()=>this.clearSelection()),this.messages.on("FUNPIXEL_GET_TREE",()=>this.sendSceneTree()),this.messages.on("GET_SCENE_TREE",()=>this.sendSceneTree("SCENE_TREE")),this.messages.on("REQUEST_SCREENSHOT",()=>this.takeScreenshot()),this.messages.on("REQUEST_AREA_SCREENSHOT",()=>this.startAreaSelection()),this.messages.on("DETECT_ENGINE",()=>this.sendEngineDetected()),this.messages.on("SELECT_OBJECT",e=>{e.target&&this.selectByName(e.target)}),this.messages.on("FOCUS_OBJECT",e=>{e.target&&(this.log(`Focusing on "${e.target}"`),this.focusOnObject(e.target))})}sendEngineDetected(){this.messages.send({type:"ENGINE_DETECTED",engine:this.engineType}),this.log(`Engine detected: ${this.engineType}`)}takeScreenshot(){const e=this.getCanvas();if(!e)return this.log("No canvas available for screenshot, trying html2canvas fallback","warn"),void this.tryHtml2CanvasFallback(()=>{window.parent.postMessage({type:"SCREENSHOT_RESULT",error:"No canvas"},"*")});const t=e=>{if(e.length<200)return this.log("Canvas capture returned blank image, trying html2canvas fallback","warn"),void this.tryHtml2CanvasFallback(()=>{window.parent.postMessage({type:"SCREENSHOT_RESULT",dataUrl:e},"*")});window.parent.postMessage({type:"SCREENSHOT_RESULT",dataUrl:e},"*"),this.log("Screenshot captured")},n=e=>{this.log(`Screenshot failed: ${e}, trying html2canvas fallback`,"error"),this.tryHtml2CanvasFallback(()=>{window.parent.postMessage({type:"SCREENSHOT_RESULT",error:String(e)},"*")})};if(this.needsRafCapture(e))this.isPaused?(window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!1),this.scheduleFrame(()=>{try{t(q(e))}catch(e){n(e)}finally{window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!0)}})):this.scheduleFrame(()=>{try{t(q(e))}catch(e){n(e)}});else try{t(q(e))}catch(e){n(e)}}tryHtml2CanvasFallback(e){this.loadHtml2Canvas().then(t=>{t?(this.log("Using html2canvas fallback for screenshot"),t(document.body,{useCORS:!0,allowTaint:!0,backgroundColor:null}).then(e=>{const t=q(e,{alpha:!0});window.parent.postMessage({type:"SCREENSHOT_RESULT",dataUrl:t},"*"),this.log("Screenshot captured via html2canvas fallback")}).catch(t=>{this.log(`html2canvas fallback failed: ${t}`,"error"),e()})):e()}).catch(()=>e())}html2canvasPromise=null;loadHtml2Canvas(){return"function"==typeof window.html2canvas?Promise.resolve(window.html2canvas):(this.html2canvasPromise||(this.html2canvasPromise=new Promise(e=>{const t=document.createElement("script");t.src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js",t.onload=()=>{"function"==typeof window.html2canvas?(this.log("html2canvas loaded dynamically"),e(window.html2canvas)):e(null)},t.onerror=()=>{this.log("Failed to load html2canvas from CDN","warn"),e(null)},document.head.appendChild(t)})),this.html2canvasPromise)}startAreaSelection(){const e=this.getCanvas();if(!e)return this.log("No canvas available for area screenshot","warn"),void window.parent.postMessage({type:"SCREENSHOT_RESULT",error:"No canvas"},"*");const t=document.createElement("div");t.id="funpixel-screenshot-selection",t.style.cssText="\n position: fixed;\n top: 0; left: 0; width: 100%; height: 100%;\n cursor: crosshair;\n z-index: 99999;\n background: rgba(0, 0, 0, 0.3);\n ";const n=document.createElement("div");n.style.cssText="\n position: absolute;\n border: 2px dashed #00f0ff;\n background: rgba(0, 240, 255, 0.1);\n box-shadow: 0 0 10px rgba(0, 240, 255, 0.3);\n display: none;\n pointer-events: none;\n ",t.appendChild(n);const r=document.createElement("div");r.textContent="Click and drag to select area. Press ESC to cancel.",r.style.cssText="\n position: absolute;\n top: 20px; left: 50%; transform: translateX(-50%);\n padding: 8px 16px;\n background: rgba(0, 0, 0, 0.8);\n color: #fff;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 500;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n pointer-events: none;\n white-space: nowrap;\n ",t.appendChild(r);const i=document.createElement("div");i.style.cssText="\n position: absolute;\n padding: 4px 8px;\n background: rgba(0, 0, 0, 0.8);\n color: #00f0ff;\n border-radius: 4px;\n font-size: 11px;\n font-family: ui-monospace, monospace;\n pointer-events: none;\n display: none;\n transform: translateX(-50%);\n white-space: nowrap;\n ",t.appendChild(i);let o=0,s=0,a=!1;const l=e=>{a=!0,o=e.clientX,s=e.clientY,n.style.display="block",n.style.left=`${o}px`,n.style.top=`${s}px`,n.style.width="0",n.style.height="0",i.style.display="none"},c=e=>{if(!a)return;const t=e.clientX,r=e.clientY,l=Math.min(o,t),c=Math.min(s,r),u=Math.abs(t-o),h=Math.abs(r-s);n.style.left=`${l}px`,n.style.top=`${c}px`,n.style.width=`${u}px`,n.style.height=`${h}px`,u>0&&h>0&&(i.style.display="block",i.style.left=`${l+u/2}px`,i.style.top=`${c+h+10}px`,i.textContent=`${Math.round(u)} x ${Math.round(h)}`)},u=t=>{if(!a)return;a=!1;const n=t.clientX,r=t.clientY,i=e.getBoundingClientRect(),l=e.width/i.width,c=e.height/i.height,u=Math.max(0,Math.min(o,n)-i.left)*l,h=Math.max(0,Math.min(s,r)-i.top)*c,p=Math.abs(n-o)*l,g=Math.abs(r-s)*c;d(),p>10&&g>10?this.captureArea(e,u,h,p,g):window.parent.postMessage({type:"SCREENSHOT_RESULT",error:"Selection too small"},"*")},h=e=>{"Escape"===e.key&&(d(),window.parent.postMessage({type:"SCREENSHOT_RESULT",error:"Cancelled"},"*"))},d=()=>{t.removeEventListener("mousedown",l),t.removeEventListener("mousemove",c),t.removeEventListener("mouseup",u),document.removeEventListener("keydown",h),t.remove()};t.addEventListener("mousedown",l),t.addEventListener("mousemove",c),t.addEventListener("mouseup",u),document.addEventListener("keydown",h),document.body.appendChild(t),this.log("Area selection started - drag to select, Esc to cancel")}captureArea(e,t,n,r,i){const o=()=>{const o=document.createElement("canvas");o.width=r,o.height=i;const s=o.getContext("2d");if(!s)throw new Error("Could not get 2D context");s.drawImage(e,t,n,r,i,0,0,r,i);const a=q(o);window.parent.postMessage({type:"SCREENSHOT_RESULT",dataUrl:a},"*"),this.log(`Area screenshot captured: ${Math.round(r)}x${Math.round(i)}`)},s=e=>{this.log(`Area screenshot failed: ${e}`,"error"),window.parent.postMessage({type:"SCREENSHOT_RESULT",error:String(e)},"*")};if(this.needsRafCapture(e))this.isPaused&&window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!1),this.scheduleFrame(()=>{try{o()}catch(e){s(e)}finally{this.isPaused&&window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!0)}});else try{o()}catch(e){s(e)}}needsRafCapture(e){const t=e.getContext("webgl2",{failIfMajorPerformanceCaveat:!1})||e.getContext("webgl",{failIfMajorPerformanceCaveat:!1});if(t){const e=t.getContextAttributes();return!(!e||e.preserveDrawingBuffer)}return!e.getContext("2d")}captureObjectScreenshot(e,t){try{const n=e.getBoundingClientRect(),r=e.width/n.width,i=e.height/n.height,o=Math.max(8,.1*t.width)*r,s=Math.max(8,.1*t.height)*i,a=Math.max(0,t.x*r-o),l=Math.max(0,t.y*i-s),c=Math.min(e.width-a,t.width*r+2*o),u=Math.min(e.height-l,t.height*i+2*s);if(c<4||u<4)return;const h=document.createElement("canvas");h.width=c,h.height=u;const d=h.getContext("2d");if(!d)return;return d.drawImage(e,a,l,c,u,0,0,c,u),h.toDataURL("image/png")}catch{return}}sendSceneTree(e="FUNPIXEL_TREE"){const t=this.buildSceneTree(),n=this.domInspector.buildDomTree(),r=[];if(t&&r.push({...t,layer:"canvas"}),n.length>0&&r.push({name:"UI Layer",type:"overlay",layer:"hud",children:n}),r.length>0){const t={name:"Game",type:"root",children:r};this.messages.send({type:e,tree:t})}}pause(){if(!this.isPaused){if(!this.isSceneReady())return this.log("Scene not ready yet, will pause when ready"),this.pendingPause=!0,void this.showInitOverlay();this.pendingPause=!1,this.isPaused=!0,window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!0),this.showInitOverlay(),this.canvasHighlighter.create(this.getCanvas()),this.domHighlighter.create(),this.createInputShield(),document.addEventListener("click",this.boundHandleClick,!0),document.addEventListener("mousemove",this.boundHandleMouseMove,!0),window.addEventListener("keydown",this.boundHandleKeyDown,!0),document.addEventListener("mouseout",this.boundHandleMouseOut,!0),this.renderOverlay(),this.messages.send({type:"GAME_PAUSED"}),setTimeout(()=>this.hideInitOverlay(),50),this.log("Paused - Click objects to inspect")}}resume(){if(!this.isPaused)return;this.isPaused=!1,this.hideInitOverlay(),window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!1),this.removeInputShield(),document.removeEventListener("click",this.boundHandleClick,!0),document.removeEventListener("mousemove",this.boundHandleMouseMove,!0),window.removeEventListener("keydown",this.boundHandleKeyDown,!0),document.removeEventListener("mouseout",this.boundHandleMouseOut,!0);const e=this.getCanvas();e&&(e.style.cursor="default"),this.selectedObject=null,this.hoveredObject=null,this.isDomSelection=!1,this.canvasHighlighter.remove(),this.domHighlighter.remove(),this.messages.send({type:"GAME_RESUMED"}),this.log("Resumed")}clearSelection(){this.isPaused&&(this.selectedObject=null,this.hoveredObject=null,this.isDomSelection=!1,this.domHighlighter.clearSelection(),this.renderOverlay(),this.messages.send({type:"OBJECT_DESELECTED"}),this.log("Selection cleared"))}handleClick(e){if(!this.isPaused)return;e.stopPropagation(),e.preventDefault();const t=this.domInspector.findComponentAt(e.clientX,e.clientY);if(this.log(`handleClick(${Math.round(e.clientX)},${Math.round(e.clientY)}): domHit=${t?t.name:"null"}`),t){this.selectedObject=t.element,this.isDomSelection=!0;const n=this.domInspector.getComponentMetadata(t.element,this.getCanvas());return this.canvasHighlighter.clear(),this.domHighlighter.clearHover(),this.domHighlighter.showSelection(t.element,t.name),this.messages.send({type:"OBJECT_SELECTED",metadata:n,clickX:e.clientX,clickY:e.clientY}),void this.log(`Selected HUD: ${t.name}`)}this.isDomSelection=!1,this.domHighlighter.clearSelection();const n=this.findObjectsAt(e.clientX,e.clientY);if(n.length>0){const t=n[0];this.selectedObject=t.obj;const r=this.getObjectMetadata(t.obj),i=this.getCanvas(),o=i?this.getObjectBounds(t.obj):null,s=!!(o&&o.width>0&&o.height>0),a=async n=>{const i=await this.enrichMetadata(t.obj,r);this.messages.send({type:"OBJECT_SELECTED",metadata:i,clickX:e.clientX,clickY:e.clientY,screenshot:n}),this.log(`Selected: ${i.type}`)};if(i&&s&&this.needsRafCapture(i))window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!1),this.scheduleFrame(()=>{let e;try{e=this.captureObjectScreenshot(i,o)}catch{}finally{window.__GAME_STATE__&&(window.__GAME_STATE__.isPaused=!0)}a(e)});else{const e=i&&s?this.captureObjectScreenshot(i,o):void 0;a(e)}}else this.selectedObject=null,this.messages.send({type:"OBJECT_DESELECTED"});this.renderOverlay()}handleMouseMove(e){if(!this.isPaused)return;e.stopPropagation();const t=performance.now();if(t-this.lastMouseMoveTime<32)return;this.lastMouseMoveTime=t;const n=this.getCanvas(),r=this.domInspector.findComponentAt(e.clientX,e.clientY);if(r){this.hoveredObject=r.element,this.domHighlighter.clearHover();return this.isDomSelection&&this.selectedObject===r.element||this.domHighlighter.showHover(r.element,r.name),document.body.style.cursor="pointer",void(this.isDomSelection||this.canvasHighlighter.clear())}this.domHighlighter.clearHover();const i=this.findObjectsAt(e.clientX,e.clientY);i.length>0?(this.hoveredObject=i[0].obj,n&&(n.style.cursor="pointer"),document.body.style.cursor="pointer"):(this.hoveredObject=null,n&&(n.style.cursor="default"),document.body.style.cursor="default"),this.renderOverlay()}handleMouseOut(e){this.isPaused&&null===e.relatedTarget&&(this.domHighlighter.clearHover(),this.hoveredObject=null,this.canvasHighlighter.clear(),this.renderOverlay())}handleKeyDown(e){this.isPaused&&(e.stopPropagation(),e.preventDefault(),"Escape"===e.key&&this.selectedObject&&(this.selectedObject=null,this.isDomSelection=!1,this.domHighlighter.clear(),this.messages.send({type:"OBJECT_DESELECTED"}),this.renderOverlay()))}showInitOverlay(){this.hideInitOverlay();const e=document.querySelector(".funpixel-shell")||document.body,t=document.createElement("div");t.id="funpixel-inspector-init",t.style.cssText="\n position: absolute;\n inset: 0;\n z-index: 100000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(10, 10, 15, 0.35);\n backdrop-filter: blur(1px);\n -webkit-backdrop-filter: blur(1px);\n transition: opacity 0.2s ease;\n opacity: 1;\n ";const n=document.createElement("div");n.style.cssText="\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 20px;\n background: rgba(18, 18, 26, 0.92);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 24px;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4), 0 0 40px rgba(0, 240, 255, 0.08);\n color: rgba(255, 255, 255, 0.65);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 12px;\n font-weight: 500;\n ";const r=document.createElement("div");if(r.innerHTML='<div class="funpixel-morph-logo" style="width:24px;height:24px">\n <svg class="funpixel-morph-logo__ring" viewBox="0 0 512 512" fill="none"><path d="M 256 460 C 245 450, 120 380, 80 300 C 45 230, 55 145, 100 105 C 145 65, 200 75, 230 100 C 248 115, 254 140, 256 160 C 258 140, 264 115, 282 100 C 312 75, 367 65, 412 105 C 457 145, 467 230, 432 300 C 392 380, 267 450, 256 460 Z" fill="none" stroke="#00f0ff" stroke-width="3"/></svg>\n <svg class="funpixel-morph-logo__ring funpixel-morph-logo__ring--delayed" viewBox="0 0 512 512" fill="none"><path d="M 256 460 C 245 450, 120 380, 80 300 C 45 230, 55 145, 100 105 C 145 65, 200 75, 230 100 C 248 115, 254 140, 256 160 C 258 140, 264 115, 282 100 C 312 75, 367 65, 412 105 C 457 145, 467 230, 432 300 C 392 380, 267 450, 256 460 Z" fill="none" stroke="#00f0ff" stroke-width="3"/></svg>\n <svg class="funpixel-morph-logo__svg" viewBox="0 0 512 512" fill="none">\n <path class="funpixel-morph-logo__body" d="M 256 325 C 244 335, 204 380, 170 365 C 125 340, 92 300, 92 245 C 92 175, 115 140, 165 140 C 210 140, 240 140, 256 140 C 272 140, 302 140, 347 140 C 397 140, 420 175, 420 245 C 420 300, 387 340, 342 365 C 308 380, 268 335, 256 325 Z" fill="#00f0ff"/>\n <g class="funpixel-morph-logo__eye-left"><rect x="145" y="190" width="16" height="56" rx="3" fill="rgba(0,0,0,0.45)"/><rect x="125" y="210" width="56" height="16" rx="3" fill="rgba(0,0,0,0.45)"/></g>\n <path class="funpixel-morph-logo__eye-right" d="M320 198 L362 223 L320 248 Z" fill="rgba(0,0,0,0.45)" stroke="rgba(0,0,0,0.45)" stroke-width="8" stroke-linejoin="round"/>\n <path class="funpixel-morph-logo__smile" d="M 188 280 Q 244 325, 300 280" stroke="rgba(0,0,0,0.45)" stroke-width="14" stroke-linecap="round" fill="none"/>\n </svg>\n </div>',!document.getElementById("funpixel-morph-style")){const e=document.createElement("style");e.id="funpixel-morph-style",e.textContent='\n .funpixel-morph-logo { position: relative; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n .funpixel-morph-logo__svg { width: 100%; height: 100%; position: relative; z-index: 2; overflow: visible; filter: drop-shadow(0 0 4px rgba(0,240,255,0.3)); }\n .funpixel-morph-logo__ring { position: absolute; top: 50%; left: 50%; width: 110%; height: 110%; transform: translate(-50%,-50%) scale(1); opacity: 0; pointer-events: none; z-index: 1; overflow: visible; animation: funpixel-morph-ring 10s ease-out infinite; }\n .funpixel-morph-logo__ring--delayed { animation-delay: 0.4s; }\n .funpixel-morph-logo__body { animation: funpixel-morph-body 10s ease-in-out infinite; }\n .funpixel-morph-logo__smile { animation: funpixel-morph-smile 10s ease-in-out infinite; }\n .funpixel-morph-logo__eye-left { animation: funpixel-morph-eyeL 10s ease-in-out infinite; }\n .funpixel-morph-logo__eye-right { animation: funpixel-morph-eyeR 10s ease-in-out infinite; }\n @keyframes funpixel-morph-body {\n 0%,25% { d: path("M 256 325 C 244 335, 204 380, 170 365 C 125 340, 92 300, 92 245 C 92 175, 115 140, 165 140 C 210 140, 240 140, 256 140 C 272 140, 302 140, 347 140 C 397 140, 420 175, 420 245 C 420 300, 387 340, 342 365 C 308 380, 268 335, 256 325 Z"); }\n 40%,60% { d: path("M 256 460 C 245 450, 120 380, 80 300 C 45 230, 55 145, 100 105 C 145 65, 200 75, 230 100 C 248 115, 254 140, 256 160 C 258 140, 264 115, 282 100 C 312 75, 367 65, 412 105 C 457 145, 467 230, 432 300 C 392 380, 267 450, 256 460 Z"); }\n 72% { d: path("M 256 328 C 244 338, 206 378, 172 362 C 122 338, 86 298, 86 245 C 86 172, 110 138, 162 138 C 208 138, 238 138, 256 138 C 274 138, 304 138, 350 138 C 402 138, 426 172, 426 245 C 426 298, 390 338, 340 362 C 306 378, 268 338, 256 328 Z"); }\n 78%,100% { d: path("M 256 325 C 244 335, 204 380, 170 365 C 125 340, 92 300, 92 245 C 92 175, 115 140, 165 140 C 210 140, 240 140, 256 140 C 272 140, 302 140, 347 140 C 397 140, 420 175, 420 245 C 420 300, 387 340, 342 365 C 308 380, 268 335, 256 325 Z"); }\n }\n @keyframes funpixel-morph-smile {\n 0%,25% { d: path("M 188 280 Q 244 325, 300 280"); }\n 40%,60% { d: path("M 160 330 Q 256 400, 352 330"); }\n 75%,100% { d: path("M 188 280 Q 244 325, 300 280"); }\n }\n @keyframes funpixel-morph-eyeL { 0%,25% { transform: translate(0,0); } 40%,60% { transform: translate(12px,-40px); } 75%,100% { transform: translate(0,0); } }\n @keyframes funpixel-morph-eyeR { 0%,25% { transform: translate(0,0); } 40%,60% { transform: translate(4px,-40px); } 75%,100% { transform: translate(0,0); } }\n @keyframes funpixel-morph-ring {\n 0%,42% { transform: translate(-50%,-50%) scale(1); opacity: 0; }\n 44% { transform: translate(-50%,-50%) scale(1); opacity: 0.3; }\n 65% { transform: translate(-50%,-50%) scale(1.6); opacity: 0; }\n 100% { transform: translate(-50%,-50%) scale(1.6); opacity: 0; }\n }\n ',document.head.appendChild(e)}n.appendChild(r),n.appendChild(document.createTextNode("Setting up inspector…")),t.appendChild(n),e.appendChild(t),this.initOverlay=t}hideInitOverlay(){const e=this.initOverlay;e&&(this.initOverlay=null,e.style.opacity="0",setTimeout(()=>e.remove(),200))}createInputShield(){this.removeInputShield();const e=document.querySelector(".funpixel-shell")||document.body,t=document.createElement("div");t.id="funpixel-inspector-shield",t.style.cssText="\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n z-index: 99998;\n cursor: crosshair;\n ",t.addEventListener("pointerdown",e=>{e.stopPropagation(),e.preventDefault()},!0),t.addEventListener("pointerup",e=>{e.stopPropagation(),e.preventDefault()},!0),t.addEventListener("touchstart",e=>{e.stopPropagation(),e.preventDefault()},{capture:!0,passive:!1}),t.addEventListener("touchmove",e=>{e.stopPropagation(),e.preventDefault()},{capture:!0,passive:!1}),t.addEventListener("touchend",e=>{e.stopPropagation(),e.preventDefault()},!0),t.addEventListener("mousedown",e=>{e.stopPropagation(),e.preventDefault()},!0),t.addEventListener("mouseup",e=>{e.stopPropagation(),e.preventDefault()},!0),t.addEventListener("contextmenu",e=>{e.stopPropagation(),e.preventDefault()},!0),e.appendChild(t),this.inputShield=t}removeInputShield(){this.inputShield&&(this.inputShield.remove(),this.inputShield=null)}renderOverlay(){const e=[],t=this.isDomSelection||this.selectedObject instanceof Element?null:this.selectedObject,n=this.hoveredObject instanceof Element?null:this.hoveredObject;if(t){const n=this.getObjectBounds(t);if(n){const r=this.getObjectMetadata(t);e.push({bounds:n,label:r.type||"Unknown",isSelected:!0})}}if(n&&n!==t){const t=this.getObjectBounds(n);if(t){const r=this.getObjectMetadata(n);e.push({bounds:t,label:r.type,isHovered:!0})}}this.canvasHighlighter.render(e)}exposeGlobalAPI(){window.__funpixelInspector={pause:()=>this.pause(),resume:()=>this.resume(),isPaused:()=>this.isPaused,getSelected:()=>this.selectedObject,getTracked:()=>this.tracker.objects,agent:{version:1,engine:this.engineType,ready:()=>this.sceneReady,at:(e,t,n=6)=>this.agentAt(e,t,n),named:(e,t=10)=>this.agentNamed(e,t),tree:()=>this.buildSceneTree(),errors:async()=>(await this.errorTracker.settled(),this.errorTracker.getErrors().map(e=>({...e}))),resolve:e=>this.sourceMapResolver.resolve(e)}}}async agentHit(e,t){const n="hud"===t?this.domInspector.getComponentMetadata(e,this.getCanvas()):this.getObjectMetadata(e),r=await this.enrichMetadata(e,n),i=e,o=[i.label,i.name,i.__n,r.type].find(e=>"string"==typeof e&&e)??r.type,s=function(e,t=24){if(!e||"object"!=typeof e||Array.isArray(e))return;const n=e=>"string"==typeof e?e.slice(0,200):"boolean"==typeof e||"number"==typeof e&&Number.isFinite(e)?e:void 0,r={};for(const[i,o]of Object.entries(e)){if(Object.keys(r).length>=t)break;const e=n(o);if(void 0===e){if(Array.isArray(o)&&o.length<=16){const e=o.map(n);e.every(e=>void 0!==e)&&(r[i]=e)}}else r[i]=e}return Object.keys(r).length?r:void 0}(i.userData);return s?{kind:t,name:o,metadata:r,data:s}:{kind:t,name:o,metadata:r}}async agentAt(e,t,n){const r=[],i=this.domInspector.findComponentAt(e,t);i&&r.push(await this.agentHit(i.element,"hud"));const o=new Set;for(const i of this.findObjectsAt(e,t)){if(r.length>=n)break;o.has(i.obj)||(o.add(i.obj),r.push(await this.agentHit(i.obj,"object")))}return r}async agentNamed(e,t){const n=e.toLowerCase(),r=[[],[],[]],i=new Set;this.forEachSceneObject(t=>{if(i.has(t))return;i.add(t);const o=t,s=[o.label,o.name].filter(e=>"string"==typeof e&&""!==e),a="string"==typeof o.__n?o.__n:"";s.includes(e)?r[0].push(t):a===e?r[1].push(t):[...s,a].some(e=>e&&e.toLowerCase().includes(n))&&r[2].push(t)});const o=r.flat().slice(0,t),s=[];for(const e of o)s.push(await this.agentHit(e,"object"));return s}async enrichMetadata(e,t){const n=e?.__src;if(!n)return t;if(null==t.sourceColumn&&(t.sourceColumn=n.c||null),!t.sourceFile)try{const e=new URL(n.f).pathname;t.sourceFile=e.split("/").pop()||e}catch{t.sourceFile=n.f}t.sourceLine||(t.sourceLine=n.l);try{const e=await this.sourceMapResolver.resolve(n);e&&(t.originalSource=e.source,t.originalLine=e.line,t.originalSourceLine=e.sourceLine||null)}catch{}return t}log(e,t="log"){(this.config.debug||"log"!==t)&&console[t](`[Funpixel Inspector] ${e}`)}destroy(){this.resume(),this.domHighlighter.remove(),this.errorTracker.destroy(),this.consoleLogTracker.destroy(),this.messages.destroy(),delete window.__funpixelInspector}}const K=e=>"string"==typeof e&&""!==e?e.slice(0,120):void 0;function Q(e){if(!e||"object"!=typeof e)return;const t=K(e.label)??K(e.source?.label)??function(e){if(!e||"object"!=typeof e)return;const t=e;return K(t.currentSrc)??K(t.src)}(e.source?.resource);return"EMPTY"===t?void 0:function(e){const t=K("string"==typeof e?e.trim():e);if(!t)return;if(/^(data|blob):/i.test(t))return"embedded";const n=t.split(/[?#]/)[0].replace(/\/+$/,""),r=n.slice(n.lastIndexOf("/")+1);if(r)try{return decodeURIComponent(r)}catch{return r}}(t)}function Z(e,t){const n=K(e?.label);if(n)return n;const r=e?.constructor?.name,i="string"==typeof r?r.replace(/^_+/,""):"";return i.length>2?i.slice(0,120):t}function ee(e){const t=e,n={};if(!t||"object"!=typeof t)return n;"boolean"==typeof t.visible&&(n.active=function(e,t){let n=e;for(let e=0;n&&e<64;e++,n=n.parent)if(!t(n))return!1;return!0}(t,e=>!0!==e.destroyed&&!1!==e.visible&&!1!==e.renderable));const r=function(e){if("number"==typeof e&&Number.isFinite(e))return"#"+(16777215&Math.trunc(e)).toString(16).padStart(6,"0")}(t.tint);r&&(n.tint=r);const i=Q(t.texture);i&&(n.texture=i);const o=[];if(Array.isArray(t.filters))for(const e of t.filters.slice(0,16)){if(!e||"object"!=typeof e)continue;const t=e.enabled;o.push("boolean"==typeof t?{name:Z(e,"Filter"),enabled:t}:{name:Z(e,"Filter")})}return t.mask&&"object"==typeof t.mask&&o.length<16&&o.push({name:"Mask"}),o.length&&(n.components=o),n}class te extends Y{engineType="pixi";app=null;stage=null;hooksInstalled=!1;constructor(e){super(e),this.init()}findObjectsAt(e,t){const n=this.findPixiApp();if(!n||!n.stage)return this.log("findObjectsAt: No PIXI app/stage found"),[];const r=this.getCanvas();if(!r)return this.log("findObjectsAt: No canvas found"),[];const i=r.getBoundingClientRect(),o=n.renderer?.resolution||1,s=(e-i.left)*(r.width/i.width)/o,a=(t-i.top)*(r.height/i.height)/o,l=[],c=r.width/o*(r.height/o),u=(e,t=0)=>{if(e.visible&&!(t>20)){if(e.children)for(let n=e.children.length-1;n>=0;n--)u(e.children[n],t+1);if(this.tracker.has(e)&&this.hitTest(e,s,a)){const n=this.getObjectBoundsInternal(e);if(!n)return;const r=n.width*n.height,i=this.detectLayerPriority(e,n,c);l.push({obj:e,layer:i,depth:t,area:r,zIndex:e.zIndex||0})}}};return u(n.stage,0),this.log(`findObjectsAt(${Math.round(s)},${Math.round(a)}): ${l.length} candidates from scene tree`),l.sort((e,t)=>{if(e.layer!==t.layer)return t.layer-e.layer;const n=e.zIndex||0,r=t.zIndex||0;if(n!==r)return r-n;const i=e.depth||0,o=t.depth||0;if(i!==o)return o-i;return(e.area||0)-(t.area||0)}),l}getObjectMetadata(e){const t=e,n=this.tracker.get(t);let r={x:0,y:0,width:0,height:0};try{const e=t.getBounds();r={x:e.x,y:e.y,width:e.width,height:e.height}}catch{}const i={x:t.position.x,y:t.position.y},o={rotation:t.rotation},s={x:t.scale.x,y:t.scale.y};return{type:t.label||n?.type||t.constructor.name,typeName:t.constructor.name,layer:this.detectLayerPriority(t,r,this.getCanvas()?.width||800*(this.getCanvas()?.height||600)),position:i,rotation:o,scale:s,alpha:t.alpha,visible:t.visible,childCount:t.children?.length||0,bounds:r,parentLabel:t.parent?.label||"Stage",sourceFile:n?.source?.file||null,sourceLine:n?.source?.line||null,sourceColumn:n?.source?.column||null,sourceLineRange:n?.source?.line?this.stackParser.getCodeRange(n.source.line):null,...ee(t)}}hookConstructors(){const e=this.tracker,t=this.stackParser,n=window.__FUNPIXEL_TRACK_BUFFER__;if(n&&Array.isArray(n)){for(const t of n)e.track(t.obj,t.type,null);this.log(`Drained ${n.length} buffered objects from early registration`),delete window.__FUNPIXEL_TRACK_BUFFER__}window.__FUNPIXEL_TRACK__=(n,r)=>{const i=t.parse();e.track(n,r,i)},void 0===window.PIXI||this.hooksInstalled||(this.hooksInstalled=!0,this.hookPixiConstructors(window.PIXI))}hookPixiConstructors(e){const t=this.tracker,n=this.stackParser,r=this.inferObjectType.bind(this);try{const i=Object.getOwnPropertyDescriptor(e,"Container");if(i&&!i.writable&&!i.configurable)return void this.log("PIXI module is frozen - relying on hooked bundle __FUNPIXEL_TRACK__ hooks");const o=e.Container;e.Container=function(...e){const i=Reflect.construct(o,e,new.target||o),s=n.parse();return t.track(i,r(i),s),i},e.Container.prototype=o.prototype,Object.setPrototypeOf(e.Container,o);const s=e.Sprite;e.Sprite=function(...e){const r=Reflect.construct(s,e,new.target||s),i=n.parse(),o=r.label||r.texture?.label||"sprite";return t.track(r,o,i),r},e.Sprite.prototype=s.prototype,Object.setPrototypeOf(e.Sprite,s);const a=e.Graphics;e.Graphics=function(...e){const r=Reflect.construct(a,e,new.target||a),i=n.parse();return t.track(r,r.label||"graphics",i),r},e.Graphics.prototype=a.prototype,Object.setPrototypeOf(e.Graphics,a);const l=e.Text;e.Text=function(...e){const r=Reflect.construct(l,e,new.target||l),i=n.parse();return t.track(r,r.label||"text",i),r},e.Text.prototype=l.prototype,Object.setPrototypeOf(e.Text,l);const c=e.AnimatedSprite;e.AnimatedSprite=function(...e){const r=Reflect.construct(c,e,new.target||c),i=n.parse();return t.track(r,r.label||"animated_sprite",i),r},e.AnimatedSprite.prototype=c.prototype,Object.setPrototypeOf(e.AnimatedSprite,c),this.log("PixiJS runtime hooks installed (fallback mode)")}catch(e){this.log(`Cannot hook PIXI constructors (frozen module): ${e}`,"warn")}}isSceneReady(){const e=this.findPixiApp();if(e&&e.stage)return!0;return!!this.findGameCanvas()}getCanvas(){return this.findGameCanvas()}getObjectBounds(e){return this.getObjectBoundsInternal(e)}buildSceneTree(){const e=this.findPixiApp();return e?.stage?this.buildNodeTree(e.stage,0):null}onSceneReady(){if(this.app=this.findPixiApp(),this.stage=this.app?.stage||null,this.stage){const e=this.retroactiveTrack(this.stage,0);e>0&&this.log(`Retroactively tracked ${e} scene objects`),this.log(`Stage ready: ${this.tracker.getCount()} tracked objects`)}else this.log("No explicit stage found, using canvas-based detection");super.onSceneReady()}retroactiveTrack(e,t){if(t>15)return 0;let n=0;if(!this.tracker.has(e)){const t=e.label||e.constructor?.name||"container";this.tracker.track(e,t,null),n++}if(e.children)for(const r of e.children)n+=this.retroactiveTrack(r,t+1);return n}tickerWasRunning=!1;pause(){const e=this.app||this.findPixiApp();e?.ticker&&(this.tickerWasRunning=e.ticker.started,this.tickerWasRunning&&(e.ticker.stop(),this.log("PIXI ticker stopped")));const t=e?.stage||this.stage;if(t){const e=this.retroactiveTrack(t,0);e>0&&this.log(`Tracked ${e} new objects at pause time`),this.log(`Total tracked: ${this.tracker.getCount()} objects`)}super.pause()}resume(){super.resume();const e=this.app||this.findPixiApp();e?.ticker&&this.tickerWasRunning&&(e.ticker.start(),this.log("PIXI ticker restarted"))}findPixiApp(){if(window.__PIXI_APP__)return window.__PIXI_APP__;const e=window;if(e.app&&this.isPixiApp(e.app))return e.app;if(e.game&&this.isPixiApp(e.game))return e.game;if(e.pixiApp&&this.isPixiApp(e.pixiApp))return e.pixiApp;if(window.PIXI){const e=window.PIXI;if(e.app&&this.isPixiApp(e.app))return e.app}for(const t in window)try{const n=e[t];if(n&&this.isPixiApp(n))return n}catch{}return null}isPixiApp(e){if(!e||"object"!=typeof e)return!1;const t=e;return!!(t.stage&&t.renderer&&t.ticker)}findGameCanvas(){const e=document.querySelectorAll("canvas");for(const t of e){const e=t;if(e.__pixi_app||e.__PIXI_APP__||t.getAttribute("data-pixi"))return t}return e[0]||null}hitTest(e,t,n){const r=this.getObjectBoundsInternal(e);return!!r&&(0!==r.width&&0!==r.height&&(t>=r.x&&t<=r.x+r.width&&n>=r.y&&n<=r.y+r.height))}getObjectBoundsInternal(e){try{if("function"==typeof e.getBounds){const t=e.getBounds();return{x:t.x,y:t.y,width:t.width,height:t.height}}}catch{}return null}detectLayerPriority(e,t,n){if("number"==typeof e.funpixelLayer)return e.funpixelLayer;const r=t.width*t.height;return r>.5*n?50:r<2e3?500:200}inferObjectType(e){if(e.label&&""!==e.label.trim())return e.label;if(e.parent?.label){const t=e.parent.label.toLowerCase();if(t.includes("player"))return"Player";if(t.includes("enemy"))return"Enemy";if(t.includes("car"))return"Car";if(t.includes("bot"))return"Bot"}return e.constructor.name}buildNodeTree(e,t){if(!e||t>15)return null;const n=[];if(e.children)for(const r of e.children){const e=this.buildNodeTree(r,t+1);e&&n.push(e)}return{name:e.label||e.constructor.name,type:e.constructor.name,children:n}}findObjectByName(e){const t=(this.app||this.findPixiApp())?.stage||this.stage;return t?this.resolveObject(e,t):null}forEachSceneObject(e){const t=(this.app||this.findPixiApp())?.stage,n=(t,r)=>{if(!(r>30)){e(t);for(const e of t.children||[])n(e,r+1)}};t&&n(t,0)}focusOnObject(e){const t=this.app||this.findPixiApp(),n=t?.stage||this.stage;if(!t||!n||"function"!=typeof t.renderer?.render)return void this.log("focusOnObject: pixi refs unavailable");const r=this.resolveObject(e,n);if(!r)return void this.log(`focusOnObject: "${e}" not found on stage`);const i=r.getBounds();if(!i||i.width<=0||i.height<=0)return void this.log(`focusOnObject: "${e}" has empty bounds`);const o=t.renderer.width,s=t.renderer.height,a=i.x+i.width/2,l=i.y+i.height/2,c=Math.min(.55*o/i.width,.55*s/i.height),u=n.scale.x||1,h=Math.max(.2,Math.min(u*c,3*u)),d=h/u,p=n.position.x,g=n.position.y,f={x:o/2-d*(a-p),y:s/2-d*(l-g)},m="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,y=(e,r,i)=>{n.position.x=e,n.position.y=r,n.scale.x=i,n.scale.y=i,t.renderer.render(n)};if(m)return void y(f.x,f.y,h);let v=0;const _=e=>{v||(v=e);const t=Math.min(1,(e-v)/420),n=(e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2)(t);y(p+(f.x-p)*n,g+(f.y-g)*n,u+(h-u)*n),t<1&&window.requestAnimationFrame(_)};window.requestAnimationFrame(_),this.log(`focusOnObject: framing "${r.label||r.name||r.constructor.name}"`)}resolveObject(e,t){const n=this.selectedObject;if(n&&"object"==typeof n&&"getBounds"in n&&(n.label===e||n.name===e))return n;let r=null;const i=t=>{if(!r)if(t.label!==e&&t.name!==e)for(const e of t.children)i(e);else r=t};return i(t),r}}if("undefined"!=typeof window&&!window.__FUNPIXEL_TRACK__){const e=[];window.__FUNPIXEL_TRACK_BUFFER__=e,window.__FUNPIXEL_TRACK__=(t,n)=>{e.push({obj:t,type:n})}}function ne(){new te({debug:!0})}return"loading"===document.readyState?document.addEventListener("DOMContentLoaded",ne):ne(),e.PixiInspector=te,e}({});
|