briyah 1.0.7 → 1.0.9

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 (96) hide show
  1. package/README.md +31 -21
  2. package/dist/server/src/ai/LLM/anthropic.service.js +16 -8
  3. package/dist/server/src/ai/LLM/base-ai.service.js +5 -4
  4. package/dist/server/src/ai/LLM/deepseek.service.js +8 -6
  5. package/dist/server/src/ai/LLM/fal.service.js +15 -14
  6. package/dist/server/src/ai/LLM/googleai.service.js +10 -8
  7. package/dist/server/src/ai/LLM/grok.service.js +9 -7
  8. package/dist/server/src/ai/LLM/mock.service.js +7 -6
  9. package/dist/server/src/ai/LLM/openai.service.js +15 -13
  10. package/dist/server/src/ai/LLM/together.service.js +10 -8
  11. package/dist/server/src/ai/LLM/vertexai.service.js +10 -9
  12. package/dist/server/src/ai/agent-store.service.js +12 -11
  13. package/dist/server/src/ai/artifact.service.js +7 -6
  14. package/dist/server/src/ai/attached-file.service.js +8 -7
  15. package/dist/server/src/ai/published-agents.service.js +5 -4
  16. package/dist/server/src/app/balance.service.js +7 -6
  17. package/dist/server/src/app/stripe.controller.js +12 -11
  18. package/dist/server/src/app/stripe.service.js +20 -19
  19. package/dist/server/src/app/transaction.service.js +6 -5
  20. package/dist/server/src/app/user-service-manager.js +6 -5
  21. package/dist/server/src/app.controller.js +95 -94
  22. package/dist/server/src/app.service.js +31 -30
  23. package/dist/server/src/auth/auth.controller.js +21 -20
  24. package/dist/server/src/auth/jwt-auth.guard.js +4 -3
  25. package/dist/server/src/auth/rate-limit.service.d.ts +0 -1
  26. package/dist/server/src/auth/rate-limit.service.js +6 -7
  27. package/dist/server/src/auth/twilio.service.js +4 -3
  28. package/dist/server/src/auth/users.service.js +5 -4
  29. package/dist/server/src/common/logger.d.ts +21 -0
  30. package/dist/server/src/common/logger.js +83 -0
  31. package/dist/server/src/room/artifact-store.service.d.ts +0 -1
  32. package/dist/server/src/room/artifact-store.service.js +16 -17
  33. package/dist/server/src/room/published-rooms.service.js +3 -2
  34. package/dist/server/src/room/room-store.service.js +17 -16
  35. package/dist/server/src/room/room.js +14 -13
  36. package/dist/server/src/sdk/briyah-config.d.ts +7 -0
  37. package/dist/server/src/sdk/briyah-config.js +1 -0
  38. package/dist/server/src/sdk/briyah.js +13 -4
  39. package/dist/server/src/sdk/index.d.ts +4 -1
  40. package/dist/server/src/sdk/index.js +3 -1
  41. package/dist/server/src/story/story-progress.service.js +2 -1
  42. package/dist/server/src/story/story-store.service.js +28 -27
  43. package/dist/server/src/story/story.service.js +114 -113
  44. package/dist/shared/types/app.types.d.ts +1 -2
  45. package/docs/.nojekyll +1 -0
  46. package/docs/assets/hierarchy.js +1 -0
  47. package/docs/assets/highlight.css +106 -0
  48. package/docs/assets/icons.js +18 -0
  49. package/docs/assets/icons.svg +1 -0
  50. package/docs/assets/main.js +60 -0
  51. package/docs/assets/navigation.js +1 -0
  52. package/docs/assets/search.js +1 -0
  53. package/docs/assets/style.css +1633 -0
  54. package/docs/classes/Agent.html +87 -0
  55. package/docs/classes/Briyah.html +64 -0
  56. package/docs/classes/BriyahConfigService.html +12 -0
  57. package/docs/classes/Room.html +119 -0
  58. package/docs/classes/RoomMessage.html +41 -0
  59. package/docs/enums/MessageAction.html +13 -0
  60. package/docs/hierarchy.html +1 -0
  61. package/docs/index.html +136 -0
  62. package/docs/interfaces/AgentInfo.html +17 -0
  63. package/docs/interfaces/AgentMessagesResponse.html +5 -0
  64. package/docs/interfaces/AppService.html +741 -0
  65. package/docs/interfaces/Artifact.html +6 -0
  66. package/docs/interfaces/ArtifactMetadata.html +8 -0
  67. package/docs/interfaces/AttachDocumentResponse.html +3 -0
  68. package/docs/interfaces/BriyahConfigOptions.html +16 -0
  69. package/docs/interfaces/ChapterInfo.html +3 -0
  70. package/docs/interfaces/Character.html +7 -0
  71. package/docs/interfaces/CreateAgentResponse.html +2 -0
  72. package/docs/interfaces/CreateRoomResponse.html +3 -0
  73. package/docs/interfaces/CreateStoryResponse.html +2 -0
  74. package/docs/interfaces/FileList.html +2 -0
  75. package/docs/interfaces/LoggingOptions.html +9 -0
  76. package/docs/interfaces/Message.html +6 -0
  77. package/docs/interfaces/ModelInfo.html +5 -0
  78. package/docs/interfaces/PreparedPromptResponse.html +3 -0
  79. package/docs/interfaces/ProcessTextResponse.html +7 -0
  80. package/docs/interfaces/PromptFile.html +3 -0
  81. package/docs/interfaces/PromptFileContent.html +3 -0
  82. package/docs/interfaces/PromptFilesResponse.html +2 -0
  83. package/docs/interfaces/PromptFolder.html +3 -0
  84. package/docs/interfaces/PromptFoldersResponse.html +2 -0
  85. package/docs/interfaces/RoomDetails.html +9 -0
  86. package/docs/interfaces/RoomInfo.html +5 -0
  87. package/docs/interfaces/RoomMessagesResponse.html +3 -0
  88. package/docs/interfaces/StoryIdea.html +5 -0
  89. package/docs/interfaces/StoryInfo.html +21 -0
  90. package/docs/interfaces/StoryMessageUpdate.html +6 -0
  91. package/docs/interfaces/StoryState.html +15 -0
  92. package/docs/interfaces/StorySuggestion.html +9 -0
  93. package/docs/modules.html +1 -0
  94. package/docs/types/PromptScope.html +1 -0
  95. package/package.json +6 -3
  96. package/data/common/config/story_ideas.txt +0 -6
