briyah 1.1.0 → 1.1.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.
- package/README.md +3 -1
- package/data/common/config/markup +1 -0
- package/data/common/config/model_prices.json +5153 -3680
- package/data/common/config/story_models.json +10 -2
- package/data/common/config/story_models_full.json +2 -2
- package/data/common/prompts/compact_agent.prompt +16 -0
- package/data/common/prompts/narrator/perceive.prompt +30 -28
- package/data/common/prompts/story_moderator/moderate.prompt +12 -8
- package/{dist → dist-sdk}/server/src/ai/LLM/anthropic.service.js +22 -12
- package/{dist → dist-sdk}/server/src/ai/LLM/base-ai.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/base-ai.service.js +8 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/deepseek.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/deepseek.service.js +3 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/fal.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/fal.service.js +3 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/grok.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/grok.service.js +3 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/together.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/ai/LLM/together.service.js +3 -0
- package/{dist → dist-sdk}/server/src/ai/agent.d.ts +7 -0
- package/{dist → dist-sdk}/server/src/ai/agent.js +32 -0
- package/dist-sdk/server/src/ai/model_prices.d.ts +3 -0
- package/{dist → dist-sdk}/server/src/ai/model_prices.js +19 -1
- package/{dist → dist-sdk}/server/src/ai/published-agents.service.js +1 -1
- package/{dist → dist-sdk}/server/src/app/stripe.controller.d.ts +3 -0
- package/{dist → dist-sdk}/server/src/app/stripe.controller.js +13 -0
- package/{dist → dist-sdk}/server/src/app/stripe.service.d.ts +4 -0
- package/{dist → dist-sdk}/server/src/app/stripe.service.js +16 -0
- package/{dist → dist-sdk}/server/src/app.controller.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/app.controller.js +41 -0
- package/{dist → dist-sdk}/server/src/app.service.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/app.service.js +7 -0
- package/{dist → dist-sdk}/server/src/auth/users.service.js +1 -1
- package/{dist → dist-sdk}/server/src/config/configuration.service.js +1 -1
- package/{dist → dist-sdk}/server/src/room/published-rooms.service.js +1 -1
- package/{dist → dist-sdk}/server/src/room/room.js +1 -0
- package/{dist → dist-sdk}/server/src/sdk/briyah-config.js +2 -2
- package/{dist → dist-sdk}/server/src/sdk/briyah.js +2 -2
- package/{dist → dist-sdk}/server/src/story/story-message.service.js +24 -32
- package/{dist → dist-sdk}/server/src/story/story.service.d.ts +1 -1
- package/{dist → dist-sdk}/server/src/story/story.service.js +103 -76
- package/{dist → dist-sdk}/shared/types/app.types.d.ts +1 -0
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/Agent.html +18 -13
- package/docs/classes/Briyah.html +12 -12
- package/docs/classes/BriyahConfigService.html +5 -5
- package/docs/classes/Room.html +23 -23
- package/docs/classes/RoomMessage.html +10 -10
- package/docs/enums/MessageAction.html +3 -3
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +4 -4
- package/docs/interfaces/AgentInfo.html +2 -2
- package/docs/interfaces/AgentMessagesResponse.html +2 -2
- package/docs/interfaces/AppService.html +148 -143
- package/docs/interfaces/Artifact.html +3 -3
- package/docs/interfaces/ArtifactMetadata.html +2 -2
- package/docs/interfaces/AttachDocumentResponse.html +2 -2
- package/docs/interfaces/BriyahConfigOptions.html +6 -6
- package/docs/interfaces/ChapterInfo.html +2 -2
- package/docs/interfaces/Character.html +2 -2
- package/docs/interfaces/CreateAgentResponse.html +2 -2
- package/docs/interfaces/CreateRoomResponse.html +2 -2
- package/docs/interfaces/CreateStoryResponse.html +2 -2
- package/docs/interfaces/FileList.html +2 -2
- package/docs/interfaces/LoggingOptions.html +5 -5
- package/docs/interfaces/Message.html +2 -2
- package/docs/interfaces/ModelInfo.html +2 -2
- package/docs/interfaces/PreparedPromptResponse.html +2 -2
- package/docs/interfaces/ProcessTextResponse.html +2 -2
- package/docs/interfaces/PromptFile.html +2 -2
- package/docs/interfaces/PromptFileContent.html +2 -2
- package/docs/interfaces/PromptFilesResponse.html +2 -2
- package/docs/interfaces/PromptFolder.html +2 -2
- package/docs/interfaces/PromptFoldersResponse.html +2 -2
- package/docs/interfaces/RoomDetails.html +2 -2
- package/docs/interfaces/RoomInfo.html +2 -2
- package/docs/interfaces/RoomMessagesResponse.html +2 -2
- package/docs/interfaces/StoryErrorEvent.html +3 -3
- package/docs/interfaces/StoryIdea.html +2 -2
- package/docs/interfaces/StoryInfo.html +6 -2
- package/docs/interfaces/StoryIntroduceCharacterEvent.html +3 -3
- package/docs/interfaces/StoryProgressChapterEvent.html +3 -3
- package/docs/interfaces/StoryState.html +5 -5
- package/docs/interfaces/StoryStateEvent.html +3 -3
- package/docs/interfaces/Transaction.html +2 -2
- package/docs/interfaces/TransactionHistoryResponse.html +2 -2
- package/docs/modules.html +1 -1
- package/docs/types/PromptScope.html +1 -1
- package/package.json +8 -8
- package/dist/server/src/ai/model_prices.d.ts +0 -1
- /package/data/common/prompts/character/{compact_story.json → compact_agent.json} +0 -0
- /package/data/common/prompts/character/{compact_story.prompt → compact_agent.prompt} +0 -0
- /package/data/common/prompts/narrator/{compact_story.json → compact_agent.json} +0 -0
- /package/data/common/prompts/narrator/{compact_story.prompt → compact_agent.prompt} +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/anthropic.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/anthropic.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/anthropic.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/deepseek.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/deepseek.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/fal.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/fal.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/googleai.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/googleai.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/googleai.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/googleai.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/grok.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/grok.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/mock.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/mock.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/mock.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/mock.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/openai.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/openai.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/openai.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/openai.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/together.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/together.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/vertexai.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/vertexai.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/vertexai.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/LLM/vertexai.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-config.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-config.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-factory.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-factory.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-message.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-message.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-store.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-store.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-store.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/agent-store.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/ai-factory.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/ai-factory.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/ai-factory.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/ai-factory.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/artifact.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/artifact.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/artifact.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/artifact.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/attached-file.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/attached-file.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/attached-file.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/ai/attached-file.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/ai/published-agents.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance-message.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance-message.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/balance.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/stripe.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/stripe.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/transaction.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/transaction.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/user-service-factory.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/user-service-factory.js +0 -0
- /package/{dist → dist-sdk}/server/src/app/user-service-manager.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app/user-service-manager.js +0 -0
- /package/{dist → dist-sdk}/server/src/app.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/app.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/agent-access.decorator.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/agent-access.decorator.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.controller.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.controller.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/auth.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/bot-login.dto.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/bot-login.dto.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/password-reset.dto.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/password-reset.dto.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/phone-login.dto.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/phone-login.dto.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/phone-verification.dto.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/dto/phone-verification.dto.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/jwt-auth.guard.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/jwt-auth.guard.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/jwt.strategy.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/jwt.strategy.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/phone-validation.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/phone-validation.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/public.decorator.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/public.decorator.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/rate-limit.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/rate-limit.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/room-access.decorator.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/room-access.decorator.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/scopes.decorator.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/scopes.decorator.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/scopes.guard.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/scopes.guard.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/session.guard.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/session.guard.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/twilio.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/auth/twilio.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/auth/users.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/common/errors.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/common/errors.js +0 -0
- /package/{dist → dist-sdk}/server/src/common/logger.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/common/logger.js +0 -0
- /package/{dist → dist-sdk}/server/src/config/configuration.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/config/configuration.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/config/configuration.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/artifact-store.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/artifact-store.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/artifact.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/artifact.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/message.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/message.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/published-rooms.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-config.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-config.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-factory.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-factory.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-message.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-message.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-message.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-message.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-store.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-store.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-store.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/room/room-store.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/room/room.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/sdk/briyah-config.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/sdk/briyah.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/sdk/index.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/sdk/index.js +0 -0
- /package/{dist → dist-sdk}/server/src/shared/shared.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/shared/shared.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-message.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-progress.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-progress.service.js +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-store.module.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-store.module.js +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-store.service.d.ts +0 -0
- /package/{dist → dist-sdk}/server/src/story/story-store.service.js +0 -0
- /package/{dist → dist-sdk}/shared/types/app.types.js +0 -0
|
@@ -827,6 +827,34 @@ let AppController = class AppController {
|
|
|
827
827
|
throw new common_1.HttpException('Failed to reload agent', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
|
828
828
|
}
|
|
829
829
|
}
|
|
830
|
+
async compactAgentConversation(req, agentId) {
|
|
831
|
+
if (!agentId) {
|
|
832
|
+
throw new common_1.BadRequestException('Agent ID is required');
|
|
833
|
+
}
|
|
834
|
+
try {
|
|
835
|
+
const appService = this.getAppService(req, agentId);
|
|
836
|
+
if (req.user.type === 'agent-access') {
|
|
837
|
+
const agentDetails = await appService.getAgentDetails(agentId);
|
|
838
|
+
if (!agentDetails || !agentDetails.isPublished) {
|
|
839
|
+
throw new common_1.ForbiddenException('Agent is not published');
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
await appService.compactAgentConversation(agentId);
|
|
843
|
+
}
|
|
844
|
+
catch (error) {
|
|
845
|
+
logger_1.logger.error(`[${req.user?.sub}] Error compacting agent ${agentId}:`, error);
|
|
846
|
+
if (error instanceof errors_1.NotFoundError) {
|
|
847
|
+
throw new common_1.NotFoundException(error.message);
|
|
848
|
+
}
|
|
849
|
+
if (error instanceof errors_1.OperationFailedError) {
|
|
850
|
+
throw new common_1.HttpException(error.message, common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
|
851
|
+
}
|
|
852
|
+
if (error instanceof common_1.ForbiddenException) {
|
|
853
|
+
throw error;
|
|
854
|
+
}
|
|
855
|
+
throw new common_1.HttpException('Failed to compact agent conversation', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
|
856
|
+
}
|
|
857
|
+
}
|
|
830
858
|
async resetRoom(req, roomId) {
|
|
831
859
|
if (!roomId) {
|
|
832
860
|
throw new common_1.BadRequestException('Room ID is required');
|
|
@@ -1412,6 +1440,9 @@ let AppController = class AppController {
|
|
|
1412
1440
|
subscriber.next({
|
|
1413
1441
|
data: { type: 'connected', storyId },
|
|
1414
1442
|
});
|
|
1443
|
+
if (storyInfo.pendingSuggestion) {
|
|
1444
|
+
subscriber.next({ data: storyInfo.pendingSuggestion });
|
|
1445
|
+
}
|
|
1415
1446
|
const updateHandler = (data) => {
|
|
1416
1447
|
subscriber.next({ data });
|
|
1417
1448
|
};
|
|
@@ -2076,6 +2107,16 @@ __decorate([
|
|
|
2076
2107
|
__metadata("design:paramtypes", [Object, String]),
|
|
2077
2108
|
__metadata("design:returntype", Promise)
|
|
2078
2109
|
], AppController.prototype, "reloadAgent", null);
|
|
2110
|
+
__decorate([
|
|
2111
|
+
(0, agent_access_decorator_1.AgentAccess)(),
|
|
2112
|
+
(0, common_1.Post)('agents/:agentId/compact'),
|
|
2113
|
+
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
2114
|
+
__param(0, (0, common_1.Request)()),
|
|
2115
|
+
__param(1, (0, common_1.Param)('agentId')),
|
|
2116
|
+
__metadata("design:type", Function),
|
|
2117
|
+
__metadata("design:paramtypes", [Object, String]),
|
|
2118
|
+
__metadata("design:returntype", Promise)
|
|
2119
|
+
], AppController.prototype, "compactAgentConversation", null);
|
|
2079
2120
|
__decorate([
|
|
2080
2121
|
(0, common_1.Post)('rooms/:roomId/reset'),
|
|
2081
2122
|
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
@@ -111,6 +111,7 @@ export declare class AppService {
|
|
|
111
111
|
deleteAttachedFile(agentId: string, fileName: string): Promise<void>;
|
|
112
112
|
deleteAttachedFileById(documentId: string): Promise<void>;
|
|
113
113
|
reloadAgent(agentId: string): Promise<void>;
|
|
114
|
+
compactAgentConversation(agentId: string): Promise<void>;
|
|
114
115
|
resetRoom(roomId: string): Promise<void>;
|
|
115
116
|
resetStory(storyId: string): Promise<void>;
|
|
116
117
|
createStory(name: string, idea: string, userCharacterDesc: string, otherCharactersDesc: string, storyModel?: string, isImport?: boolean, imageModelName?: string): Promise<StoryInfo>;
|
|
@@ -890,6 +890,13 @@ class AppService {
|
|
|
890
890
|
}
|
|
891
891
|
agent.save();
|
|
892
892
|
}
|
|
893
|
+
async compactAgentConversation(agentId) {
|
|
894
|
+
const agent = await this.agentStore.getAgent(agentId);
|
|
895
|
+
if (!agent) {
|
|
896
|
+
throw new errors_1.NotFoundError('Agent not found');
|
|
897
|
+
}
|
|
898
|
+
await agent.compact();
|
|
899
|
+
}
|
|
893
900
|
async resetRoom(roomId) {
|
|
894
901
|
const room = await this.roomStore.getRoom(roomId);
|
|
895
902
|
if (!room) {
|
|
@@ -52,7 +52,7 @@ let UsersService = class UsersService {
|
|
|
52
52
|
usersFilePath;
|
|
53
53
|
dataDir;
|
|
54
54
|
constructor() {
|
|
55
|
-
this.dataDir = process.env.
|
|
55
|
+
this.dataDir = process.env.BRIYAH_DATA_PATH || path.resolve(process.cwd(), 'briyah-data');
|
|
56
56
|
const commonDir = path.resolve(this.dataDir, 'common');
|
|
57
57
|
const usersDir = path.resolve(commonDir, 'users');
|
|
58
58
|
this.usersFilePath = path.resolve(usersDir, 'users.json');
|
|
@@ -49,7 +49,7 @@ class ConfigurationService {
|
|
|
49
49
|
userId;
|
|
50
50
|
constructor(userId, baseDataPath) {
|
|
51
51
|
this.userId = userId;
|
|
52
|
-
const dataPath = baseDataPath || process.env.
|
|
52
|
+
const dataPath = baseDataPath || process.env.BRIYAH_DATA_PATH || path.resolve(process.cwd(), 'briyah-data');
|
|
53
53
|
this.dataDir = path.resolve(dataPath);
|
|
54
54
|
if (!fs.existsSync(this.dataDir)) {
|
|
55
55
|
fs.mkdirSync(this.dataDir, { recursive: true });
|
|
@@ -51,7 +51,7 @@ let PublishedRoomsService = class PublishedRoomsService {
|
|
|
51
51
|
mapping;
|
|
52
52
|
filePath;
|
|
53
53
|
constructor() {
|
|
54
|
-
const dataPath = process.env.
|
|
54
|
+
const dataPath = process.env.BRIYAH_DATA_PATH || path.resolve(process.cwd(), 'briyah-data');
|
|
55
55
|
this.filePath = path.join(dataPath, 'common', 'published-rooms.json');
|
|
56
56
|
this.mapping = new Map();
|
|
57
57
|
this.load();
|
|
@@ -272,6 +272,7 @@ class Room {
|
|
|
272
272
|
let response = await agent.instructedPrompt(prompt, 'perceive', variables, false, true, maxOutputChars);
|
|
273
273
|
answer = this.parseAgentResponse(agent, response);
|
|
274
274
|
agent.addToConversationHistory(response, true);
|
|
275
|
+
agent.save();
|
|
275
276
|
}
|
|
276
277
|
catch (e) {
|
|
277
278
|
if (e instanceof errors_1.InsufficientBalanceError) {
|
|
@@ -9,8 +9,8 @@ class BriyahConfigService {
|
|
|
9
9
|
...(options?.envOverrides || {}),
|
|
10
10
|
};
|
|
11
11
|
if (options?.dataPath) {
|
|
12
|
-
this.env.
|
|
13
|
-
process.env.
|
|
12
|
+
this.env.BRIYAH_DATA_PATH = options.dataPath;
|
|
13
|
+
process.env.BRIYAH_DATA_PATH = options.dataPath;
|
|
14
14
|
}
|
|
15
15
|
if (options?.userServiceCacheTimeoutMinutes !== undefined) {
|
|
16
16
|
this.env.USER_SERVICE_CACHE_TIMEOUT_MINUTES = String(options.userServiceCacheTimeoutMinutes);
|
|
@@ -72,7 +72,7 @@ class Briyah {
|
|
|
72
72
|
initialized = false;
|
|
73
73
|
constructor(options) {
|
|
74
74
|
this.configService = new briyah_config_1.BriyahConfigService(options);
|
|
75
|
-
const dataPath = this.configService.get('
|
|
75
|
+
const dataPath = this.configService.get('BRIYAH_DATA_PATH') || path.resolve(process.cwd(), 'briyah-data');
|
|
76
76
|
logger_1.logger.configure({
|
|
77
77
|
enabled: options?.logging?.enabled !== false,
|
|
78
78
|
console: options?.logging?.console !== false,
|
|
@@ -131,7 +131,7 @@ class Briyah {
|
|
|
131
131
|
this.initialized = true;
|
|
132
132
|
}
|
|
133
133
|
seedCommonData() {
|
|
134
|
-
const dataPath = this.configService.get('
|
|
134
|
+
const dataPath = this.configService.get('BRIYAH_DATA_PATH') || path.resolve(process.cwd(), 'briyah-data');
|
|
135
135
|
const userCommonDir = path.resolve(dataPath, 'common');
|
|
136
136
|
const packageCommonDir = path.resolve(__dirname, '../../../../data/common');
|
|
137
137
|
if (!fs.existsSync(packageCommonDir)) {
|
|
@@ -23,44 +23,36 @@ let StoryMessageService = class StoryMessageService {
|
|
|
23
23
|
return this.messageEmitters.get(storyId);
|
|
24
24
|
}
|
|
25
25
|
emitStoryState(storyId, state) {
|
|
26
|
-
const emitter = this.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
emitter.emit('story-state', payload);
|
|
30
|
-
}
|
|
26
|
+
const emitter = this.getOrCreateEmitter(storyId);
|
|
27
|
+
const payload = { type: 'story-state', state, timestamp: Date.now() };
|
|
28
|
+
emitter.emit('story-state', payload);
|
|
31
29
|
}
|
|
32
30
|
emitIntroduceCharacter(storyId, characterName) {
|
|
33
|
-
const emitter = this.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
emitter.emit('suggest-introduce-character', payload);
|
|
41
|
-
}
|
|
31
|
+
const emitter = this.getOrCreateEmitter(storyId);
|
|
32
|
+
const payload = {
|
|
33
|
+
type: 'suggest-introduce-character',
|
|
34
|
+
characterName,
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
};
|
|
37
|
+
emitter.emit('suggest-introduce-character', payload);
|
|
42
38
|
}
|
|
43
39
|
emitProgressChapter(storyId) {
|
|
44
|
-
const emitter = this.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
emitter.emit('suggest-progress-chapter', payload);
|
|
51
|
-
}
|
|
40
|
+
const emitter = this.getOrCreateEmitter(storyId);
|
|
41
|
+
const payload = {
|
|
42
|
+
type: 'suggest-progress-chapter',
|
|
43
|
+
timestamp: Date.now(),
|
|
44
|
+
};
|
|
45
|
+
emitter.emit('suggest-progress-chapter', payload);
|
|
52
46
|
}
|
|
53
47
|
emitError(storyId, error) {
|
|
54
|
-
const emitter = this.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
emitter.emit('story-error', payload);
|
|
63
|
-
}
|
|
48
|
+
const emitter = this.getOrCreateEmitter(storyId);
|
|
49
|
+
const payload = {
|
|
50
|
+
type: 'story-error',
|
|
51
|
+
errorType: error.name,
|
|
52
|
+
message: error.message,
|
|
53
|
+
timestamp: Date.now(),
|
|
54
|
+
};
|
|
55
|
+
emitter.emit('story-error', payload);
|
|
64
56
|
}
|
|
65
57
|
cleanup(storyId) {
|
|
66
58
|
const emitter = this.messageEmitters.get(storyId);
|
|
@@ -20,6 +20,7 @@ export declare class StoryService {
|
|
|
20
20
|
private readonly agentFactory;
|
|
21
21
|
private readonly roomFactory;
|
|
22
22
|
private readonly storyArtifactServices;
|
|
23
|
+
private readonly chaptersInProgress;
|
|
23
24
|
constructor(storyStore: StoryStoreService, agentStore: AgentStoreService, roomStore: RoomStoreService, progressService: StoryProgressService, messageService: StoryMessageService, configService: ConfigurationService, agentFactory: AgentFactory, roomFactory: RoomFactory);
|
|
24
25
|
getProgressEmitter(storyId: string): import("node:events")<any>;
|
|
25
26
|
getMessageEmitter(storyId: string): import("node:events")<any>;
|
|
@@ -72,7 +73,6 @@ export declare class StoryService {
|
|
|
72
73
|
private progressStoryToNextChapterAsync;
|
|
73
74
|
private generateOpeningScene;
|
|
74
75
|
private compactAgentHistories;
|
|
75
|
-
private compactAgentHistory;
|
|
76
76
|
private extractMarkdownContent;
|
|
77
77
|
private updatePlotPlan;
|
|
78
78
|
private updateCharacterProfiles;
|
|
@@ -74,6 +74,7 @@ let StoryService = class StoryService {
|
|
|
74
74
|
agentFactory;
|
|
75
75
|
roomFactory;
|
|
76
76
|
storyArtifactServices = new Map();
|
|
77
|
+
chaptersInProgress = new Set();
|
|
77
78
|
constructor(storyStore, agentStore, roomStore, progressService, messageService, configService, agentFactory, roomFactory) {
|
|
78
79
|
this.storyStore = storyStore;
|
|
79
80
|
this.agentStore = agentStore;
|
|
@@ -254,6 +255,7 @@ let StoryService = class StoryService {
|
|
|
254
255
|
}
|
|
255
256
|
const storyInfo = this.storyStore.createStory(name);
|
|
256
257
|
storyInfo.turnNumber = 0;
|
|
258
|
+
let storyTitle = name;
|
|
257
259
|
try {
|
|
258
260
|
this.progressService.createProgressEmitter(storyInfo.id);
|
|
259
261
|
this.progressService.emitProgress(storyInfo.id, 'start', 'Starting story creation...');
|
|
@@ -270,7 +272,7 @@ let StoryService = class StoryService {
|
|
|
270
272
|
}
|
|
271
273
|
if (!aiServiceName || !aiModelName)
|
|
272
274
|
throw new Error(`Failed to find model config for "${storyModel}"`);
|
|
273
|
-
let moderator = this.agentFactory.createAgent(process.env.MODERATOR_AI_SERVICE || aiServiceName,
|
|
275
|
+
let moderator = this.agentFactory.createAgent(process.env.MODERATOR_AI_SERVICE || aiServiceName, `${storyTitle} - Moderator`, 'Moderator', 'Story moderator responsible for message routing and conversation flow', 'story_moderator', process.env.MODERATOR_AI_MODEL || aiModelName, storyAgentsDir, storyArtifactService);
|
|
274
276
|
moderator.maxHistoryMessages = 16;
|
|
275
277
|
moderator.reasoningEffort = 'low';
|
|
276
278
|
moderator.promptCacheTTL = 60;
|
|
@@ -281,14 +283,14 @@ let StoryService = class StoryService {
|
|
|
281
283
|
const artist = this.createArtistAgent(storyInfo.id, storyAgentsDir, storyArtifactService, imageModelName);
|
|
282
284
|
let illustrator = null;
|
|
283
285
|
if (artist) {
|
|
284
|
-
illustrator = this.agentFactory.createAgent(process.env.MODERATOR_AI_SERVICE || aiServiceName,
|
|
286
|
+
illustrator = this.agentFactory.createAgent(process.env.MODERATOR_AI_SERVICE || aiServiceName, `${storyTitle} - Illustrator`, 'Illustrator', 'Visual artist for generating scene illustrations', 'illustrator', process.env.MODERATOR_AI_MODEL || aiModelName, storyAgentsDir, storyArtifactService);
|
|
285
287
|
illustrator.maxHistoryMessages = 10;
|
|
286
288
|
illustrator.promptCacheTTL = 60;
|
|
287
289
|
illustrator.ownerRoomId = storyInfo.id;
|
|
288
290
|
illustrator.save();
|
|
289
291
|
logger_1.logger.log(`Created illustrator agent: ${illustrator.agentName}`);
|
|
290
292
|
}
|
|
291
|
-
let narrator = this.agentFactory.createAgent(aiServiceName,
|
|
293
|
+
let narrator = this.agentFactory.createAgent(aiServiceName, `${storyTitle} - Narrator`, 'Narrator', 'Story narrator. Should receive all messages where a character wants to perform an action or PASS or INTRODUCE a new character. Responds to all dialog with characters not listed in Available Agents.', 'narrator', aiModelName, storyAgentsDir, storyArtifactService);
|
|
292
294
|
narrator.reasoningEffort = 'low';
|
|
293
295
|
narrator.allowSearch = true;
|
|
294
296
|
narrator.promptCacheTTL = 60;
|
|
@@ -974,6 +976,21 @@ let StoryService = class StoryService {
|
|
|
974
976
|
const introducedCharPlotPlanArtifact = introducedCharArtifacts.find((a) => a.name === 'Plot Plan');
|
|
975
977
|
const introducedCharPlotPlan = introducedCharPlotPlanArtifact?.body || '';
|
|
976
978
|
await this.updateCharacterProfiles(room, [characterAgent], introducedCharPlotPlan);
|
|
979
|
+
if (!story.characters) {
|
|
980
|
+
story.characters = [];
|
|
981
|
+
}
|
|
982
|
+
if (!story.characters.some((c) => c.name === characterName)) {
|
|
983
|
+
story.characters.push({
|
|
984
|
+
name: characterName,
|
|
985
|
+
description: characterAgent.description,
|
|
986
|
+
isControlledByHuman: false,
|
|
987
|
+
});
|
|
988
|
+
}
|
|
989
|
+
if (story.pendingSuggestion?.type === 'suggest-introduce-character' &&
|
|
990
|
+
story.pendingSuggestion.characterName === characterName) {
|
|
991
|
+
story.pendingSuggestion = undefined;
|
|
992
|
+
}
|
|
993
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
977
994
|
try {
|
|
978
995
|
const artifactId = await this.generateCharacterPortrait(room, characterAgent, storyId);
|
|
979
996
|
if (artifactId) {
|
|
@@ -1000,9 +1017,13 @@ let StoryService = class StoryService {
|
|
|
1000
1017
|
}
|
|
1001
1018
|
if (!story.declinedCharacters.includes(characterName)) {
|
|
1002
1019
|
story.declinedCharacters.push(characterName);
|
|
1003
|
-
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1004
1020
|
logger_1.logger.log(`Recorded declined character: ${characterName} for story ${storyId}`);
|
|
1005
1021
|
}
|
|
1022
|
+
if (story.pendingSuggestion?.type === 'suggest-introduce-character' &&
|
|
1023
|
+
story.pendingSuggestion.characterName === characterName) {
|
|
1024
|
+
story.pendingSuggestion = undefined;
|
|
1025
|
+
}
|
|
1026
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1006
1027
|
}
|
|
1007
1028
|
async deleteCharacter(storyId, characterName) {
|
|
1008
1029
|
let room;
|
|
@@ -1029,6 +1050,17 @@ let StoryService = class StoryService {
|
|
|
1029
1050
|
room.setAgents(filteredAgents);
|
|
1030
1051
|
room.saveMetadata();
|
|
1031
1052
|
this.agentStore.removeAgent(agent.id);
|
|
1053
|
+
const story = this.storyStore.getStory(storyId);
|
|
1054
|
+
if (story?.characters) {
|
|
1055
|
+
const filtered = story.characters.filter((c) => {
|
|
1056
|
+
const firstWord = c.name.trim().split(/\s+/)[0];
|
|
1057
|
+
return c.name !== characterName && firstWord !== characterName;
|
|
1058
|
+
});
|
|
1059
|
+
if (filtered.length !== story.characters.length) {
|
|
1060
|
+
story.characters = filtered;
|
|
1061
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1032
1064
|
}
|
|
1033
1065
|
async deleteStory(storyId) {
|
|
1034
1066
|
logger_1.logger.log(`Deleting story ${storyId}...`);
|
|
@@ -1132,7 +1164,7 @@ let StoryService = class StoryService {
|
|
|
1132
1164
|
return;
|
|
1133
1165
|
}
|
|
1134
1166
|
try {
|
|
1135
|
-
await
|
|
1167
|
+
await agent.compact();
|
|
1136
1168
|
}
|
|
1137
1169
|
catch (error) {
|
|
1138
1170
|
logger_1.logger.error(`Error compacting ${agent.agentName}:`, error);
|
|
@@ -1157,36 +1189,54 @@ let StoryService = class StoryService {
|
|
|
1157
1189
|
if (!story) {
|
|
1158
1190
|
throw new Error('Story not found');
|
|
1159
1191
|
}
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
this.progressService.createProgressEmitter(storyId);
|
|
1192
|
+
if (this.chaptersInProgress.has(storyId)) {
|
|
1193
|
+
throw new errors_1.OperationFailedError('Chapter progression is already in progress for this story');
|
|
1163
1194
|
}
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1195
|
+
this.chaptersInProgress.add(storyId);
|
|
1196
|
+
try {
|
|
1197
|
+
if (story.pendingSuggestion?.type === 'suggest-progress-chapter') {
|
|
1198
|
+
story.pendingSuggestion = undefined;
|
|
1199
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1200
|
+
}
|
|
1201
|
+
const existingEmitter = this.progressService.getProgressEmitter(storyId);
|
|
1202
|
+
if (!existingEmitter) {
|
|
1203
|
+
this.progressService.createProgressEmitter(storyId);
|
|
1204
|
+
}
|
|
1205
|
+
const room = await this.getStoryRoom(storyId);
|
|
1206
|
+
room.setCurrentSpeaker('system');
|
|
1207
|
+
this.progressService.emitProgress(storyId, 'opening-scene', 'Generating opening scene of chapter...');
|
|
1208
|
+
const agents = room.getAgents();
|
|
1209
|
+
const narrator = agents.find((agent) => agent.promptFolder === 'narrator');
|
|
1210
|
+
const { openingScene, chapterTitle } = await this.generateOpeningScene(room, narrator);
|
|
1211
|
+
this.progressService.emitProgress(storyId, 'chapter-backup', `Saving previous chapter: "${chapterTitle}"...`);
|
|
1212
|
+
const chapterIndex = this.storyStore.getNextChapterIndex(storyId);
|
|
1213
|
+
const backupSuccess = this.storyStore.createChapterBackup(storyId, chapterIndex, chapterTitle);
|
|
1214
|
+
if (!backupSuccess) {
|
|
1215
|
+
throw new Error('Failed to backup chapter');
|
|
1216
|
+
}
|
|
1217
|
+
room.clearRoomMessages();
|
|
1218
|
+
this.populateStoryHistory(room, openingScene);
|
|
1219
|
+
const humanAgent = room.getAgents().find((a) => a.isControlledByHuman);
|
|
1220
|
+
if (humanAgent) {
|
|
1221
|
+
room.setCurrentSpeaker(humanAgent.agentNickname);
|
|
1222
|
+
}
|
|
1223
|
+
this.progressService.emitProgress(storyId, 'ready', 'Chapter opening is ready! Continuing chapter progression in the background...');
|
|
1224
|
+
setImmediate(() => {
|
|
1225
|
+
this.progressStoryToNextChapterAsync(storyId)
|
|
1226
|
+
.catch((error) => {
|
|
1227
|
+
logger_1.logger.error('Error in async chapter progression:', error);
|
|
1228
|
+
this.progressService.emitProgress(storyId, 'error', `Error: ${error.message}`);
|
|
1229
|
+
})
|
|
1230
|
+
.finally(() => {
|
|
1231
|
+
this.chaptersInProgress.delete(storyId);
|
|
1232
|
+
});
|
|
1187
1233
|
});
|
|
1188
|
-
|
|
1189
|
-
|
|
1234
|
+
return { chapterIndex };
|
|
1235
|
+
}
|
|
1236
|
+
catch (err) {
|
|
1237
|
+
this.chaptersInProgress.delete(storyId);
|
|
1238
|
+
throw err;
|
|
1239
|
+
}
|
|
1190
1240
|
}
|
|
1191
1241
|
async progressStoryToNextChapterAsync(storyId) {
|
|
1192
1242
|
let room = null;
|
|
@@ -1251,50 +1301,16 @@ let StoryService = class StoryService {
|
|
|
1251
1301
|
await Promise.all(agents.map(async (agent) => {
|
|
1252
1302
|
let numMessageChars = agent.history?.map((m) => m.content?.length).reduce((a, b) => a + b, 0);
|
|
1253
1303
|
if (numMessageChars > threshold) {
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1304
|
+
try {
|
|
1305
|
+
await agent.compact();
|
|
1306
|
+
}
|
|
1307
|
+
catch (error) {
|
|
1308
|
+
logger_1.logger.error(`Error compacting ${agent.agentName}:`, error);
|
|
1309
|
+
throw error;
|
|
1310
|
+
}
|
|
1258
1311
|
}
|
|
1259
1312
|
}));
|
|
1260
1313
|
}
|
|
1261
|
-
async compactAgentHistory(agent) {
|
|
1262
|
-
const originalHistory = [...agent.history];
|
|
1263
|
-
const originalLength = originalHistory.length;
|
|
1264
|
-
if (originalHistory.length == 0) {
|
|
1265
|
-
return {
|
|
1266
|
-
success: true,
|
|
1267
|
-
originalLength: originalLength,
|
|
1268
|
-
newLength: originalLength,
|
|
1269
|
-
message: 'No conversation history to compact',
|
|
1270
|
-
};
|
|
1271
|
-
}
|
|
1272
|
-
const formattedHistory = agent.getFormattedMessages(0);
|
|
1273
|
-
try {
|
|
1274
|
-
agent.history = [];
|
|
1275
|
-
const summaryResponse = await agent.preparedPrompt('compact_story', {
|
|
1276
|
-
agentName: agent.agentNickname,
|
|
1277
|
-
formattedHistory: formattedHistory,
|
|
1278
|
-
}, false);
|
|
1279
|
-
const summary = summaryResponse?.summary || summaryResponse;
|
|
1280
|
-
agent.addToConversationHistory(`[CONVERSATION HISTORY SUMMARY]\n\n${summary}`, true);
|
|
1281
|
-
const newLength = agent.history.length;
|
|
1282
|
-
logger_1.logger.log(`Compacted ${agent.agentName}: ${originalLength} messages`);
|
|
1283
|
-
agent.save();
|
|
1284
|
-
return {
|
|
1285
|
-
success: true,
|
|
1286
|
-
originalLength: originalLength,
|
|
1287
|
-
newLength: newLength,
|
|
1288
|
-
message: `${originalLength} messages -> ${newLength} messages`,
|
|
1289
|
-
summary: summary,
|
|
1290
|
-
};
|
|
1291
|
-
}
|
|
1292
|
-
catch (error) {
|
|
1293
|
-
agent.history = originalHistory;
|
|
1294
|
-
logger_1.logger.error(`Error compacting ${agent.agentName}:`, error);
|
|
1295
|
-
throw error;
|
|
1296
|
-
}
|
|
1297
|
-
}
|
|
1298
1314
|
extractMarkdownContent(response) {
|
|
1299
1315
|
const fenceMatch = response.match(/```(?:markdown)?\s*\n([\s\S]*?)```/);
|
|
1300
1316
|
if (fenceMatch) {
|
|
@@ -1415,12 +1431,13 @@ let StoryService = class StoryService {
|
|
|
1415
1431
|
}
|
|
1416
1432
|
}
|
|
1417
1433
|
createArtistAgent(storyId, storyAgentsDir, storyArtifactService, imageModelName) {
|
|
1434
|
+
const storyInfo = this.storyStore.getStory(storyId);
|
|
1418
1435
|
const imageConfig = this.getImageModelConfig(imageModelName);
|
|
1419
1436
|
if (!imageConfig) {
|
|
1420
1437
|
logger_1.logger.log('Artist agent creation skipped: images disabled');
|
|
1421
1438
|
return null;
|
|
1422
1439
|
}
|
|
1423
|
-
const artistAgent = this.agentFactory.createAgent(imageConfig.service,
|
|
1440
|
+
const artistAgent = this.agentFactory.createAgent(imageConfig.service, `${storyInfo.name} - Artist`, 'Artist', 'AI artist for generating character portraits and scene illustrations', 'default', imageConfig.model, storyAgentsDir, storyArtifactService);
|
|
1424
1441
|
artistAgent.maxHistoryMessages = 10;
|
|
1425
1442
|
artistAgent.promptCacheTTL = 0;
|
|
1426
1443
|
artistAgent.save();
|
|
@@ -1622,8 +1639,12 @@ let StoryService = class StoryService {
|
|
|
1622
1639
|
if (progressChapter) {
|
|
1623
1640
|
if (story) {
|
|
1624
1641
|
story.declinedCharacters = [];
|
|
1625
|
-
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1626
1642
|
}
|
|
1643
|
+
story.pendingSuggestion = {
|
|
1644
|
+
type: 'suggest-progress-chapter',
|
|
1645
|
+
timestamp: Date.now(),
|
|
1646
|
+
};
|
|
1647
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1627
1648
|
this.messageService.emitProgressChapter(storyId);
|
|
1628
1649
|
return;
|
|
1629
1650
|
}
|
|
@@ -1638,6 +1659,12 @@ let StoryService = class StoryService {
|
|
|
1638
1659
|
logger_1.logger.log(`Character ${newCharacterName} was declined, skipping prompt`);
|
|
1639
1660
|
return;
|
|
1640
1661
|
}
|
|
1662
|
+
story.pendingSuggestion = {
|
|
1663
|
+
type: 'suggest-introduce-character',
|
|
1664
|
+
characterName: newCharacterName,
|
|
1665
|
+
timestamp: Date.now(),
|
|
1666
|
+
};
|
|
1667
|
+
this.storyStore.updateStoryMetadata(storyId, story);
|
|
1641
1668
|
this.messageService.emitIntroduceCharacter(storyId, newCharacterName);
|
|
1642
1669
|
}
|
|
1643
1670
|
return;
|
|
@@ -220,6 +220,7 @@ export interface StoryInfo {
|
|
|
220
220
|
totalOutputTokens: number;
|
|
221
221
|
turnNumber: number;
|
|
222
222
|
declinedCharacters?: string[];
|
|
223
|
+
pendingSuggestion?: StoryIntroduceCharacterEvent | StoryProgressChapterEvent;
|
|
223
224
|
}
|
|
224
225
|
export interface CreateStoryResponse {
|
|
225
226
|
storyId: string;
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJx1jc0KwjAQhN9lzqkliq3sO3jxWnoI7dYG0wSy8VTy7hL/KIKngZ1v51sRQ0gC6hrd9gqRJ8dDssELaEWj2xLeLAzCmUXMlaFws34E7Y+Nwj06EKxPHCczsNRvajenxUFhcEYEhCRjVd6qL1rK2boxsgd1Wh90nxVKbpyXEJZfr96fPt7nOku9wf6KX4ec8wMBuFA6"
|