fix(app): 修复 AppController 安全与查询问题
- 加强异常处理、类型安全和图片上传校验 - 优化设备相关查询,避免重复访问数据源 - 补充并记录并发测试与审查修复实施计划
This commit is contained in:
280
tmp/hatch-pet/omen-cat/run/pet_request.json
Normal file
280
tmp/hatch-pet/omen-cat/run/pet_request.json
Normal file
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"pet_id": "youmiao",
|
||||
"display_name": "\u5e7d\u55b5",
|
||||
"description": "\u4e00\u53ea\u62ab\u7740\u6697\u7d2b\u5e7d\u5f71\u515c\u5e3d\u3001\u4ee5\u51b7\u9752\u9762\u7eb9\u89c2\u5bdf\u4efb\u52a1\u7684\u6c89\u9759\u732b\u5f62\u4f19\u4f34.",
|
||||
"created_at": "2026-07-16T06:34:52.627259+00:00",
|
||||
"sprite_version_number": 2,
|
||||
"atlas": {
|
||||
"columns": 8,
|
||||
"rows": 11,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"width": 1536,
|
||||
"height": 2288
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"state": "idle",
|
||||
"row": 0,
|
||||
"frames": 6,
|
||||
"purpose": "calm resting, breathing, and blinking loop"
|
||||
},
|
||||
{
|
||||
"state": "running-right",
|
||||
"row": 1,
|
||||
"frames": 8,
|
||||
"purpose": "rightward drag movement loop"
|
||||
},
|
||||
{
|
||||
"state": "running-left",
|
||||
"row": 2,
|
||||
"frames": 8,
|
||||
"purpose": "leftward drag movement loop"
|
||||
},
|
||||
{
|
||||
"state": "waving",
|
||||
"row": 3,
|
||||
"frames": 4,
|
||||
"purpose": "greeting or attention gesture"
|
||||
},
|
||||
{
|
||||
"state": "jumping",
|
||||
"row": 4,
|
||||
"frames": 5,
|
||||
"purpose": "hover or playful jump"
|
||||
},
|
||||
{
|
||||
"state": "failed",
|
||||
"row": 5,
|
||||
"frames": 8,
|
||||
"purpose": "blocked, failed, or cancelled reaction"
|
||||
},
|
||||
{
|
||||
"state": "waiting",
|
||||
"row": 6,
|
||||
"frames": 6,
|
||||
"purpose": "waiting for approval, help, or user input"
|
||||
},
|
||||
{
|
||||
"state": "running",
|
||||
"row": 7,
|
||||
"frames": 6,
|
||||
"purpose": "active task work or processing"
|
||||
},
|
||||
{
|
||||
"state": "review",
|
||||
"row": 8,
|
||||
"frames": 6,
|
||||
"purpose": "ready or completed output review"
|
||||
},
|
||||
{
|
||||
"state": "look-row-9",
|
||||
"row": 9,
|
||||
"frames": 8,
|
||||
"directions": [
|
||||
"000",
|
||||
"022.5",
|
||||
"045",
|
||||
"067.5",
|
||||
"090",
|
||||
"112.5",
|
||||
"135",
|
||||
"157.5"
|
||||
],
|
||||
"purpose": "clockwise look directions from up through down-right"
|
||||
},
|
||||
{
|
||||
"state": "look-row-10",
|
||||
"row": 10,
|
||||
"frames": 8,
|
||||
"directions": [
|
||||
"180",
|
||||
"202.5",
|
||||
"225",
|
||||
"247.5",
|
||||
"270",
|
||||
"292.5",
|
||||
"315",
|
||||
"337.5"
|
||||
],
|
||||
"purpose": "clockwise look directions from down through up-left"
|
||||
}
|
||||
],
|
||||
"layout_guides": [
|
||||
{
|
||||
"state": "idle",
|
||||
"path": "references\\layout-guides\\idle.png",
|
||||
"width": 1152,
|
||||
"height": 208,
|
||||
"frames": 6,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "running-right",
|
||||
"path": "references\\layout-guides\\running-right.png",
|
||||
"width": 1536,
|
||||
"height": 208,
|
||||
"frames": 8,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "running-left",
|
||||
"path": "references\\layout-guides\\running-left.png",
|
||||
"width": 1536,
|
||||
"height": 208,
|
||||
"frames": 8,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "waving",
|
||||
"path": "references\\layout-guides\\waving.png",
|
||||
"width": 768,
|
||||
"height": 208,
|
||||
"frames": 4,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "jumping",
|
||||
"path": "references\\layout-guides\\jumping.png",
|
||||
"width": 960,
|
||||
"height": 208,
|
||||
"frames": 5,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "failed",
|
||||
"path": "references\\layout-guides\\failed.png",
|
||||
"width": 1536,
|
||||
"height": 208,
|
||||
"frames": 8,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "waiting",
|
||||
"path": "references\\layout-guides\\waiting.png",
|
||||
"width": 1152,
|
||||
"height": 208,
|
||||
"frames": 6,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "running",
|
||||
"path": "references\\layout-guides\\running.png",
|
||||
"width": 1152,
|
||||
"height": 208,
|
||||
"frames": 6,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "review",
|
||||
"path": "references\\layout-guides\\review.png",
|
||||
"width": 1152,
|
||||
"height": 208,
|
||||
"frames": 6,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "look-row-9",
|
||||
"path": "references\\layout-guides\\look-row-9.png",
|
||||
"width": 1536,
|
||||
"height": 208,
|
||||
"frames": 8,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "look-row-10",
|
||||
"path": "references\\layout-guides\\look-row-10.png",
|
||||
"width": 1536,
|
||||
"height": 208,
|
||||
"frames": 8,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
},
|
||||
{
|
||||
"state": "look-cardinals",
|
||||
"path": "references\\layout-guides\\look-cardinals.png",
|
||||
"width": 768,
|
||||
"height": 208,
|
||||
"frames": 4,
|
||||
"cell_width": 192,
|
||||
"cell_height": 208,
|
||||
"safe_margin_x": 18,
|
||||
"safe_margin_y": 16,
|
||||
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
|
||||
}
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\run\\references\\reference-01.png",
|
||||
"width": 364,
|
||||
"height": 354,
|
||||
"mode": "RGB",
|
||||
"format": "PNG",
|
||||
"source_path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\reference\\omen-cat-source.png",
|
||||
"copied_path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\run\\references\\reference-01.png"
|
||||
}
|
||||
],
|
||||
"chroma_key": {
|
||||
"hex": "#FFFF00",
|
||||
"rgb": [
|
||||
255,
|
||||
255,
|
||||
0
|
||||
],
|
||||
"name": "yellow",
|
||||
"selection": "auto",
|
||||
"score": 217.85
|
||||
},
|
||||
"pet_notes": "Dark Omen-inspired cartoon cat; oversized angular purple cat-eared hood; black void face with three cyan energy marks; compact feline body; broad charcoal armor and bandage wraps; long attached tail; no weapons, logos, text, scenery, shadows, smoke, particles, detached effects, blur, or bloom",
|
||||
"style_preset": "flat-vector",
|
||||
"style_notes": "Dark flat illustration with restrained cel shading, broad readable armor shapes, crisp opaque cyan marks, compact sprite-safe silhouette",
|
||||
"style_contract": "Pet-safe sprite: compact full-body mascot, readable in a 192x208 cell, clear silhouette, simple face, stable palette/materials, and crisp edges for chroma-key extraction. Style `flat-vector`: Flat vector-style mascot with simple geometric forms, crisp color areas, clean outline, and minimal shading. User style notes: Dark flat illustration with restrained cel shading, broad readable armor shapes, crisp opaque cyan marks, compact sprite-safe silhouette.",
|
||||
"brand_name": "",
|
||||
"brand_brief": "",
|
||||
"brand_sources": [],
|
||||
"pet_safe_style": "Pet-safe sprite: compact full-body mascot, readable in a 192x208 cell, clear silhouette, simple face, stable palette/materials, and crisp edges for chroma-key extraction.",
|
||||
"primary_generation_skill": "$imagegen"
|
||||
}
|
||||
Reference in New Issue
Block a user