briyah 1.1.8 → 1.2.1

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 (116) hide show
  1. package/data/common/config/markup +1 -1
  2. package/data/common/config/model_prices.json +3775 -653
  3. package/data/common/prompts/character/create_character.json +33 -29
  4. package/data/common/prompts/character/create_character.prompt +13 -2
  5. package/data/common/prompts/character/create_user_character.json +32 -28
  6. package/data/common/prompts/character/create_user_character.prompt +13 -2
  7. package/data/common/prompts/character/progress_character.json +22 -18
  8. package/data/common/prompts/character/progress_character.prompt +6 -2
  9. package/data/common/prompts/illustrator/describe_character.prompt +31 -0
  10. package/data/common/prompts/illustrator/describe_scene.json +19 -1
  11. package/data/common/prompts/illustrator/describe_scene.prompt +2 -1
  12. package/data/common/prompts/narrator/perceive.prompt +96 -35
  13. package/data/common/prompts/story_moderator/moderate.json +33 -7
  14. package/data/common/prompts/story_moderator/moderate.prompt +166 -20
  15. package/dist-sdk/server/src/ai/LLM/anthropic.service.d.ts +5 -2
  16. package/dist-sdk/server/src/ai/LLM/anthropic.service.js +27 -15
  17. package/dist-sdk/server/src/ai/LLM/base-ai.service.d.ts +6 -2
  18. package/dist-sdk/server/src/ai/LLM/base-ai.service.js +20 -10
  19. package/dist-sdk/server/src/ai/LLM/deepseek.service.js +10 -0
  20. package/dist-sdk/server/src/ai/LLM/googleai.service.js +11 -8
  21. package/dist-sdk/server/src/ai/LLM/grok.service.js +8 -5
  22. package/dist-sdk/server/src/ai/LLM/openai.service.js +12 -11
  23. package/dist-sdk/server/src/ai/LLM/together.service.js +9 -6
  24. package/dist-sdk/server/src/ai/agent-factory.d.ts +5 -3
  25. package/dist-sdk/server/src/ai/agent-factory.js +6 -4
  26. package/dist-sdk/server/src/ai/agent-store.service.d.ts +5 -3
  27. package/dist-sdk/server/src/ai/agent-store.service.js +15 -15
  28. package/dist-sdk/server/src/ai/agent.d.ts +9 -6
  29. package/dist-sdk/server/src/ai/agent.js +22 -6
  30. package/dist-sdk/server/src/ai/ai-debug-logger.d.ts +10 -0
  31. package/dist-sdk/server/src/ai/ai-debug-logger.js +82 -0
  32. package/dist-sdk/server/src/ai/artifact.module.js +2 -2
  33. package/dist-sdk/server/src/ai/artifact.service.d.ts +3 -3
  34. package/dist-sdk/server/src/ai/artifact.service.js +6 -6
  35. package/dist-sdk/server/src/ai/attached-file.module.js +2 -2
  36. package/dist-sdk/server/src/ai/attached-file.service.d.ts +3 -3
  37. package/dist-sdk/server/src/ai/attached-file.service.js +6 -6
  38. package/dist-sdk/server/src/app/balance.service.d.ts +3 -3
  39. package/dist-sdk/server/src/app/balance.service.js +7 -7
  40. package/dist-sdk/server/src/app/transaction.service.d.ts +3 -3
  41. package/dist-sdk/server/src/app/transaction.service.js +4 -4
  42. package/dist-sdk/server/src/app/user-service-factory.d.ts +3 -1
  43. package/dist-sdk/server/src/app/user-service-factory.js +18 -14
  44. package/dist-sdk/server/src/app/user-service-manager.d.ts +1 -3
  45. package/dist-sdk/server/src/app.service.d.ts +3 -3
  46. package/dist-sdk/server/src/app.service.js +30 -30
  47. package/dist-sdk/server/src/config/env-config.d.ts +3 -0
  48. package/dist-sdk/server/src/config/env-config.js +2 -0
  49. package/dist-sdk/server/src/config/user-paths.module.d.ts +2 -0
  50. package/dist-sdk/server/src/config/{configuration.module.js → user-paths.module.js} +8 -8
  51. package/dist-sdk/server/src/config/{configuration.service.d.ts → user-paths.service.d.ts} +1 -1
  52. package/dist-sdk/server/src/config/{configuration.service.js → user-paths.service.js} +3 -3
  53. package/dist-sdk/server/src/room/message.d.ts +1 -1
  54. package/dist-sdk/server/src/room/message.js +1 -1
  55. package/dist-sdk/server/src/room/room-store.module.js +2 -2
  56. package/dist-sdk/server/src/room/room-store.service.d.ts +3 -3
  57. package/dist-sdk/server/src/room/room-store.service.js +6 -6
  58. package/dist-sdk/server/src/room/room.d.ts +1 -0
  59. package/dist-sdk/server/src/room/room.js +43 -19
  60. package/dist-sdk/server/src/sdk/briyah-config.d.ts +2 -1
  61. package/dist-sdk/server/src/sdk/briyah-config.js +4 -0
  62. package/dist-sdk/server/src/sdk/briyah.js +1 -1
  63. package/dist-sdk/server/src/story/story-store.service.d.ts +3 -3
  64. package/dist-sdk/server/src/story/story-store.service.js +6 -6
  65. package/dist-sdk/server/src/story/story.service.d.ts +10 -3
  66. package/dist-sdk/server/src/story/story.service.js +233 -99
  67. package/dist-sdk/shared/types/app.types.d.ts +1 -0
  68. package/docs/assets/hierarchy.js +1 -1
  69. package/docs/assets/search.js +1 -1
  70. package/docs/classes/Agent.html +16 -16
  71. package/docs/classes/Briyah.html +12 -12
  72. package/docs/classes/BriyahConfigService.html +5 -5
  73. package/docs/classes/Room.html +24 -24
  74. package/docs/classes/RoomMessage.html +11 -11
  75. package/docs/enums/MessageAction.html +3 -3
  76. package/docs/hierarchy.html +1 -1
  77. package/docs/index.html +2 -2
  78. package/docs/interfaces/AgentInfo.html +2 -2
  79. package/docs/interfaces/AgentMessagesResponse.html +2 -2
  80. package/docs/interfaces/AppService.html +154 -154
  81. package/docs/interfaces/Artifact.html +3 -3
  82. package/docs/interfaces/ArtifactMetadata.html +2 -2
  83. package/docs/interfaces/AttachDocumentResponse.html +2 -2
  84. package/docs/interfaces/BriyahConfigOptions.html +7 -7
  85. package/docs/interfaces/ChapterInfo.html +2 -2
  86. package/docs/interfaces/Character.html +2 -2
  87. package/docs/interfaces/CreateAgentResponse.html +2 -2
  88. package/docs/interfaces/CreateRoomResponse.html +2 -2
  89. package/docs/interfaces/CreateStoryResponse.html +2 -2
  90. package/docs/interfaces/FileList.html +2 -2
  91. package/docs/interfaces/LoggingOptions.html +10 -6
  92. package/docs/interfaces/Message.html +2 -2
  93. package/docs/interfaces/ModelInfo.html +2 -2
  94. package/docs/interfaces/PreparedPromptResponse.html +2 -2
  95. package/docs/interfaces/ProcessTextResponse.html +2 -2
  96. package/docs/interfaces/PromptFile.html +2 -2
  97. package/docs/interfaces/PromptFileContent.html +2 -2
  98. package/docs/interfaces/PromptFilesResponse.html +2 -2
  99. package/docs/interfaces/PromptFolder.html +2 -2
  100. package/docs/interfaces/PromptFoldersResponse.html +2 -2
  101. package/docs/interfaces/RoomDetails.html +2 -2
  102. package/docs/interfaces/RoomInfo.html +2 -2
  103. package/docs/interfaces/RoomMessagesResponse.html +2 -2
  104. package/docs/interfaces/StoryErrorEvent.html +3 -3
  105. package/docs/interfaces/StoryIdea.html +2 -2
  106. package/docs/interfaces/StoryInfo.html +3 -3
  107. package/docs/interfaces/StoryIntroduceCharacterEvent.html +3 -3
  108. package/docs/interfaces/StoryProgressChapterEvent.html +3 -3
  109. package/docs/interfaces/StoryState.html +5 -5
  110. package/docs/interfaces/StoryStateEvent.html +3 -3
  111. package/docs/interfaces/Transaction.html +2 -2
  112. package/docs/interfaces/TransactionHistoryResponse.html +2 -2
  113. package/docs/modules.html +1 -1
  114. package/docs/types/PromptScope.html +1 -1
  115. package/package.json +2 -1
  116. package/dist-sdk/server/src/config/configuration.module.d.ts +0 -2