@@ -38,14 +38,13 @@ var __importStar = (this && this.__importStar) || (function () {
38
38
  return result;
39
39
  };
40
40
  })();
41
- var ArtifactStoreService_1;
42
41
  Object.defineProperty(exports, "__esModule", { value: true });
43
42
  exports.ArtifactStoreService = void 0;
44
43
  const common_1 = require("@nestjs/common");
45
44
  const fs = __importStar(require("fs"));
46
45
  const path = __importStar(require("path"));
47
- let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
48
- logger = new common_1.Logger(ArtifactStoreService_1.name);
46
+ const logger_1 = require("../common/logger");
47
+ let ArtifactStoreService = class ArtifactStoreService {
49
48
  ARTIFACT_EXTENSION = '.artifact';
50
49
  MAX_FILENAME_LENGTH = 200;
51
50
  UNSAFE_CHARS_REGEX = /[<>:"/\\|?*]/g;
@@ -60,11 +59,11 @@ let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
60
59
  const content = this.formatArtifactFile(artifact);
61
60
  try {
62
61
  fs.writeFileSync(filePath, content, 'utf-8');
63
- this.logger.log(`Saved artifact "${artifact.name}" to ${filePath}`);
62
+ logger_1.logger.log(`Saved artifact "${artifact.name}" to ${filePath}`);
64
63
  return filePath;
65
64
  }
66
65
  catch (error) {
67
- this.logger.error(`Failed to save artifact "${artifact.name}": ${error.message}`);
66
+ logger_1.logger.error(`Failed to save artifact "${artifact.name}": ${error.message}`);
68
67
  throw error;
69
68
  }
70
69
  }
@@ -86,17 +85,17 @@ let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
86
85
  artifacts.push(artifact);
87
86
  }
88
87
  else {
89
- this.logger.warn(`Skipping invalid artifact file: ${file}`);
88
+ logger_1.logger.warn(`Skipping invalid artifact file: ${file}`);
90
89
  }
91
90
  }
92
91
  catch (error) {
93
- this.logger.error(`Error reading artifact file ${file}: ${error.message}`);
92
+ logger_1.logger.error(`Error reading artifact file ${file}: ${error.message}`);
94
93
  }
