briyah 1.0.6 → 1.0.8
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.
- package/README.md +32 -22
- package/dist/server/src/ai/LLM/anthropic.service.js +19 -15
- package/dist/server/src/ai/LLM/base-ai.service.js +5 -4
- package/dist/server/src/ai/LLM/deepseek.service.js +11 -13
- package/dist/server/src/ai/LLM/fal.service.js +20 -24
- package/dist/server/src/ai/LLM/googleai.service.js +13 -15
- package/dist/server/src/ai/LLM/grok.service.js +12 -14
- package/dist/server/src/ai/LLM/mock.service.js +9 -11
- package/dist/server/src/ai/LLM/openai.service.js +18 -20
- package/dist/server/src/ai/LLM/together.service.js +14 -13
- package/dist/server/src/ai/LLM/vertexai.service.js +12 -14
- package/dist/server/src/ai/agent-store.service.js +12 -11
- package/dist/server/src/ai/artifact.service.js +7 -6
- package/dist/server/src/ai/attached-file.service.js +8 -7
- package/dist/server/src/ai/model_prices.d.ts +1 -2
- package/dist/server/src/ai/model_prices.js +15 -14
- package/dist/server/src/ai/published-agents.service.js +6 -5
- package/dist/server/src/app/balance.service.js +7 -6
- package/dist/server/src/app/stripe.controller.js +12 -11
- package/dist/server/src/app/stripe.service.js +20 -19
- package/dist/server/src/app/transaction.service.js +6 -5
- package/dist/server/src/app/user-service-manager.js +6 -5
- package/dist/server/src/app.controller.js +95 -94
- package/dist/server/src/app.service.js +31 -30
- package/dist/server/src/auth/auth.controller.js +21 -20
- package/dist/server/src/auth/jwt-auth.guard.js +4 -3
- package/dist/server/src/auth/rate-limit.service.d.ts +0 -1
- package/dist/server/src/auth/rate-limit.service.js +6 -7
- package/dist/server/src/auth/twilio.service.js +4 -3
- package/dist/server/src/auth/users.service.js +6 -5
- package/dist/server/src/common/logger.d.ts +21 -0
- package/dist/server/src/common/logger.js +83 -0
- package/dist/server/src/config/configuration.service.js +1 -1
- package/dist/server/src/room/artifact-store.service.d.ts +0 -1
- package/dist/server/src/room/artifact-store.service.js +16 -17
- package/dist/server/src/room/published-rooms.service.js +5 -3
- package/dist/server/src/room/room-store.service.js +17 -16
- package/dist/server/src/room/room.js +14 -13
- package/dist/server/src/sdk/briyah-config.d.ts +7 -0
- package/dist/server/src/sdk/briyah-config.js +2 -0
- package/dist/server/src/sdk/briyah.js +14 -5
- package/dist/server/src/sdk/index.d.ts +2 -1
- package/dist/server/src/story/story-progress.service.js +2 -1
- package/dist/server/src/story/story-store.service.js +28 -27
- package/dist/server/src/story/story.service.js +113 -112
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +106 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1633 -0
- package/docs/classes/Agent.html +87 -0
- package/docs/classes/Briyah.html +64 -0
- package/docs/classes/BriyahConfigService.html +12 -0
- package/docs/classes/Room.html +119 -0
- package/docs/enums/MessageAction.html +13 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +136 -0
- package/docs/interfaces/AgentInfo.html +17 -0
- package/docs/interfaces/AgentMessagesResponse.html +5 -0
- package/docs/interfaces/AppService.html +680 -0
- package/docs/interfaces/ArtifactMetadata.html +8 -0
- package/docs/interfaces/AttachDocumentResponse.html +3 -0
- package/docs/interfaces/BriyahConfigOptions.html +16 -0
- package/docs/interfaces/ChapterInfo.html +3 -0
- package/docs/interfaces/Character.html +7 -0
- package/docs/interfaces/CreateAgentResponse.html +2 -0
- package/docs/interfaces/CreateRoomResponse.html +3 -0
- package/docs/interfaces/CreateStoryResponse.html +2 -0
- package/docs/interfaces/FileList.html +2 -0
- package/docs/interfaces/LoggingOptions.html +9 -0
- package/docs/interfaces/Message.html +6 -0
- package/docs/interfaces/ModelInfo.html +5 -0
- package/docs/interfaces/PreparedPromptResponse.html +3 -0
- package/docs/interfaces/ProcessTextResponse.html +7 -0
- package/docs/interfaces/PromptFile.html +3 -0
- package/docs/interfaces/PromptFileContent.html +3 -0
- package/docs/interfaces/PromptFilesResponse.html +2 -0
- package/docs/interfaces/PromptFolder.html +3 -0
- package/docs/interfaces/PromptFoldersResponse.html +2 -0
- package/docs/interfaces/RoomDetails.html +9 -0
- package/docs/interfaces/RoomInfo.html +5 -0
- package/docs/interfaces/RoomMessagesResponse.html +3 -0
- package/docs/interfaces/StoryIdea.html +5 -0
- package/docs/interfaces/StoryInfo.html +21 -0
- package/docs/interfaces/StoryState.html +9 -0
- package/docs/modules.html +1 -0
- package/docs/types/PromptScope.html +1 -0
- package/package.json +6 -3
- 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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
62
|
+
logger_1.logger.log(`Saved artifact "${artifact.name}" to ${filePath}`);
|
|
64
63
|
return filePath;
|
|
65
64
|
}
|
|
66
65
|
catch (error) {
|
|
67
|
-
|
|
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
|
-
|
|
88
|
+
logger_1.logger.warn(`Skipping invalid artifact file: ${file}`);
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
91
|
catch (error) {
|
|
93
|
-
|
|
92
|
+
logger_1.logger.error(`Error reading artifact file ${file}: ${error.message}`);
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
|
-
|
|
95
|
+
logger_1.logger.log(`Loaded ${artifacts.length} artifacts for room ${roomId}`);
|
|
97
96
|
}
|
|
98
97
|
catch (error) {
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
logger_1.logger.log(`Deleted ${artifactFiles.length} artifact files from room ${roomId}`);
|
|
141
140
|
}
|
|
142
141
|
catch (error) {
|
|
143
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
223
|
+
exports.ArtifactStoreService = ArtifactStoreService = __decorate([
|
|
225
224
|
(0, common_1.Injectable)()
|
|
226
225
|
], ArtifactStoreService);
|
|
@@ -46,11 +46,13 @@ 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;
|
|
52
53
|
constructor() {
|
|
53
|
-
|
|
54
|
+
const dataPath = process.env.SERVER_DATA_PATH || path.resolve(process.cwd(), 'briyah-data');
|
|
55
|
+
this.filePath = path.join(dataPath, 'common', 'published-rooms.json');
|
|
54
56
|
this.mapping = new Map();
|
|
55
57
|
this.load();
|
|
56
58
|
}
|
|
@@ -62,7 +64,7 @@ let PublishedRoomsService = class PublishedRoomsService {
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
catch (error) {
|
|
65
|
-
|
|
67
|
+
logger_1.logger.error('Failed to load published rooms mapping:', error);
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
save() {
|
|
@@ -78,7 +80,7 @@ let PublishedRoomsService = class PublishedRoomsService {
|
|
|
78
80
|
fs.writeFileSync(this.filePath, JSON.stringify(data, null, 2));
|
|
79
81
|
}
|
|
80
82
|
catch (error) {
|
|
81
|
-
|
|
83
|
+
logger_1.logger.error('Failed to save published rooms mapping:', error);
|
|
82
84
|
}
|
|
83
85
|
}
|
|
84
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
246
|
+
logger_1.logger.log(`Loaded room: ${config.name} (${config.id}) with ${messages.length} messages from ${storageDir}`);
|
|
246
247
|
}
|
|
247
248
|
catch (error) {
|
|
248
|
-
|
|
249
|
+
logger_1.logger.error(`Error loading room from directory ${roomDirName}:`, error);
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
253
|
catch (error) {
|
|
253
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
305
|
+
logger_1.logger.log(`Cleared messages for room ${roomId}`);
|
|
305
306
|
}
|
|
306
307
|
}
|
|
307
308
|
catch (error) {
|
|
308
|
-
|
|
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
|
-
|
|
328
|
+
logger_1.logger.log(`Deleted agent ${agent.agentName} (${agent.id}) as part of room deletion`);
|
|
328
329
|
}
|
|
329
330
|
catch (err) {
|
|
330
|
-
|
|
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
|
-
|
|
339
|
+
logger_1.logger.log(`Deleted room directory: ${roomDir}`);
|
|
339
340
|
}
|
|
340
341
|
}
|
|
341
342
|
catch (error) {
|
|
342
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
621
|
+
logger_1.logger.warn(`Moderator routed message to sender: ${originalMessage.sender}. Setting responder to room leader: ${responder}`);
|
|
621
622
|
}
|
|
622
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
674
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -10,12 +10,14 @@ class BriyahConfigService {
|
|
|
10
10
|
};
|
|
11
11
|
if (options?.dataPath) {
|
|
12
12
|
this.env.SERVER_DATA_PATH = options.dataPath;
|
|
13
|
+
process.env.SERVER_DATA_PATH = options.dataPath;
|
|
13
14
|
}
|
|
14
15
|
if (options?.userServiceCacheTimeoutMinutes !== undefined) {
|
|
15
16
|
this.env.USER_SERVICE_CACHE_TIMEOUT_MINUTES = String(options.userServiceCacheTimeoutMinutes);
|
|
16
17
|
}
|
|
17
18
|
if (options?.startingBalance !== undefined) {
|
|
18
19
|
this.env.STARTING_BALANCE = String(options.startingBalance);
|
|
20
|
+
process.env.STARTING_BALANCE = String(options.startingBalance);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
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
|
-
|
|
87
|
-
|
|
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
|
-
|
|
125
|
+
logger_1.logger.warn('[Briyah] Already initialized');
|
|
118
126
|
return;
|
|
119
127
|
}
|
|
120
128
|
this.seedCommonData();
|
|
@@ -123,7 +131,7 @@ class Briyah {
|
|
|
123
131
|
this.initialized = true;
|
|
124
132
|
}
|
|
125
133
|
seedCommonData() {
|
|
126
|
-
const dataPath = this.configService.get('SERVER_DATA_PATH') || path.resolve(process.cwd(), 'data');
|
|
134
|
+
const dataPath = this.configService.get('SERVER_DATA_PATH') || path.resolve(process.cwd(), 'briyah-data');
|
|
127
135
|
const userCommonDir = path.resolve(dataPath, 'common');
|
|
128
136
|
const packageCommonDir = path.resolve(__dirname, '../../../../data/common');
|
|
129
137
|
if (!fs.existsSync(packageCommonDir)) {
|
|
@@ -156,7 +164,8 @@ class Briyah {
|
|
|
156
164
|
}
|
|
157
165
|
this.userServiceManager.onModuleDestroy();
|
|
158
166
|
this.initialized = false;
|
|
159
|
-
|
|
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,7 @@
|
|
|
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, 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';
|
|
@@ -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
|
-
|
|
31
|
+
logger_1.logger.log(`[Story ${storyId}] ${step}: ${message}`);
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
cleanup(storyId) {
|