@@ -201,19 +201,14 @@ class Room {
201
201
  let normalizedAction;
202
202
  if (typeof response !== 'object') {
203
203
  needsModeration = true;
204
- const lines = response.split('\n');
205
- for (const line of lines) {
206
- const trimmedLine = line.trim();
207
- if (trimmedLine.startsWith('# Situation:')) {
208
- situation = trimmedLine.substring('# Situation:'.length).trim();
209
- content = lines
210
- .filter((l) => !l.startsWith('# Situation:'))
211
- .join('\n')
212
- .trimStart();
213
- break;
214
- }
204
+ const parsed = Room.extractPreamble(response);
205
+ if (parsed) {
206
+ situation = parsed.preamble;
207
+ content = parsed.content;
208
+ }
209
+ else {
210
+ situation = undefined;
215
211
  }
216
- situation = situation || undefined;
217
212
  }
218
213
  else if (!response.content) {
219
214
  needsModeration = true;
@@ -244,11 +239,31 @@ class Room {
244
239
  }
245
240
  situation = response.situation || undefined;
246
241
  const msg = new message_1.RoomMessage(agent.agentNickname, normalizedAction, response.content, targets, response.name, situation);
247
- if (Array.isArray(response.update_portrait) && response.update_portrait.length > 0) {
248
- msg.updatePortrait = response.update_portrait;
242
+ if (response.changes && typeof response.changes === 'object') {
243
+ msg.changes = response.changes;
249
244
  }
250
245
  return msg;
251
246
  }
247
+ static extractPreamble(response) {
248
+ const lines = response.split('\n');
249
+ let i = 0;
250
+ while (i < lines.length && lines[i].trim() === '')
251
+ i++;
252
+ const tagLineRe = /^\s*<\w+>[\s\S]*?<\/\w+>\s*$/;
253
+ if (i >= lines.length || !tagLineRe.test(lines[i]))
254
+ return null;
255
+ const preambleLines = [];
256
+ let j = i;
257
+ while (j < lines.length && tagLineRe.test(lines[j])) {
258
+ preambleLines.push(lines[j].trim());
259
+ j++;
260
+ }
261
+ const preamble = preambleLines.join('\n');
262
+ if (j < lines.length && lines[j].trim() === '')
263
+ j++;
264
+ const content = lines.slice(j).join('\n').trimStart();
265
+ return { preamble, content };
266
+ }
252
267
  static coerceMessageAction(raw) {
253
268
  if (typeof raw !== 'string')
254
269
  return undefined;
@@ -324,6 +339,13 @@ class Room {
324
339
  async moderate(moderatorAgent, message, onResponse) {
325
340
  const humanAgent = this.getAgents().find((agent) => agent.isControlledByHuman);
326
341
  const humanAgentName = humanAgent ? humanAgent.agentNickname : 'Player';
342
+ const visibleArtifacts = this.getVisibleArtifacts(moderatorAgent.agentNickname)
343
+ .map((a) => `${a.name} (by ${a.creator}): ${a.body}`)
344
+ .join('\n\n');
345
+ const invisibleArtifactNames = this.getArtifacts()
346
+ .filter((a) => !this.getVisibleArtifacts(moderatorAgent.agentNickname).includes(a))
347
+ .map((a) => a.name)
348
+ .join(', ');
327
349
  const variables = {
328
350
  agentName: moderatorAgent.agentName,
329
351
  agentNickname: moderatorAgent.agentNickname || moderatorAgent.agentName,
@@ -335,6 +357,8 @@ class Room {
335
357
  scenario: this.getGoal(),
336
358
  humanAgent: humanAgent,
337
359
  humanAgentName: humanAgentName,
360
+ visibleArtifacts: visibleArtifacts,
361
+ invisibleArtifactNames: invisibleArtifactNames,
338
362
  };
339
363
  let prompt = `
340
364
  Current Situation: ${this.getSituation()}
@@ -648,11 +672,11 @@ Recent Message: ${message.getContent()}
648
672
  originalMessage.content = content;
649
673
  }
650
674
  if (this.checkAgentNicknameMatch(originalMessage.sender, responderNickname)) {
651
- let responder = this.getHumanAgentName();
652
- if (!responder)
653
- responder = roomLeaderName;
654
- this.setCurrentSpeaker(responder);
655
- logger_1.logger.warn(`Moderator routed message to sender: ${originalMessage.sender}. Setting responder to room leader: ${responder}`);
675
+ logger_1.logger.warn(`Moderator routed message to sender: ${originalMessage.sender}. Reassigning responder to room leader: ${roomLeaderName}`);
676
+ responderNickname = roomLeaderName;
677
+ moderatorMessage.name = roomLeaderName;
678
+ if (!targets.includes(roomLeaderName))
679
+ targets.push(roomLeaderName);
656
680
  }
657
681
  logger_1.logger.log(`Moderator routing: sender=${originalMessage.sender} action=${moderatorMessage.action}, name=${responderNickname}, targets=${targets.join(', ')}`);
658
682
  if (moderatorMessage.action === app_types_1.MessageAction.RELAY) {
@@ -1,9 +1,10 @@
1
- import { IConfigService } from '../app/user-service-manager';
1
+ import { IConfigService } from '../config/env-config';
2
2
  export interface LoggingOptions {
3
3
  enabled?: boolean;
4
4
  logFile?: string;
5
5
  console?: boolean;
6
6
  level?: 'debug' | 'log' | 'warn' | 'error';
7
+ aiDebug?: boolean;
7
8
  }
8
9
  export interface BriyahConfigOptions {
9
10
  dataPath?: string;
@@ -23,6 +23,10 @@ class BriyahConfigService {
23
23
  this.env.DEFAULT_MARKUP_RATE = String(options.markupRate);
24
24
  process.env.DEFAULT_MARKUP_RATE = String(options.markupRate);
25
25
  }
26
+ if (options?.logging?.aiDebug) {
27
+ this.env.AI_DEBUG = 'true';
28
+ process.env.AI_DEBUG = 'true';
29
+ }
26
30
  }
27
31
  get(key, defaultValue) {
28
32
  const value = this.env[key];
@@ -115,7 +115,7 @@ class Briyah {
115
115
  this.balanceMessageService = new balance_message_service_1.BalanceMessageService();
116
116
  this.publishedAgentsService = new published_agents_service_1.PublishedAgentsService();
117
117
  this.publishedRoomsService = new published_rooms_service_1.PublishedRoomsService();
118
- this.userServiceFactory = new user_service_factory_1.UserServiceFactory(this.aiFactoryService, this.agentMessageService, this.roomMessageService, this.storyProgressService, this.storyMessageService, this.publishedAgentsService, this.publishedRoomsService, this.balanceMessageService);
118
+ this.userServiceFactory = new user_service_factory_1.UserServiceFactory(this.aiFactoryService, this.agentMessageService, this.roomMessageService, this.storyProgressService, this.storyMessageService, this.publishedAgentsService, this.publishedRoomsService, this.balanceMessageService, this.configService);
119
119
  this.userServiceManager = new user_service_manager_1.UserServiceManager(this.userServiceFactory, this.configService);
120
120
  }
121
121
  async init() {
@@ -1,12 +1,12 @@
1
- import { ConfigurationService } from '../config/configuration.service';
1
+ import { UserPathsService } from '../config/user-paths.service';
2
2
  import { StoryInfo, ChapterInfo } from '../../../shared/types/app.types';
3
3
  import { RoomMessage } from '../room/message';
4
4
  import { RoomStoreService } from '../room/room-store.service';
5
5
  export declare class StoryStoreService {
6
- private readonly configService;
6
+ private readonly userPaths;
7
7
  private readonly roomStore;
8
8
  private readonly storiesDir;
9
- constructor(configService: ConfigurationService, roomStore: RoomStoreService);
9
+ constructor(userPaths: UserPathsService, roomStore: RoomStoreService);
10
10
  createStory(name: string): StoryInfo;
11
11
  getStory(id: string): StoryInfo | null;
12
12
  updateStoryMetadata(id: string, storyInfo: StoryInfo): boolean;
@@ -45,19 +45,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.StoryStoreService = void 0;
46
46
  const common_1 = require("@nestjs/common");
47
47
  const crypto_1 = require("crypto");
48
- const configuration_service_1 = require("../config/configuration.service");
48
+ const user_paths_service_1 = require("../config/user-paths.service");
49
49
  const fs = __importStar(require("fs"));
50
50
  const path = __importStar(require("path"));
51
51
  const room_store_service_1 = require("../room/room-store.service");
52
52
  const logger_1 = require("../common/logger");
53
53
  let StoryStoreService = class StoryStoreService {
54
- configService;
54
+ userPaths;
55
55
  roomStore;
56
56
  storiesDir;
57
- constructor(configService, roomStore) {
58
- this.configService = configService;
57
+ constructor(userPaths, roomStore) {
58
+ this.userPaths = userPaths;
59
59
  this.roomStore = roomStore;
60
- this.storiesDir = path.join(this.configService.getUserDataDir(), 'stories');
60
+ this.storiesDir = path.join(this.userPaths.getUserDataDir(), 'stories');
61
61
  if (!fs.existsSync(this.storiesDir)) {
62
62
  fs.mkdirSync(this.storiesDir, { recursive: true });
63
63
  }
@@ -426,6 +426,6 @@ let StoryStoreService = class StoryStoreService {
426
426
  exports.StoryStoreService = StoryStoreService;
427
427
  exports.StoryStoreService = StoryStoreService = __decorate([
428
428
  (0, common_1.Injectable)(),
429
- __metadata("design:paramtypes", [configuration_service_1.ConfigurationService,
429
+ __metadata("design:paramtypes", [user_paths_service_1.UserPathsService,
430
430
  room_store_service_1.RoomStoreService])
431
431
  ], StoryStoreService);
@@ -7,7 +7,7 @@ import { Room } from '../room/room';
7
7
  import { RoomFactory } from '../room/room-factory';
8
8
  import { RoomStoreService } from '../room/room-store.service';
9
9
  import { StoryInfo, StoryState, Character } from '../../../shared/types/app.types';
10
- import { ConfigurationService } from '../config/configuration.service';
10
+ import { UserPathsService } from '../config/user-paths.service';
11
11
  import { ArtifactService } from '../ai/artifact.service';
12
12
  import { Readable } from 'stream';
13
13
  export declare class StoryService {
@@ -16,12 +16,12 @@ export declare class StoryService {
16
16
  private readonly roomStore;
17
17
  private readonly progressService;
18
18
  private readonly messageService;
19
- private readonly configService;
19
+ private readonly userPaths;
20
20
  private readonly agentFactory;
21
21
  private readonly roomFactory;
22
22
  private readonly storyArtifactServices;
23
23
  private readonly chaptersInProgress;
24
- constructor(storyStore: StoryStoreService, agentStore: AgentStoreService, roomStore: RoomStoreService, progressService: StoryProgressService, messageService: StoryMessageService, configService: ConfigurationService, agentFactory: AgentFactory, roomFactory: RoomFactory);
24
+ constructor(storyStore: StoryStoreService, agentStore: AgentStoreService, roomStore: RoomStoreService, progressService: StoryProgressService, messageService: StoryMessageService, userPaths: UserPathsService, agentFactory: AgentFactory, roomFactory: RoomFactory);
25
25
  getProgressEmitter(storyId: string): import("node:events")<any>;
26
26
  getMessageEmitter(storyId: string): import("node:events")<any>;
27
27
  cleanupProgressEmitter(storyId: string): void;
@@ -77,14 +77,21 @@ export declare class StoryService {
77
77
  private compactAgentHistories;
78
78
  private extractMarkdownContent;
79
79
  private updatePlotPlan;
80
+ private publishInventoryArtifact;
81
+ private applyInventoryUpdates;
80
82
  private updateCharacterProfiles;
81
83
  private getImageModelConfig;
84
+ private getImagePropertiesForAgent;
82
85
  private createArtistAgent;
83
86
  private generateCharacterPortrait;
87
+ private generatePortraitForName;
84
88
  private updateCharacterPortrait;
85
89
  private generateSceneIllustration;
90
+ private ensureMinorCharacterPortraits;
86
91
  private generateSceneReference;
87
92
  private generateStoryImage;
93
+ private parseNarratorPreamble;
94
+ private formatDisplaySituation;
88
95
  private updateStorySituation;
89
96
  generateStoryMarkdown(storyId: string): Promise<string>;
90
97
  exportStoryData(storyId: string): Promise<{