74d68261df
Adds a 'character' subsystem for reusable prompt fragments stored as YAML lists in ~/.local/share/tensors/characters/<name>.yml. New tensors.characters module: - save_character / load_character / list_characters / delete_character - parse_elements + resolve_character (named + inline merge with dedup) - Path-traversal-safe name validation ([A-Za-z0-9_.-]+) - JSON-encoded YAML scalars on write; tolerant reader (JSON, single-quoted YAML, bare) New CLI: - tsr character save -o <name> 'elem1, elem2, ...' - tsr character list / show / delete Wired into generate + template + style-sweep: - tsr generate -C <name> / --character-prompt 'elems' injects character elements into the positive prompt (after quality_prefix, before user prompt) - tsr template -C <name> / --character-prompt 'elems' embeds a 'character' list field in the dumped JSON template (named + inline merged, deduped) - style-sweep templates accept 'character' (str|list) and 'character_prompt' keys; lists are passed through verbatim, names are looked up at run-time - generate --input JSON honors both 'character' (str=name or list=inline) and 'character_prompt' keys 37 new tests cover module behavior. Bumps version to 0.1.23.