briyah 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/data/common/config/image_models.json +141 -21
  2. package/data/common/config/image_models_full.json +135 -48
  3. package/data/common/config/markup +1 -1
  4. package/data/common/config/story_models.json +41 -38
  5. package/data/common/prompts/character/progress_character.prompt +4 -0
  6. package/data/common/prompts/character/update_portrait.prompt +31 -0
  7. package/data/common/prompts/narrator/perceive.prompt +23 -1
  8. package/data/common/prompts/narrator/progress_plot.prompt +1 -3
  9. package/data/common/prompts/story_moderator/moderate.json +36 -29
  10. package/data/common/prompts/story_moderator/moderate.prompt +63 -18
  11. package/dist-sdk/server/src/ai/LLM/base-ai.service.d.ts +5 -7
  12. package/dist-sdk/server/src/ai/LLM/base-ai.service.js +7 -1
  13. package/dist-sdk/server/src/ai/LLM/fal.service.d.ts +5 -1
  14. package/dist-sdk/server/src/ai/LLM/fal.service.js +93 -21
  15. package/dist-sdk/server/src/ai/LLM/googleai.service.d.ts +1 -1
  16. package/dist-sdk/server/src/ai/LLM/googleai.service.js +20 -29
  17. package/dist-sdk/server/src/ai/LLM/openai.service.d.ts +5 -1
  18. package/dist-sdk/server/src/ai/LLM/openai.service.js +58 -71
  19. package/dist-sdk/server/src/ai/LLM/together.service.d.ts +5 -1
  20. package/dist-sdk/server/src/ai/LLM/together.service.js +57 -31
  21. package/dist-sdk/server/src/ai/agent-config.d.ts +1 -0
  22. package/dist-sdk/server/src/ai/agent-store.service.js +4 -0
  23. package/dist-sdk/server/src/ai/agent.d.ts +8 -1
  24. package/dist-sdk/server/src/ai/agent.js +21 -3
  25. package/dist-sdk/server/src/ai/model_prices.js +21 -1
  26. package/dist-sdk/server/src/app.controller.d.ts +4 -0
  27. package/dist-sdk/server/src/app.controller.js +51 -1
  28. package/dist-sdk/server/src/app.service.d.ts +3 -1
  29. package/dist-sdk/server/src/app.service.js +22 -14
  30. package/dist-sdk/server/src/room/message.d.ts +1 -0
  31. package/dist-sdk/server/src/room/message.js +1 -0
  32. package/dist-sdk/server/src/room/room-store.service.d.ts +1 -0
  33. package/dist-sdk/server/src/room/room-store.service.js +3 -0
  34. package/dist-sdk/server/src/room/room.d.ts +3 -0
  35. package/dist-sdk/server/src/room/room.js +27 -7
  36. package/dist-sdk/server/src/story/story-store.service.d.ts +1 -0
  37. package/dist-sdk/server/src/story/story-store.service.js +38 -0
  38. package/dist-sdk/server/src/story/story.service.d.ts +4 -1
  39. package/dist-sdk/server/src/story/story.service.js +233 -55
  40. package/dist-sdk/shared/types/app.types.d.ts +17 -0
  41. package/docs/assets/hierarchy.js +1 -1
  42. package/docs/assets/search.js +1 -1
  43. package/docs/classes/Agent.html +19 -15
  44. package/docs/classes/Briyah.html +12 -12
  45. package/docs/classes/BriyahConfigService.html +5 -5
  46. package/docs/classes/Room.html +26 -24
  47. package/docs/classes/RoomMessage.html +11 -10
  48. package/docs/enums/MessageAction.html +3 -3
  49. package/docs/hierarchy.html +1 -1
  50. package/docs/index.html +2 -2
  51. package/docs/interfaces/AgentInfo.html +2 -2
  52. package/docs/interfaces/AgentMessagesResponse.html +2 -2
  53. package/docs/interfaces/AppService.html +128 -113
  54. package/docs/interfaces/Artifact.html +3 -3
  55. package/docs/interfaces/ArtifactMetadata.html +2 -2
  56. package/docs/interfaces/AttachDocumentResponse.html +2 -2
  57. package/docs/interfaces/BriyahConfigOptions.html +6 -6
  58. package/docs/interfaces/ChapterInfo.html +2 -2
  59. package/docs/interfaces/Character.html +2 -2
  60. package/docs/interfaces/CreateAgentResponse.html +2 -2
  61. package/docs/interfaces/CreateRoomResponse.html +2 -2
  62. package/docs/interfaces/CreateStoryResponse.html +2 -2
  63. package/docs/interfaces/FileList.html +2 -2
  64. package/docs/interfaces/LoggingOptions.html +5 -5
  65. package/docs/interfaces/Message.html +2 -2
  66. package/docs/interfaces/ModelInfo.html +3 -2
  67. package/docs/interfaces/PreparedPromptResponse.html +2 -2
  68. package/docs/interfaces/ProcessTextResponse.html +2 -2
  69. package/docs/interfaces/PromptFile.html +2 -2
  70. package/docs/interfaces/PromptFileContent.html +2 -2
  71. package/docs/interfaces/PromptFilesResponse.html +2 -2
  72. package/docs/interfaces/PromptFolder.html +2 -2
  73. package/docs/interfaces/PromptFoldersResponse.html +2 -2
  74. package/docs/interfaces/RoomDetails.html +2 -2
  75. package/docs/interfaces/RoomInfo.html +2 -2
  76. package/docs/interfaces/RoomMessagesResponse.html +2 -2
  77. package/docs/interfaces/StoryErrorEvent.html +3 -3
  78. package/docs/interfaces/StoryIdea.html +2 -2
  79. package/docs/interfaces/StoryInfo.html +5 -3
  80. package/docs/interfaces/StoryIntroduceCharacterEvent.html +3 -3
  81. package/docs/interfaces/StoryProgressChapterEvent.html +3 -3
  82. package/docs/interfaces/StoryState.html +5 -5
  83. package/docs/interfaces/StoryStateEvent.html +3 -3
  84. package/docs/interfaces/Transaction.html +2 -2
  85. package/docs/interfaces/TransactionHistoryResponse.html +2 -2
  86. package/docs/modules.html +1 -1
  87. package/docs/types/PromptScope.html +1 -1
  88. package/package.json +1 -1
