[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GKC8RG4MBEZXJGTK7RP8RK":3,"skill-same:01M6GKC8RG4MBEZXJGTK7RP8RK":113},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6GKC8RG4MBEZXJGTK7RP8RK","litestar",null,"Use when building, reviewing, or debugging a Litestar app — handlers, controllers\u002Frouters, dependency injection, DTOs, middleware, lifecycle hooks, templating, static files, websockets, or testing. Triggers on: \"Litestar\", an app that fails at startup after adding a handler or moving imports behind `TYPE_CHECKING`, sync-handler thread warnings, custom 404\u002F405 handlers that never fire, `Provide`\u002F`Dependency` wiring, or DTO configuration. Not a source of truth for generic FastAPI\u002FStarlette guidance or deep ORM internals.","dekoza\u002Foh-my-slop","dekoza","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F210980?v=4","01M6GK5KFK2SJQ364J2SR2P57S","Dominik Kozaczko","01M6GK5KP5PAA51JVTXYXHN66N",4,"Unlicense","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"hooks","middleware","type","app","triggers","dependency injection","deep","guidance","files","testing","dependency","never","use","fastapi","orm","lifecycle","startup","debugging","sync","2026-11-10 10:12:30",false,"---\nname: litestar\ndescription: >\n  Use when building, reviewing, or debugging a Litestar app — handlers,\n  controllers\u002Frouters, dependency injection, DTOs, middleware, lifecycle hooks,\n  templating, static files, websockets, or testing. Triggers on: \"Litestar\", an app\n  that fails at startup after adding a handler or moving imports behind\n  `TYPE_CHECKING`, sync-handler thread warnings, custom 404\u002F405 handlers that never\n  fire, `Provide`\u002F`Dependency` wiring, or DTO configuration. Not a source of truth\n  for generic FastAPI\u002FStarlette guidance or deep ORM internals.\n---\n\n# Litestar Framework Reference\n\nUse this skill for core Litestar framework implementation and integration: application structure, layered configuration, handlers, requests, dependency injection, DTOs, middleware, lifecycle hooks, exceptions, templating, static files, testing, websockets, and guards. Open the single best reference file from the routing table, add a second only when the task clearly crosses domains, and implement with verified Litestar patterns, not generic ASGI guesses.\n\n## Critical Rules\n\n1. **Use semantic HTTP decorators** - Prefer `@get`, `@post`, `@put`, `@patch`, `@delete`, not `@route()`, unless multi-method handling is truly required.\n2. **Annotate everything** - Litestar requires full argument and return type annotations for handlers. Missing annotations fail app startup.\n3. **Keep runtime types available** - Handler and dependency annotations are inspected at runtime. `TYPE_CHECKING`-only imports can break signature parsing unless you provide `signature_types` or `signature_namespace`.\n4. **Decide sync execution explicitly** - Synchronous handlers and dependencies should set `sync_to_thread=True` for blocking work or `False` for safe non-blocking work. Implicit sync raises warnings.\n5. **Respect layer precedence** - For layered settings, the closest layer to the handler wins. Guards are the exception: they accumulate.\n6. **Middleware order is deterministic** - Middleware executes app -> router -> controller -> handler, left to right within each layer.\n7. **Dependency keys must match kwargs** - Dependency dictionary keys and injected parameter names must match exactly, and scope is limited to the declaring layer.\n8. **Yield dependencies clean up before send** - Cleanup runs after the handler returns but before the HTTP response is sent. Cleanup failures are re-raised later as `ExceptionGroup`.\n9. **Request body defaults to JSON** - For forms, multipart, or MessagePack, annotate `data` with `Body(media_type=...)`. File uploads should use `UploadFile`.\n10. **404 and 405 are app-layer concerns** - Litestar raises router-generated `404 Not Found` and `405 Method Not Allowed` *before* the normal middleware stack and lower-layer exception handlers are called. Handle them at the app layer, and when explaining them, state that timing directly instead of stopping at consequences like \"controller middleware does not see them.\"\n11. **Websocket dependencies are connection-scoped** - Listener and stream dependencies are evaluated for the connection lifetime, not per message. Do not hold scarce resources for long-lived streams.\n12. **Use current static-files API** - Prefer `create_static_files_router()`. `StaticFilesConfig` is deprecated in current docs.\n\n## When Not To Use This Skill\n\n- **Generic FastAPI or Starlette advice** - Do not treat Litestar as a drop-in alias. Handler signatures, DI, DTOs, layering, and websockets differ in important ways.\n- **ORM-specific implementation details** - For deep SQLAlchemy, Piccolo, or repository-plugin behavior, use the relevant integration docs or project-specific skill.\n- **HTMX attribute semantics** - Litestar covers HTMX integration points, not full `hx-*` behavior. For swap, trigger, and attribute rules, load `@htmx`.\n- **Project business rules** - For app-specific architecture, load the project's custom skill.\n\n## Task Routing\n\nAll files live in `references\u002F`. Add the secondary reference only when the task genuinely spans both domains.\n\n| Task | Primary | Secondary |\n|------|---------|-----------|\n| Creating `Litestar(...)`, routers, controllers, app state, lifespan, or layered config | `architecture-layers.md` | — |\n| Building HTTP handlers, path params, request parsing, uploads, or custom requests | `handlers-requests.md` | — |\n| Implementing DI, `Provide`, `Dependency`, or DTO configuration | `dependencies-dto.md` | — |\n| Adding middleware, lifecycle hooks, or exception handlers | `middleware-hooks-errors.md` | — |\n| Building websocket listeners, streams, or Litestar tests | `websockets-testing.md` | — |\n| Rendering templates or serving static files | `templating-static.md` | — |\n| HTMX plugin usage, template engine extras, or framework boundary questions | `integrations.md` | — |\n| Multipart upload endpoint with DTO or dependency validation | `handlers-requests.md` | `dependencies-dto.md` |\n| Custom error handling that fails for 404 or 405 | `middleware-hooks-errors.md` | `architecture-layers.md` |\n| HTMX partial rendering in a Litestar app | `integrations.md` | `templating-static.md` |\n| Websocket endpoint with auth or connection-scoped resources | `websockets-testing.md` | `dependencies-dto.md` |\n| Startup failure after `TYPE_CHECKING` imports or forward refs | `handlers-requests.md` | `architecture-layers.md` |\n| Warnings or confusion around sync handlers and thread offloading | `handlers-requests.md` | `architecture-layers.md` |\n| Cross-cutting routing help | `REFERENCE.md` | — |\n\n## Output Expectations\n\n- Name the reference files used and call out the Litestar rules that matter for the change.\n- State the minimum verification steps: tests, startup validation, request or websocket checks, or OpenAPI checks.\n- If runtime annotation availability or `sync_to_thread` behavior is part of the issue, say that explicitly instead of giving generic Python advice.\n- Flag any 2.x vs 3.0 transition or deprecation risk if it affects the task.\n","# Litestar Framework Reference\n\nUse this skill for core Litestar framework implementation and integration: application structure, layered configuration, handlers, requests, dependency injection, DTOs, middleware, lifecycle hooks, exceptions, templating, static files, testing, websockets, and guards. Open the single best reference file from the routing table, add a second only when the task clearly crosses domains, and implement with verified Litestar patterns, not generic ASGI guesses.\n\n## Critical Rules\n\n1. **Use semantic HTTP decorators** - Prefer `@get`, `@post`, `@put`, `@patch`, `@delete`, not `@route()`, unless multi-method handling is truly required.\n2. **Annotate everything** - Litestar requires full argument and return type annotations for handlers. Missing annotations fail app startup.\n3. **Keep runtime types available** - Handler and dependency annotations are inspected at runtime. `TYPE_CHECKING`-only imports can break signature parsing unless you provide `signature_types` or `signature_namespace`.\n4. **Decide sync execution explicitly** - Synchronous handlers and dependencies should set `sync_to_thread=True` for blocking work or `False` for safe non-blocking work. Implicit sync raises warnings.\n5. **Respect layer precedence** - For layered settings, the closest layer to the handler wins. Guards are the exception: they accumulate.\n6. **Middleware order is deterministic** - Middleware executes app -> router -> controller -> handler, left to right within each layer.\n7. **Dependency keys must match kwargs** - Dependency dictionary keys and injected parameter names must match exactly, and scope is limited to the declaring layer.\n8. **Yield dependencies clean up before send** - Cleanup runs after the handler returns but before the HTTP response is sent. Cleanup failures are re-raised later as `ExceptionGroup`.\n9. **Request body defaults to JSON** - For forms, multipart, or MessagePack, annotate `data` with `Body(media_type=...)`. File uploads should use `UploadFile`.\n10. **404 and 405 are app-layer concerns** - Litestar raises router-generated `404 Not Found` and `405 Method Not Allowed` *before* the normal middleware stack and lower-layer exception handlers are called. Handle them at the app layer, and when explaining them, state that timing directly instead of stopping at consequences like \"controller middleware does not see them.\"\n11. **Websocket dependencies are connection-scoped** - Listener and stream dependencies are evaluated for the connection lifetime, not per message. Do not hold scarce resources for long-lived streams.\n12. **Use current static-files API** - Prefer `create_static_files_router()`. `StaticFilesConfig` is deprecated in current docs.\n\n## When Not To Use This Skill\n\n- **Generic FastAPI or Starlette advice** - Do not treat Litestar as a drop-in alias. Handler signatures, DI, DTOs, layering, and websockets differ in important ways.\n- **ORM-specific implementation details** - For deep SQLAlchemy, Piccolo, or repository-plugin behavior, use the relevant integration docs or project-specific skill.\n- **HTMX attribute semantics** - Litestar covers HTMX integration points, not full `hx-*` behavior. For swap, trigger, and attribute rules, load `@htmx`.\n- **Project business rules** - For app-specific architecture, load the project's custom skill.\n\n## Task Routing\n\nAll files live in `references\u002F`. Add the secondary reference only when the task genuinely spans both domains.\n\n| Task | Primary | Secondary |\n|------|---------|-----------|\n| Creating `Litestar(...)`, routers, controllers, app state, lifespan, or layered config | `architecture-layers.md` | — |\n| Building HTTP handlers, path params, request parsing, uploads, or custom requests | `handlers-requests.md` | — |\n| Implementing DI, `Provide`, `Dependency`, or DTO configuration | `dependencies-dto.md` | — |\n| Adding middleware, lifecycle hooks, or exception handlers | `middleware-hooks-errors.md` | — |\n| Building websocket listeners, streams, or Litestar tests | `websockets-testing.md` | — |\n| Rendering templates or serving static files | `templating-static.md` | — |\n| HTMX plugin usage, template engine extras, or framework boundary questions | `integrations.md` | — |\n| Multipart upload endpoint with DTO or dependency validation | `handlers-requests.md` | `dependencies-dto.md` |\n| Custom error handling that fails for 404 or 405 | `middleware-hooks-errors.md` | `architecture-layers.md` |\n| HTMX partial rendering in a Litestar app | `integrations.md` | `templating-static.md` |\n| Websocket endpoint with auth or connection-scoped resources | `websockets-testing.md` | `dependencies-dto.md` |\n| Startup failure after `TYPE_CHECKING` imports or forward refs | `handlers-requests.md` | `architecture-layers.md` |\n| Warnings or confusion around sync handlers and thread offloading | `handlers-requests.md` | `architecture-layers.md` |\n| Cross-cutting routing help | `REFERENCE.md` | — |\n\n## Output Expectations\n\n- Name the reference files used and call out the Litestar rules that matter for the change.\n- State the minimum verification steps: tests, startup validation, request or websocket checks, or OpenAPI checks.\n- If runtime annotation availability or `sync_to_thread` behavior is part of the issue, say that explicitly instead of giving generic Python advice.\n- Flag any 2.x vs 3.0 transition or deprecation risk if it affects the task.\n",{"name":5,"description":7},"main","8c687fa2c077e1cd3ff8e5b2912c28fd443bc675","skills\u002Freference\u002Flitestar",0,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop","https:\u002F\u002Fgithub.com\u002Fdekoza","https:\u002F\u002Fqoto.org\u002F@minder","Plz send BTC: 32UQpSVbcYXdfZnbyPuPvYi7rXvHcueqi1","2026-10-28 00:52:41",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add dekoza\u002Foh-my-slop --skill litestar",{"tool":63,"command":64},"bunx","bunx skills add dekoza\u002Foh-my-slop --skill litestar",{"tool":66,"command":67},"pnpm","pnpm dlx skills add dekoza\u002Foh-my-slop --skill litestar","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002FSKILL.md",true,[71,77,81,85,89,93,97,101,105,109],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"evals\u002Fevals.json","REFERENCE","参考文档",4240,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Fevals\u002Fevals.json",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"evals\u002Ftrigger-evals.json",4559,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Fevals\u002Ftrigger-evals.json",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Farchitecture-layers.md",7795,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Farchitecture-layers.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fdependencies-dto.md",9113,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Fdependencies-dto.md",{"path":90,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Fhandlers-requests.md",8208,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Fhandlers-requests.md",{"path":94,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fintegrations.md",4715,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Fintegrations.md",{"path":98,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fmiddleware-hooks-errors.md",7866,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Fmiddleware-hooks-errors.md",{"path":102,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002FREFERENCE.md",3454,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002FREFERENCE.md",{"path":106,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Ftemplating-static.md",6144,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Ftemplating-static.md",{"path":110,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fwebsockets-testing.md",8756,"https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Freference\u002Flitestar\u002Freferences\u002Fwebsockets-testing.md",[114,139,159,176,190,214],{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":43},"01M6GKGSV5GC23S7CZ8XMXQF7C","wizard","Generate an interactive bash wizard that walks a human through a manual procedure — third-party setup, credential provisioning, a one-off migration — opening URLs, capturing values, confirming each step, and writing .env files and CI secrets (GitHub and Gitea\u002FForgejo Actions).","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fwizard\u002FSKILL.md",[],[116,121,122,123,124,125,126,127,128,32,129,130,131,132,133,134,135,136,137,138],"true","interactive","manual","gitea","env","third-party","human","credential","migration","Bash","secrets","provisioning","ci","actions","generate","setup","github","writing",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":143,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":147,"publishedAt":43},"01M6GKFC9YYQ4CC6N7YAW7BWW1","restore-test-pyramid","Analyze the project's E2E suite and push every assertion that doesn't need a real browser down to a faster integration or unit test, proving each migration honest before thinning E2E.","MIT","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Frestore-test-pyramid\u002FSKILL.md",[146],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[148,149,150,151,152,129,153,154,155,156,157,158,121],"restore test pyramid","test","restore","real browser","analyze","push","project","unit","e2e","integration","browser",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":43},"01M6GKEW0YH8ZSSN1PT543TDNZ","ponytail-debt","Harvest SHORTCUT markers from the codebase and report them grouped by file, flagging any missing upgrade paths.","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fponytail-debt\u002FSKILL.md",[],[166,167,168,121,169,170,171,172,173,174,175],"ponytail","ponytail debt","missing","shortcut","paths","markers","upgrade","file","report","harvest",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":143,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":43},"01M6GKE8R93K0Z9XCM0MVCMS82","humanify","Repair an inherited or human-blocked ticket for agent implementation, or finish its explicit human-only outcome.","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fhumanify\u002FSKILL.md",[],[178,183,121,184,185,186,127,187,188,189],"finish","ticket","agent implementation","repair","implementation","only","outcome",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":143,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":43},"01M6GKDQYP2QQZCVE34AAJW7KC","fix-pr","Repair an existing pull request's review findings and target-branch conflicts, verify the result, and update the same open PR.","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ffix-pr\u002FSKILL.md",[],[197,198,199,33,200,201,202,203,204,205,206,207,208,209,121,210,211,186,212,213],"pr","fix","fix pr","open","verify","pull","update","pull request","merge","workflow","tdd","review","branch","merge-conflicts","review findings","conflicts","discipline",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":43},"01M6GKDMR2V617S1V8APDT4R2B","feature-milestones","Reconstruct a fragmented backlog as finishable feature milestones with explicit delivery boundaries and an approval-gated tracker update.","https:\u002F\u002Fgithub.com\u002Fdekoza\u002Foh-my-slop\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ffeature-milestones\u002FSKILL.md",[],[221,222,203,121,223,224,225,226,227,228,229],"feature","feature milestones","with","as","delivery","backlog","gated","tracker","approval"]