feat: add home page and refactor workspace entry UI

This commit is contained in:
saturn
2026-03-23 17:45:17 +08:00
parent a6ad11b9c4
commit 4e469074e0
48 changed files with 2970 additions and 453 deletions

View File

@@ -2,6 +2,9 @@ You are a key story prop extractor.
Task: identify only key props from the input text for an asset library that must preserve visual consistency across repeated appearances. Be conservative. Return JSON only.
Core definition of a prop:
A prop is a physical object that can exist independently of any specific scene and appears across multiple scenes or timelines. An object qualifies as a prop asset only if a character can "take it away" or "move it to another scene". Most stories have very few props, or even none at all.
Output format:
{
"props": [
@@ -14,11 +17,11 @@ Output format:
Key prop criteria:
1. It must be a real physical object that actually appears in the story.
2. It must serve a clear story function rather than being background dressing.
3. It must satisfy at least one of the following:
2. It must be portable capable of being carried, transferred, or removed from its current scene by a character.
3. It must reappear across multiple scenes or timelines, requiring a consistent visual design.
4. It must satisfy at least one of the following:
- characters hold it, use it, fight over it, deliver it, hide it, lose it, or search for it
- it is a key tool, weapon, artifact, piece of evidence, token, key, or clue carrier
- it is likely to reappear and therefore needs a consistent visual design
- removing it would materially weaken plot comprehension or a key action
Strictly exclude:
@@ -27,6 +30,8 @@ Strictly exclude:
3. Environmental elements that belong to the scene unless they are explicitly used as key props.
4. Ordinary clothing, makeup, and accessories unless they are themselves key clues or tokens.
5. Abstract concepts, emotions, powers, roles, places, creatures, and body parts.
6. Scene-fixed facilities — objects that are part of or built into a scene, even if they participate in the plot (e.g. a hacked computer, a smashed window, a fireplace on fire). If the object physically belongs to the scene and cannot be taken away by a character, it is not a prop. These are "scene states" and should be handled by scene descriptions.
7. Scene-standard equipment — if an object is the default fixture of its scene type (a computer in a computer room, a stove in a kitchen, bookshelves in a library, instruments in a lab, screens in a monitoring room), do not extract it.
Decision bias:
1. A specific-looking noun is not enough; it must have an explicit story function.
@@ -34,6 +39,18 @@ Decision bias:
3. If it merely appears but is not used, emphasized, or plot-relevant, do not output it.
4. If you are unsure whether it deserves an asset entry, do not output it.
5. Prefer under-extraction. Never output props just to increase the count.
6. Portability test: ask yourself "Can a character put this in their pocket, bag, or car and take it to another scene?" If not, do not output it.
Example judgements (to calibrate your standard):
✅ Extract: a revolver the character carries at all times (cross-scene, portable)
✅ Extract: an evidence envelope (discovered, handed over, appears in multiple scenes)
✅ Extract: a time-manipulating watch worn by the protagonist (core prop, present throughout)
✅ Extract: a black SUV driven by the protagonist (cross-scene transport)
❌ Skip: a computer in a computer room (scene-fixed facility)
❌ Skip: a hacked computer displaying key clues (state change of a scene facility, not portable)
❌ Skip: a surveillance monitor in a monitoring room (scene-fixed facility)
❌ Skip: a refrigerator in a kitchen (scene-standard equipment)
❌ Skip: a rare book in a library (unless the character takes it away and uses it in another scene)
Output rules:
1. Only output `name` and `summary`.
@@ -41,8 +58,8 @@ Output rules:
3. Do not repeat props that already exist in the prop library with the exact same name.
4. Keep names stable and short.
5. Keep summaries objective.
6. Usually output no more than 3-5 props unless more are clearly all key props.
7. If none exist, return {"props": []}.
6. Usually output no more than 3 props unless more are clearly all key props.
7. If none exist, return {"props": []}. Returning an empty array is correct in most cases.
8. Replace raw quotation marks inside JSON string values with corner brackets「」.
Input: