briyah 1.0.9 → 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 +112 -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 +16 -6
- package/{dist → dist-sdk}/server/src/app/stripe.service.d.ts +6 -3
- package/{dist → dist-sdk}/server/src/app/stripe.service.js +23 -9
- package/{dist → dist-sdk}/server/src/app/transaction.service.d.ts +3 -3
- package/{dist → dist-sdk}/server/src/app/transaction.service.js +11 -11
- package/{dist → dist-sdk}/server/src/app.controller.d.ts +1 -0
- package/{dist → dist-sdk}/server/src/app.controller.js +49 -2
- package/{dist → dist-sdk}/server/src/app.service.d.ts +6 -2
- package/{dist → dist-sdk}/server/src/app.service.js +18 -2
- 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/sdk/index.d.ts +1 -1
- package/{dist → dist-sdk}/server/src/story/story-message.service.d.ts +4 -2
- package/{dist → dist-sdk}/server/src/story/story-message.service.js +29 -18
- package/{dist → dist-sdk}/server/src/story/story.service.d.ts +1 -1
- package/{dist → dist-sdk}/server/src/story/story.service.js +106 -95
- package/{dist → dist-sdk}/shared/types/app.types.d.ts +18 -11
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.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 +18 -4
- package/docs/interfaces/AgentInfo.html +2 -2
- package/docs/interfaces/AgentMessagesResponse.html +2 -2
- package/docs/interfaces/AppService.html +204 -162
- 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 +12 -0
- package/docs/interfaces/StoryIdea.html +2 -2
- package/docs/interfaces/StoryInfo.html +6 -2
- package/docs/interfaces/StoryIntroduceCharacterEvent.html +12 -0
- package/docs/interfaces/StoryProgressChapterEvent.html +11 -0
- package/docs/interfaces/StoryState.html +5 -5
- package/docs/interfaces/StoryStateEvent.html +10 -0
- package/docs/interfaces/Transaction.html +10 -0
- package/docs/interfaces/TransactionHistoryResponse.html +3 -0
- 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/docs/interfaces/StoryMessageUpdate.html +0 -6
- package/docs/interfaces/StorySuggestion.html +0 -9
- /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/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.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-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
|
@@ -40,7 +40,7 @@ let StripeService = class StripeService {
|
|
|
40
40
|
this.minPaymentAmount = parseFloat(process.env.MIN_PAYMENT_AMOUNT || '5.00');
|
|
41
41
|
this.maxPaymentAmount = parseFloat(process.env.MAX_PAYMENT_AMOUNT || '500.00');
|
|
42
42
|
}
|
|
43
|
-
async createPaymentIntent(userId, amount,
|
|
43
|
+
async createPaymentIntent(userId, amount, appService) {
|
|
44
44
|
if (!amount || amount <= 0) {
|
|
45
45
|
throw new common_1.BadRequestException('Amount must be greater than 0');
|
|
46
46
|
}
|
|
@@ -62,7 +62,7 @@ let StripeService = class StripeService {
|
|
|
62
62
|
enabled: true,
|
|
63
63
|
},
|
|
64
64
|
});
|
|
65
|
-
await
|
|
65
|
+
await appService.recordTransaction(amount, paymentIntent.id, 'pending');
|
|
66
66
|
return {
|
|
67
67
|
clientSecret: paymentIntent.client_secret,
|
|
68
68
|
publishableKey: this.publishableKey,
|
|
@@ -73,7 +73,7 @@ let StripeService = class StripeService {
|
|
|
73
73
|
throw new common_1.InternalServerErrorException('Failed to create payment intent');
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
async createCheckoutSession(userId, amount,
|
|
76
|
+
async createCheckoutSession(userId, amount, appService) {
|
|
77
77
|
if (!amount || amount <= 0) {
|
|
78
78
|
throw new common_1.BadRequestException('Amount must be greater than 0');
|
|
79
79
|
}
|
|
@@ -113,7 +113,7 @@ let StripeService = class StripeService {
|
|
|
113
113
|
},
|
|
114
114
|
});
|
|
115
115
|
if (session.payment_intent) {
|
|
116
|
-
await
|
|
116
|
+
await appService.recordTransaction(amount, session.payment_intent, 'pending');
|
|
117
117
|
}
|
|
118
118
|
return {
|
|
119
119
|
url: session.url,
|
|
@@ -124,6 +124,22 @@ let StripeService = class StripeService {
|
|
|
124
124
|
throw new common_1.InternalServerErrorException('Failed to create checkout session');
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
+
async getCheckoutSessionUser(sessionId) {
|
|
128
|
+
try {
|
|
129
|
+
const session = await this.stripe.checkout.sessions.retrieve(sessionId);
|
|
130
|
+
const userId = session.metadata?.userId;
|
|
131
|
+
if (!userId) {
|
|
132
|
+
throw new common_1.BadRequestException('Session has no userId in metadata');
|
|
133
|
+
}
|
|
134
|
+
return { userId, paymentStatus: session.payment_status };
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error instanceof common_1.BadRequestException)
|
|
138
|
+
throw error;
|
|
139
|
+
logger_1.logger.error('Error retrieving checkout session:', error);
|
|
140
|
+
throw new common_1.BadRequestException('Invalid or expired session ID');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
127
143
|
getStripeConfig() {
|
|
128
144
|
return {
|
|
129
145
|
publishableKey: this.publishableKey,
|
|
@@ -148,8 +164,7 @@ let StripeService = class StripeService {
|
|
|
148
164
|
}
|
|
149
165
|
const amount = paymentIntent.amount / 100;
|
|
150
166
|
logger_1.logger.log(`[Stripe Webhook] Amount: $${amount.toFixed(2)}`);
|
|
151
|
-
const
|
|
152
|
-
const existingTransaction = await transactionService.getTransactionByPaymentIntent(paymentIntent.id);
|
|
167
|
+
const existingTransaction = await appService.getTransactionByPaymentId(paymentIntent.id);
|
|
153
168
|
logger_1.logger.log(`[Stripe Webhook] Existing transaction:`, existingTransaction);
|
|
154
169
|
if (existingTransaction?.status === 'succeeded') {
|
|
155
170
|
logger_1.logger.log(`Transaction ${paymentIntent.id} already processed, skipping`);
|
|
@@ -162,7 +177,7 @@ let StripeService = class StripeService {
|
|
|
162
177
|
const balanceAfter = await appService.getBalance();
|
|
163
178
|
logger_1.logger.log(`[Stripe Webhook] Balance after: $${balanceAfter.toFixed(2)}`);
|
|
164
179
|
logger_1.logger.log(`[Stripe Webhook] Updating transaction status to 'succeeded'`);
|
|
165
|
-
await
|
|
180
|
+
await appService.updateTransactionStatus(paymentIntent.id, 'succeeded');
|
|
166
181
|
logger_1.logger.log(`[Stripe Webhook] Checking for paused stories to resume...`);
|
|
167
182
|
const resumedCount = await appService.resumePausedStories();
|
|
168
183
|
if (resumedCount > 0) {
|
|
@@ -182,8 +197,7 @@ let StripeService = class StripeService {
|
|
|
182
197
|
logger_1.logger.error('Payment Intent missing userId in metadata:', paymentIntent.id);
|
|
183
198
|
return;
|
|
184
199
|
}
|
|
185
|
-
|
|
186
|
-
await transactionService.updateTransactionStatus(paymentIntent.id, 'failed');
|
|
200
|
+
await appService.updateTransactionStatus(paymentIntent.id, 'failed');
|
|
187
201
|
logger_1.logger.log(`Payment failed for user ${userId}: ${paymentIntent.id}`);
|
|
188
202
|
}
|
|
189
203
|
catch (error) {
|
|
@@ -5,9 +5,9 @@ export declare class TransactionService {
|
|
|
5
5
|
private configService;
|
|
6
6
|
private transactionsDir;
|
|
7
7
|
constructor(userId: string, configService: ConfigurationService);
|
|
8
|
-
recordTransaction(amount: number,
|
|
9
|
-
updateTransactionStatus(
|
|
10
|
-
|
|
8
|
+
recordTransaction(amount: number, paymentId: string, status?: 'pending' | 'succeeded' | 'failed' | 'cancelled'): Promise<Transaction>;
|
|
9
|
+
updateTransactionStatus(paymentId: string, status: 'pending' | 'succeeded' | 'failed' | 'cancelled'): Promise<void>;
|
|
10
|
+
getTransactionByPaymentId(paymentId: string): Promise<Transaction | null>;
|
|
11
11
|
getTransactions(limit?: number, offset?: number): Promise<{
|
|
12
12
|
transactions: Transaction[];
|
|
13
13
|
total: number;
|
|
@@ -51,19 +51,19 @@ class TransactionService {
|
|
|
51
51
|
fs.mkdirSync(this.transactionsDir, { recursive: true });
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
async recordTransaction(amount,
|
|
54
|
+
async recordTransaction(amount, paymentId, status = 'pending') {
|
|
55
55
|
const timestamp = Date.now();
|
|
56
56
|
const transaction = {
|
|
57
57
|
id: (0, zod_1.uuidv4)().toString(),
|
|
58
58
|
userId: this.userId,
|
|
59
59
|
amount,
|
|
60
60
|
currency: 'usd',
|
|
61
|
-
|
|
61
|
+
paymentId,
|
|
62
62
|
status,
|
|
63
63
|
createdAt: timestamp,
|
|
64
64
|
updatedAt: timestamp,
|
|
65
65
|
};
|
|
66
|
-
const filename = `${timestamp}-${
|
|
66
|
+
const filename = `${timestamp}-${paymentId}.json`;
|
|
67
67
|
const filePath = path.join(this.transactionsDir, filename);
|
|
68
68
|
try {
|
|
69
69
|
fs.writeFileSync(filePath, JSON.stringify(transaction, null, 2), 'utf-8');
|
|
@@ -74,31 +74,31 @@ class TransactionService {
|
|
|
74
74
|
throw error;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
async updateTransactionStatus(
|
|
77
|
+
async updateTransactionStatus(paymentId, status) {
|
|
78
78
|
try {
|
|
79
|
-
const transaction = await this.
|
|
79
|
+
const transaction = await this.getTransactionByPaymentId(paymentId);
|
|
80
80
|
if (!transaction) {
|
|
81
|
-
logger_1.logger.error(`Transaction not found for payment
|
|
81
|
+
logger_1.logger.error(`Transaction not found for payment ID ${paymentId}`);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
transaction.status = status;
|
|
85
85
|
transaction.updatedAt = Date.now();
|
|
86
86
|
const files = fs.readdirSync(this.transactionsDir);
|
|
87
|
-
const matchingFile = files.find((file) => file.includes(
|
|
87
|
+
const matchingFile = files.find((file) => file.includes(paymentId));
|
|
88
88
|
if (matchingFile) {
|
|
89
89
|
const filePath = path.join(this.transactionsDir, matchingFile);
|
|
90
90
|
fs.writeFileSync(filePath, JSON.stringify(transaction, null, 2), 'utf-8');
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
catch (error) {
|
|
94
|
-
logger_1.logger.error(`Error updating transaction status for ${
|
|
94
|
+
logger_1.logger.error(`Error updating transaction status for ${paymentId}:`, error);
|
|
95
95
|
throw error;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
async
|
|
98
|
+
async getTransactionByPaymentId(paymentId) {
|
|
99
99
|
try {
|
|
100
100
|
const files = fs.readdirSync(this.transactionsDir);
|
|
101
|
-
const matchingFile = files.find((file) => file.includes(
|
|
101
|
+
const matchingFile = files.find((file) => file.includes(paymentId));
|
|
102
102
|
if (!matchingFile) {
|
|
103
103
|
return null;
|
|
104
104
|
}
|
|
@@ -107,7 +107,7 @@ class TransactionService {
|
|
|
107
107
|
return JSON.parse(content);
|
|
108
108
|
}
|
|
109
109
|
catch (error) {
|
|
110
|
-
logger_1.logger.error(`Error getting transaction for payment
|
|
110
|
+
logger_1.logger.error(`Error getting transaction for payment ID ${paymentId}:`, error);
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -110,6 +110,7 @@ export declare class AppController {
|
|
|
110
110
|
updateAgent(req: ExpressRequest, agentId: string, updateData: UpdateAgentRequest): Promise<void>;
|
|
111
111
|
deleteAttachedFile(req: ExpressRequest, agentId: string, documentId: string): Promise<void>;
|
|
112
112
|
reloadAgent(req: ExpressRequest, agentId: string): Promise<void>;
|
|
113
|
+
compactAgentConversation(req: ExpressRequest, agentId: string): Promise<void>;
|
|
113
114
|
resetRoom(req: ExpressRequest, roomId: string): Promise<void>;
|
|
114
115
|
publishRoom(req: ExpressRequest, templateId: string, body: {
|
|
115
116
|
publishedName?: string;
|
|
@@ -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,13 +1440,22 @@ 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
|
};
|
|
1418
|
-
emitter.on('
|
|
1449
|
+
emitter.on('story-state', updateHandler);
|
|
1450
|
+
emitter.on('suggest-introduce-character', updateHandler);
|
|
1451
|
+
emitter.on('suggest-progress-chapter', updateHandler);
|
|
1452
|
+
emitter.on('story-error', updateHandler);
|
|
1419
1453
|
return () => {
|
|
1420
1454
|
logger_1.logger.log(`[SSE] Cleanup for story ${storyId}`);
|
|
1421
|
-
emitter.off('
|
|
1455
|
+
emitter.off('story-state', updateHandler);
|
|
1456
|
+
emitter.off('suggest-introduce-character', updateHandler);
|
|
1457
|
+
emitter.off('suggest-progress-chapter', updateHandler);
|
|
1458
|
+
emitter.off('story-error', updateHandler);
|
|
1422
1459
|
};
|
|
1423
1460
|
});
|
|
1424
1461
|
}
|
|
@@ -2070,6 +2107,16 @@ __decorate([
|
|
|
2070
2107
|
__metadata("design:paramtypes", [Object, String]),
|
|
2071
2108
|
__metadata("design:returntype", Promise)
|
|
2072
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);
|
|
2073
2120
|
__decorate([
|
|
2074
2121
|
(0, common_1.Post)('rooms/:roomId/reset'),
|
|
2075
2122
|
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
@@ -21,7 +21,7 @@ import { TransactionService } from './app/transaction.service';
|
|
|
21
21
|
import { AgentFactory } from './ai/agent-factory';
|
|
22
22
|
import { RoomFactory } from './room/room-factory';
|
|
23
23
|
import { EventEmitter } from 'events';
|
|
24
|
-
import { AgentInfo, RoomInfo, RoomDetails, CreateRoomResponse, FileList, PromptFileContent, PromptFoldersResponse, PromptFilesResponse, PromptScope, ProcessTextResponse, PreparedPromptResponse, AttachDocumentResponse, AgentMessagesResponse, RoomMessagesResponse, StoryInfo, StoryState, Character } from '../../shared/types/app.types';
|
|
24
|
+
import { AgentInfo, RoomInfo, RoomDetails, CreateRoomResponse, FileList, PromptFileContent, PromptFoldersResponse, PromptFilesResponse, PromptScope, ProcessTextResponse, PreparedPromptResponse, AttachDocumentResponse, AgentMessagesResponse, RoomMessagesResponse, StoryInfo, StoryState, Character, Transaction, TransactionHistoryResponse } from '../../shared/types/app.types';
|
|
25
25
|
import { RoomMessage } from './room/message';
|
|
26
26
|
export declare class AppService {
|
|
27
27
|
private readonly aiFactoryService;
|
|
@@ -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>;
|
|
@@ -166,7 +167,10 @@ export declare class AppService {
|
|
|
166
167
|
savePlotPlan(storyId: string, content: string): Promise<void>;
|
|
167
168
|
getBalance(): number;
|
|
168
169
|
addBalance(amount: number): void;
|
|
169
|
-
|
|
170
|
+
recordTransaction(amount: number, paymentId: string, status?: 'pending' | 'succeeded' | 'failed' | 'cancelled'): Promise<Transaction>;
|
|
171
|
+
updateTransactionStatus(paymentId: string, status: 'pending' | 'succeeded' | 'failed' | 'cancelled'): Promise<void>;
|
|
172
|
+
getTransactionByPaymentId(paymentId: string): Promise<Transaction | null>;
|
|
173
|
+
getTransactions(limit?: number, offset?: number): Promise<TransactionHistoryResponse>;
|
|
170
174
|
listUserArtifacts(): ArtifactMetadata[];
|
|
171
175
|
getUserArtifact(artifactId: string): string | Buffer | null;
|
|
172
176
|
createUserArtifact(name: string, content: string): string;
|
|
@@ -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) {
|
|
@@ -1155,8 +1162,17 @@ class AppService {
|
|
|
1155
1162
|
addBalance(amount) {
|
|
1156
1163
|
return this.balanceService.addBalance(amount);
|
|
1157
1164
|
}
|
|
1158
|
-
|
|
1159
|
-
return this.transactionService;
|
|
1165
|
+
async recordTransaction(amount, paymentId, status = 'pending') {
|
|
1166
|
+
return this.transactionService.recordTransaction(amount, paymentId, status);
|
|
1167
|
+
}
|
|
1168
|
+
async updateTransactionStatus(paymentId, status) {
|
|
1169
|
+
return this.transactionService.updateTransactionStatus(paymentId, status);
|
|
1170
|
+
}
|
|
1171
|
+
async getTransactionByPaymentId(paymentId) {
|
|
1172
|
+
return this.transactionService.getTransactionByPaymentId(paymentId);
|
|
1173
|
+
}
|
|
1174
|
+
async getTransactions(limit = 50, offset = 0) {
|
|
1175
|
+
return this.transactionService.getTransactions(limit, offset);
|
|
1160
1176
|
}
|
|
1161
1177
|
listUserArtifacts() {
|
|
1162
1178
|
return this.artifactService.listArtifacts();
|
|
@@ -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)) {
|
|
@@ -1,7 +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, ModelInfo, ArtifactMetadata, PreparedPromptResponse, PromptScope, PromptFolder, PromptFoldersResponse, PromptFile, PromptFilesResponse, StoryIdea,
|
|
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, Transaction, TransactionHistoryResponse, StoryStateEvent, StoryIntroduceCharacterEvent, StoryProgressChapterEvent, StoryErrorEvent, Character, ChapterInfo, } from '../../../shared/types/app.types';
|
|
5
5
|
export type { LoggingOptions } from './briyah-config';
|
|
6
6
|
export { Agent } from '../ai/agent';
|
|
7
7
|
export { Room } from '../room/room';
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import {
|
|
2
|
+
import { StoryState } from '../../../shared/types/app.types';
|
|
3
3
|
export declare class StoryMessageService {
|
|
4
4
|
private messageEmitters;
|
|
5
5
|
getOrCreateEmitter(storyId: string): EventEmitter;
|
|
6
6
|
getEmitter(storyId: string): EventEmitter | undefined;
|
|
7
|
-
|
|
7
|
+
emitStoryState(storyId: string, state: StoryState): void;
|
|
8
|
+
emitIntroduceCharacter(storyId: string, characterName?: string): void;
|
|
9
|
+
emitProgressChapter(storyId: string): void;
|
|
8
10
|
emitError(storyId: string, error: Error): void;
|
|
9
11
|
cleanup(storyId: string): void;
|
|
10
12
|
}
|
|
@@ -22,26 +22,37 @@ let StoryMessageService = class StoryMessageService {
|
|
|
22
22
|
getEmitter(storyId) {
|
|
23
23
|
return this.messageEmitters.get(storyId);
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
const emitter = this.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
emitStoryState(storyId, state) {
|
|
26
|
+
const emitter = this.getOrCreateEmitter(storyId);
|
|
27
|
+
const payload = { type: 'story-state', state, timestamp: Date.now() };
|
|
28
|
+
emitter.emit('story-state', payload);
|
|
29
|
+
}
|
|
30
|
+
emitIntroduceCharacter(storyId, characterName) {
|
|
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);
|
|
38
|
+
}
|
|
39
|
+
emitProgressChapter(storyId) {
|
|
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);
|
|
34
46
|
}
|
|
35
47
|
emitError(storyId, error) {
|
|
36
|
-
const emitter = this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
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);
|
|
45
56
|
}
|
|
46
57
|
cleanup(storyId) {
|
|
47
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;
|