95
94
  }
96
- this.logger.log(`Loaded ${artifacts.length} artifacts for room ${roomId}`);
95
+ logger_1.logger.log(`Loaded ${artifacts.length} artifacts for room ${roomId}`);
97
96
  }
98
97
  catch (error) {
99
- this.logger.error(`Error loading artifacts for room ${roomId}: ${error.message}`);
98
+ logger_1.logger.error(`Error loading artifacts for room ${roomId}: ${error.message}`);
100
99
  }
101
100
  return artifacts;
102
101
  }
@@ -114,14 +113,14 @@ let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
114
113
  const artifact = this.parseArtifactFile(content);
115
114
  if (artifact && artifact.name === artifactName) {
116
115
  fs.unlinkSync(filePath);
117
- this.logger.log(`Deleted artifact "${artifactName}" from ${filePath}`);
116
+ logger_1.logger.log(`Deleted artifact "${artifactName}" from ${filePath}`);
118
117
  return true;
119
118
  }
120
119
  }
121
120
  return false;
122
121
  }
123
122
  catch (error) {
124
- this.logger.error(`Error deleting artifact "${artifactName}": ${error.message}`);
123
+ logger_1.logger.error(`Error deleting artifact "${artifactName}": ${error.message}`);
125
124
  return false;
126
125
  }
127
126
  }
@@ -137,10 +136,10 @@ let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
137
136
  const filePath = path.join(roomDir, file);
138
137
  fs.unlinkSync(filePath);
139
138
  }
140
- this.logger.log(`Deleted ${artifactFiles.length} artifact files from room ${roomId}`);
139
+ logger_1.logger.log(`Deleted ${artifactFiles.length} artifact files from room ${roomId}`);
141
140
  }
142
141
  catch (error) {
143
- this.logger.error(`Error deleting artifacts for room ${roomId}: ${error.message}`);
142
+ logger_1.logger.error(`Error deleting artifacts for room ${roomId}: ${error.message}`);
144
143
  }
145
144
  }