@@ -1,21 +1,141 @@
1
- [
2
- {
3
- "name": "GPT Image 1.5",
4
- "description": "High quality; consistent characters across scenes",
5
- "service": "OpenAI",
6
- "model": "gpt-image-1.5",
7
- "cost": 21
8
- },
9
- {
10
- "name": "GPT Image 1 Mini",
11
- "description": "Mediocre quality; some character consistency",
12
- "service": "OpenAI",
13
- "model": "gpt-image-1-mini"
14
- },
15
- {
16
- "name": "No images",
17
- "description": "Disable image generation (no real API calls)",
18
- "service": "",
19
- "model": ""
20
- }
21
- ]
1
+ [
2
+ {
3
+ "name": "FLUX.1 Kontext (edit)",
4
+ "description": "Image-to-image editing; maintains character consistency",
5
+ "type": "image-to-image",
6
+ "service": "FalAI",
7
+ "model": "fal-ai/flux-pro/kontext/multi",
8
+ "centsPerImage": 4,
9
+ "imageProperties": {
10
+ "aspect_ratio": "1:1",
11
+ "safety_tolerance": "2",
12
+ "num_images": 1,
13
+ "output_format": "png"
14
+ }
15
+ },
16
+ {
17
+ "name": "FLUX.1 Kontext",
18
+ "description": "",
19
+ "type": "text-to-image",
20
+ "service": "FalAI",
21
+ "model": "fal-ai/flux-pro/kontext/text-to-image",
22
+ "centsPerImage": 4,
23
+ "imageProperties": {
24
+ "aspect_ratio": "1:1",
25
+ "safety_tolerance": "2",
26
+ "num_images": 1,
27
+ "output_format": "png"
28
+ }
29
+ },
30
+ {
31
+ "name": "GPT Image 1.5",
32
+ "description": "High quality; consistent characters across scenes",
33
+ "type": "text-to-image",
34
+ "service": "OpenAI",
35
+ "model": "gpt-image-1.5",
36
+ "centsPerImage": 21,
37
+ "imageProperties": {
38
+ "size": "1024x1024",
39
+ "quality": "auto",
40
+ "moderation": "low"
41
+ }
42
+ },
43
+ {
44
+ "name": "GPT Image 1.5 (edit)",
45
+ "description": "High quality image editing with reference images",
46
+ "type": "image-to-image",
47
+ "service": "OpenAI",
48
+ "model": "gpt-image-1.5",
49
+ "centsPerImage": 21,
50
+ "imageProperties": {
51
+ "size": "1024x1024"
52
+ }
53
+ },
54
+ {
55
+ "name": "GPT Image 1 Mini",
56
+ "description": "Mediocre quality; some character consistency",
57
+ "type": "text-to-image",
58
+ "service": "OpenAI",
59
+ "model": "gpt-image-1-mini",
60
+ "centsPerImage": 10,
61
+ "imageProperties": {
62
+ "size": "1024x1024",
63
+ "quality": "auto",
64
+ "moderation": "low"
65
+ }
66
+ },
67
+ {
68
+ "name": "FLUX.2 MAX",
69
+ "description": "Cheap",
70
+ "type": "text-to-image",
71
+ "service": "TogetherAI",
72
+ "model": "black-forest-labs/FLUX.2-max",
73
+ "centsPerImage": 4,
74
+ "imageProperties": {
75
+ "width": 1024,
76
+ "height": 1024,
77
+ "disable_safety_checker": false,
78
+ "response_format": "base64"
79
+ }
80
+ },
81
+ {
82
+ "name": "Stable Diffusion 3",
83
+ "description": "Laughably poor quality",
84
+ "type": "text-to-image",
85
+ "service": "TogetherAI",
86
+ "model": "stabilityai/stable-diffusion-3-medium",
87
+ "centsPerImage": 4,
88
+ "imageProperties": {
89
+ "width": 1024,
90
+ "height": 1024,
91
+ "disable_safety_checker": false,
92
+ "response_format": "base64"
93
+ }
94
+ },
95
+ {
96
+ "name": "Google Imagen 4",
97
+ "description": "No character consistency",
98
+ "type": "text-to-image",
99
+ "service": "GoogleAI",
100
+ "model": "imagen-4.0-generate-001",
101
+ "centsPerImage": 4,
102
+ "imageProperties": {
103
+ "numberOfImages": 1,
104
+ "aspectRatio": "1:1"
105
+ }
106
+ },
107
+ {
108
+ "name": "Nano Banana Pro",
109
+ "description": "",
110
+ "type": "text-to-image",
111
+ "service": "FalAI",
112
+ "model": "fal-ai/nano-banana-pro",
113
+ "centsPerImage": 15,
114
+ "imageProperties": {
115
+ "image_size": { "width": 1024, "height": 1024 },
116
+ "safety_tolerance": "2",
117
+ "num_images": 1,
118
+ "output_format": "png"
119
+ }
120
+ },
121
+ {
122
+ "name": "Nano Banana",
123
+ "description": "",
124
+ "type": "text-to-image",
125
+ "service": "FalAI",
126
+ "model": "fal-ai/nano-banana",
127
+ "centsPerImage": 4,
128
+ "imageProperties": {
129
+ "image_size": { "width": 1024, "height": 1024 },
130
+ "safety_tolerance": "2",
131
+ "num_images": 1,
132
+ "output_format": "png"
133
+ }
134
+ },
135
+ {
136
+ "name": "No images",
137
+ "description": "Disable image generation (no real API calls)",
138
+ "service": "",
139
+ "model": ""
140
+ }
141
+ ]
@@ -1,48 +1,135 @@
1
- [
2
- {
3
- "name": "GPT Image 1.5",
4
- "description": "High quality; consistent characters across scenes",
5
- "service": "OpenAI",
6
- "model": "gpt-image-1.5",
7
- "cost": 21
8
- },
9
- {
10
- "name": "GPT Image 1 Mini",
11
- "description": "Mediocre quality; some character consistency",
12
- "service": "OpenAI",
13
- "model": "gpt-image-1-mini"
14
- },
15
- {
16
- "name": "FLUX.2 MAX",
17
- "description": "Cheap",
18
- "service": "TogetherAI",
19
- "model": "black-forest-labs/FLUX.2-max"
20
- },
21
- {
22
- "name": "Stable Diffusion 3",
23
- "description": "Laughably poor quality",
24
- "service": "TogetherAI",
25
- "model": "stabilityai/stable-diffusion-3-medium"
26
- },
27
- {
28
- "name": "Google Imagen 4",
29
- "description": "No character consistency",
30
- "service": "GoogleAI",
31
- "model": "imagen-4.0-generate-001",
32
- "cost": 4
33
- },
34
- {
35
- "name": "Nano Banana Pro",
36
- "description": "",
37
- "service": "FalAI",
38
- "model": "fal-ai/nano-banana-pro",
39
- "cost": 15
40
- },
41
- {
42
- "name": "Nano Banana",
43
- "description": "",
44
- "service": "FalAI",
45
- "model": "fal-ai/nano-banana",
46
- "cost": 4
47
- }
48
- ]
1
+ [
2
+ {
3
+ "name": "FLUX.1 Kontext (edit)",
4
+ "description": "Image-to-image editing; maintains character consistency",
5
+ "type": "image-to-image",
6
+ "service": "FalAI",
7
+ "model": "fal-ai/flux-pro/kontext/multi",
8
+ "centsPerImage": 4,
9
+ "imageProperties": {
10
+ "aspect_ratio": "1:1",
11
+ "safety_tolerance": "2",
12
+ "num_images": 1,
13
+ "output_format": "png"
14
+ }
15
+ },
16
+ {
17
+ "name": "FLUX.1 Kontext",
18
+ "description": "",
19
+ "type": "text-to-image",
20
+ "service": "FalAI",
21
+ "model": "fal-ai/flux-pro/kontext/text-to-image",
22
+ "centsPerImage": 4,
23
+ "imageProperties": {
24
+ "aspect_ratio": "1:1",
25
+ "safety_tolerance": "2",
26
+ "num_images": 1,
27
+ "output_format": "png"
28
+ }
29
+ },
30
+ {
31
+ "name": "GPT Image 1.5",
32
+ "description": "High quality; consistent characters across scenes",
33
+ "type": "text-to-image",
34
+ "service": "OpenAI",
35
+ "model": "gpt-image-1.5",
36
+ "centsPerImage": 21,
37
+ "imageProperties": {
38
+ "size": "1024x1024",
39
+ "quality": "auto",
40
+ "moderation": "low"
41
+ }
42
+ },
43
+ {
44
+ "name": "GPT Image 1.5 (edit)",
45
+ "description": "High quality image editing with reference images",
46
+ "type": "image-to-image",
47
+ "service": "OpenAI",
48
+ "model": "gpt-image-1.5",
49
+ "centsPerImage": 21,
50
+ "imageProperties": {
51
+ "size": "1024x1024"
52
+ }
53
+ },
54
+ {
55
+ "name": "GPT Image 1 Mini",
56
+ "description": "Mediocre quality; some character consistency",
57
+ "type": "text-to-image",
58
+ "service": "OpenAI",
59
+ "model": "gpt-image-1-mini",
60
+ "centsPerImage": 10,
61
+ "imageProperties": {
62
+ "size": "1024x1024",
63
+ "quality": "auto",
64
+ "moderation": "low"
65
+ }
66
+ },
67
+ {
68
+ "name": "FLUX.2 MAX",
69
+ "description": "Cheap",
70
+ "type": "text-to-image",
71
+ "service": "TogetherAI",
72
+ "model": "black-forest-labs/FLUX.2-max",
73
+ "centsPerImage": 4,
74
+ "imageProperties": {
75
+ "width": 1024,
76
+ "height": 1024,
77
+ "disable_safety_checker": false,
78
+ "response_format": "base64"
79
+ }
80
+ },
81
+ {
82
+ "name": "Stable Diffusion 3",
83
+ "description": "Laughably poor quality",
84
+ "type": "text-to-image",
85
+ "service": "TogetherAI",
86
+ "model": "stabilityai/stable-diffusion-3-medium",
87
+ "centsPerImage": 4,
88
+ "imageProperties": {
89
+ "width": 1024,
90
+ "height": 1024,
91
+ "disable_safety_checker": false,
92
+ "response_format": "base64"
93
+ }
94
+ },
95
+ {
96
+ "name": "Google Imagen 4",
97
+ "description": "No character consistency",
98
+ "type": "text-to-image",
99
+ "service": "GoogleAI",
100
+ "model": "imagen-4.0-generate-001",
101
+ "centsPerImage": 4,
102
+ "imageProperties": {
103
+ "numberOfImages": 1,
104
+ "aspectRatio": "1:1"
105
+ }
106
+ },
107
+ {
108
+ "name": "Nano Banana Pro",
109
+ "description": "",
110
+ "type": "text-to-image",
111
+ "service": "FalAI",
112
+ "model": "fal-ai/nano-banana-pro",
113
+ "centsPerImage": 15,
114
+ "imageProperties": {
115
+ "image_size": { "width": 1024, "height": 1024 },
116
+ "safety_tolerance": "2",
117
+ "num_images": 1,
118
+ "output_format": "png"
119
+ }
120
+ },
121
+ {
122
+ "name": "Nano Banana",
123
+ "description": "",
124
+ "type": "text-to-image",
125
+ "service": "FalAI",
126
+ "model": "fal-ai/nano-banana",
127
+ "centsPerImage": 4,
128
+ "imageProperties": {
129
+ "image_size": { "width": 1024, "height": 1024 },
130
+ "safety_tolerance": "2",
131
+ "num_images": 1,
132
+ "output_format": "png"
133
+ }
134
+ }
135
+ ]
@@ -1 +1 @@
1
- 11.330019880000021
1
+ 11.67325472000003
@@ -1,38 +1,41 @@
1
- [
2
- {
3
- "name": "Claude Sonnet 4.6",
4
- "description": "Best storyteller, bar none",
5
- "service": "Anthropic",
6
- "model": "claude-sonnet-4-6",
7
- "cost": "300"
8
- },
9
- {
10
- "name": "Claude Haiku 4.5",
11
- "description": "",
12
- "service": "Anthropic",
13
- "model": "claude-haiku-4-5",
14
- "cost": "80"
15
- },
16
- {
17
- "name": "Claude Opus 4.7",
18
- "description": "Overkill for storytelling",
19
- "service": "Anthropic",
20
- "model": "claude-opus-4-7",
21
- "cost": "1500"
22
- },
23
- {
24
- "name": "Grok 4.20",
25
- "description": "",
26
- "service": "Grok",
27
- "model": "grok-4.20-0309-reasoning",
28
- "cost": "300"
29
- },
30
- {
31
- "name": "Mock",
32
- "description": "Mock LLM for testing (no real API calls)",
33
- "service": "Mock",
34
- "model": "mock-fast-v1",
35
- "cost": "0"
36
- }
37
-
38
- ]
1
+ [
2
+ {
3
+ "name": "Claude Sonnet 4.6",
4
+ "description": "Best storyteller, bar none",
5
+ "service": "Anthropic",
6
+ "model": "claude-sonnet-4-6",
7
+ "small_model": "claude-haiku-4-5",
8
+ "cost": "300"
9
+ },
10
+ {
11
+ "name": "Claude Haiku 4.5",
12
+ "description": "",
13
+ "service": "Anthropic",
14
+ "model": "claude-haiku-4-5",
15
+ "cost": "80"
16
+ },
17
+ {
18
+ "name": "Claude Opus 4.7",
19
+ "description": "Overkill for storytelling",
20
+ "service": "Anthropic",
21
+ "model": "claude-opus-4-7",
22
+ "small_model": "claude-haiku-4-5",
23
+ "cost": "1500"
24
+ },
25
+ {
26
+ "name": "Grok 4.20",
27
+ "description": "",
28
+ "service": "Grok",
29
+ "model": "grok-4.20-0309-reasoning",
30
+ "small_model": "grok-4.20-beta-0309-non-reasoning",
31
+ "cost": "300"
32
+ },
33
+ {
34
+ "name": "Mock",
35
+ "description": "Mock LLM for testing (no real API calls)",
36
+ "service": "Mock",
37
+ "model": "mock-fast-v1",
38
+ "cost": "0"
39
+ }
40
+
41
+ ]
@@ -5,9 +5,13 @@ You are updating the character profile for {{agentName}} as the story progresses
5
5
  {{currentProfile}}
6
6
 
7
7
  ## Recent Story Events (from {{agentName}}'s perspective)
8
+ {{#if formattedHistory}}
8
9
  {{#each formattedHistory}}
9
10
  {{this}}
10
11
  {{/each}}
12
+ {{else}}
13
+ Refer to the conversation history above for recent events from your perspective.
14
+ {{/if}}
11
15
 
12
16
  ## Updated Plot Plan (narrator's eyes only — do not reveal to others)
13
17
  {{plotPlan}}
@@ -0,0 +1,31 @@
1
+ You are updating the portrait of the character {{characterName}} in an interactive story. Their appearance has changed and their existing portrait needs to be edited to reflect how they look now.
2
+
3
+ **Story Scenario:**
4
+ {{scenario}}
5
+
6
+ **Current Character Profile:**
7
+ {{characterProfile}}
8
+
9
+ Your task is to create a detailed visual description of the character as they appear RIGHT NOW. This description will be used to edit their existing portrait image, so focus on their current appearance — including any recent changes — while maintaining the core elements that make the character recognizable.
10
+
11
+ Focus on these key elements:
12
+
13
+ 1. **Physical Appearance**: Face shape, hair (current color, style, length — note any changes), eyes (color, shape), skin tone, build, height, approximate age, facial features (including any new marks, injuries, or changes)
14
+ 2. **Current Clothing and Attire**: What they are wearing NOW — this may have changed from their original portrait
15
+ 3. **Distinctive Features**: Any new scars, wounds, changes to hair, different accessories, or other visual alterations that have occurred during the story
16
+ 4. **Expression and Demeanor**: Their current emotional state and body language — reflect how recent events have affected them
17
+ 5. **Art Style**: Maintain the same high-quality portrait art style as the original image
18
+
19
+ **Important Guidelines:**
20
+ - Prioritize what has CHANGED while preserving what remains the same
21
+ - Be extremely specific about any new or altered features
22
+ - Use concrete, visual language — describe exactly what to edit in the image
23
+ - If clothing changed, describe the new outfit in full detail (colors, materials, style)
24
+ - If injured, describe wounds, bandages, or marks precisely
25
+ - Describe any special items or weapons that they may be visibly displaying
26
+ - Keep the description cohesive so the edit result looks natural and consistent
27
+ - Include appropriate lighting and mood that reflects the character's current situation
28
+
29
+ Create a single, cohesive paragraph (150-200 words) that can be used directly as an image editing prompt. The description should be detailed enough for an AI to accurately update the existing portrait.
30
+
31
+ Return only the visual description text. Do not include any preamble, commentary, or JSON formatting—just the pure descriptive paragraph that will be sent to the image editing system.
@@ -9,7 +9,7 @@
9
9
  - You are fair but realistic - actions have appropriate consequences
10
10
 
11
11
  ## Story Context
12
- You are narrating a story with these characters:
12
+ You are narrating a story with Available Characters:
13
13
  {{#each otherAgents}}
14
14
  - {{this.agentName}}: {{this.description}}
15
15
  {{/each}}
@@ -47,6 +47,15 @@ or if the characters are moving a story in a different direction than the plot p
47
47
  This will cause the system to update the plot plan and the character profiles to move the story along.
48
48
  Try to do this when there is a notable pause (end of day) or a significant transition in the story direction.
49
49
 
50
+ ### Introducing a new character
51
+ If, in the course of the story, the characters meet a new character who is in the Available Characters list,
52
+ You should:
53
+ - Decide whether or not this new character is going to be significant to the story
54
+ - If so, choose a one-word name for that character (which will because their agent name). Prefer a single first name.
55
+ - Include `INTRODUCE: [CharacterName]` in your situation line so the system can create a new agent for that character:
56
+ `# Situation: INTRODUCE: Sergei`
57
+ - If that character is *not* going to be significant in the story and doesn't need their own character agent, simply respond with dialog and narration like always and do not include the "INTRODUCE" tag.
58
+
50
59
  ### When you receive a PASS message
51
60
  This means the user has decided not to take any particular action, so just continue narrating more of the story.
52
61
  If the PASS occurs during a situation where the characters are about to sleep or begin some lengthy task,
@@ -180,6 +189,19 @@ Correct response:
180
189
  # Situation: PROGRESS
181
190
  ```
182
191
 
192
+
193
+ **Example 7: Introducing a new character**
194
+ > Mike says: Excuse me, sir. Do you run this museum?
195
+
196
+ Correct response:
197
+ ```
198
+ # Situation: INTRODUCE: Benjamin
199
+
200
+ That's right. I'm Benjamin Morris, the curator of this museum. What can I do to help you?
201
+ ```
202
+ NOTE: Typically, the narrator only responds to requested actions not dialog, but the Moderator routed this dialog message to the Narrator because that character was not on its Available Characters list.
203
+ If the Narrator decides that this museum curator is going to be central to the story, the Narrator sets the Situation to "INTRODUCE: Benjamin" which causes a new agent to be created for that character.
204
+
183
205
  ## Important Reminders
184
206
  - **Narrate consequences, not feelings** - describe what happens, what characters sense
185
207
  - **Use your plot plan** - weave in prepared story elements, secrets, and twists
@@ -5,9 +5,7 @@ You are advancing the plot plan for the interactive story as it progresses to th
5
5
  {{currentPlotPlan}}
6
6
 
7
7
  ## Recent Story Events
8
- {{#each formattedHistory}}
9
- {{this}}
10
- {{/each}}
8
+ Refer to the conversation history above for recent events.
11
9
 
12
10
  ## Your Task
13
11
  Your task is to create an updated, comprehensive plot plan in markdown format that will guide the next phase of the story. This updated plot plan is **FOR YOUR EYES ONLY** - the characters will not see it. You will consult this plan as you continue to narrate outcomes, introduce events, and guide the narrative.
@@ -1,29 +1,36 @@
1
- {
2
- "name": "moderate",
3
- "description": "Route messages to appropriate agents",
4
- "type": "object",
5
- "properties": {
6
- "action": {
7
- "type": "string",
8
- "enum": ["relay", "relay_silent"],
9
- "description": "Use 'relay' to pass message and log it to room history. Use 'relay_silent' for internal processing without logging to room (e.g., character actions going to narrator)"
10
- },
11
- "content": {
12
- "type": "string",
13
- "description": "The modified contents of the message to relay. Empty for no modifications"
14
- },
15
- "name": {
16
- "type": "string",
17
- "description": "The name of the agent who should respond next"
18
- },
19
- "targets": {
20
- "type": "array",
21
- "description": "List of agent names who should receive the message",
22
- "items": {
23
- "type": "string"
24
- }
25
- }
26
- },
27
- "required": ["action", "content", "name", "targets"],
28
- "additionalProperties": false
29
- }
1
+ {
2
+ "name": "moderate",
3
+ "description": "Route messages to appropriate agents",
4
+ "type": "object",
5
+ "properties": {
6
+ "action": {
7
+ "type": "string",
8
+ "enum": ["relay", "relay_silent"],
9
+ "description": "Use 'relay' to pass message and log it to room history. Use 'relay_silent' for internal processing without logging to room (e.g., character actions going to narrator)"
10
+ },
11
+ "content": {
12
+ "type": "string",
13
+ "description": "The modified contents of the message to relay. Empty for no modifications"
14
+ },
15
+ "name": {
16
+ "type": "string",
17
+ "description": "The name of the agent who should respond next"
18
+ },
19
+ "targets": {
20
+ "type": "array",
21
+ "description": "List of agent names who should receive the message",
22
+ "items": {
23
+ "type": "string"
24
+ }
25
+ },
26
+ "update_portrait": {
27
+ "type": "array",
28
+ "description": "List of agent names whose visible appearance has changed (e.g., new outfit, injury, transformation, visible carried item). Leave empty if no visual changes occurred.",
29
+ "items": {
30
+ "type": "string"
31
+ }
32
+ }
33
+ },
34
+ "required": ["action", "content", "name", "targets", "update_portrait"],
35
+ "additionalProperties": false
36
+ }