From 61d01984ba727e79164eac24921b8a741b826e55 Mon Sep 17 00:00:00 2001 From: veguAI <152010387+vegu-ai-tools@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:26:12 +0300 Subject: [PATCH] 0.30.0 (#184) * pytorch update * github workflow for tests * tests set up config * tests download nltk punkt * punkt_tab * fix world state not updating on new initial scene load * fix new character creation from scene tools * py 312 py 313 support remove unreliant cuda detection and just lock poetry with cuda * fix tests * dont auto install cuda * remove unused StrEnum import * separate cuda install * fix auto progress OFF no longer working * fix debug logging options not sticking * disable revision during image prompt generation * prompt tweaks * prompt tweaks * fix some issues with directed character creation * tweak the continue generation button so its less prone to pop into a new line on itsown * fix context db filter field layout * handle error when trying to regnerate passthrough narrator message * prompt tweaks * increase auto direct evaluation length * fix node library on windows * auto direct eval tweaks * prompt tweaks * prompt tweaks * allow updationg of scene phase through director console * add generate action to director console phase intent text fields * prompt tweaks * track iteration count in scene loop always yield to user at initial start / load of a scene * fix issue with Split and Join nodes when passed \n as delimiter * sim suite only generate auto direct requirements if auto direct is enabled sim suite fix issues with title generation * autocomplete button disable until there is text to autcomplete * update installation docs * update scenario tools docs * docs * writing style phrase detection * typo * docs * fix issue where deleting an applied preset group would prevent selection of a different preset group in the affected client * fix @-Instruction is broken when using apostrophes * editor never attempt to fix exposition on user input if input starts with command characters @, ! or / * prompt tweaks * editor revision: automatic revision setting, prompt tweaks, docs * missing files * fix issue where narration responses starting with # would result in empty messages * prompt tweaks * fix issue with autocomplete not working at the beginning of a scene * fix issues where cached guidance would result in no guidance * editor revision analysis now has access to scene analysis and director guidance if it exists * fix issue where all nodes in the node editor would be locked on winsows OS * add `scene/SetIntroducation` node * fix issue where generating narration in a scene with zero characters would always come back blank * SceneIntroduction node state output fixed * node editor docs progress * fix issue with loading scene from file upload no longer working * better handling of what to do when there are no characters in a scene and no default character is defined * typo * silence trigger game loop debug message * docs * GenerateThematicList node * docs * docs * stubs * allow creation of module from existing nodes * move function into plugin * separate graph export functions into own .js file * group from selected nodes * remove debug output * tweak create module dialog * docs * docs * graph tests need to assume auto_progres True * add ModuleProperty node * fix some issues in the module creation modal when extending or copying a module * include module name in module deletion confirm dialog * fix node module copy not setting updated registry * module property name output * docs * docs * initializing a scene from a character card will no longer break the node editor * docs * when greeting text and intro do not match, do the greeting text first. * intro is set during card import, there is no need to ever emit character greetings in addition to the intro, its not really something that matches talemate's design philsophy at this point * docs * dynamic premise modules * tweaks * propagate module level property defaults to node * docs * fix issue where the default character would get added to scenes during load even though there already was a player character * prompt tweaks * tweaks to generate-premise module * docs * infinity quest dynamic story v2 * tweaks limits * fix line endings * prompt tweaks * fix some issues with node property editing * formatting * prompt tweaks * group and comment * add talemate tint node style fix gap in nodes when there are no sockets * node style fixes * docs * docs * icon for swtich nodes * conditional emit status node * don't reset dynamic premise * dynamic premise tweaks * dynamic premis status messages * fix issue with Input value error node * validate that topic is specified * fix issue where cancelling a generation triggered during scene loop init would cause the loop to reinitialize * docs * node error handling improvements * docs * better error handling in generate premise module * a connected socket should always override a property of the same value even if the socket connection is not resolved * dynamic premise expose intro length property * fix some issues with node module creation and add registry path validation * correctly title creative loop module so it can be copied * remove debug message * rename to dynamic storyline for clarity and so it doesn't collide with tutorial * import dynanimc storyline node * docs * gracefully handle a node missing during graph load * docs * make agent list a bit more compact * disable node property editing in inherited nodes * rename editor revision events so they are inline with the other agent events * support instruction injection for director.generate_choices action * normalize dynamic instructions * fix director guidance dynamic instructions * docs * generate choices event add choices property * prompt tweaks * add dynamic instruction node * prompt tweak * fix issue where some events could not be hooked into through event node modules * docs * clean response node * docs * docs * docs * module library tweaks * fix some issues with act-as selection * dont allow creation of new modules until scene has been saved at least once * public node modules dir * sim suite module styles * remove debug messages * fix default node titles * fix number input vlaidation in math nodes * context awareness in contextual generate now includes character info * fix dupe id warnings * alt drag to clone multiple nodes * alt drag to clone multiple nodes * docs * docs * fix issue where some scene modules could leak across scenes * dynamic instructions already included through extra context * prompt tweaks * update defaults * docs * make list init from json * socs * fix issue where not all field definitions would get sent * docs * fix issue causing deep analysis to loop * case insentive regex matching * prompt tweaks * fix node title * fix size issue in scene view when node editor was open on smaller resolutions * fix issue with autocomplete sometime loosing markup * add claude 4 * make director guidance and actor instructions available to autocomplete prompt * fix trim node handling of \n * extract node * extract node trim property * remover cruft * charactermessage node only set character if not already part of message prefix * editor revision unslop mode * fix search scenes showing node module files * prompt tweaks * unslop support unwanted phrase detection * define bad_prose * seems to get ommitted a lot so lets handle it * cleanup * return on no issues * fix some issues with character creation * fix some character creation issues * prompt tweaks * contewxtual generate and autocomplete signals added * prefix revision_ * use uuidv4 which is already installed and doesnt come with compatibility issues * editor revision support for contextual generations normalize some event objects * add template picker to worldstate character creation interface * prompt tweaks * dont unslop scene intent or story intent generation * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * prompt tweaks * fix issue of conversation losing edits through signals * support revisions for world state entry generation * task_instructions * dont show rewrite specific options if unslop method is selected * docs * fix issue with setting locked save file when auto saving was turned on * don't trigger player_turn_start in creative mode * better check for when to fire player_turn_start and when not * node editor crash course fixes * docs * fix issue where sometimes wrong system prompt was selected * add world context to contextual generate node * fix node dragging issue when cloning multiple nodes * support editor revision for summarization generation * summarization support dynamic instructions * dedicated template for summary unslop * pass summarization_history to template vars * prompt tweaks * prompt tweaks * not sure how this got blanked * wording * wording * only display debug log if TALEMATE_DEBUG=1 * fix syntax * fix syntax * remove unused cruft * start-debug * log message cleanup * docs * tweak defaults * sim suite polish * remove unused images * add writing style instructions to revision prompts * missing endif tag * prompt tweaks * prompt tweaks * prompt tweaks * use app-busy * prompt tweaks * update readme and screenshots wording wording * add discord link --- .github/workflows/test.yml | 58 + .gitignore | 3 +- README.md | 14 +- .../client/example/runpod_vllm/__init__.py | 1 - docs/getting-started/connect-a-client.md | 4 +- docs/getting-started/installation/linux.md | 7 +- docs/getting-started/installation/windows.md | 26 +- .../connect-a-client-add-client-modal.png | Bin 29763 -> 0 bytes docs/img/0.26.0/connect-a-client-ready.png | Bin 44259 -> 0 bytes docs/img/0.26.0/inference-presets-1.png | Bin 83909 -> 0 bytes .../0.26.0/scene-tool-character-actions.png | Bin 13319 -> 0 bytes .../0.26.0/scene-tool-creative-actions.png | Bin 19455 -> 0 bytes .../scene-tool-creative-add-character-1.png | Bin 5202 -> 0 bytes .../scene-tool-creative-add-character-2.png | Bin 10782 -> 0 bytes .../scene-tool-creative-add-character-3.png | Bin 37141 -> 0 bytes .../scene-tool-creative-introduce-2.png | Bin 5286 -> 0 bytes .../0.26.0/scene-tool-narrator-actions.png | Bin 25776 -> 0 bytes .../0.29.0/conversation-general-settings.png | Bin 33853 -> 0 bytes .../img/0.30.0/auto-direction-unavailable.png | Bin 0 -> 11771 bytes docs/img/0.30.0/auto-progress-on.png | Bin 0 -> 1611 bytes .../0.30.0/client-ratelimit-notification.png | Bin 0 -> 3481 bytes docs/img/0.30.0/client-ratelimit-popup.png | Bin 0 -> 21370 bytes docs/img/0.30.0/client-ratelimit.png | Bin 0 -> 5234 bytes .../connect-a-client-add-client-modal.png | Bin 0 -> 48800 bytes docs/img/0.30.0/connect-a-client-ready.png | Bin 0 -> 47633 bytes .../0.30.0/conversation-content-settings.png | Bin 0 -> 20963 bytes .../0.30.0/conversation-general-settings.png | Bin 0 -> 22116 bytes .../img/0.30.0/create-template-scene-type.png | Bin 0 -> 43956 bytes docs/img/0.30.0/creator-agent-item.png | Bin 0 -> 2326 bytes .../0.30.0/creator-autocomplete-settings.png | Bin 0 -> 24013 bytes .../director-auto-direction-settings.png | Bin 0 -> 64656 bytes docs/img/0.30.0/editor-has-messages.png | Bin 0 -> 4367 bytes docs/img/0.30.0/editor-revision-history.png | Bin 0 -> 134239 bytes .../editor-revision-issue-identified.png | Bin 0 -> 5253 bytes docs/img/0.30.0/editor-revision-rewriting.png | Bin 0 -> 4002 bytes .../editor-revision-settings-dedupe.png | Bin 0 -> 87789 bytes .../editor-revision-settings-rewrite.png | Bin 0 -> 119982 bytes .../editor-revision-settings-unslop.png | Bin 0 -> 106446 bytes .../0.30.0/inference-preset-group-applied.png | Bin 0 -> 9316 bytes .../0.30.0/inference-preset-group-apply.png | Bin 0 -> 15766 bytes docs/img/0.30.0/inference-presets-1.png | Bin 0 -> 88651 bytes .../inference-presets-custom-group-1.png | Bin 0 -> 7332 bytes .../inference-presets-custom-group-2.png | Bin 0 -> 3255 bytes docs/img/0.30.0/save-graph.png | Bin 0 -> 1057 bytes .../0.30.0/scene-tool-character-actions.png | Bin 0 -> 10796 bytes .../0.30.0/scene-tool-creative-actions.png | Bin 0 -> 20788 bytes .../scene-tool-creative-introduce-2.png | Bin 0 -> 4753 bytes docs/img/0.30.0/scene-tool-intro-char-1.png | Bin 0 -> 36714 bytes .../scene-tool-intro-char-templates.png | Bin 0 -> 33929 bytes .../0.30.0/scene-tool-narrator-actions.png | Bin 0 -> 20302 bytes .../0.30.0/writing-style-phrase-detection.png | Bin 0 -> 23146 bytes docs/img/ss-1.png | Bin 459323 -> 595198 bytes docs/img/ss-2.png | Bin 459330 -> 454513 bytes docs/img/ss-3.png | Bin 405163 -> 392472 bytes docs/img/ss-4.png | Bin 479773 -> 556997 bytes docs/index.md | 3 - docs/snippets/agents.md | 28 + docs/snippets/common.md | 36 + docs/style.css | 60 + docs/user-guide/agents/conversation/index.md | 4 +- .../agents/conversation/settings.md | 24 +- docs/user-guide/agents/creator/index.md | 4 +- docs/user-guide/agents/creator/settings.md | 21 + docs/user-guide/agents/director/index.md | 8 +- docs/user-guide/agents/director/settings.md | 68 +- docs/user-guide/agents/editor/revisions.md | 17 + docs/user-guide/agents/editor/settings.md | 127 +- docs/user-guide/agents/index.md | 4 + docs/user-guide/agents/memory/embeddings.md | 6 + docs/user-guide/clients/presets.md | 30 +- docs/user-guide/clients/rate-limiting.md | 19 + docs/user-guide/howto/.pages | 4 + .../howto/infinity-quest-dynamic/.pages | 3 + .../howto/infinity-quest-dynamic/.snippets.md | 24 + .../1-create-the-scene-project.md | 76 + .../infinity-quest-dynamic/2-initial-nodes.md | 292 + .../infinity-quest-dynamic/3-improvements.md | 225 + .../infinity-quest-dynamic/4-get-organized.md | 150 + .../5-agentic-workflow.md | 567 ++ .../6-reusable-module.md | 728 +++ .../howto/infinity-quest-dynamic/7-polish.md | 222 + .../infinity-quest-dynamic/img/1-0001.png | Bin 0 -> 31964 bytes .../infinity-quest-dynamic/img/1-0002.png | Bin 0 -> 12685 bytes .../infinity-quest-dynamic/img/1-0003.png | Bin 0 -> 13060 bytes .../infinity-quest-dynamic/img/1-0004.png | Bin 0 -> 7606 bytes .../infinity-quest-dynamic/img/1-0005.png | Bin 0 -> 7736 bytes .../infinity-quest-dynamic/img/1-0006.png | Bin 0 -> 7466 bytes .../infinity-quest-dynamic/img/1-0007.png | Bin 0 -> 6212 bytes .../img/1-btn-create-scene.png | Bin 0 -> 2819 bytes .../img/1-save-project.png | Bin 0 -> 67741 bytes .../infinity-quest-dynamic/img/2-0001.png | Bin 0 -> 15184 bytes .../infinity-quest-dynamic/img/2-0002.png | Bin 0 -> 18424 bytes .../infinity-quest-dynamic/img/2-0003.png | Bin 0 -> 5335 bytes .../infinity-quest-dynamic/img/2-0004.png | Bin 0 -> 19042 bytes .../infinity-quest-dynamic/img/2-0005.png | Bin 0 -> 19733 bytes .../infinity-quest-dynamic/img/2-0006.png | Bin 0 -> 140749 bytes .../infinity-quest-dynamic/img/2-0007.png | Bin 0 -> 12873 bytes .../infinity-quest-dynamic/img/2-0008.png | Bin 0 -> 16599 bytes .../infinity-quest-dynamic/img/2-0009.png | Bin 0 -> 15932 bytes .../infinity-quest-dynamic/img/2-0010.png | Bin 0 -> 5082 bytes .../infinity-quest-dynamic/img/2-0011.png | Bin 0 -> 56842 bytes .../infinity-quest-dynamic/img/2-0012.png | Bin 0 -> 2486 bytes .../infinity-quest-dynamic/img/2-0013.png | Bin 0 -> 53132 bytes .../infinity-quest-dynamic/img/2-0014.png | Bin 0 -> 67971 bytes .../infinity-quest-dynamic/img/2-0015.png | Bin 0 -> 20906 bytes .../infinity-quest-dynamic/img/2-0016.png | Bin 0 -> 48080 bytes .../infinity-quest-dynamic/img/2-0017.png | Bin 0 -> 71731 bytes .../infinity-quest-dynamic/img/2-0018.png | Bin 0 -> 9842 bytes .../infinity-quest-dynamic/img/2-0019.png | Bin 0 -> 5980 bytes .../infinity-quest-dynamic/img/2-0020.png | Bin 0 -> 215522 bytes .../infinity-quest-dynamic/img/3-0001.png | Bin 0 -> 130070 bytes .../infinity-quest-dynamic/img/3-0002.png | Bin 0 -> 80816 bytes .../infinity-quest-dynamic/img/3-0003.png | Bin 0 -> 15585 bytes .../infinity-quest-dynamic/img/3-0004.png | Bin 0 -> 13312 bytes .../infinity-quest-dynamic/img/3-0005.png | Bin 0 -> 27256 bytes .../infinity-quest-dynamic/img/3-0006.png | Bin 0 -> 147700 bytes .../infinity-quest-dynamic/img/3-0007.png | Bin 0 -> 69675 bytes .../infinity-quest-dynamic/img/3-0008.png | Bin 0 -> 121269 bytes .../infinity-quest-dynamic/img/3-0009.png | Bin 0 -> 58859 bytes .../infinity-quest-dynamic/img/3-0010.png | Bin 0 -> 4834 bytes .../infinity-quest-dynamic/img/3-0011.png | Bin 0 -> 71931 bytes .../infinity-quest-dynamic/img/3-0012.png | Bin 0 -> 22727 bytes .../infinity-quest-dynamic/img/4-0001.png | Bin 0 -> 151080 bytes .../infinity-quest-dynamic/img/4-0002.png | Bin 0 -> 18841 bytes .../infinity-quest-dynamic/img/4-0003.png | Bin 0 -> 24780 bytes .../infinity-quest-dynamic/img/4-0004.png | Bin 0 -> 149715 bytes .../infinity-quest-dynamic/img/4-0005.png | Bin 0 -> 7494 bytes .../infinity-quest-dynamic/img/4-0006.png | Bin 0 -> 6752 bytes .../infinity-quest-dynamic/img/4-0007.png | Bin 0 -> 144907 bytes .../infinity-quest-dynamic/img/4-0008.png | Bin 0 -> 58275 bytes .../infinity-quest-dynamic/img/4-0009.png | Bin 0 -> 22362 bytes .../infinity-quest-dynamic/img/4-0010.png | Bin 0 -> 5672 bytes .../infinity-quest-dynamic/img/4-0011.png | Bin 0 -> 162011 bytes .../infinity-quest-dynamic/img/4-0012.png | Bin 0 -> 18270 bytes .../infinity-quest-dynamic/img/4-0013.png | Bin 0 -> 7013 bytes .../infinity-quest-dynamic/img/4-0014.png | Bin 0 -> 26727 bytes .../infinity-quest-dynamic/img/4-0015.png | Bin 0 -> 19808 bytes .../infinity-quest-dynamic/img/4-0016.png | Bin 0 -> 2816 bytes .../infinity-quest-dynamic/img/5-0001.png | Bin 0 -> 73904 bytes .../infinity-quest-dynamic/img/5-0002.png | Bin 0 -> 23006 bytes .../infinity-quest-dynamic/img/5-0003.png | Bin 0 -> 36446 bytes .../infinity-quest-dynamic/img/5-0004.png | Bin 0 -> 71107 bytes .../infinity-quest-dynamic/img/5-0005.png | Bin 0 -> 113270 bytes .../infinity-quest-dynamic/img/5-0006.png | Bin 0 -> 98802 bytes .../infinity-quest-dynamic/img/5-0007.png | Bin 0 -> 73462 bytes .../infinity-quest-dynamic/img/5-0008.png | Bin 0 -> 128597 bytes .../infinity-quest-dynamic/img/5-0009.png | Bin 0 -> 75666 bytes .../infinity-quest-dynamic/img/5-0010.png | Bin 0 -> 65355 bytes .../infinity-quest-dynamic/img/5-0011.png | Bin 0 -> 224460 bytes .../infinity-quest-dynamic/img/5-0012.png | Bin 0 -> 2927 bytes .../infinity-quest-dynamic/img/5-0013.png | Bin 0 -> 1415 bytes .../infinity-quest-dynamic/img/5-0014.png | Bin 0 -> 131043 bytes .../infinity-quest-dynamic/img/5-0015.png | Bin 0 -> 15826 bytes .../infinity-quest-dynamic/img/5-0016.png | Bin 0 -> 22174 bytes .../infinity-quest-dynamic/img/5-0017.png | Bin 0 -> 447005 bytes .../infinity-quest-dynamic/img/5-0018.png | Bin 0 -> 70570 bytes .../infinity-quest-dynamic/img/6-0001.png | Bin 0 -> 234497 bytes .../infinity-quest-dynamic/img/6-0002.png | Bin 0 -> 103562 bytes .../infinity-quest-dynamic/img/6-0003.png | Bin 0 -> 468409 bytes .../infinity-quest-dynamic/img/6-0004.png | Bin 0 -> 18364 bytes .../infinity-quest-dynamic/img/6-0005.png | Bin 0 -> 23400 bytes .../infinity-quest-dynamic/img/6-0006.png | Bin 0 -> 22315 bytes .../infinity-quest-dynamic/img/6-0007.png | Bin 0 -> 10912 bytes .../infinity-quest-dynamic/img/6-0008.png | Bin 0 -> 40582 bytes .../infinity-quest-dynamic/img/6-0009.png | Bin 0 -> 36913 bytes .../infinity-quest-dynamic/img/6-0010.png | Bin 0 -> 123879 bytes .../infinity-quest-dynamic/img/6-0011.png | Bin 0 -> 12594 bytes .../infinity-quest-dynamic/img/6-0012.png | Bin 0 -> 32480 bytes .../infinity-quest-dynamic/img/6-0013.png | Bin 0 -> 25260 bytes .../infinity-quest-dynamic/img/6-0014.png | Bin 0 -> 18761 bytes .../infinity-quest-dynamic/img/6-0015.png | Bin 0 -> 67711 bytes .../infinity-quest-dynamic/img/6-0016.png | Bin 0 -> 72155 bytes .../infinity-quest-dynamic/img/6-0017.png | Bin 0 -> 82961 bytes .../infinity-quest-dynamic/img/6-0018.png | Bin 0 -> 332007 bytes .../infinity-quest-dynamic/img/6-0019.png | Bin 0 -> 81519 bytes .../infinity-quest-dynamic/img/6-0020.png | Bin 0 -> 52006 bytes .../infinity-quest-dynamic/img/6-0021.png | Bin 0 -> 43783 bytes .../infinity-quest-dynamic/img/6-0022.png | Bin 0 -> 8610 bytes .../infinity-quest-dynamic/img/6-0023.png | Bin 0 -> 120970 bytes .../infinity-quest-dynamic/img/6-0024.png | Bin 0 -> 66832 bytes .../infinity-quest-dynamic/img/6-0025.png | Bin 0 -> 17456 bytes .../infinity-quest-dynamic/img/6-0026.png | Bin 0 -> 3699 bytes .../infinity-quest-dynamic/img/6-0027.png | Bin 0 -> 8718 bytes .../infinity-quest-dynamic/img/6-0028.png | Bin 0 -> 10627 bytes .../infinity-quest-dynamic/img/7-0001.png | Bin 0 -> 82129 bytes .../infinity-quest-dynamic/img/7-0002.png | Bin 0 -> 2560 bytes .../infinity-quest-dynamic/img/7-0003.png | Bin 0 -> 8411 bytes .../infinity-quest-dynamic/img/7-0004.png | Bin 0 -> 131034 bytes .../infinity-quest-dynamic/img/7-0005.png | Bin 0 -> 36028 bytes .../infinity-quest-dynamic/img/7-0006.png | Bin 0 -> 123713 bytes .../infinity-quest-dynamic/img/7-0007.png | Bin 0 -> 7117 bytes .../infinity-quest-dynamic/img/7-0008.png | Bin 0 -> 60494 bytes .../infinity-quest-dynamic/img/7-0009.png | Bin 0 -> 13993 bytes .../infinity-quest-dynamic/img/7-0010.png | Bin 0 -> 20109 bytes .../img/debug-tools-prompt-inspect.png | Bin 0 -> 23683 bytes .../img/load-module-dynamic-premise.png | Bin 0 -> 3506 bytes .../img/load-module-generate-premise.png | Bin 0 -> 3533 bytes .../img/load-module-on-scene-init.png | Bin 0 -> 3422 bytes .../img/load-module-scene-loop.png | Bin 0 -> 3181 bytes .../infinity-quest-dynamic/img/overview.png | Bin 0 -> 66765 bytes .../howto/infinity-quest-dynamic/index.md | 33 + .../howto/use-dynamic-story-module/.pages | 3 + .../use-dynamic-story-module/img/0001.png | Bin 0 -> 20531 bytes .../use-dynamic-story-module/img/0002.png | Bin 0 -> 4825 bytes .../use-dynamic-story-module/img/0003.png | Bin 0 -> 9439 bytes .../use-dynamic-story-module/img/0004.png | Bin 0 -> 15015 bytes .../use-dynamic-story-module/img/0005.png | Bin 0 -> 2368 bytes .../use-dynamic-story-module/img/0006.png | Bin 0 -> 20006 bytes .../use-dynamic-story-module/img/0007.png | Bin 0 -> 2837 bytes .../use-dynamic-story-module/img/0008.png | Bin 0 -> 34717 bytes .../howto/use-dynamic-story-module/index.md | 79 + docs/user-guide/interacting.md | 3 + .../node-editor/core-concepts/.pages | 2 + .../core-concepts/command_module.md | 82 + .../core-concepts/error-handling.md | 44 + .../node-editor/core-concepts/events.md | 73 + .../node-editor/core-concepts/functions.md | 213 + .../node-editor/core-concepts/modularity.md | 118 + .../core-concepts/module-inheritance.md | 63 + .../core-concepts/prompt-templates.md | 214 + .../node-editor/core-concepts/staging.md | 75 + .../node-editor/core-concepts/states.md | 116 + .../node-editor/core-concepts/switches.md | 228 + .../core-concepts/user-interface.md | 301 + .../node-editor/img/command-0001.png | Bin 0 -> 7049 bytes .../node-editor/img/command-0002.png | Bin 0 -> 107825 bytes .../node-editor/img/command-0003.png | Bin 0 -> 11411 bytes .../node-editor/img/command-0004.png | Bin 0 -> 32307 bytes .../node-editor/img/command-0005.png | Bin 0 -> 102903 bytes .../node-editor/img/command-0006.png | Bin 0 -> 5580 bytes .../node-editor/img/error-handling-0001.png | Bin 0 -> 88594 bytes .../node-editor/img/events-0001.png | Bin 0 -> 47742 bytes .../node-editor/img/events-0002.png | Bin 0 -> 8126 bytes .../node-editor/img/events-0003.png | Bin 0 -> 12058 bytes .../node-editor/img/functions-0001.png | Bin 0 -> 98363 bytes .../node-editor/img/functions-0002.png | Bin 0 -> 20505 bytes .../node-editor/img/functions-0003.png | Bin 0 -> 69555 bytes .../node-editor/img/functions-0004.png | Bin 0 -> 47267 bytes .../node-editor/img/functions-0005.png | Bin 0 -> 105904 bytes .../node-editor/img/prompt-templates-0001.png | Bin 0 -> 207946 bytes .../node-editor/img/prompt-templates-0002.png | Bin 0 -> 258504 bytes .../node-editor/img/prompt-templates-0003.png | Bin 0 -> 17462 bytes .../node-editor/img/staging-0001.png | Bin 0 -> 95930 bytes .../node-editor/img/switches-0001.png | Bin 0 -> 39366 bytes .../node-editor/img/switches-0002.png | Bin 0 -> 38653 bytes .../node-editor/img/switches-0003.png | Bin 0 -> 38355 bytes .../node-editor/img/switches-0004.png | Bin 0 -> 54539 bytes .../node-editor/img/switches-0005.png | Bin 0 -> 84238 bytes .../node-editor/img/switches-0006.png | Bin 0 -> 72983 bytes .../node-editor/img/switches-0007.png | Bin 0 -> 72781 bytes .../node-editor/img/switches-0008.png | Bin 0 -> 72361 bytes .../node-editor/img/switches-0009.png | Bin 0 -> 70844 bytes .../node-editor/img/switches-0010.png | Bin 0 -> 80154 bytes .../node-editor/img/switches-0011.png | Bin 0 -> 82520 bytes .../node-editor/img/switches-0012.png | Bin 0 -> 70064 bytes .../node-editor/img/switches-0013.png | Bin 0 -> 83184 bytes .../node-editor/img/switches-0014.png | Bin 0 -> 88983 bytes .../node-editor/img/toggle-node-editor.png | Bin 0 -> 7296 bytes .../node-editor/img/user-interface-0001.png | Bin 0 -> 31621 bytes .../node-editor/img/user-interface-0002.png | Bin 0 -> 1208 bytes .../node-editor/img/user-interface-0003.png | Bin 0 -> 2296 bytes .../node-editor/img/user-interface-0004.png | Bin 0 -> 19769 bytes .../node-editor/img/user-interface-0005.png | Bin 0 -> 21847 bytes .../node-editor/img/user-interface-0006.png | Bin 0 -> 33741 bytes .../node-editor/img/user-interface-0007.png | Bin 0 -> 50495 bytes .../node-editor/img/user-interface-0008.png | Bin 0 -> 42512 bytes .../node-editor/img/user-interface-0009.png | Bin 0 -> 8937 bytes .../node-editor/img/user-interface-0010.png | Bin 0 -> 1886 bytes .../node-editor/img/user-interface-0011.png | Bin 0 -> 56423 bytes .../node-editor/img/user-interface-0012.png | Bin 0 -> 17161 bytes .../node-editor/img/user-interface-0013.png | Bin 0 -> 14972 bytes .../node-editor/img/user-interface-0014.png | Bin 0 -> 14081 bytes .../node-editor/img/user-interface-0015.png | Bin 0 -> 7759 bytes .../node-editor/img/user-interface-0016.png | Bin 0 -> 18865 bytes .../node-editor/img/user-interface-0017.png | Bin 0 -> 11329 bytes .../node-editor/img/user-interface-0018.png | Bin 0 -> 19549 bytes .../node-editor/img/user-interface-0019.png | Bin 0 -> 7002 bytes docs/user-guide/node-editor/index.md | 7 + .../node-editor/reference/events.md | 639 ++ .../reference/template_functions.md | 826 +++ .../reference/useful-template-patterns.md | 172 + docs/user-guide/scenario-tools.md | 95 +- docs/user-guide/world-editor/scene/.pages | 1 + .../world-editor/scene/direction.md | 44 + .../world-editor/templates/index.md | 5 +- .../world-editor/templates/scene_type.md | 46 + .../world-editor/templates/writing-style.md | 54 +- install-cuda.bat | 8 + install-cuda.sh | 10 + install.bat | 22 +- install.sh | 13 - mkdocs.yml | 7 +- poetry.lock | 4334 +++++++------ pyproject.toml | 18 +- ...6b03912d10c7c4b82dd1eec0056611e2cd5404.png | Bin 0 -> 1627747 bytes .../infinity-quest.json | 123 + .../nodes/scene-loop.json | 65 + ...335b524c6c59e54793c94f707bdb8b25053c4f.png | Bin 0 -> 5844148 bytes .../nodes/fn-sim-suite-add-character.json | 824 +++ .../nodes/fn-sim-suite-change-character.json | 642 ++ .../nodes/fn-sim-suite-end-simulation.json | 509 ++ .../nodes/fn-sim-suite-remove-character.json | 365 ++ .../nodes/fn-sim-suite-respond.json | 244 + .../nodes/fn-sim-suite-set-environment.json | 341 + .../nodes/fn-sim-suite-set-goal.json | 820 +++ .../nodes/fn-sim-suite-set-user-persona.json | 508 ++ .../simulation-suite-v2/nodes/scene-loop.json | 67 + .../nodes/sim-suite-finalize.json | 149 + .../nodes/sim-suite-main.json | 147 + .../nodes/sim-suite-on-scene-init.json | 584 ++ .../nodes/sim-suite-on-user-input.json | 829 +++ .../nodes/sim-suite-process-commands.json | 1476 +++++ .../nodes/sim-suite-simulation.json | 78 + .../templates/computer.jinja2 | 141 + .../the-simulation-suite.json | 64 + scenes/simulation-suite/game.py | 2 +- src/talemate/agents/base.py | 105 +- src/talemate/agents/context.py | 7 +- src/talemate/agents/conversation/__init__.py | 357 +- src/talemate/agents/conversation/nodes.py | 74 + .../agents/conversation/websocket_handler.py | 80 + src/talemate/agents/creator/__init__.py | 171 +- src/talemate/agents/creator/assistant.py | 337 +- src/talemate/agents/creator/character.py | 12 +- src/talemate/agents/creator/legacy.py | 301 - .../creator/modules/create-character.json | 1814 ++++++ src/talemate/agents/creator/nodes.py | 349 ++ src/talemate/agents/director/__init__.py | 452 +- src/talemate/agents/director/auto_direct.py | 441 ++ .../agents/director/auto_direct_nodes.py | 143 + .../agents/director/generate_choices.py | 58 +- src/talemate/agents/director/guide.py | 139 +- .../director/legacy_scene_instructions.py | 119 + .../director/modules/auto-direction.json | 1973 ++++++ .../modules/generate-auto-direction.json | 2623 ++++++++ src/talemate/agents/director/nodes.py | 75 + .../agents/director/websocket_handler.py | 59 +- .../agents/{editor.py => editor/__init__.py} | 222 +- src/talemate/agents/editor/nodes.py | 126 + src/talemate/agents/editor/revision.py | 1100 ++++ .../agents/editor/websocket_handler.py | 63 + src/talemate/agents/memory/__init__.py | 156 +- src/talemate/agents/memory/context.py | 8 + src/talemate/agents/memory/rag.py | 17 +- src/talemate/agents/narrator/__init__.py | 136 +- src/talemate/agents/narrator/nodes.py | 200 + src/talemate/agents/summarize/__init__.py | 166 +- .../agents/summarize/analyze_scene.py | 130 +- .../agents/summarize/context_investigation.py | 21 +- .../agents/summarize/layered_history.py | 4 +- src/talemate/agents/visual/__init__.py | 78 +- src/talemate/agents/visual/nodes.py | 62 + .../agents/visual/websocket_handler.py | 1 - src/talemate/agents/world_state/__init__.py | 140 +- .../world_state/character_progression.py | 5 +- src/talemate/agents/world_state/nodes.py | 317 + src/talemate/automated_action.py | 107 - src/talemate/character.py | 11 +- src/talemate/cli.py | 255 - src/talemate/client/anthropic.py | 22 +- src/talemate/client/base.py | 132 +- src/talemate/client/cohere.py | 19 +- src/talemate/client/context.py | 1 + src/talemate/client/deepseek.py | 18 +- src/talemate/client/google.py | 10 +- src/talemate/client/koboldcpp.py | 19 +- src/talemate/client/lmstudio.py | 4 +- src/talemate/client/mistral.py | 41 +- src/talemate/client/model_prompts.py | 12 +- src/talemate/client/openai.py | 23 +- src/talemate/client/openai_compat.py | 8 +- src/talemate/client/presets.py | 45 +- src/talemate/client/ratelimit.py | 30 + src/talemate/client/system_prompts.py | 9 +- src/talemate/client/tabbyapi.py | 8 +- src/talemate/client/textgenwebui.py | 49 +- src/talemate/commands/__init__.py | 18 +- src/talemate/commands/cmd_autocomplete.py | 81 - src/talemate/commands/cmd_debug_off.py | 20 - src/talemate/commands/cmd_debug_on.py | 20 - src/talemate/commands/cmd_debug_tools.py | 158 +- src/talemate/commands/cmd_dialogue.py | 128 - src/talemate/commands/cmd_director.py | 90 - src/talemate/commands/cmd_exit.py | 19 - src/talemate/commands/cmd_help.py | 24 - src/talemate/commands/cmd_info.py | 25 - src/talemate/commands/cmd_inject.py | 30 - src/talemate/commands/cmd_list_scenes.py | 20 - src/talemate/commands/cmd_memget.py | 20 - src/talemate/commands/cmd_memset.py | 17 - src/talemate/commands/cmd_message_tools.py | 45 - src/talemate/commands/cmd_narrate.py | 198 - .../{cmd_rerun.py => cmd_regenerate.py} | 31 +- src/talemate/commands/cmd_remove_character.py | 50 - src/talemate/commands/cmd_rm.py | 21 - src/talemate/commands/cmd_run_helios_test.py | 37 - src/talemate/commands/cmd_save_characters.py | 29 - src/talemate/commands/cmd_world_state.py | 137 - src/talemate/commands/manager.py | 8 +- src/talemate/config.py | 48 +- src/talemate/context.py | 19 +- src/talemate/emit/__init__.py | 3 +- src/talemate/emit/async_signals.py | 14 +- src/talemate/emit/base.py | 15 +- src/talemate/emit/console.py | 54 - src/talemate/emit/signals.py | 6 + src/talemate/events.py | 26 +- src/talemate/exceptions.py | 17 + src/talemate/files.py | 4 + src/talemate/game/engine/__init__.py | 22 + .../game/engine/api/agents/narrator.py | 4 +- .../game/engine/api/agents/world_state.py | 2 +- src/talemate/game/engine/api/schema.py | 1 + src/talemate/game/engine/nodes/__init__.py | 19 + src/talemate/game/engine/nodes/agent.py | 481 ++ src/talemate/game/engine/nodes/api.py | 94 + src/talemate/game/engine/nodes/base_types.py | 19 + src/talemate/game/engine/nodes/command.py | 45 + .../game/engine/nodes/core/__init__.py | 2286 +++++++ .../game/engine/nodes/core/exception.py | 9 + src/talemate/game/engine/nodes/data.py | 857 +++ src/talemate/game/engine/nodes/event.py | 381 ++ src/talemate/game/engine/nodes/focal.py | 306 + src/talemate/game/engine/nodes/history.py | 406 ++ src/talemate/game/engine/nodes/layout.py | 349 ++ .../game/engine/nodes/load_definitions.py | 18 + src/talemate/game/engine/nodes/logic.py | 671 ++ .../nodes/modules/scene/creative-loop.json | 145 + .../modules/scene/dynamic-storyline.json | 1072 ++++ .../modules/scene/generate-storyline.json | 2093 +++++++ .../nodes/modules/scene/process-input.json | 1858 ++++++ .../nodes/modules/scene/scene-loop.json | 1279 ++++ .../modules/scene/select-actor-for-turn.json | 715 +++ src/talemate/game/engine/nodes/number.py | 594 ++ src/talemate/game/engine/nodes/prompt.py | 390 ++ .../game/engine/nodes/raise_errors.py | 198 + src/talemate/game/engine/nodes/registry.py | 348 ++ src/talemate/game/engine/nodes/run.py | 741 +++ src/talemate/game/engine/nodes/scene.py | 1433 +++++ .../game/engine/nodes/scene_intent.py | 454 ++ src/talemate/game/engine/nodes/state.py | 420 ++ src/talemate/game/engine/nodes/string.py | 578 ++ src/talemate/game/engine/nodes/util.py | 90 + src/talemate/game/engine/nodes/world_state.py | 280 + src/talemate/game/engine/scene_loop.py | 15 + .../__init__.py => game/engine/states.py} | 0 src/talemate/game/focal/__init__.py | 56 +- src/talemate/game/focal/schema.py | 99 +- src/talemate/game/scope.py | 2 +- src/talemate/game/state.py | 29 +- src/talemate/history.py | 45 +- src/talemate/load.py | 109 +- src/talemate/prompts/base.py | 216 +- .../common/character-guidance.jinja2 | 19 + .../common/content-classification.jinja2 | 6 + .../common/dynamic-instructions.jinja2 | 9 + .../common/scene-intent-inline.jinja2 | 8 + .../common/scene-intent-technical.jinja2 | 14 + .../templates/common/scene-intent.jinja2 | 15 + .../templates/common/scene-types.jinja2 | 10 + .../templates/common/task-information.jinja2 | 6 + .../common/writing-style-instructions.jinja2 | 5 + .../conversation/dialogue-chat.jinja2 | 12 +- .../conversation/dialogue-movie_script.jinja2 | 16 +- .../direction-to-inner-monologue.jinja2 | 21 - .../conversation/extra-context.jinja2 | 6 +- .../conversation/regenerate-context.jinja2 | 16 + .../conversation/rerun-context.jinja2 | 16 - .../conversation/scene-context.jinja2 | 11 + .../conversation/select-talking-actor.jinja2 | 25 - .../creator/autocomplete-dialogue.jinja2 | 59 +- .../creator/autocomplete-narrative.jinja2 | 33 +- .../character-attributes-fantasy.jinja2 | 97 - .../creator/character-attributes-human.jinja2 | 89 - .../character-attributes-sci-fi.jinja2 | 103 - .../creator/character-context.jinja2 | 18 + .../creator/character-description.jinja2 | 11 - .../creator/character-details-fantasy.jinja2 | 28 - .../creator/character-details-human.jinja2 | 24 - .../creator/character-details-sci-fi.jinja2 | 29 - .../creator/character-dialogue-rules.jinja2 | 18 - .../character-example-dialogue-fantasy.jinja2 | 28 - .../character-example-dialogue-human.jinja2 | 26 - .../character-example-dialogue-sci-fi.jinja2 | 31 - .../creator/contextual-generate.jinja2 | 82 +- .../determine-character-attributes.jinja2 | 2 +- .../determine-character-description.jinja2 | 1 + ...ine-character-dialogue-instructions.jinja2 | 13 +- .../creator/determine-character-name.jinja2 | 10 +- .../creator/determine-content-context.jinja2 | 4 +- .../templates/creator/extra-context.jinja2 | 14 +- .../creator/generate-json-list.jinja2 | 17 - .../creator/scenario-base-prompt.jinja2 | 25 - .../creator/scenario-description.jinja2 | 17 - .../templates/creator/scenario-goals.jinja2 | 24 - .../templates/creator/scenario-intro.jinja2 | 30 - .../templates/creator/scenario-name.jinja2 | 22 - .../prompts/templates/creator/scenario.jinja2 | 5 - .../creator/update-character-sheet.jinja2 | 36 - .../director/autodirect-evaluate.jinja2 | 66 + .../director/autodirect-execute.jinja2 | 79 + .../director/character-context.jinja2 | 4 + .../director/direct-character.jinja2 | 20 - .../direct-determine-next-action.jinja2 | 98 + .../direct-determine-scene-intent.jinja2 | 55 + .../templates/director/direct-game.jinja2 | 14 - .../templates/director/direct-scene.jinja2 | 42 - .../templates/director/extra-context.jinja2 | 28 + .../director/generate-choices.jinja2 | 9 +- .../director/generate-scene-types.jinja2 | 123 + ...de-conversation-regenerate-context.jinja2} | 12 +- .../director/guide-conversation.jinja2 | 42 +- .../director/guide-narration-progress.jinja2 | 2 +- .../director/guide-narration-query.jinja2 | 7 +- .../director/guide-narration-sensory.jinja2 | 32 +- .../guide-narration-visual-character.jinja2 | 11 +- .../director/guide-narration-visual.jinja2 | 6 +- .../guide-narration-writing-style.jinja2 | 21 + .../templates/director/guide-narration.jinja2 | 32 +- .../director/guide-narrative-direction.jinja2 | 8 +- ...guide-narrative-regenerate-context.jinja2} | 12 +- .../templates/director/scene-context.jinja2 | 13 + .../templates/editor/character-context.jinja2 | 18 + .../editor/check-continuity-errors.jinja2 | 37 - .../editor/fix-continuity-errors.jinja2 | 8 +- .../templates/editor/memory-context.jinja2 | 11 + .../templates/editor/revision-analysis.jinja2 | 41 + .../templates/editor/revision-rewrite.jinja2 | 25 + .../templates/editor/scene-context.jinja2 | 35 + .../unslop-contextual-generation.jinja2 | 225 + .../editor/unslop-summarization.jinja2 | 173 + .../prompts/templates/editor/unslop.jinja2 | 430 ++ .../prompts/templates/focal/callback.jinja2 | 10 +- .../templates/focal/extract_calls.jinja2 | 6 +- .../templates/focal/instructions.jinja2 | 6 +- .../narrator/dynamic-instructions.jinja2 | 7 - .../templates/narrator/extra-context.jinja2 | 6 +- .../narrator/narrate-after-dialogue.jinja2 | 30 +- .../narrator/narrate-character-entry.jinja2 | 8 +- .../narrator/narrate-character-exit.jinja2 | 8 +- .../narrator/narrate-character.jinja2 | 17 +- .../narrator/narrate-progress.jinja2 | 14 +- .../templates/narrator/narrate-query.jinja2 | 14 +- .../templates/narrator/narrate-scene.jinja2 | 17 +- .../narrator/narrate-time-passage.jinja2 | 6 +- .../narrator/narrative-direction.jinja2 | 8 +- .../templates/narrator/paraphrase.jinja2 | 10 +- .../narrator/regenerate-context.jinja2 | 14 + .../templates/narrator/rerun-context.jinja2 | 14 - .../summarizer/analyze-dialogue.jinja2 | 2 +- .../analyze-scene-for-next-action.jinja2 | 8 +- ...analyze-scene-for-next-conversation.jinja2 | 14 +- ...e-scene-for-next-narration-progress.jinja2 | 14 +- ...lyze-scene-for-next-narration-query.jinja2 | 2 +- ...ze-scene-for-next-narration-sensory.jinja2 | 16 +- ...for-next-narration-visual-character.jinja2 | 4 + ...yze-scene-for-next-narration-visual.jinja2 | 13 + .../analyze-scene-for-next-narration.jinja2 | 7 +- .../templates/summarizer/extra-context.jinja2 | 15 + .../templates/summarizer/scene-context.jinja2 | 8 +- .../summarizer/summarize-dialogue.jinja2 | 2 + .../summarizer/summarize-events.jinja2 | 2 + .../update-context-investigation.jinja2 | 8 +- .../templates/visual/extra-context.jinja2 | 8 +- .../visual/generate-scene-prompt.jinja2 | 8 +- .../world_state/analyze-time-passage.jinja2 | 5 - .../world_state/check-pin-conditions.jinja2 | 2 +- .../determine-character-development.jinja2 | 8 +- .../extract-character-sheet.jinja2 | 56 +- .../world_state/identify-characters.jinja2 | 2 +- .../world_state/match-character-names.jinja2 | 30 - .../request-world-state-inline-actions.jinja2 | 41 - ...state-inline-character-descriptions.jinja2 | 42 - ...quest-world-state-inline-characters.jinja2 | 15 - .../request-world-state-inline-items.jinja2 | 57 - .../request-world-state-json-schema.jinja2 | 63 - .../world_state/request-world-state-v2.jinja2 | 20 +- .../world_state/request-world-state.jinja2 | 54 - .../world_state/update-reinforcements.jinja2 | 9 +- src/talemate/regenerate.py | 183 + src/talemate/remote/chub.py | 48 - src/talemate/save.py | 46 +- .../{server/components => scene}/__init__.py | 0 src/talemate/scene/intent.py | 49 + src/talemate/scene/schema.py | 67 + src/talemate/scene/state_editor.py | 49 + src/talemate/scene_message.py | 127 +- src/talemate/server/api.py | 15 +- src/talemate/server/assistant.py | 14 +- src/talemate/server/config.py | 2 +- src/talemate/server/devtools.py | 60 +- src/talemate/server/node_editor.py | 541 ++ src/talemate/server/run.py | 21 +- src/talemate/server/static/index.html | 27 - src/talemate/server/static/main.js | 29 - src/talemate/server/static/play_component.js | 0 src/talemate/server/static/styles.css | 0 src/talemate/server/websocket_plugin.py | 37 +- src/talemate/server/websocket_server.py | 26 +- .../__init__.py} | 56 +- .../world_state_manager/scene_intent.py | 41 + src/talemate/status.py | 24 +- src/talemate/tale_mate.py | 1080 +--- src/talemate/thematic_generators.py | 16 +- src/talemate/util/__init__.py | 1181 +--- src/talemate/util/async_tools.py | 125 + src/talemate/util/colors.py | 81 + src/talemate/util/data.py | 353 ++ src/talemate/util/dedupe.py | 367 ++ src/talemate/util/dialogue.py | 380 +- src/talemate/util/diff.py | 23 + src/talemate/util/image.py | 124 + src/talemate/util/time.py | 248 + src/talemate/version.py | 2 +- src/talemate/world_state/__init__.py | 55 +- src/talemate/world_state/manager.py | 53 +- .../world_state/templates/__init__.py | 1 + src/talemate/world_state/templates/base.py | 30 + .../world_state/templates/character.py | 6 +- src/talemate/world_state/templates/content.py | 22 +- src/talemate/world_state/templates/scene.py | 48 + start-backend.bat | 2 + start-backend.sh | 2 +- start-developer.bat => start-debug.bat | 3 +- start-frontend.bat | 1 + talemate_frontend/package-lock.json | 5502 +++++++++-------- talemate_frontend/package.json | 24 +- .../src/assets/node-editor-preview.png | Bin 0 -> 49385 bytes talemate_frontend/src/components/AIAgent.vue | 240 +- talemate_frontend/src/components/AIClient.vue | 64 +- .../src/components/AgentMessages.vue | 129 + .../src/components/AgentModal.vue | 133 +- .../src/components/AppConfig.vue | 29 +- .../src/components/AppConfigPresets.vue | 10 + .../components/AppConfigPresetsInference.vue | 139 +- .../src/components/CharacterMessage.vue | 97 +- .../src/components/ClientModal.vue | 23 +- .../src/components/ConfirmActionInline.vue | 51 +- .../src/components/ConfirmActionPrompt.vue | 23 +- .../ContextInvestigationMessage.vue | 116 +- .../src/components/ContextualGenerate.vue | 77 +- .../src/components/CoverImage.vue | 8 - .../src/components/DebugToolPromptView.vue | 8 +- .../src/components/DebugToolSceneState.vue | 119 + .../src/components/DebugTools.vue | 17 +- .../src/components/DirectorConsole.vue | 180 + .../src/components/DirectorConsoleMessage.vue | 43 + .../src/components/DirectorConsoleWidget.vue | 160 + .../src/components/DirectorMessage.vue | 2 +- .../src/components/GameOptions.vue | 63 - .../src/components/LoadScene.vue | 24 +- .../src/components/NarratorMessage.vue | 49 +- .../src/components/NodeEditor.vue | 861 +++ .../src/components/NodeEditorLibrary.vue | 459 ++ .../src/components/NodeEditorLog.vue | 143 + .../components/NodeEditorModuleProperties.vue | 92 + .../src/components/NodeEditorNodeSearch.vue | 169 + .../src/components/PlayerChoiceMessage.vue | 2 + .../src/components/RateLimitAlert.vue | 70 + .../src/components/RequestInput.vue | 14 +- .../src/components/SceneMessages.vue | 39 +- .../src/components/SceneTools.vue | 336 +- .../src/components/SceneToolsActor.vue | 89 + .../src/components/SceneToolsCreative.vue | 334 + .../src/components/SceneToolsDirector.vue | 5 +- .../src/components/SceneToolsNarrator.vue | 16 +- .../src/components/StatusMessage.vue | 1 + .../src/components/TalemateApp.vue | 376 +- .../src/components/TimePassageMessage.vue | 2 +- talemate_frontend/src/components/WhatsNew.vue | 85 +- .../src/components/WorldState.vue | 18 +- .../src/components/WorldStateManager.vue | 8 +- .../components/WorldStateManagerCharacter.vue | 2 +- .../WorldStateManagerCharacterAttributes.vue | 16 +- .../WorldStateManagerCharacterCreator.vue | 108 +- .../WorldStateManagerCharacterDescription.vue | 1 + .../WorldStateManagerCharacterDetails.vue | 1 + .../components/WorldStateManagerContextDB.vue | 4 + .../WorldStateManagerMenuCharacterTools.vue | 2 +- .../src/components/WorldStateManagerScene.vue | 19 +- .../WorldStateManagerSceneDirection.vue | 545 ++ .../WorldStateManagerSceneExport.vue | 70 +- .../WorldStateManagerSceneOutline.vue | 164 +- .../WorldStateManagerSceneSettings.vue | 106 +- .../WorldStateManagerTemplateApplicator.vue | 3 +- .../WorldStateManagerTemplateWritingStyle.vue | 346 ++ .../components/WorldStateManagerTemplates.vue | 135 +- .../WorldStateManagerWorldEntries.vue | 6 +- talemate_frontend/src/plugins/vuetify.js | 13 +- talemate_frontend/src/utils/commentNode.js | 135 + talemate_frontend/src/utils/exportGraph.js | 428 ++ .../src/utils/groupInteractions.js | 254 + talemate_frontend/src/utils/litegraphUtils.js | 1361 ++++ talemate_frontend/src/utils/recentNodes.js | 146 + .../llm-prompt/std/MistralV7Tekken.jinja2 | 1 + .../modules/put_node_modules_here | 0 templates/world-state/talemate/default.yaml | 10 + .../graphs/results/test-harness-agents.json | 6 + .../graphs/results/test-harness-core.json | 20 + .../graphs/results/test-harness-data.json | 14 + .../results/test-harness-functions.json | 10 + .../graphs/results/test-harness-prompt.json | 8 + .../graphs/results/test-harness-scene.json | 26 + tests/data/graphs/test-harness-agents.json | 402 ++ tests/data/graphs/test-harness-core.json | 2202 +++++++ tests/data/graphs/test-harness-data.json | 1590 +++++ tests/data/graphs/test-harness-functions.json | 486 ++ tests/data/graphs/test-harness-prompt.json | 382 ++ tests/data/graphs/test-harness-scene.json | 2773 +++++++++ tests/data/util/data/faulty_json.txt | 27 + tests/data/util/data/invalid_json.txt | 18 + tests/data/util/data/invalid_yaml.txt | 16 + tests/data/util/data/multiple_json.txt | 53 + .../data/util/data/multiple_json_objects.txt | 9 + tests/data/util/data/multiple_yaml.txt | 53 + .../util/data/multiple_yaml_documents.txt | 23 + .../data/multiple_yaml_without_separators.txt | 26 + tests/data/util/data/valid_json.txt | 34 + tests/data/util/data/valid_yaml.txt | 32 + .../data/util/data/yaml_block_with_colons.txt | 21 + .../data/util/data/yaml_list_with_colons.txt | 5 + tests/data/util/data/yaml_with_colons.txt | 7 + tests/test_dedupe.py | 375 ++ tests/test_dialogue_cleanup.py | 43 +- tests/test_graphs.py | 181 + tests/test_isodate.py | 2 +- tests/test_nodes.py | 387 ++ tests/test_strip_partial_sentences.py | 5 +- tests/test_system_messages.py | 4 +- tests/test_utils_data.py | 426 ++ update.bat | 13 - update.sh | 9 - 732 files changed, 73352 insertions(+), 12820 deletions(-) create mode 100644 .github/workflows/test.yml delete mode 100644 docs/img/0.26.0/connect-a-client-add-client-modal.png delete mode 100644 docs/img/0.26.0/connect-a-client-ready.png delete mode 100644 docs/img/0.26.0/inference-presets-1.png delete mode 100644 docs/img/0.26.0/scene-tool-character-actions.png delete mode 100644 docs/img/0.26.0/scene-tool-creative-actions.png delete mode 100644 docs/img/0.26.0/scene-tool-creative-add-character-1.png delete mode 100644 docs/img/0.26.0/scene-tool-creative-add-character-2.png delete mode 100644 docs/img/0.26.0/scene-tool-creative-add-character-3.png delete mode 100644 docs/img/0.26.0/scene-tool-creative-introduce-2.png delete mode 100644 docs/img/0.26.0/scene-tool-narrator-actions.png delete mode 100644 docs/img/0.29.0/conversation-general-settings.png create mode 100644 docs/img/0.30.0/auto-direction-unavailable.png create mode 100644 docs/img/0.30.0/auto-progress-on.png create mode 100644 docs/img/0.30.0/client-ratelimit-notification.png create mode 100644 docs/img/0.30.0/client-ratelimit-popup.png create mode 100644 docs/img/0.30.0/client-ratelimit.png create mode 100644 docs/img/0.30.0/connect-a-client-add-client-modal.png create mode 100644 docs/img/0.30.0/connect-a-client-ready.png create mode 100644 docs/img/0.30.0/conversation-content-settings.png create mode 100644 docs/img/0.30.0/conversation-general-settings.png create mode 100644 docs/img/0.30.0/create-template-scene-type.png create mode 100644 docs/img/0.30.0/creator-agent-item.png create mode 100644 docs/img/0.30.0/creator-autocomplete-settings.png create mode 100644 docs/img/0.30.0/director-auto-direction-settings.png create mode 100644 docs/img/0.30.0/editor-has-messages.png create mode 100644 docs/img/0.30.0/editor-revision-history.png create mode 100644 docs/img/0.30.0/editor-revision-issue-identified.png create mode 100644 docs/img/0.30.0/editor-revision-rewriting.png create mode 100644 docs/img/0.30.0/editor-revision-settings-dedupe.png create mode 100644 docs/img/0.30.0/editor-revision-settings-rewrite.png create mode 100644 docs/img/0.30.0/editor-revision-settings-unslop.png create mode 100644 docs/img/0.30.0/inference-preset-group-applied.png create mode 100644 docs/img/0.30.0/inference-preset-group-apply.png create mode 100644 docs/img/0.30.0/inference-presets-1.png create mode 100644 docs/img/0.30.0/inference-presets-custom-group-1.png create mode 100644 docs/img/0.30.0/inference-presets-custom-group-2.png create mode 100644 docs/img/0.30.0/save-graph.png create mode 100644 docs/img/0.30.0/scene-tool-character-actions.png create mode 100644 docs/img/0.30.0/scene-tool-creative-actions.png create mode 100644 docs/img/0.30.0/scene-tool-creative-introduce-2.png create mode 100644 docs/img/0.30.0/scene-tool-intro-char-1.png create mode 100644 docs/img/0.30.0/scene-tool-intro-char-templates.png create mode 100644 docs/img/0.30.0/scene-tool-narrator-actions.png create mode 100644 docs/img/0.30.0/writing-style-phrase-detection.png create mode 100644 docs/snippets/agents.md create mode 100644 docs/snippets/common.md create mode 100644 docs/style.css create mode 100644 docs/user-guide/agents/creator/settings.md create mode 100644 docs/user-guide/agents/editor/revisions.md create mode 100644 docs/user-guide/clients/rate-limiting.md create mode 100644 docs/user-guide/howto/.pages create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/.pages create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/.snippets.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/1-create-the-scene-project.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/2-initial-nodes.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/3-improvements.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/4-get-organized.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/5-agentic-workflow.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/6-reusable-module.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/7-polish.md create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-btn-create-scene.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/1-save-project.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0011.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0012.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0013.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0014.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0015.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0016.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0017.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0018.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0019.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/2-0020.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0011.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/3-0012.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0011.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0012.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0013.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0014.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0015.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/4-0016.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0011.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0012.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0013.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0014.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0015.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0016.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0017.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/5-0018.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0011.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0012.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0013.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0014.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0015.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0016.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0017.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0018.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0019.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0020.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0021.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0022.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0023.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0024.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0025.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0026.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0027.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/6-0028.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0001.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0002.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0003.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0004.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0005.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0006.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0007.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0008.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0009.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/7-0010.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/debug-tools-prompt-inspect.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/load-module-dynamic-premise.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/load-module-generate-premise.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/load-module-on-scene-init.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/load-module-scene-loop.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/img/overview.png create mode 100644 docs/user-guide/howto/infinity-quest-dynamic/index.md create mode 100644 docs/user-guide/howto/use-dynamic-story-module/.pages create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0001.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0002.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0003.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0004.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0005.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0006.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0007.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/img/0008.png create mode 100644 docs/user-guide/howto/use-dynamic-story-module/index.md create mode 100644 docs/user-guide/node-editor/core-concepts/.pages create mode 100644 docs/user-guide/node-editor/core-concepts/command_module.md create mode 100644 docs/user-guide/node-editor/core-concepts/error-handling.md create mode 100644 docs/user-guide/node-editor/core-concepts/events.md create mode 100644 docs/user-guide/node-editor/core-concepts/functions.md create mode 100644 docs/user-guide/node-editor/core-concepts/modularity.md create mode 100644 docs/user-guide/node-editor/core-concepts/module-inheritance.md create mode 100644 docs/user-guide/node-editor/core-concepts/prompt-templates.md create mode 100644 docs/user-guide/node-editor/core-concepts/staging.md create mode 100644 docs/user-guide/node-editor/core-concepts/states.md create mode 100644 docs/user-guide/node-editor/core-concepts/switches.md create mode 100644 docs/user-guide/node-editor/core-concepts/user-interface.md create mode 100644 docs/user-guide/node-editor/img/command-0001.png create mode 100644 docs/user-guide/node-editor/img/command-0002.png create mode 100644 docs/user-guide/node-editor/img/command-0003.png create mode 100644 docs/user-guide/node-editor/img/command-0004.png create mode 100644 docs/user-guide/node-editor/img/command-0005.png create mode 100644 docs/user-guide/node-editor/img/command-0006.png create mode 100644 docs/user-guide/node-editor/img/error-handling-0001.png create mode 100644 docs/user-guide/node-editor/img/events-0001.png create mode 100644 docs/user-guide/node-editor/img/events-0002.png create mode 100644 docs/user-guide/node-editor/img/events-0003.png create mode 100644 docs/user-guide/node-editor/img/functions-0001.png create mode 100644 docs/user-guide/node-editor/img/functions-0002.png create mode 100644 docs/user-guide/node-editor/img/functions-0003.png create mode 100644 docs/user-guide/node-editor/img/functions-0004.png create mode 100644 docs/user-guide/node-editor/img/functions-0005.png create mode 100644 docs/user-guide/node-editor/img/prompt-templates-0001.png create mode 100644 docs/user-guide/node-editor/img/prompt-templates-0002.png create mode 100644 docs/user-guide/node-editor/img/prompt-templates-0003.png create mode 100644 docs/user-guide/node-editor/img/staging-0001.png create mode 100644 docs/user-guide/node-editor/img/switches-0001.png create mode 100644 docs/user-guide/node-editor/img/switches-0002.png create mode 100644 docs/user-guide/node-editor/img/switches-0003.png create mode 100644 docs/user-guide/node-editor/img/switches-0004.png create mode 100644 docs/user-guide/node-editor/img/switches-0005.png create mode 100644 docs/user-guide/node-editor/img/switches-0006.png create mode 100644 docs/user-guide/node-editor/img/switches-0007.png create mode 100644 docs/user-guide/node-editor/img/switches-0008.png create mode 100644 docs/user-guide/node-editor/img/switches-0009.png create mode 100644 docs/user-guide/node-editor/img/switches-0010.png create mode 100644 docs/user-guide/node-editor/img/switches-0011.png create mode 100644 docs/user-guide/node-editor/img/switches-0012.png create mode 100644 docs/user-guide/node-editor/img/switches-0013.png create mode 100644 docs/user-guide/node-editor/img/switches-0014.png create mode 100644 docs/user-guide/node-editor/img/toggle-node-editor.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0001.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0002.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0003.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0004.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0005.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0006.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0007.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0008.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0009.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0010.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0011.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0012.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0013.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0014.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0015.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0016.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0017.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0018.png create mode 100644 docs/user-guide/node-editor/img/user-interface-0019.png create mode 100644 docs/user-guide/node-editor/index.md create mode 100644 docs/user-guide/node-editor/reference/events.md create mode 100644 docs/user-guide/node-editor/reference/template_functions.md create mode 100644 docs/user-guide/node-editor/reference/useful-template-patterns.md create mode 100644 docs/user-guide/world-editor/scene/direction.md create mode 100644 docs/user-guide/world-editor/templates/scene_type.md create mode 100644 install-cuda.bat create mode 100755 install-cuda.sh create mode 100644 scenes/infinity-quest-dynamic-story-v2/assets/e7c712a0b276342d5767ba23806b03912d10c7c4b82dd1eec0056611e2cd5404.png create mode 100644 scenes/infinity-quest-dynamic-story-v2/infinity-quest.json create mode 100644 scenes/infinity-quest-dynamic-story-v2/nodes/scene-loop.json create mode 100644 scenes/simulation-suite-v2/assets/7c6ae3e9cb58a9226513d5ce1e335b524c6c59e54793c94f707bdb8b25053c4f.png create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-add-character.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-change-character.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-end-simulation.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-remove-character.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-respond.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-set-environment.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-set-goal.json create mode 100644 scenes/simulation-suite-v2/nodes/fn-sim-suite-set-user-persona.json create mode 100644 scenes/simulation-suite-v2/nodes/scene-loop.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-finalize.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-main.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-on-scene-init.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-on-user-input.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-process-commands.json create mode 100644 scenes/simulation-suite-v2/nodes/sim-suite-simulation.json create mode 100644 scenes/simulation-suite-v2/templates/computer.jinja2 create mode 100644 scenes/simulation-suite-v2/the-simulation-suite.json create mode 100644 src/talemate/agents/conversation/nodes.py create mode 100644 src/talemate/agents/conversation/websocket_handler.py delete mode 100644 src/talemate/agents/creator/legacy.py create mode 100644 src/talemate/agents/creator/modules/create-character.json create mode 100644 src/talemate/agents/creator/nodes.py create mode 100644 src/talemate/agents/director/auto_direct.py create mode 100644 src/talemate/agents/director/auto_direct_nodes.py create mode 100644 src/talemate/agents/director/legacy_scene_instructions.py create mode 100644 src/talemate/agents/director/modules/auto-direction.json create mode 100644 src/talemate/agents/director/modules/generate-auto-direction.json create mode 100644 src/talemate/agents/director/nodes.py rename src/talemate/agents/{editor.py => editor/__init__.py} (58%) create mode 100644 src/talemate/agents/editor/nodes.py create mode 100644 src/talemate/agents/editor/revision.py create mode 100644 src/talemate/agents/editor/websocket_handler.py create mode 100644 src/talemate/agents/narrator/nodes.py create mode 100644 src/talemate/agents/visual/nodes.py create mode 100644 src/talemate/agents/world_state/nodes.py delete mode 100644 src/talemate/automated_action.py delete mode 100644 src/talemate/cli.py create mode 100644 src/talemate/client/ratelimit.py delete mode 100644 src/talemate/commands/cmd_autocomplete.py delete mode 100644 src/talemate/commands/cmd_debug_off.py delete mode 100644 src/talemate/commands/cmd_debug_on.py delete mode 100644 src/talemate/commands/cmd_dialogue.py delete mode 100644 src/talemate/commands/cmd_director.py delete mode 100644 src/talemate/commands/cmd_exit.py delete mode 100644 src/talemate/commands/cmd_help.py delete mode 100644 src/talemate/commands/cmd_info.py delete mode 100644 src/talemate/commands/cmd_inject.py delete mode 100644 src/talemate/commands/cmd_list_scenes.py delete mode 100644 src/talemate/commands/cmd_memget.py delete mode 100644 src/talemate/commands/cmd_memset.py delete mode 100644 src/talemate/commands/cmd_message_tools.py delete mode 100644 src/talemate/commands/cmd_narrate.py rename src/talemate/commands/{cmd_rerun.py => cmd_regenerate.py} (60%) delete mode 100644 src/talemate/commands/cmd_remove_character.py delete mode 100644 src/talemate/commands/cmd_rm.py delete mode 100644 src/talemate/commands/cmd_run_helios_test.py delete mode 100644 src/talemate/commands/cmd_save_characters.py delete mode 100644 src/talemate/emit/console.py create mode 100644 src/talemate/game/engine/nodes/__init__.py create mode 100644 src/talemate/game/engine/nodes/agent.py create mode 100644 src/talemate/game/engine/nodes/api.py create mode 100644 src/talemate/game/engine/nodes/base_types.py create mode 100644 src/talemate/game/engine/nodes/command.py create mode 100644 src/talemate/game/engine/nodes/core/__init__.py create mode 100644 src/talemate/game/engine/nodes/core/exception.py create mode 100644 src/talemate/game/engine/nodes/data.py create mode 100644 src/talemate/game/engine/nodes/event.py create mode 100644 src/talemate/game/engine/nodes/focal.py create mode 100644 src/talemate/game/engine/nodes/history.py create mode 100644 src/talemate/game/engine/nodes/layout.py create mode 100644 src/talemate/game/engine/nodes/load_definitions.py create mode 100644 src/talemate/game/engine/nodes/logic.py create mode 100644 src/talemate/game/engine/nodes/modules/scene/creative-loop.json create mode 100644 src/talemate/game/engine/nodes/modules/scene/dynamic-storyline.json create mode 100644 src/talemate/game/engine/nodes/modules/scene/generate-storyline.json create mode 100644 src/talemate/game/engine/nodes/modules/scene/process-input.json create mode 100644 src/talemate/game/engine/nodes/modules/scene/scene-loop.json create mode 100644 src/talemate/game/engine/nodes/modules/scene/select-actor-for-turn.json create mode 100644 src/talemate/game/engine/nodes/number.py create mode 100644 src/talemate/game/engine/nodes/prompt.py create mode 100644 src/talemate/game/engine/nodes/raise_errors.py create mode 100644 src/talemate/game/engine/nodes/registry.py create mode 100644 src/talemate/game/engine/nodes/run.py create mode 100644 src/talemate/game/engine/nodes/scene.py create mode 100644 src/talemate/game/engine/nodes/scene_intent.py create mode 100644 src/talemate/game/engine/nodes/state.py create mode 100644 src/talemate/game/engine/nodes/string.py create mode 100644 src/talemate/game/engine/nodes/util.py create mode 100644 src/talemate/game/engine/nodes/world_state.py create mode 100644 src/talemate/game/engine/scene_loop.py rename src/talemate/{remote/__init__.py => game/engine/states.py} (100%) create mode 100644 src/talemate/prompts/templates/common/character-guidance.jinja2 create mode 100644 src/talemate/prompts/templates/common/content-classification.jinja2 create mode 100644 src/talemate/prompts/templates/common/dynamic-instructions.jinja2 create mode 100644 src/talemate/prompts/templates/common/scene-intent-inline.jinja2 create mode 100644 src/talemate/prompts/templates/common/scene-intent-technical.jinja2 create mode 100644 src/talemate/prompts/templates/common/scene-intent.jinja2 create mode 100644 src/talemate/prompts/templates/common/scene-types.jinja2 create mode 100644 src/talemate/prompts/templates/common/task-information.jinja2 create mode 100644 src/talemate/prompts/templates/common/writing-style-instructions.jinja2 delete mode 100644 src/talemate/prompts/templates/conversation/direction-to-inner-monologue.jinja2 create mode 100644 src/talemate/prompts/templates/conversation/regenerate-context.jinja2 delete mode 100644 src/talemate/prompts/templates/conversation/rerun-context.jinja2 create mode 100644 src/talemate/prompts/templates/conversation/scene-context.jinja2 delete mode 100644 src/talemate/prompts/templates/conversation/select-talking-actor.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-attributes-fantasy.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-attributes-human.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-attributes-sci-fi.jinja2 create mode 100644 src/talemate/prompts/templates/creator/character-context.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-description.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-details-fantasy.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-details-human.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-details-sci-fi.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-dialogue-rules.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-example-dialogue-fantasy.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-example-dialogue-human.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/character-example-dialogue-sci-fi.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/generate-json-list.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario-base-prompt.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario-description.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario-goals.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario-intro.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario-name.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/scenario.jinja2 delete mode 100644 src/talemate/prompts/templates/creator/update-character-sheet.jinja2 create mode 100644 src/talemate/prompts/templates/director/autodirect-evaluate.jinja2 create mode 100644 src/talemate/prompts/templates/director/autodirect-execute.jinja2 delete mode 100644 src/talemate/prompts/templates/director/direct-character.jinja2 create mode 100644 src/talemate/prompts/templates/director/direct-determine-next-action.jinja2 create mode 100644 src/talemate/prompts/templates/director/direct-determine-scene-intent.jinja2 delete mode 100644 src/talemate/prompts/templates/director/direct-game.jinja2 delete mode 100644 src/talemate/prompts/templates/director/direct-scene.jinja2 create mode 100644 src/talemate/prompts/templates/director/extra-context.jinja2 create mode 100644 src/talemate/prompts/templates/director/generate-scene-types.jinja2 rename src/talemate/prompts/templates/director/{guide-conversation-rerun-context.jinja2 => guide-conversation-regenerate-context.jinja2} (52%) create mode 100644 src/talemate/prompts/templates/director/guide-narration-writing-style.jinja2 rename src/talemate/prompts/templates/director/{guide-narrative-rerun-context.jinja2 => guide-narrative-regenerate-context.jinja2} (51%) create mode 100644 src/talemate/prompts/templates/director/scene-context.jinja2 create mode 100644 src/talemate/prompts/templates/editor/character-context.jinja2 delete mode 100644 src/talemate/prompts/templates/editor/check-continuity-errors.jinja2 create mode 100644 src/talemate/prompts/templates/editor/memory-context.jinja2 create mode 100644 src/talemate/prompts/templates/editor/revision-analysis.jinja2 create mode 100644 src/talemate/prompts/templates/editor/revision-rewrite.jinja2 create mode 100644 src/talemate/prompts/templates/editor/scene-context.jinja2 create mode 100644 src/talemate/prompts/templates/editor/unslop-contextual-generation.jinja2 create mode 100644 src/talemate/prompts/templates/editor/unslop-summarization.jinja2 create mode 100644 src/talemate/prompts/templates/editor/unslop.jinja2 delete mode 100644 src/talemate/prompts/templates/narrator/dynamic-instructions.jinja2 create mode 100644 src/talemate/prompts/templates/narrator/regenerate-context.jinja2 delete mode 100644 src/talemate/prompts/templates/narrator/rerun-context.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/extra-context.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/analyze-time-passage.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/match-character-names.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state-inline-actions.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state-inline-character-descriptions.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state-inline-characters.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state-inline-items.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state-json-schema.jinja2 delete mode 100644 src/talemate/prompts/templates/world_state/request-world-state.jinja2 create mode 100644 src/talemate/regenerate.py delete mode 100644 src/talemate/remote/chub.py rename src/talemate/{server/components => scene}/__init__.py (100%) create mode 100644 src/talemate/scene/intent.py create mode 100644 src/talemate/scene/schema.py create mode 100644 src/talemate/scene/state_editor.py create mode 100644 src/talemate/server/node_editor.py delete mode 100644 src/talemate/server/static/index.html delete mode 100644 src/talemate/server/static/main.js delete mode 100644 src/talemate/server/static/play_component.js delete mode 100644 src/talemate/server/static/styles.css rename src/talemate/server/{world_state_manager.py => world_state_manager/__init__.py} (96%) create mode 100644 src/talemate/server/world_state_manager/scene_intent.py create mode 100644 src/talemate/util/async_tools.py create mode 100644 src/talemate/util/colors.py create mode 100644 src/talemate/util/data.py create mode 100644 src/talemate/util/dedupe.py create mode 100644 src/talemate/util/diff.py create mode 100644 src/talemate/util/image.py create mode 100644 src/talemate/util/time.py rename start-developer.bat => start-debug.bat (72%) create mode 100644 talemate_frontend/src/assets/node-editor-preview.png create mode 100644 talemate_frontend/src/components/AgentMessages.vue create mode 100644 talemate_frontend/src/components/DebugToolSceneState.vue create mode 100644 talemate_frontend/src/components/DirectorConsole.vue create mode 100644 talemate_frontend/src/components/DirectorConsoleMessage.vue create mode 100644 talemate_frontend/src/components/DirectorConsoleWidget.vue delete mode 100644 talemate_frontend/src/components/GameOptions.vue create mode 100644 talemate_frontend/src/components/NodeEditor.vue create mode 100644 talemate_frontend/src/components/NodeEditorLibrary.vue create mode 100644 talemate_frontend/src/components/NodeEditorLog.vue create mode 100644 talemate_frontend/src/components/NodeEditorModuleProperties.vue create mode 100644 talemate_frontend/src/components/NodeEditorNodeSearch.vue create mode 100644 talemate_frontend/src/components/RateLimitAlert.vue create mode 100644 talemate_frontend/src/components/SceneToolsActor.vue create mode 100644 talemate_frontend/src/components/SceneToolsCreative.vue create mode 100644 talemate_frontend/src/components/WorldStateManagerSceneDirection.vue create mode 100644 talemate_frontend/src/components/WorldStateManagerTemplateWritingStyle.vue create mode 100644 talemate_frontend/src/utils/commentNode.js create mode 100644 talemate_frontend/src/utils/exportGraph.js create mode 100644 talemate_frontend/src/utils/groupInteractions.js create mode 100644 talemate_frontend/src/utils/litegraphUtils.js create mode 100644 talemate_frontend/src/utils/recentNodes.js create mode 100644 templates/llm-prompt/std/MistralV7Tekken.jinja2 rename src/talemate/server/static/create_component.js => templates/modules/put_node_modules_here (100%) create mode 100644 tests/data/graphs/results/test-harness-agents.json create mode 100644 tests/data/graphs/results/test-harness-core.json create mode 100644 tests/data/graphs/results/test-harness-data.json create mode 100644 tests/data/graphs/results/test-harness-functions.json create mode 100644 tests/data/graphs/results/test-harness-prompt.json create mode 100644 tests/data/graphs/results/test-harness-scene.json create mode 100644 tests/data/graphs/test-harness-agents.json create mode 100644 tests/data/graphs/test-harness-core.json create mode 100644 tests/data/graphs/test-harness-data.json create mode 100644 tests/data/graphs/test-harness-functions.json create mode 100644 tests/data/graphs/test-harness-prompt.json create mode 100644 tests/data/graphs/test-harness-scene.json create mode 100644 tests/data/util/data/faulty_json.txt create mode 100644 tests/data/util/data/invalid_json.txt create mode 100644 tests/data/util/data/invalid_yaml.txt create mode 100644 tests/data/util/data/multiple_json.txt create mode 100644 tests/data/util/data/multiple_json_objects.txt create mode 100644 tests/data/util/data/multiple_yaml.txt create mode 100644 tests/data/util/data/multiple_yaml_documents.txt create mode 100644 tests/data/util/data/multiple_yaml_without_separators.txt create mode 100644 tests/data/util/data/valid_json.txt create mode 100644 tests/data/util/data/valid_yaml.txt create mode 100644 tests/data/util/data/yaml_block_with_colons.txt create mode 100644 tests/data/util/data/yaml_list_with_colons.txt create mode 100644 tests/data/util/data/yaml_with_colons.txt create mode 100644 tests/test_dedupe.py create mode 100644 tests/test_graphs.py create mode 100644 tests/test_nodes.py create mode 100644 tests/test_utils_data.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..4384d46d --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,58 @@ +name: Python Tests + +on: + push: + branches: [ master, main, 'prep-*' ] + pull_request: + branches: [ master, main, 'prep-*' ] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + + - name: Install poetry + run: | + python -m pip install --upgrade pip + pip install poetry + + - name: Cache poetry dependencies + uses: actions/cache@v4 + with: + path: ~/.cache/pypoetry + key: ${{ runner.os }}-poetry-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-poetry-${{ matrix.python-version }}- + + - name: Install dependencies + run: | + python -m venv talemate_env + source talemate_env/bin/activate + poetry config virtualenvs.create false + poetry install + + - name: Setup configuration file + run: | + cp config.example.yaml config.yaml + + - name: Download NLTK data + run: | + source talemate_env/bin/activate + python -c "import nltk; nltk.download('punkt_tab')" + + - name: Run tests + run: | + source talemate_env/bin/activate + pytest tests/ -p no:warnings \ No newline at end of file diff --git a/.gitignore b/.gitignore index 60544af8..9cec4ba8 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ scenes/ !scenes/infinity-quest-dynamic-scenario/infinity-quest.json !scenes/infinity-quest/assets/ !scenes/infinity-quest/infinity-quest.json -tts_voice_samples/*.wav \ No newline at end of file +tts_voice_samples/*.wav +third-party-docs/ \ No newline at end of file diff --git a/README.md b/README.md index c92f6bed..3710cb5c 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,13 @@ Roleplay with AI with a focus on strong narration and consistent world and game state tracking. -||| +
|
|
|------------------------------------------|------------------------------------------|
-|||
-|||
+|
|
|
+
+