146
145
  sanitizeFilename(name, roomDir) {
@@ -166,19 +165,19 @@ let ArtifactStoreService = ArtifactStoreService_1 = class ArtifactStoreService {
166
165
  parseArtifactFile(content) {
167
166
  const lines = content.split('\n');
168
167
  if (lines.length < 4) {
169
- this.logger.error('Invalid artifact file: too few lines');
168
+ logger_1.logger.error('Invalid artifact file: too few lines');
170
169
  return null;
171
170
  }
172
171
  const nameLine = lines[0];
173
172
  const creatorLine = lines[1];
174
173
  const viewersLine = lines[2];
175
174
  if (!nameLine.startsWith('# name: ')) {
176
- this.logger.error('Invalid artifact file: missing or malformed name header');
175
+ logger_1.logger.error('Invalid artifact file: missing or malformed name header');
177
176
  return null;
178
177
  }
179
178
  const name = nameLine.substring('# name: '.length).trim();
180
179
  if (!creatorLine.startsWith('# creator: ')) {
181
- this.logger.error('Invalid artifact file: missing or malformed creator header');
180
+ logger_1.logger.error('Invalid artifact file: missing or malformed creator header');
182
181
  return null;
183
182
  }
184
183
  const creator = creatorLine.substring('# creator: '.length).trim();
@@ -221,6 +220,6 @@ ${artifact.body}`;
221
220
  }
222
221
  };
223
222
  exports.ArtifactStoreService = ArtifactStoreService;
224
- exports.ArtifactStoreService = ArtifactStoreService = ArtifactStoreService_1 = __decorate([
223
+ exports.ArtifactStoreService = ArtifactStoreService = __decorate([
225
224
  (0, common_1.Injectable)()
226
225
  ], ArtifactStoreService);
@@ -46,6 +46,7 @@ exports.PublishedRoomsService = void 0;
46
46
  const common_1 = require("@nestjs/common");
47
47
  const fs = __importStar(require("fs"));
48
48
  const path = __importStar(require("path"));
49
+ const logger_1 = require("../common/logger");
49
50
  let PublishedRoomsService = class PublishedRoomsService {
50
51
  mapping;
51
52
  filePath;
@@ -63,7 +64,7 @@ let PublishedRoomsService = class PublishedRoomsService {
63
64
  }
64
65
  }
65
66
  catch (error) {
66
- console.error('Failed to load published rooms mapping:', error);
67
+ logger_1.logger.error('Failed to load published rooms mapping:', error);
67
68
  }
68
69
  }
69
70
  save() {
@@ -79,7 +80,7 @@ let PublishedRoomsService = class PublishedRoomsService {
79
80
  fs.writeFileSync(this.filePath, JSON.stringify(data, null, 2));
80
81
  }
81
82
  catch (error) {
82
- console.error('Failed to save published rooms mapping:', error);
83
+ logger_1.logger.error('Failed to save published rooms mapping:', error);
83
84
  }
84
85
  }
85
86
  getUserId(roomId) {
@@ -52,6 +52,7 @@ const configuration_service_1 = require("../config/configuration.service");
52
52
  const agent_store_service_1 = require("../ai/agent-store.service");
53
53
  const attached_file_service_1 = require("../ai/attached-file.service");
54
54
  const artifact_store_service_1 = require("./artifact-store.service");
55
+ const logger_1 = require("../common/logger");
55
56
  let RoomStoreService = class RoomStoreService {
56
57
  configService;
57
58
  agentStore;
@@ -181,7 +182,7 @@ let RoomStoreService = class RoomStoreService {
181
182
  }
182
183
  }
183
184
  catch (error) {
184
- console.error(`Error reading room messages from file ${messagesPath}:`, error);
185
+ logger_1.logger.error(`Error reading room messages from file ${messagesPath}:`, error);
185
186
  return [];
186
187
  }
187
188
  }
@@ -191,7 +192,7 @@ let RoomStoreService = class RoomStoreService {
191
192
  await fs.promises.access(storageDir);
192
193
  }
193
194
  catch {
194
- console.log(`Room storage directory not found: ${storageDir}`);
195
+ logger_1.logger.log(`Room storage directory not found: ${storageDir}`);
195
196
  await fs.promises.mkdir(storageDir, { recursive: true });
196
197
  return;
197
198
  }
@@ -201,7 +202,7 @@ let RoomStoreService = class RoomStoreService {
201
202
  const roomDirs = entries
202
203
  .filter((entry) => entry.isDirectory())
203
204
  .map((entry) => entry.name);
204
- console.log(`Loading ${roomDirs.length} rooms from ${storageDir}`);
205
+ logger_1.logger.log(`Loading ${roomDirs.length} rooms from ${storageDir}`);
205
206
  for (const roomDirName of roomDirs) {
206
207
  try {
207
208
  const roomDir = path.join(storageDir, roomDirName);
@@ -211,7 +212,7 @@ let RoomStoreService = class RoomStoreService {
211
212
  await fs.promises.access(metadataPath);
212
213
  }
213
214
  catch {
214
- console.warn(`Skipping ${roomDirName}: metadata.json not found`);
215
+ logger_1.logger.warn(`Skipping ${roomDirName}: metadata.json not found`);
215
216
  continue;
216
217
  }
217
218
  const fileContent = await fs.promises.readFile(metadataPath, 'utf-8');
@@ -235,22 +236,22 @@ let RoomStoreService = class RoomStoreService {
235
236
  room.arrive(agent);
236
237
  }
237
238
  else {
238
- console.warn(`Agent ${agentId} not found when loading room ${config.name} from ${storageDir}`);
239
+ logger_1.logger.warn(`Agent ${agentId} not found when loading room ${config.name} from ${storageDir}`);
239
240
  }
240
241
  }
241
242
  room.setRoomLeader(config.roomLeader);
242
243
  this.rooms.set(config.id, room);
243
244
  room.setLoading(false);
244
245
  room.ready();
245
- console.log(`Loaded room: ${config.name} (${config.id}) with ${messages.length} messages from ${storageDir}`);
246
+ logger_1.logger.log(`Loaded room: ${config.name} (${config.id}) with ${messages.length} messages from ${storageDir}`);
246
247
  }
247
248
  catch (error) {
248
- console.error(`Error loading room from directory ${roomDirName}:`, error);
249
+ logger_1.logger.error(`Error loading room from directory ${roomDirName}:`, error);
249
250
  }
250
251
  }
251
252
  }
252
253
  catch (error) {
253
- console.error(`Error loading rooms from directory ${storageDir}:`, error);
254
+ logger_1.logger.error(`Error loading rooms from directory ${storageDir}:`, error);
254
255
  }
255
256
  }
256
257
  saveRoomToFile(room, storageDir) {
@@ -277,7 +278,7 @@ let RoomStoreService = class RoomStoreService {
277
278
  fs.writeFileSync(metadataPath, JSON.stringify(config, null, 2), 'utf-8');
278
279
  }
279
280
  catch (error) {
280
- console.error(`Error saving room ${room.getId()} to file:`, error);
281
+ logger_1.logger.error(`Error saving room ${room.getId()} to file:`, error);
281
282
  }
282
283
  }
283
284
  appendMessageToFile(roomId, message, storageDir) {
@@ -287,7 +288,7 @@ let RoomStoreService = class RoomStoreService {
287
288
  fs.appendFileSync(messagesPath, ',\n' + JSON.stringify(message), 'utf-8');
288
289
  }
289
290
  catch (error) {
290
- console.error(`Error appending message to room ${roomId}:`, error);
291
+ logger_1.logger.error(`Error appending message to room ${roomId}:`, error);
291
292
  }
292
293
  }
293
294
  clearRoomMessages(roomId, storageDir) {
@@ -301,11 +302,11 @@ let RoomStoreService = class RoomStoreService {
301
302
  const messagesPath = path.join(roomDir, 'messages');
302
303
  if (fs.existsSync(messagesPath)) {
303
304
  fs.unlinkSync(messagesPath);
304
- console.log(`Cleared messages for room ${roomId}`);
305
+ logger_1.logger.log(`Cleared messages for room ${roomId}`);
305
306
  }
306
307
  }
307
308
  catch (error) {
308
- console.error(`Error clearing messages for room ${roomId}:`, error);
309
+ logger_1.logger.error(`Error clearing messages for room ${roomId}:`, error);
309
310
  }
310
311
  }
311
312
  saveArtifactFile(roomId, storageDir, artifact) {
@@ -324,10 +325,10 @@ let RoomStoreService = class RoomStoreService {
324
325
  for (const agent of agents) {
325
326
  try {
326
327
  this.agentStore.removeAgent(agent.id);
327
- console.log(`Deleted agent ${agent.agentName} (${agent.id}) as part of room deletion`);
328
+ logger_1.logger.log(`Deleted agent ${agent.agentName} (${agent.id}) as part of room deletion`);
328
329
  }
329
330
  catch (err) {
330
- console.error(`Failed to delete agent ${agent.id}:`, err);
331
+ logger_1.logger.error(`Failed to delete agent ${agent.id}:`, err);
331
332
  }
332
333
  }
333
334
  }
@@ -335,11 +336,11 @@ let RoomStoreService = class RoomStoreService {
335
336
  if (fs.existsSync(roomDir)) {
336
337
  this.deleteAllArtifactFiles(roomId, storageDir);
337
338
  fs.rmSync(roomDir, { recursive: true, force: true });
338
- console.log(`Deleted room directory: ${roomDir}`);
339
+ logger_1.logger.log(`Deleted room directory: ${roomDir}`);
339
340
  }
340
341
  }
341
342
  catch (error) {
342
- console.error(`Error deleting room directory ${roomId}:`, error);
343
+ logger_1.logger.error(`Error deleting room directory ${roomId}:`, error);
343
344
  }
344
345
  }
345
346
  };
@@ -6,6 +6,7 @@ const message_1 = require("./message");
6
6
  const crypto_1 = require("crypto");
7
7
  const errors_1 = require("../common/errors");
8
8
  const child_process_1 = require("child_process");
9
+ const logger_1 = require("../common/logger");
9
10
  class Room {
10
11
  id;
11
12
  name;
@@ -465,7 +466,7 @@ Recent Message: ${message.getContent()}
465
466
  this.onSituationUpdate = callback;
466
467
  }
467
468
  handleSituationUpdate(situation) {
468
- console.log(`Situation updated: ${situation}`);
469
+ logger_1.logger.log(`Situation updated: ${situation}`);
469
470
  this.currentSituation = situation;
470
471
  if (this.onSituationUpdate) {
471
472
  this.onSituationUpdate(situation);
@@ -495,13 +496,13 @@ Recent Message: ${message.getContent()}
495
496
  }
496
497
  executeCommand(command, creator, description, resultViewers = []) {
497
498
  const workingDir = this.baseRoomDir || process.cwd();
498
- console.log(`FEATURE DISABLED -- Executing command: ${command} in directory: ${workingDir} by agent: ${creator}`);
499
+ logger_1.logger.log(`FEATURE DISABLED -- Executing command: ${command} in directory: ${workingDir} by agent: ${creator}`);
499
500
  return;
500
501
  (0, child_process_1.exec)(command, { cwd: workingDir }, (error, stdout, stderr) => {
501
502
  let result = '';
502
503
  if (error) {
503
504
  result = `Error: ${error.message}\n${stderr}`;
504
- console.error(`Command execution error: ${error.message}`);
505
+ logger_1.logger.error(`Command execution error: ${error.message}`);
505
506
  }
506
507
  else if (stderr) {
507
508
  result = `${stdout}\n\nStderr: ${stderr}`;
@@ -560,7 +561,7 @@ Recent Message: ${message.getContent()}
560
561
  }
561
562
  if (isHumanMessage) {
562
563
  if (this.currentSpeaker !== null && this.currentSpeaker !== humanAgent.agentNickname) {
563
- console.warn(`Human agent ${humanAgent.agentNickname} tried to speak out of turn. Current speaker: ${this.currentSpeaker}`);
564
+ logger_1.logger.warn(`Human agent ${humanAgent.agentNickname} tried to speak out of turn. Current speaker: ${this.currentSpeaker}`);
564
565
  return;
565
566
  }
566
567
  humanAgent.addToConversationHistory(message, true);
@@ -609,7 +610,7 @@ Recent Message: ${message.getContent()}
609
610
  if (content && content.startsWith('relay'))
610
611
  content = originalMessage.getContent();
611
612
  if (originalMessage.content != content) {
612
- console.warn(`Moderator changed content:\n${originalMessage.content}\nto\n${content}`);
613
+ logger_1.logger.warn(`Moderator changed content:\n${originalMessage.content}\nto\n${content}`);
613
614
  originalMessage.content = content;
614
615
  }
615
616
  if (this.checkAgentNicknameMatch(originalMessage.sender, responderNickname)) {
@@ -617,9 +618,9 @@ Recent Message: ${message.getContent()}
617
618
  if (!responder)
618
619
  responder = roomLeaderName;
619
620
  this.setCurrentSpeaker(responder);
620
- console.warn(`Moderator routed message to sender: ${originalMessage.sender}. Setting responder to room leader: ${responder}`);
621
+ logger_1.logger.warn(`Moderator routed message to sender: ${originalMessage.sender}. Setting responder to room leader: ${responder}`);
621
622
  }
622
- console.log(`Moderator routing: sender=${originalMessage.sender} action=${moderatorMessage.action}, name=${responderNickname}, targets=${targets.join(', ')}`);
623
+ logger_1.logger.log(`Moderator routing: sender=${originalMessage.sender} action=${moderatorMessage.action}, name=${responderNickname}, targets=${targets.join(', ')}`);
623
624
  if (moderatorMessage.action === app_types_1.MessageAction.RELAY) {
624
625
  this.addRoomMessage(new message_1.RoomMessage(originalMessage.sender, originalMessage.action, content, originalMessage.targets, originalMessage.name, originalMessage.situation));
625
626
  }
@@ -639,7 +640,7 @@ Recent Message: ${message.getContent()}
639
640
  let roomLeaderAgent = this.agents.find((a) => a.agentNickname === this.getRoomLeader());
640
641
  if (!roomLeaderAgent)
641
642
  throw new Error(`Room leader agent not found`);
642
- console.warn(`Responder agent not found: ${responderNickname}`);
643
+ logger_1.logger.warn(`Responder agent not found: ${responderNickname}`);
643
644
  responderAgent = roomLeaderAgent;
644
645
  if (responderNickname) {
645
646
  if (this.onSituationUpdate && responderNickname.length > 0) {
@@ -648,7 +649,7 @@ Recent Message: ${message.getContent()}
648
649
  }
649
650
  }
650
651
  if (responderAgent.isControlledByHuman) {
651
- console.log(`Waiting for human agent ${responderNickname} to respond`);
652
+ logger_1.logger.log(`Waiting for human agent ${responderNickname} to respond`);
652
653
  responderAgent.addToConversationHistory(`From: ${originalMessage.sender}\n${content}`, false);
653
654
  responderAgent.save();
654
655
  this.processingInProgress = false;
@@ -670,8 +671,8 @@ Recent Message: ${message.getContent()}
670
671
  });
671
672
  }
672
673
  catch (error) {
673
- console.error('Error parsing moderator response:', error);
674
- console.error('Moderator message content:', moderatorMessage.content);
674
+ logger_1.logger.error('Error parsing moderator response:', error);
675
+ logger_1.logger.error('Moderator message content:', moderatorMessage.content);
675
676
  this.processingInProgress = false;
676
677
  this.notifyStateChange();
677
678
  if (this.pendingMessages && this.pendingMessages.length > 0) {
@@ -694,7 +695,7 @@ Recent Message: ${message.getContent()}
694
695
  this.handleExecuteMessages(messages.filter((m) => m.getAction() === app_types_1.MessageAction.EXECUTE));
695
696
  this.handleAdjournMessages(messages.filter((m) => m.getAction() === app_types_1.MessageAction.ADJOURN));
696
697
  if (this.isAdjourned) {
697
- console.log(`Room ${this.name} has been adjourned. Message processing stopped.`);
698
+ logger_1.logger.log(`Room ${this.name} has been adjourned. Message processing stopped.`);
698
699
  this.pendingMessages = null;
699
700
  this.processingInProgress = false;
700
701
  this.notifyStateChange();
@@ -708,7 +709,7 @@ Recent Message: ${message.getContent()}
708
709
  if (moderateMessages.length > 0) {
709
710
  const moderator = this.getModeratorAgent();
710
711
  if (!moderator) {
711
- console.warn('MODERATE messages found but no moderator agent in room');
712
+ logger_1.logger.warn('MODERATE messages found but no moderator agent in room');
712
713
  this.processingInProgress = false;
713
714
  this.notifyStateChange();
714
715
  return;
@@ -1,9 +1,16 @@
1
1
  import { IConfigService } from '../app/user-service-manager';
2
+ export interface LoggingOptions {
3
+ enabled?: boolean;
4
+ logFile?: string;
5
+ console?: boolean;
6
+ level?: 'debug' | 'log' | 'warn' | 'error';
7
+ }
2
8
  export interface BriyahConfigOptions {
3
9
  dataPath?: string;
4
10
  userServiceCacheTimeoutMinutes?: number;
5
11
  startingBalance?: number;
6
12
  envOverrides?: Record<string, string>;
13
+ logging?: LoggingOptions;
7
14
  }
8
15
  export declare class BriyahConfigService implements IConfigService {
9
16
  private env;
@@ -17,6 +17,7 @@ class BriyahConfigService {
17
17
  }
18
18
  if (options?.startingBalance !== undefined) {
19
19
  this.env.STARTING_BALANCE = String(options.startingBalance);
20
+ process.env.STARTING_BALANCE = String(options.startingBalance);
20
21
  }
21
22
  }
22
23
  get(key, defaultValue) {
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.Briyah = void 0;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
+ const logger_1 = require("../common/logger");
39
40
  const ai_factory_service_1 = require("../ai/ai-factory.service");
40
41
  const openai_service_1 = require("../ai/LLM/openai.service");
41
42
  const anthropic_service_1 = require("../ai/LLM/anthropic.service");
@@ -71,6 +72,13 @@ class Briyah {
71
72
  initialized = false;
72
73
  constructor(options) {
73
74
  this.configService = new briyah_config_1.BriyahConfigService(options);
75
+ const dataPath = this.configService.get('SERVER_DATA_PATH') || path.resolve(process.cwd(), 'briyah-data');
76
+ logger_1.logger.configure({
77
+ enabled: options?.logging?.enabled !== false,
78
+ console: options?.logging?.console !== false,
79
+ logFile: options?.logging?.logFile ?? path.join(dataPath, 'logs', 'briyah.log'),
80
+ level: options?.logging?.level,
81
+ });
74
82
  this.validateEnvironment();
75
83
  this.initializeSingletons(options?.dataPath);
76
84
  }
@@ -83,8 +91,8 @@ class Briyah {
83
91
  this.configService.get('TOGETHER_API_KEY');
84
92
  this.configService.get('FAL_API_KEY');
85
93
  if (!hasAnyProvider) {
86
- console.warn('[Briyah] No LLM provider API keys configured. Some features will not be available.');
87
- console.warn('[Briyah] Set one or more of: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_VERTEX_PROJECT_ID, XAI_API_KEY, DEEPSEEK_API_KEY, TOGETHER_API_KEY');
94
+ logger_1.logger.warn('[Briyah] No LLM provider API keys configured. Some features will not be available.');
95
+ logger_1.logger.warn('[Briyah] Set one or more of: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_VERTEX_PROJECT_ID, XAI_API_KEY, DEEPSEEK_API_KEY, TOGETHER_API_KEY');
88
96
  }
89
97
  const startingBalance = this.configService.get('STARTING_BALANCE');
90
98
  if (!startingBalance) {
@@ -114,7 +122,7 @@ class Briyah {
114
122
  }
115
123
  async init() {
116
124
  if (this.initialized) {
117
- console.warn('[Briyah] Already initialized');
125
+ logger_1.logger.warn('[Briyah] Already initialized');
118
126
  return;
119
127
  }
120
128
  this.seedCommonData();
@@ -156,7 +164,8 @@ class Briyah {
156
164
  }
157
165
  this.userServiceManager.onModuleDestroy();
158
166
  this.initialized = false;
159
- console.log('[Briyah] Shutdown complete');
167
+ logger_1.logger.log('[Briyah] Shutdown complete');
168
+ logger_1.logger.close();
160
169
  }
161
170
  isInitialized() {
162
171
  return this.initialized;
@@ -1,6 +1,9 @@
1
1
  export { Briyah } from './briyah';
2
2
  export { BriyahConfigService, BriyahConfigOptions } from './briyah-config';
3
3
  export type { AppService } from '../app.service';
4
- export type { AgentInfo, CreateAgentResponse, RoomInfo, RoomDetails, CreateRoomResponse, StoryInfo, CreateStoryResponse, ProcessTextResponse, FileList, PromptFileContent, AttachDocumentResponse, AgentMessagesResponse, RoomMessagesResponse, StoryState, Message, MessageAction, } from '../../../shared/types/app.types';
4
+ export type { AgentInfo, CreateAgentResponse, RoomInfo, RoomDetails, CreateRoomResponse, StoryInfo, CreateStoryResponse, ProcessTextResponse, FileList, PromptFileContent, AttachDocumentResponse, AgentMessagesResponse, RoomMessagesResponse, StoryState, Message, MessageAction, ModelInfo, ArtifactMetadata, PreparedPromptResponse, PromptScope, PromptFolder, PromptFoldersResponse, PromptFile, PromptFilesResponse, StoryIdea, StorySuggestion, StoryMessageUpdate, Character, ChapterInfo, } from '../../../shared/types/app.types';
5
+ export type { LoggingOptions } from './briyah-config';
5
6
  export { Agent } from '../ai/agent';
6
7
  export { Room } from '../room/room';
8
+ export { RoomMessage } from '../room/message';
9
+ export type { Artifact } from '../room/artifact';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Room = exports.Agent = exports.BriyahConfigService = exports.Briyah = void 0;
3
+ exports.RoomMessage = exports.Room = exports.Agent = exports.BriyahConfigService = exports.Briyah = void 0;
4
4
  var briyah_1 = require("./briyah");
5
5
  Object.defineProperty(exports, "Briyah", { enumerable: true, get: function () { return briyah_1.Briyah; } });
6
6
  var briyah_config_1 = require("./briyah-config");
@@ -9,3 +9,5 @@ var agent_1 = require("../ai/agent");
9
9
  Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_1.Agent; } });
10
10
  var room_1 = require("../room/room");
11
11
  Object.defineProperty(exports, "Room", { enumerable: true, get: function () { return room_1.Room; } });
12
+ var message_1 = require("../room/message");
13
+ Object.defineProperty(exports, "RoomMessage", { enumerable: true, get: function () { return message_1.RoomMessage; } });
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.StoryProgressService = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const events_1 = require("events");
12
+ const logger_1 = require("../common/logger");
12
13
  let StoryProgressService = class StoryProgressService {
13
14
  progressMap = new Map();
14
15
  createProgressEmitter(storyId) {
@@ -27,7 +28,7 @@ let StoryProgressService = class StoryProgressService {
27
28
  message,
28
29
  timestamp: Date.now(),
29
30
  });
30
- console.log(`[Story ${storyId}] ${step}: ${message}`);
31
+ logger_1.logger.log(`[Story ${storyId}] ${step}: ${message}`);
31
32
  }
32
33
  }
33
34
  cleanup(storyId) {