chat-flow-ardymalihi 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/dist/adapters/db/InMemorySessionRepository.js +15 -0
  4. package/dist/adapters/db/RedisSessionRepository.js +41 -0
  5. package/dist/adapters/intent/IntentMatcher.d.ts +25 -0
  6. package/dist/adapters/intent/IntentMatcher.d.ts.map +1 -0
  7. package/dist/adapters/intent/IntentMatcher.js +89 -0
  8. package/dist/adapters/intent/IntentMatcher.js.map +1 -0
  9. package/dist/adapters/intent/IntentService.d.ts +27 -0
  10. package/dist/adapters/intent/IntentService.d.ts.map +1 -0
  11. package/dist/adapters/intent/IntentService.js +59 -0
  12. package/dist/adapters/intent/IntentService.js.map +1 -0
  13. package/dist/adapters/intent/MockIntentAdapter.js +29 -0
  14. package/dist/adapters/llm/GeminiLLMAdapter.d.ts +10 -0
  15. package/dist/adapters/llm/GeminiLLMAdapter.d.ts.map +1 -0
  16. package/dist/adapters/llm/GeminiLLMAdapter.js +102 -0
  17. package/dist/adapters/llm/GeminiLLMAdapter.js.map +1 -0
  18. package/dist/adapters/llm/MockLLMAdapter.d.ts +5 -0
  19. package/dist/adapters/llm/MockLLMAdapter.d.ts.map +1 -0
  20. package/dist/adapters/llm/MockLLMAdapter.js +31 -0
  21. package/dist/adapters/llm/MockLLMAdapter.js.map +1 -0
  22. package/dist/adapters/memory/InMemorySessionRepository.js +15 -0
  23. package/dist/adapters/redis/RedisSessionRepository.js +41 -0
  24. package/dist/adapters/repository/InMemoryRepository.d.ts +15 -0
  25. package/dist/adapters/repository/InMemoryRepository.d.ts.map +1 -0
  26. package/dist/adapters/repository/InMemoryRepository.js +41 -0
  27. package/dist/adapters/repository/InMemoryRepository.js.map +1 -0
  28. package/dist/adapters/repository/IntentRepository.d.ts +15 -0
  29. package/dist/adapters/repository/IntentRepository.d.ts.map +1 -0
  30. package/dist/adapters/repository/IntentRepository.js +28 -0
  31. package/dist/adapters/repository/IntentRepository.js.map +1 -0
  32. package/dist/adapters/repository/RedisRepository.d.ts +16 -0
  33. package/dist/adapters/repository/RedisRepository.d.ts.map +1 -0
  34. package/dist/adapters/repository/RedisRepository.js +87 -0
  35. package/dist/adapters/repository/RedisRepository.js.map +1 -0
  36. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts +5 -0
  37. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  38. package/dist/adapters/workflow/MockWorkflowAdapter.js +162 -0
  39. package/dist/adapters/workflow/MockWorkflowAdapter.js.map +1 -0
  40. package/dist/application/ConversationSession.d.ts +23 -0
  41. package/dist/application/ConversationSession.d.ts.map +1 -0
  42. package/dist/application/ConversationSession.js +83 -0
  43. package/dist/application/ConversationSession.js.map +1 -0
  44. package/dist/application/Message.d.ts +11 -0
  45. package/dist/application/Message.d.ts.map +1 -0
  46. package/dist/application/Message.js +30 -0
  47. package/dist/application/Message.js.map +1 -0
  48. package/dist/application/Orchestrator.d.ts +18 -0
  49. package/dist/application/Orchestrator.d.ts.map +1 -0
  50. package/dist/application/Orchestrator.js +80 -0
  51. package/dist/application/Orchestrator.js.map +1 -0
  52. package/dist/application/SessionState.js +2 -0
  53. package/dist/application/usecases/CreateSession.js +20 -0
  54. package/dist/application/usecases/HandleUserMessage.js +69 -0
  55. package/dist/config/ChatFlowConfig.d.ts +59 -0
  56. package/dist/config/ChatFlowConfig.d.ts.map +1 -0
  57. package/dist/config/ChatFlowConfig.js +49 -0
  58. package/dist/config/ChatFlowConfig.js.map +1 -0
  59. package/dist/config/index.d.ts +2 -0
  60. package/dist/config/index.d.ts.map +1 -0
  61. package/dist/config/index.js +7 -0
  62. package/dist/config/index.js.map +1 -0
  63. package/dist/core/entities/ConversationSession.d.ts +23 -0
  64. package/dist/core/entities/ConversationSession.d.ts.map +1 -0
  65. package/dist/core/entities/ConversationSession.js +83 -0
  66. package/dist/core/entities/ConversationSession.js.map +1 -0
  67. package/dist/core/entities/Message.d.ts +11 -0
  68. package/dist/core/entities/Message.d.ts.map +1 -0
  69. package/dist/core/entities/Message.js +30 -0
  70. package/dist/core/entities/Message.js.map +1 -0
  71. package/dist/core/errors/ChatFlowError.d.ts +71 -0
  72. package/dist/core/errors/ChatFlowError.d.ts.map +1 -0
  73. package/dist/core/errors/ChatFlowError.js +108 -0
  74. package/dist/core/errors/ChatFlowError.js.map +1 -0
  75. package/dist/core/errors/index.d.ts +2 -0
  76. package/dist/core/errors/index.d.ts.map +1 -0
  77. package/dist/core/errors/index.js +15 -0
  78. package/dist/core/errors/index.js.map +1 -0
  79. package/dist/db/InMemoryRepository.d.ts +15 -0
  80. package/dist/db/InMemoryRepository.d.ts.map +1 -0
  81. package/dist/db/InMemoryRepository.js +41 -0
  82. package/dist/db/InMemoryRepository.js.map +1 -0
  83. package/dist/db/RedisRepository.d.ts +16 -0
  84. package/dist/db/RedisRepository.d.ts.map +1 -0
  85. package/dist/db/RedisRepository.js +87 -0
  86. package/dist/db/RedisRepository.js.map +1 -0
  87. package/dist/demo/cli-demo.d.ts +2 -0
  88. package/dist/demo/cli-demo.d.ts.map +1 -0
  89. package/dist/demo/cli-demo.js +142 -0
  90. package/dist/demo/cli-demo.js.map +1 -0
  91. package/dist/demo/console-chat.d.ts +2 -0
  92. package/dist/demo/console-chat.d.ts.map +1 -0
  93. package/dist/demo/console-chat.js +144 -0
  94. package/dist/demo/console-chat.js.map +1 -0
  95. package/dist/domain/conversation/ConversationSession.js +82 -0
  96. package/dist/domain/conversation/Message.js +33 -0
  97. package/dist/domain/conversation/SessionState.js +10 -0
  98. package/dist/index.d.ts +22 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +61 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/intent/IntentService.d.ts +17 -0
  103. package/dist/intent/IntentService.d.ts.map +1 -0
  104. package/dist/intent/IntentService.js +51 -0
  105. package/dist/intent/IntentService.js.map +1 -0
  106. package/dist/intent/MockIntentService.d.ts +6 -0
  107. package/dist/intent/MockIntentService.d.ts.map +1 -0
  108. package/dist/intent/MockIntentService.js +30 -0
  109. package/dist/intent/MockIntentService.js.map +1 -0
  110. package/dist/interfaces.d.ts +108 -0
  111. package/dist/interfaces.d.ts.map +1 -0
  112. package/dist/interfaces.js +18 -0
  113. package/dist/interfaces.js.map +1 -0
  114. package/dist/llm/GeminiLLMAdapter.d.ts +10 -0
  115. package/dist/llm/GeminiLLMAdapter.d.ts.map +1 -0
  116. package/dist/llm/GeminiLLMAdapter.js +102 -0
  117. package/dist/llm/GeminiLLMAdapter.js.map +1 -0
  118. package/dist/llm/MockLLMAdapter.d.ts +5 -0
  119. package/dist/llm/MockLLMAdapter.d.ts.map +1 -0
  120. package/dist/llm/MockLLMAdapter.js +31 -0
  121. package/dist/llm/MockLLMAdapter.js.map +1 -0
  122. package/dist/orchestrator/Orchestrator.d.ts +18 -0
  123. package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
  124. package/dist/orchestrator/Orchestrator.js +80 -0
  125. package/dist/orchestrator/Orchestrator.js.map +1 -0
  126. package/dist/ports/IIntentRepository.d.ts +27 -0
  127. package/dist/ports/IIntentRepository.d.ts.map +1 -0
  128. package/dist/ports/IIntentRepository.js +3 -0
  129. package/dist/ports/IIntentRepository.js.map +1 -0
  130. package/dist/ports/IntentPort.js +2 -0
  131. package/dist/ports/LLMPort.js +2 -0
  132. package/dist/ports/SessionRepository.js +2 -0
  133. package/dist/ports/WorkflowPort.js +2 -0
  134. package/dist/scripts/debug-redis.d.ts +2 -0
  135. package/dist/scripts/debug-redis.d.ts.map +1 -0
  136. package/dist/scripts/debug-redis.js +55 -0
  137. package/dist/scripts/debug-redis.js.map +1 -0
  138. package/dist/scripts/verify_memory_intents.d.ts +2 -0
  139. package/dist/scripts/verify_memory_intents.d.ts.map +1 -0
  140. package/dist/scripts/verify_memory_intents.js +45 -0
  141. package/dist/scripts/verify_memory_intents.js.map +1 -0
  142. package/dist/scripts/verify_redis_intents.d.ts +2 -0
  143. package/dist/scripts/verify_redis_intents.d.ts.map +1 -0
  144. package/dist/scripts/verify_redis_intents.js +50 -0
  145. package/dist/scripts/verify_redis_intents.js.map +1 -0
  146. package/dist/verify_memory_intents.js +44 -0
  147. package/dist/verify_redis_intents.js +49 -0
  148. package/dist/workflow/MockWorkflowAdapter.d.ts +5 -0
  149. package/dist/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  150. package/dist/workflow/MockWorkflowAdapter.js +162 -0
  151. package/dist/workflow/MockWorkflowAdapter.js.map +1 -0
  152. package/package.json +78 -0
@@ -0,0 +1,23 @@
1
+ import { Message } from './Message';
2
+ import { CreateSessionProps, SessionStatus } from '../interfaces';
3
+ export declare class ConversationSession {
4
+ readonly sessionId: string;
5
+ readonly mode: 'TEXT' | 'VOICE';
6
+ readonly agentPrompt: string;
7
+ private _messages;
8
+ private _status;
9
+ private _metadata;
10
+ readonly createdAt: Date;
11
+ updatedAt: Date;
12
+ constructor(props: CreateSessionProps);
13
+ static reconstitute(data: any): ConversationSession;
14
+ toSnapshot(): any;
15
+ get messages(): Message[];
16
+ get status(): SessionStatus;
17
+ addMessage(message: Message): void;
18
+ updateStatus(status: SessionStatus): void;
19
+ setMetadata(key: string, value: any): void;
20
+ getMetadata(key: string): any;
21
+ getHistory(): Message[];
22
+ }
23
+ //# sourceMappingURL=ConversationSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationSession.d.ts","sourceRoot":"","sources":["../../src/application/ConversationSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGlE,qBAAa,mBAAmB;IAC5B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAsB;IACvC,SAAgB,SAAS,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;gBAEX,KAAK,EAAE,kBAAkB;IAYrC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB;IA4B5C,UAAU,IAAI,GAAG;IAaxB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,MAAM,IAAI,aAAa,CAE1B;IAEM,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKzC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK1C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAO7B,UAAU,IAAI,OAAO,EAAE;CAGjC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConversationSession = void 0;
4
+ const Message_1 = require("./Message");
5
+ const interfaces_1 = require("../interfaces");
6
+ class ConversationSession {
7
+ constructor(props) {
8
+ this.sessionId = props.sessionId;
9
+ this.mode = props.mode;
10
+ this.agentPrompt = props.agentPrompt;
11
+ this._messages = [];
12
+ this._status = interfaces_1.SessionStatus.ACTIVE;
13
+ this._metadata = {};
14
+ this.createdAt = new Date();
15
+ this.updatedAt = new Date();
16
+ }
17
+ // Helper to restore from persistence
18
+ static reconstitute(data) {
19
+ // We create a "shell" session via private constructor or just forcing it.
20
+ // For simplicity in this demo, we'll instantiate normally and override.
21
+ const session = new ConversationSession({
22
+ sessionId: data.sessionId,
23
+ mode: data.mode,
24
+ agentPrompt: data.agentPrompt
25
+ });
26
+ // Restore state
27
+ // Assuming messages are stored as plain objects, we need to map them back to Message instances
28
+ session._messages = (data.messages || []).map((m) => new Message_1.Message({
29
+ role: m.role,
30
+ content: m.content,
31
+ timestamp: new Date(m.timestamp),
32
+ metadata: m.metadata
33
+ }));
34
+ session._status = data.status;
35
+ session._metadata = data.metadata || {};
36
+ // @ts-ignore - writing to readonly for hydration
37
+ session.createdAt = new Date(data.createdAt);
38
+ session.updatedAt = new Date(data.updatedAt);
39
+ return session;
40
+ }
41
+ // Helper to snapshot for persistence
42
+ toSnapshot() {
43
+ return {
44
+ sessionId: this.sessionId,
45
+ mode: this.mode,
46
+ agentPrompt: this.agentPrompt,
47
+ messages: this._messages,
48
+ status: this._status,
49
+ metadata: this._metadata,
50
+ createdAt: this.createdAt,
51
+ updatedAt: this.updatedAt
52
+ };
53
+ }
54
+ get messages() {
55
+ return [...this._messages];
56
+ }
57
+ get status() {
58
+ return this._status;
59
+ }
60
+ addMessage(message) {
61
+ this._messages.push(message);
62
+ this.updatedAt = new Date();
63
+ }
64
+ updateStatus(status) {
65
+ this._status = status;
66
+ this.updatedAt = new Date();
67
+ }
68
+ setMetadata(key, value) {
69
+ this._metadata[key] = value;
70
+ this.updatedAt = new Date();
71
+ }
72
+ getMetadata(key) {
73
+ return this._metadata[key];
74
+ }
75
+ // Helper to get conversation history for LLM Context
76
+ // Can prepend system instructions here if needed by specific LLM adapters,
77
+ // but usually handled in the Adapter layer.
78
+ getHistory() {
79
+ return this._messages;
80
+ }
81
+ }
82
+ exports.ConversationSession = ConversationSession;
83
+ //# sourceMappingURL=ConversationSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationSession.js","sourceRoot":"","sources":["../../src/application/ConversationSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Role, Message as IMessage, MessageProps } from '../interfaces';
2
+ export declare class Message implements IMessage {
3
+ readonly role: Role;
4
+ readonly content: string;
5
+ readonly timestamp: Date;
6
+ readonly metadata: Record<string, any>;
7
+ constructor(props: MessageProps);
8
+ static user(content: string, metadata?: Record<string, any>): Message;
9
+ static assistant(content: string, metadata?: Record<string, any>): Message;
10
+ }
11
+ //# sourceMappingURL=Message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/application/Message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIxE,qBAAa,OAAQ,YAAW,QAAQ;IACpC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,IAAI,CAAC;IAChC,SAAgB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAElC,KAAK,EAAE,YAAY;IAO/B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IASrE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;CAQ7E"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Message = void 0;
4
+ const interfaces_1 = require("../interfaces");
5
+ class Message {
6
+ constructor(props) {
7
+ this.role = props.role;
8
+ this.content = props.content;
9
+ this.timestamp = props.timestamp;
10
+ this.metadata = props.metadata || {};
11
+ }
12
+ static user(content, metadata) {
13
+ return new Message({
14
+ role: interfaces_1.Role.USER,
15
+ content,
16
+ timestamp: new Date(),
17
+ metadata
18
+ });
19
+ }
20
+ static assistant(content, metadata) {
21
+ return new Message({
22
+ role: interfaces_1.Role.ASSISTANT,
23
+ content,
24
+ timestamp: new Date(),
25
+ metadata
26
+ });
27
+ }
28
+ }
29
+ exports.Message = Message;
30
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/application/Message.ts"],"names":[],"mappings":";;;AAAA,8CAAwE;AAIxE,MAAa,OAAO;IAMhB,YAAY,KAAmB;QAC3B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,QAA8B;QACvD,OAAO,IAAI,OAAO,CAAC;YACf,IAAI,EAAE,iBAAI,CAAC,IAAI;YACf,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAe,EAAE,QAA8B;QAC5D,OAAO,IAAI,OAAO,CAAC;YACf,IAAI,EAAE,iBAAI,CAAC,SAAS;YACpB,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;CACJ;AA9BD,0BA8BC"}
@@ -0,0 +1,18 @@
1
+ import { ConversationSession } from './ConversationSession';
2
+ import { Message } from './Message';
3
+ import { IRepository, ILLMAdapter, IIntentService, IWorkflowAdapter, IOrchestrator } from '../interfaces';
4
+ import { ChatFlowConfig } from '../config';
5
+ export declare class Orchestrator implements IOrchestrator {
6
+ private repo;
7
+ private llm;
8
+ private intent;
9
+ private workflow;
10
+ private readonly config;
11
+ constructor(repo: IRepository, llm: ILLMAdapter, intent: IIntentService, workflow: IWorkflowAdapter, config?: Partial<ChatFlowConfig>);
12
+ createSession(sessionId: string, mode: 'TEXT' | 'VOICE', agentPrompt: string): Promise<ConversationSession>;
13
+ handleMessage(sessionId: string, content: string): Promise<{
14
+ messages: Message[];
15
+ metadata?: any;
16
+ }>;
17
+ }
18
+ //# sourceMappingURL=Orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../../src/application/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACH,WAAW,EACX,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EAEhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAkB,MAAM,WAAW,CAAC;AAE3D,qBAAa,YAAa,YAAW,aAAa;IAI1C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IANpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAG5B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAClC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAK9B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAW3G,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CA6D5G"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Orchestrator = void 0;
4
+ const ConversationSession_1 = require("./ConversationSession");
5
+ const Message_1 = require("./Message");
6
+ const interfaces_1 = require("../interfaces");
7
+ const errors_1 = require("../core/errors");
8
+ const config_1 = require("../config");
9
+ class Orchestrator {
10
+ constructor(repo, llm, intent, workflow, config) {
11
+ this.repo = repo;
12
+ this.llm = llm;
13
+ this.intent = intent;
14
+ this.workflow = workflow;
15
+ this.config = config ? { ...config_1.DEFAULT_CONFIG, ...config } : config_1.DEFAULT_CONFIG;
16
+ }
17
+ async createSession(sessionId, mode, agentPrompt) {
18
+ const session = new ConversationSession_1.ConversationSession({
19
+ sessionId,
20
+ mode,
21
+ agentPrompt
22
+ });
23
+ await this.repo.saveSession(session);
24
+ return session;
25
+ }
26
+ async handleMessage(sessionId, content) {
27
+ // 1. Load Session
28
+ const session = await this.repo.findSessionById(sessionId);
29
+ if (!session) {
30
+ throw new errors_1.SessionNotFoundError(sessionId);
31
+ }
32
+ // 2. Append User Message
33
+ const userMessage = Message_1.Message.user(content);
34
+ session.addMessage(userMessage);
35
+ const newMessages = [];
36
+ // 3. Detect Intent
37
+ console.log(`[Orchestrator] Requesting Intent classification for: "${content.substring(0, 50)}..."`);
38
+ const intentResult = await this.intent.detectIntent(session.getHistory(), session.agentPrompt);
39
+ if (intentResult.intentName && intentResult.confidence >= this.config.intent.confidenceThreshold) {
40
+ console.log(`[Orchestrator] DECISION: Execute Workflow '${intentResult.intentName}' (Confidence ${intentResult.confidence} >= ${this.config.intent.confidenceThreshold})`);
41
+ const workflowResult = await this.workflow.executeWorkflow(intentResult.intentName, intentResult.payload);
42
+ // 5. Inject Workflow Result
43
+ const workflowContextMessage = new Message_1.Message({
44
+ role: interfaces_1.Role.SYSTEM,
45
+ content: `[System Info: Workflow detected '${intentResult.intentName}'. Execution Result: ${JSON.stringify(workflowResult.data)}. Use this to answer the user.]`,
46
+ timestamp: new Date()
47
+ });
48
+ // Transient history
49
+ const transientHistory = [...session.getHistory(), workflowContextMessage];
50
+ const llmResponse = await this.llm.generateResponse(session.agentPrompt, transientHistory);
51
+ const assistantMsg = Message_1.Message.assistant(llmResponse.content);
52
+ session.addMessage(assistantMsg);
53
+ newMessages.push(assistantMsg);
54
+ }
55
+ else {
56
+ if (intentResult.intentName) {
57
+ console.log(`[Orchestrator] DECISION: Skip Workflow '${intentResult.intentName}' (Confidence ${intentResult.confidence} < ${this.config.intent.confidenceThreshold}). Proceeding with Standard LLM.`);
58
+ }
59
+ else {
60
+ console.log(`[Orchestrator] DECISION: No Intent Detected. Proceeding with Standard LLM.`);
61
+ }
62
+ const llmResponse = await this.llm.generateResponse(session.agentPrompt, session.getHistory());
63
+ const assistantMsg = Message_1.Message.assistant(llmResponse.content);
64
+ session.addMessage(assistantMsg);
65
+ newMessages.push(assistantMsg);
66
+ }
67
+ // 6. Save
68
+ await this.repo.saveSession(session);
69
+ return {
70
+ messages: newMessages,
71
+ metadata: {
72
+ intent: intentResult.intentName,
73
+ confidence: intentResult.confidence,
74
+ workflowExecuted: (intentResult.intentName && intentResult.confidence >= this.config.intent.confidenceThreshold) ? intentResult.intentName : null
75
+ }
76
+ };
77
+ }
78
+ }
79
+ exports.Orchestrator = Orchestrator;
80
+ //# sourceMappingURL=Orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Orchestrator.js","sourceRoot":"","sources":["../../src/application/Orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateSession = void 0;
4
+ const ConversationSession_1 = require("../../domain/conversation/ConversationSession");
5
+ const uuid_1 = require("uuid");
6
+ class CreateSession {
7
+ constructor(sessionRepo) {
8
+ this.sessionRepo = sessionRepo;
9
+ }
10
+ async execute(request) {
11
+ const session = new ConversationSession_1.ConversationSession({
12
+ sessionId: (0, uuid_1.v4)(),
13
+ mode: request.mode,
14
+ agentPrompt: request.agentPrompt
15
+ });
16
+ await this.sessionRepo.save(session);
17
+ return session;
18
+ }
19
+ }
20
+ exports.CreateSession = CreateSession;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HandleUserMessage = void 0;
4
+ const Message_1 = require("../../domain/conversation/Message");
5
+ class HandleUserMessage {
6
+ constructor(sessionRepo, llm, intent, workflow) {
7
+ this.sessionRepo = sessionRepo;
8
+ this.llm = llm;
9
+ this.intent = intent;
10
+ this.workflow = workflow;
11
+ }
12
+ async execute(request) {
13
+ // 1. Load Session
14
+ const session = await this.sessionRepo.findById(request.sessionId);
15
+ if (!session) {
16
+ throw new Error(`Session ${request.sessionId} not found`);
17
+ }
18
+ // 2. Append User Message
19
+ const userMessage = Message_1.Message.user(request.content);
20
+ session.addMessage(userMessage);
21
+ const newMessages = [];
22
+ // 3. Parallel Intent Detection (+ could do speculative LLM gen here, but we'll wait for strict logic)
23
+ // User requested: "if new message comes... check INTENT... if found... run workflow"
24
+ console.log(`[Orchestrator] Detecting intent for: "${request.content.substring(0, 50)}..."`);
25
+ const intentResult = await this.intent.detectIntent(session.getHistory(), session.agentPrompt);
26
+ if (intentResult.intentName && intentResult.confidence > 0.7) {
27
+ console.log(`[Orchestrator] Intent Detected: ${intentResult.intentName} (Conf: ${intentResult.confidence})`);
28
+ // 3a. Interjection (Optional, but user mentioned "One second...")
29
+ // We create a temporary message or "interjection" to return.
30
+ // Depending on UI, this might just be a loading state, but let's emulate it as a message if requested.
31
+ // For this API, we will just proceed to execute workflow and include the result.
32
+ // 3b. Execute Workflow
33
+ console.log(`[Orchestrator] Executing Workflow for ${intentResult.intentName}`);
34
+ const workflowResult = await this.workflow.executeWorkflow(intentResult.intentName, intentResult.payload);
35
+ // 3c. Formulate Prompt with Workflow Data
36
+ // "Return a good response to the agent to pass through the user"
37
+ // We inject the workflow result into the CONTEXT for the LLM generation, but maybe NOT the persistent history yet?
38
+ // Or we treat it as an invisible "Function Result" message in the history.
39
+ // Since "Two conversation roles only", we shouldn't save a "System" message.
40
+ // We'll append it to the transient history sent to LLM.
41
+ const workflowContextMessage = new Message_1.Message({
42
+ role: Message_1.Role.USER, // Treating as context info, or we could just append to string prompt
43
+ content: `[System Info: Workflow detected '${intentResult.intentName}'. Execution Result: ${JSON.stringify(workflowResult.data)}. Use this to answer the user.]`,
44
+ timestamp: new Date()
45
+ });
46
+ // Transient history for this generation only
47
+ const transientHistory = [...session.getHistory(), workflowContextMessage];
48
+ const llmResponse = await this.llm.generateResponse(session.agentPrompt, transientHistory);
49
+ const assistantMsg = Message_1.Message.assistant(llmResponse.content);
50
+ session.addMessage(assistantMsg);
51
+ newMessages.push(assistantMsg);
52
+ }
53
+ else {
54
+ // 4. No Intent -> Standard LLM Response
55
+ console.log(`[Orchestrator] No strong intent. Standard LLM response.`);
56
+ const llmResponse = await this.llm.generateResponse(session.agentPrompt, session.getHistory());
57
+ const assistantMsg = Message_1.Message.assistant(llmResponse.content);
58
+ session.addMessage(assistantMsg);
59
+ newMessages.push(assistantMsg);
60
+ }
61
+ // 5. Persist
62
+ await this.sessionRepo.save(session);
63
+ return {
64
+ sessionId: session.sessionId,
65
+ newMessages
66
+ };
67
+ }
68
+ }
69
+ exports.HandleUserMessage = HandleUserMessage;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Configuration options for Chat-Flow
3
+ */
4
+ export interface ChatFlowConfig {
5
+ /** Session configuration */
6
+ session: {
7
+ /** Session TTL in seconds (default: 3600 = 1 hour) */
8
+ ttl: number;
9
+ /** Maximum number of messages to keep in history (default: 100) */
10
+ maxHistoryLength: number;
11
+ };
12
+ /** Intent detection configuration */
13
+ intent: {
14
+ /** Confidence threshold for intent detection (0-1, default: 0.6) */
15
+ confidenceThreshold: number;
16
+ /** Maximum number of intents to return (default: 5) */
17
+ maxIntents: number;
18
+ /** Intent cache TTL in seconds (default: 300 = 5 minutes) */
19
+ cacheTTL: number;
20
+ };
21
+ /** LLM configuration */
22
+ llm: {
23
+ /** Model name (default: 'gemini-2.0-flash-lite') */
24
+ model: string;
25
+ /** Temperature for generation (0-1, default: 0.7) */
26
+ temperature: number;
27
+ /** Maximum tokens to generate (default: 1000) */
28
+ maxTokens: number;
29
+ /** Request timeout in milliseconds (default: 30000 = 30 seconds) */
30
+ timeout: number;
31
+ };
32
+ /** Workflow configuration */
33
+ workflow: {
34
+ /** Workflow execution timeout in milliseconds (default: 60000 = 1 minute) */
35
+ timeout: number;
36
+ /** Number of retry attempts (default: 3) */
37
+ retries: number;
38
+ /** Delay between retries in milliseconds (default: 1000) */
39
+ retryDelay: number;
40
+ };
41
+ /** Logging configuration */
42
+ logging: {
43
+ /** Enable logging (default: true) */
44
+ enabled: boolean;
45
+ /** Log level: 'debug' | 'info' | 'warn' | 'error' (default: 'info') */
46
+ level: 'debug' | 'info' | 'warn' | 'error';
47
+ /** Include timestamps in logs (default: true) */
48
+ timestamps: boolean;
49
+ };
50
+ }
51
+ /**
52
+ * Default configuration values
53
+ */
54
+ export declare const DEFAULT_CONFIG: ChatFlowConfig;
55
+ /**
56
+ * Merge user config with defaults
57
+ */
58
+ export declare function mergeConfig(userConfig?: Partial<ChatFlowConfig>): ChatFlowConfig;
59
+ //# sourceMappingURL=ChatFlowConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatFlowConfig.d.ts","sourceRoot":"","sources":["../../src/config/ChatFlowConfig.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,4BAA4B;IAC5B,OAAO,EAAE;QACL,sDAAsD;QACtD,GAAG,EAAE,MAAM,CAAC;QACZ,mEAAmE;QACnE,gBAAgB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAEF,qCAAqC;IACrC,MAAM,EAAE;QACJ,oEAAoE;QACpE,mBAAmB,EAAE,MAAM,CAAC;QAC5B,uDAAuD;QACvD,UAAU,EAAE,MAAM,CAAC;QACnB,6DAA6D;QAC7D,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,wBAAwB;IACxB,GAAG,EAAE;QACD,oDAAoD;QACpD,KAAK,EAAE,MAAM,CAAC;QACd,qDAAqD;QACrD,WAAW,EAAE,MAAM,CAAC;QACpB,iDAAiD;QACjD,SAAS,EAAE,MAAM,CAAC;QAClB,oEAAoE;QACpE,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,6BAA6B;IAC7B,QAAQ,EAAE;QACN,6EAA6E;QAC7E,OAAO,EAAE,MAAM,CAAC;QAChB,4CAA4C;QAC5C,OAAO,EAAE,MAAM,CAAC;QAChB,4DAA4D;QAC5D,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,4BAA4B;IAC5B,OAAO,EAAE;QACL,qCAAqC;QACrC,OAAO,EAAE,OAAO,CAAC;QACjB,uEAAuE;QACvE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC3C,iDAAiD;QACjD,UAAU,EAAE,OAAO,CAAC;KACvB,CAAC;CACL;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,cA0B5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAUhF"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CONFIG = void 0;
4
+ exports.mergeConfig = mergeConfig;
5
+ /**
6
+ * Default configuration values
7
+ */
8
+ exports.DEFAULT_CONFIG = {
9
+ session: {
10
+ ttl: 3600,
11
+ maxHistoryLength: 100
12
+ },
13
+ intent: {
14
+ confidenceThreshold: 0.6,
15
+ maxIntents: 5,
16
+ cacheTTL: 300
17
+ },
18
+ llm: {
19
+ model: 'gemini-2.0-flash-lite',
20
+ temperature: 0.7,
21
+ maxTokens: 1000,
22
+ timeout: 30000
23
+ },
24
+ workflow: {
25
+ timeout: 60000,
26
+ retries: 3,
27
+ retryDelay: 1000
28
+ },
29
+ logging: {
30
+ enabled: true,
31
+ level: 'info',
32
+ timestamps: true
33
+ }
34
+ };
35
+ /**
36
+ * Merge user config with defaults
37
+ */
38
+ function mergeConfig(userConfig) {
39
+ if (!userConfig)
40
+ return exports.DEFAULT_CONFIG;
41
+ return {
42
+ session: { ...exports.DEFAULT_CONFIG.session, ...userConfig.session },
43
+ intent: { ...exports.DEFAULT_CONFIG.intent, ...userConfig.intent },
44
+ llm: { ...exports.DEFAULT_CONFIG.llm, ...userConfig.llm },
45
+ workflow: { ...exports.DEFAULT_CONFIG.workflow, ...userConfig.workflow },
46
+ logging: { ...exports.DEFAULT_CONFIG.logging, ...userConfig.logging }
47
+ };
48
+ }
49
+ //# sourceMappingURL=ChatFlowConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatFlowConfig.js","sourceRoot":"","sources":["../../src/config/ChatFlowConfig.ts"],"names":[],"mappings":";;;AAyFA,kCAUC;AA5CD;;GAEG;AACU,QAAA,cAAc,GAAmB;IAC1C,OAAO,EAAE;QACL,GAAG,EAAE,IAAI;QACT,gBAAgB,EAAE,GAAG;KACxB;IACD,MAAM,EAAE;QACJ,mBAAmB,EAAE,GAAG;QACxB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,GAAG;KAChB;IACD,GAAG,EAAE;QACD,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,KAAK;KACjB;IACD,QAAQ,EAAE;QACN,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI;KACnB;IACD,OAAO,EAAE;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,IAAI;KACnB;CACJ,CAAC;AAEF;;GAEG;AACH,SAAgB,WAAW,CAAC,UAAoC;IAC5D,IAAI,CAAC,UAAU;QAAE,OAAO,sBAAc,CAAC;IAEvC,OAAO;QACH,OAAO,EAAE,EAAE,GAAG,sBAAc,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE;QAC7D,MAAM,EAAE,EAAE,GAAG,sBAAc,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;QAC1D,GAAG,EAAE,EAAE,GAAG,sBAAc,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;QACjD,QAAQ,EAAE,EAAE,GAAG,sBAAc,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE;QAChE,OAAO,EAAE,EAAE,GAAG,sBAAc,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE;KAChE,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ChatFlowConfig, DEFAULT_CONFIG, mergeConfig } from './ChatFlowConfig';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeConfig = exports.DEFAULT_CONFIG = void 0;
4
+ var ChatFlowConfig_1 = require("./ChatFlowConfig");
5
+ Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return ChatFlowConfig_1.DEFAULT_CONFIG; } });
6
+ Object.defineProperty(exports, "mergeConfig", { enumerable: true, get: function () { return ChatFlowConfig_1.mergeConfig; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;AAAA,mDAA+E;AAAtD,gHAAA,cAAc,OAAA;AAAE,6GAAA,WAAW,OAAA"}
@@ -0,0 +1,23 @@
1
+ import { Message } from './Message';
2
+ import { CreateSessionProps, SessionStatus } from '../../interfaces';
3
+ export declare class ConversationSession {
4
+ readonly sessionId: string;
5
+ readonly mode: 'TEXT' | 'VOICE';
6
+ readonly agentPrompt: string;
7
+ private _messages;
8
+ private _status;
9
+ private _metadata;
10
+ readonly createdAt: Date;
11
+ updatedAt: Date;
12
+ constructor(props: CreateSessionProps);
13
+ static reconstitute(data: any): ConversationSession;
14
+ toSnapshot(): any;
15
+ get messages(): Message[];
16
+ get status(): SessionStatus;
17
+ addMessage(message: Message): void;
18
+ updateStatus(status: SessionStatus): void;
19
+ setMetadata(key: string, value: any): void;
20
+ getMetadata(key: string): any;
21
+ getHistory(): Message[];
22
+ }
23
+ //# sourceMappingURL=ConversationSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationSession.d.ts","sourceRoot":"","sources":["../../../src/core/entities/ConversationSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGrE,qBAAa,mBAAmB;IAC5B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAsB;IACvC,SAAgB,SAAS,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;gBAEX,KAAK,EAAE,kBAAkB;IAYrC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB;IA4B5C,UAAU,IAAI,GAAG;IAaxB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,MAAM,IAAI,aAAa,CAE1B;IAEM,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKzC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK1C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAO7B,UAAU,IAAI,OAAO,EAAE;CAGjC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConversationSession = void 0;
4
+ const Message_1 = require("./Message");
5
+ const interfaces_1 = require("../../interfaces");
6
+ class ConversationSession {
7
+ constructor(props) {
8
+ this.sessionId = props.sessionId;
9
+ this.mode = props.mode;
10
+ this.agentPrompt = props.agentPrompt;
11
+ this._messages = [];
12
+ this._status = interfaces_1.SessionStatus.ACTIVE;
13
+ this._metadata = {};
14
+ this.createdAt = new Date();
15
+ this.updatedAt = new Date();
16
+ }
17
+ // Helper to restore from persistence
18
+ static reconstitute(data) {
19
+ // We create a "shell" session via private constructor or just forcing it.
20
+ // For simplicity in this demo, we'll instantiate normally and override.
21
+ const session = new ConversationSession({
22
+ sessionId: data.sessionId,
23
+ mode: data.mode,
24
+ agentPrompt: data.agentPrompt
25
+ });
26
+ // Restore state
27
+ // Assuming messages are stored as plain objects, we need to map them back to Message instances
28
+ session._messages = (data.messages || []).map((m) => new Message_1.Message({
29
+ role: m.role,
30
+ content: m.content,
31
+ timestamp: new Date(m.timestamp),
32
+ metadata: m.metadata
33
+ }));
34
+ session._status = data.status;
35
+ session._metadata = data.metadata || {};
36
+ // @ts-ignore - writing to readonly for hydration
37
+ session.createdAt = new Date(data.createdAt);
38
+ session.updatedAt = new Date(data.updatedAt);
39
+ return session;
40
+ }
41
+ // Helper to snapshot for persistence
42
+ toSnapshot() {
43
+ return {
44
+ sessionId: this.sessionId,
45
+ mode: this.mode,
46
+ agentPrompt: this.agentPrompt,
47
+ messages: this._messages,
48
+ status: this._status,
49
+ metadata: this._metadata,
50
+ createdAt: this.createdAt,
51
+ updatedAt: this.updatedAt
52
+ };
53
+ }
54
+ get messages() {
55
+ return [...this._messages];
56
+ }
57
+ get status() {
58
+ return this._status;
59
+ }
60
+ addMessage(message) {
61
+ this._messages.push(message);
62
+ this.updatedAt = new Date();
63
+ }
64
+ updateStatus(status) {
65
+ this._status = status;
66
+ this.updatedAt = new Date();
67
+ }
68
+ setMetadata(key, value) {
69
+ this._metadata[key] = value;
70
+ this.updatedAt = new Date();
71
+ }
72
+ getMetadata(key) {
73
+ return this._metadata[key];
74
+ }
75
+ // Helper to get conversation history for LLM Context
76
+ // Can prepend system instructions here if needed by specific LLM adapters,
77
+ // but usually handled in the Adapter layer.
78
+ getHistory() {
79
+ return this._messages;
80
+ }
81
+ }
82
+ exports.ConversationSession = ConversationSession;
83
+ //# sourceMappingURL=ConversationSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationSession.js","sourceRoot":"","sources":["../../../src/core/entities/ConversationSession.ts"],"names":[],"mappings":"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"}