jiva-core 0.2.2 → 0.3.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.
Files changed (156) hide show
  1. package/.dockerignore +53 -0
  2. package/.gcloudignore +49 -0
  3. package/CONTRIBUTING.md +92 -0
  4. package/Dockerfile +63 -0
  5. package/LICENSE +21 -0
  6. package/README.md +248 -102
  7. package/cloud-run-deploy.yaml +135 -0
  8. package/cloud-run.yaml +135 -0
  9. package/cloud-run.yaml.template +143 -0
  10. package/deploy.sh +107 -0
  11. package/dist/core/agent-spawner.d.ts +89 -0
  12. package/dist/core/agent-spawner.d.ts.map +1 -0
  13. package/dist/core/agent-spawner.js +195 -0
  14. package/dist/core/agent-spawner.js.map +1 -0
  15. package/dist/core/client-agent.d.ts +82 -0
  16. package/dist/core/client-agent.d.ts.map +1 -0
  17. package/dist/core/client-agent.js +406 -0
  18. package/dist/core/client-agent.js.map +1 -0
  19. package/dist/core/config.d.ts +59 -10
  20. package/dist/core/config.d.ts.map +1 -1
  21. package/dist/core/config.js +19 -2
  22. package/dist/core/config.js.map +1 -1
  23. package/dist/core/conversation-manager.d.ts +10 -18
  24. package/dist/core/conversation-manager.d.ts.map +1 -1
  25. package/dist/core/conversation-manager.js +28 -60
  26. package/dist/core/conversation-manager.js.map +1 -1
  27. package/dist/core/dual-agent.d.ts +24 -3
  28. package/dist/core/dual-agent.d.ts.map +1 -1
  29. package/dist/core/dual-agent.js +112 -19
  30. package/dist/core/dual-agent.js.map +1 -1
  31. package/dist/core/manager-agent.d.ts +3 -1
  32. package/dist/core/manager-agent.d.ts.map +1 -1
  33. package/dist/core/manager-agent.js +66 -14
  34. package/dist/core/manager-agent.js.map +1 -1
  35. package/dist/core/worker-agent.d.ts +15 -1
  36. package/dist/core/worker-agent.d.ts.map +1 -1
  37. package/dist/core/worker-agent.js +244 -11
  38. package/dist/core/worker-agent.js.map +1 -1
  39. package/dist/core/workspace.d.ts +5 -0
  40. package/dist/core/workspace.d.ts.map +1 -1
  41. package/dist/core/workspace.js +47 -7
  42. package/dist/core/workspace.js.map +1 -1
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +4 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/interfaces/cli/index.js +376 -44
  48. package/dist/interfaces/cli/index.js.map +1 -1
  49. package/dist/interfaces/cli/repl.d.ts.map +1 -1
  50. package/dist/interfaces/cli/repl.js +6 -0
  51. package/dist/interfaces/cli/repl.js.map +1 -1
  52. package/dist/interfaces/http/index.d.ts +22 -0
  53. package/dist/interfaces/http/index.d.ts.map +1 -0
  54. package/dist/interfaces/http/index.js +135 -0
  55. package/dist/interfaces/http/index.js.map +1 -0
  56. package/dist/interfaces/http/middleware/auth.d.ts +32 -0
  57. package/dist/interfaces/http/middleware/auth.d.ts.map +1 -0
  58. package/dist/interfaces/http/middleware/auth.js +176 -0
  59. package/dist/interfaces/http/middleware/auth.js.map +1 -0
  60. package/dist/interfaces/http/routes/chat.d.ts +7 -0
  61. package/dist/interfaces/http/routes/chat.d.ts.map +1 -0
  62. package/dist/interfaces/http/routes/chat.js +144 -0
  63. package/dist/interfaces/http/routes/chat.js.map +1 -0
  64. package/dist/interfaces/http/routes/health.d.ts +6 -0
  65. package/dist/interfaces/http/routes/health.d.ts.map +1 -0
  66. package/dist/interfaces/http/routes/health.js +25 -0
  67. package/dist/interfaces/http/routes/health.js.map +1 -0
  68. package/dist/interfaces/http/routes/session.d.ts +7 -0
  69. package/dist/interfaces/http/routes/session.d.ts.map +1 -0
  70. package/dist/interfaces/http/routes/session.js +114 -0
  71. package/dist/interfaces/http/routes/session.js.map +1 -0
  72. package/dist/interfaces/http/session-manager.d.ts +76 -0
  73. package/dist/interfaces/http/session-manager.d.ts.map +1 -0
  74. package/dist/interfaces/http/session-manager.js +339 -0
  75. package/dist/interfaces/http/session-manager.js.map +1 -0
  76. package/dist/interfaces/http/websocket-handler.d.ts +18 -0
  77. package/dist/interfaces/http/websocket-handler.d.ts.map +1 -0
  78. package/dist/interfaces/http/websocket-handler.js +146 -0
  79. package/dist/interfaces/http/websocket-handler.js.map +1 -0
  80. package/dist/mcp/client.d.ts +11 -2
  81. package/dist/mcp/client.d.ts.map +1 -1
  82. package/dist/mcp/client.js +44 -19
  83. package/dist/mcp/client.js.map +1 -1
  84. package/dist/mcp/server-manager.d.ts +1 -1
  85. package/dist/mcp/server-manager.d.ts.map +1 -1
  86. package/dist/mcp/server-manager.js +12 -2
  87. package/dist/mcp/server-manager.js.map +1 -1
  88. package/dist/personas/index.d.ts +13 -0
  89. package/dist/personas/index.d.ts.map +1 -0
  90. package/dist/personas/index.js +13 -0
  91. package/dist/personas/index.js.map +1 -0
  92. package/dist/personas/persona-loader.d.ts +30 -0
  93. package/dist/personas/persona-loader.d.ts.map +1 -0
  94. package/dist/personas/persona-loader.js +246 -0
  95. package/dist/personas/persona-loader.js.map +1 -0
  96. package/dist/personas/persona-manager.d.ts +82 -0
  97. package/dist/personas/persona-manager.d.ts.map +1 -0
  98. package/dist/personas/persona-manager.js +211 -0
  99. package/dist/personas/persona-manager.js.map +1 -0
  100. package/dist/personas/skill-loader.d.ts +35 -0
  101. package/dist/personas/skill-loader.d.ts.map +1 -0
  102. package/dist/personas/skill-loader.js +144 -0
  103. package/dist/personas/skill-loader.js.map +1 -0
  104. package/dist/personas/skill-packager.d.ts +25 -0
  105. package/dist/personas/skill-packager.d.ts.map +1 -0
  106. package/dist/personas/skill-packager.js +233 -0
  107. package/dist/personas/skill-packager.js.map +1 -0
  108. package/dist/personas/types.d.ts +134 -0
  109. package/dist/personas/types.d.ts.map +1 -0
  110. package/dist/personas/types.js +7 -0
  111. package/dist/personas/types.js.map +1 -0
  112. package/dist/personas/validator.d.ts +22 -0
  113. package/dist/personas/validator.d.ts.map +1 -0
  114. package/dist/personas/validator.js +144 -0
  115. package/dist/personas/validator.js.map +1 -0
  116. package/dist/storage/factory.d.ts +51 -0
  117. package/dist/storage/factory.d.ts.map +1 -0
  118. package/dist/storage/factory.js +154 -0
  119. package/dist/storage/factory.js.map +1 -0
  120. package/dist/storage/gcp-bucket-provider.d.ts +59 -0
  121. package/dist/storage/gcp-bucket-provider.d.ts.map +1 -0
  122. package/dist/storage/gcp-bucket-provider.js +275 -0
  123. package/dist/storage/gcp-bucket-provider.js.map +1 -0
  124. package/dist/storage/index.d.ts +33 -0
  125. package/dist/storage/index.d.ts.map +1 -0
  126. package/dist/storage/index.js +37 -0
  127. package/dist/storage/index.js.map +1 -0
  128. package/dist/storage/local-provider.d.ts +36 -0
  129. package/dist/storage/local-provider.d.ts.map +1 -0
  130. package/dist/storage/local-provider.js +219 -0
  131. package/dist/storage/local-provider.js.map +1 -0
  132. package/dist/storage/provider.d.ts +137 -0
  133. package/dist/storage/provider.d.ts.map +1 -0
  134. package/dist/storage/provider.js +136 -0
  135. package/dist/storage/provider.js.map +1 -0
  136. package/dist/storage/types.d.ts +78 -0
  137. package/dist/storage/types.d.ts.map +1 -0
  138. package/dist/storage/types.js +14 -0
  139. package/dist/storage/types.js.map +1 -0
  140. package/dist/utils/orchestration-logger.d.ts +36 -0
  141. package/dist/utils/orchestration-logger.d.ts.map +1 -0
  142. package/dist/utils/orchestration-logger.js +224 -0
  143. package/dist/utils/orchestration-logger.js.map +1 -0
  144. package/jiva-new-demo.gif +0 -0
  145. package/package.json +30 -2
  146. package/.fluen/cache/state.json +0 -7
  147. package/actions/action_registry.py +0 -75
  148. package/actions/python_coder.py +0 -470
  149. package/api/main.py +0 -269
  150. package/downloaded_image.avif +0 -0
  151. package/downloads/snipping_tool.avif +0 -0
  152. package/image.avif +0 -0
  153. package/ms_image.avif +0 -0
  154. package/screenshot.png +0 -0
  155. package/snipping_tool.avif +0 -0
  156. package/tmp_image.avif +0 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Health check routes for Cloud Run
3
+ */
4
+ export function setupHealthRoutes(app) {
5
+ /**
6
+ * Liveness probe - is the server running?
7
+ */
8
+ app.get('/health', (req, res) => {
9
+ res.status(200).json({ status: 'ok', timestamp: new Date().toISOString() });
10
+ });
11
+ /**
12
+ * Readiness probe - is the server ready to accept traffic?
13
+ */
14
+ app.get('/ready', (req, res) => {
15
+ // Could check database connections, model availability, etc.
16
+ res.status(200).json({ status: 'ready', timestamp: new Date().toISOString() });
17
+ });
18
+ /**
19
+ * Startup probe - has the server finished initialization?
20
+ */
21
+ app.get('/startup', (req, res) => {
22
+ res.status(200).json({ status: 'started', timestamp: new Date().toISOString() });
23
+ });
24
+ }
25
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../src/interfaces/http/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C;;OAEG;IACH,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAChD,6DAA6D;QAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Session management routes
3
+ */
4
+ import { Express } from 'express';
5
+ import { SessionManager } from '../session-manager.js';
6
+ export declare function setupSessionRoutes(app: Express, sessionManager: SessionManager): void;
7
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/http/routes/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CAsHrF"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Session management routes
3
+ */
4
+ import { logger } from '../../../utils/logger.js';
5
+ export function setupSessionRoutes(app, sessionManager) {
6
+ /**
7
+ * Create or restore a session
8
+ * POST /api/session
9
+ */
10
+ app.post('/api/session', async (req, res) => {
11
+ try {
12
+ const { tenantId, sessionId } = req.auth;
13
+ // Get or create session
14
+ await sessionManager.getOrCreateSession(tenantId, sessionId);
15
+ const info = sessionManager.getSessionInfo(tenantId, sessionId);
16
+ res.status(200).json({
17
+ success: true,
18
+ session: info,
19
+ });
20
+ }
21
+ catch (error) {
22
+ logger.error('[API] Failed to create session:', error);
23
+ res.status(500).json({
24
+ error: 'Failed to create session',
25
+ message: error instanceof Error ? error.message : 'Unknown error'
26
+ });
27
+ }
28
+ });
29
+ /**
30
+ * Get session info
31
+ * GET /api/session/:sessionId
32
+ */
33
+ app.get('/api/session/:sessionId', async (req, res) => {
34
+ try {
35
+ const { tenantId } = req.auth;
36
+ const { sessionId } = req.params;
37
+ const info = sessionManager.getSessionInfo(tenantId, sessionId);
38
+ if (!info) {
39
+ res.status(404).json({ error: 'Session not found' });
40
+ return;
41
+ }
42
+ res.status(200).json({ success: true, session: info });
43
+ }
44
+ catch (error) {
45
+ logger.error('[API] Failed to get session:', error);
46
+ res.status(500).json({
47
+ error: 'Failed to get session',
48
+ message: error instanceof Error ? error.message : 'Unknown error'
49
+ });
50
+ }
51
+ });
52
+ /**
53
+ * List sessions for tenant
54
+ * GET /api/sessions
55
+ */
56
+ app.get('/api/sessions', async (req, res) => {
57
+ try {
58
+ const { tenantId } = req.auth;
59
+ const sessions = sessionManager.listSessions(tenantId);
60
+ res.status(200).json({
61
+ success: true,
62
+ sessions,
63
+ count: sessions.length,
64
+ });
65
+ }
66
+ catch (error) {
67
+ logger.error('[API] Failed to list sessions:', error);
68
+ res.status(500).json({
69
+ error: 'Failed to list sessions',
70
+ message: error instanceof Error ? error.message : 'Unknown error'
71
+ });
72
+ }
73
+ });
74
+ /**
75
+ * Delete session
76
+ * DELETE /api/session/:sessionId
77
+ */
78
+ app.delete('/api/session/:sessionId', async (req, res) => {
79
+ try {
80
+ const { tenantId } = req.auth;
81
+ const { sessionId } = req.params;
82
+ await sessionManager.destroySession(tenantId, sessionId);
83
+ res.status(200).json({ success: true, message: 'Session deleted' });
84
+ }
85
+ catch (error) {
86
+ logger.error('[API] Failed to delete session:', error);
87
+ res.status(500).json({
88
+ error: 'Failed to delete session',
89
+ message: error instanceof Error ? error.message : 'Unknown error'
90
+ });
91
+ }
92
+ });
93
+ /**
94
+ * Get manager stats
95
+ * GET /api/stats
96
+ */
97
+ app.get('/api/stats', async (req, res) => {
98
+ try {
99
+ const stats = sessionManager.getStats();
100
+ res.status(200).json({
101
+ success: true,
102
+ stats,
103
+ });
104
+ }
105
+ catch (error) {
106
+ logger.error('[API] Failed to get stats:', error);
107
+ res.status(500).json({
108
+ error: 'Failed to get stats',
109
+ message: error instanceof Error ? error.message : 'Unknown error'
110
+ });
111
+ }
112
+ });
113
+ }
114
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/interfaces/http/routes/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Session Manager - Lifecycle management for DualAgent sessions
3
+ *
4
+ * Responsibilities:
5
+ * - Create/destroy DualAgent instances per session
6
+ * - Track active sessions and enforce limits
7
+ * - Handle idle timeouts
8
+ * - Per-session MCP server initialization
9
+ * - State persistence on shutdown
10
+ */
11
+ import { EventEmitter } from 'events';
12
+ import { DualAgent } from '../../core/dual-agent.js';
13
+ import { StorageProvider } from '../../storage/provider.js';
14
+ export interface SessionConfig {
15
+ storageProvider: StorageProvider;
16
+ maxConcurrentSessions: number;
17
+ idleTimeoutMs: number;
18
+ }
19
+ export interface SessionInfo {
20
+ sessionId: string;
21
+ tenantId: string;
22
+ createdAt: Date;
23
+ lastActivityAt: Date;
24
+ messageCount: number;
25
+ status: 'initializing' | 'active' | 'idle' | 'closing';
26
+ }
27
+ export declare class SessionManager extends EventEmitter {
28
+ private sessions;
29
+ private config;
30
+ constructor(config: SessionConfig);
31
+ /**
32
+ * Get or create a session
33
+ */
34
+ getOrCreateSession(tenantId: string, sessionId: string): Promise<DualAgent>;
35
+ /**
36
+ * Create a new session with all components
37
+ */
38
+ private createSession;
39
+ /**
40
+ * Destroy a session and persist state
41
+ */
42
+ destroySession(tenantId: string, sessionId: string): Promise<void>;
43
+ /**
44
+ * Get session info
45
+ */
46
+ getSessionInfo(tenantId: string, sessionId: string): SessionInfo | null;
47
+ /**
48
+ * List all active sessions for a tenant
49
+ */
50
+ listSessions(tenantId: string): SessionInfo[];
51
+ /**
52
+ * Update activity timestamp (call on each message)
53
+ */
54
+ updateActivity(tenantId: string, sessionId: string): void;
55
+ /**
56
+ * Reset idle timer for a session
57
+ */
58
+ private resetIdleTimer;
59
+ /**
60
+ * Cleanup idle sessions
61
+ */
62
+ private cleanupIdleSessions;
63
+ /**
64
+ * Shutdown all sessions gracefully
65
+ */
66
+ shutdown(): Promise<void>;
67
+ /**
68
+ * Get stats
69
+ */
70
+ getStats(): {
71
+ total: number;
72
+ byTenant: Record<string, number>;
73
+ };
74
+ private getSessionKey;
75
+ }
76
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/interfaces/http/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAKrD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAM5D,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CACxD;AAYD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAMjC;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiCjF;;OAEG;YACW,aAAa;IAmK3B;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDxE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAMvE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAU7C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAWzD;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;YACW,mBAAmB;IAqBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAc/D,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Session Manager - Lifecycle management for DualAgent sessions
3
+ *
4
+ * Responsibilities:
5
+ * - Create/destroy DualAgent instances per session
6
+ * - Track active sessions and enforce limits
7
+ * - Handle idle timeouts
8
+ * - Per-session MCP server initialization
9
+ * - State persistence on shutdown
10
+ */
11
+ import { EventEmitter } from 'events';
12
+ import { DualAgent } from '../../core/dual-agent.js';
13
+ import { ModelOrchestrator } from '../../models/orchestrator.js';
14
+ import { MCPServerManager } from '../../mcp/server-manager.js';
15
+ import { WorkspaceManager } from '../../core/workspace.js';
16
+ import { ConversationManager } from '../../core/conversation-manager.js';
17
+ import { logger } from '../../utils/logger.js';
18
+ import { createKrutrimModel } from '../../models/krutrim.js';
19
+ import { PersonaManager } from '../../personas/persona-manager.js';
20
+ export class SessionManager extends EventEmitter {
21
+ sessions = new Map();
22
+ config;
23
+ constructor(config) {
24
+ super();
25
+ this.config = config;
26
+ logger.info(`[SessionManager] Initialized (max: ${config.maxConcurrentSessions}, timeout: ${config.idleTimeoutMs}ms)`);
27
+ }
28
+ /**
29
+ * Get or create a session
30
+ */
31
+ async getOrCreateSession(tenantId, sessionId) {
32
+ const key = this.getSessionKey(tenantId, sessionId);
33
+ // Return existing session
34
+ if (this.sessions.has(key)) {
35
+ const session = this.sessions.get(key);
36
+ this.resetIdleTimer(key);
37
+ session.info.lastActivityAt = new Date();
38
+ session.info.status = 'active';
39
+ logger.debug(`[SessionManager] Reusing session: ${key}`);
40
+ return session.agent;
41
+ }
42
+ // Check session limit
43
+ if (this.sessions.size >= this.config.maxConcurrentSessions) {
44
+ // Try to clean up idle sessions
45
+ await this.cleanupIdleSessions();
46
+ if (this.sessions.size >= this.config.maxConcurrentSessions) {
47
+ throw new Error(`Maximum concurrent sessions reached (${this.config.maxConcurrentSessions})`);
48
+ }
49
+ }
50
+ // Create new session
51
+ logger.info(`[SessionManager] Creating session: ${key}`);
52
+ const session = await this.createSession(tenantId, sessionId);
53
+ this.sessions.set(key, session);
54
+ this.resetIdleTimer(key);
55
+ this.emit('sessionCreated', { tenantId, sessionId });
56
+ return session.agent;
57
+ }
58
+ /**
59
+ * Create a new session with all components
60
+ */
61
+ async createSession(tenantId, sessionId) {
62
+ const info = {
63
+ sessionId,
64
+ tenantId,
65
+ createdAt: new Date(),
66
+ lastActivityAt: new Date(),
67
+ messageCount: 0,
68
+ status: 'initializing',
69
+ };
70
+ try {
71
+ // Set storage context
72
+ this.config.storageProvider.setContext({ tenantId, sessionId });
73
+ // Load or create config
74
+ let modelConfig = await this.config.storageProvider.getConfig('models');
75
+ // Always use environment variables if set, otherwise use stored config or defaults
76
+ const envEndpoint = process.env.JIVA_MODEL_BASE_URL;
77
+ const envApiKey = process.env.JIVA_MODEL_API_KEY;
78
+ const envModel = process.env.JIVA_MODEL_NAME;
79
+ if (!modelConfig) {
80
+ // Use environment defaults
81
+ modelConfig = {
82
+ reasoning: {
83
+ provider: process.env.JIVA_MODEL_PROVIDER || 'krutrim',
84
+ apiKey: envApiKey || '',
85
+ endpoint: envEndpoint || 'https://cloud.olakrutrim.com/v1/chat/completions',
86
+ model: envModel || 'gpt-oss-120b',
87
+ },
88
+ multimodal: null, // Optional
89
+ };
90
+ await this.config.storageProvider.setConfig('models', modelConfig);
91
+ }
92
+ else {
93
+ // Override stored config with environment variables if present
94
+ if (envEndpoint)
95
+ modelConfig.reasoning.endpoint = envEndpoint;
96
+ if (envApiKey)
97
+ modelConfig.reasoning.apiKey = envApiKey;
98
+ if (envModel)
99
+ modelConfig.reasoning.model = envModel;
100
+ }
101
+ // Create model orchestrator
102
+ const reasoningModel = createKrutrimModel({
103
+ endpoint: modelConfig.reasoning.endpoint,
104
+ apiKey: modelConfig.reasoning.apiKey,
105
+ model: modelConfig.reasoning.model,
106
+ type: 'reasoning',
107
+ useHarmonyFormat: true, // gpt-oss-120b requires Harmony format
108
+ });
109
+ const orchestrator = new ModelOrchestrator({
110
+ reasoningModel,
111
+ multimodalModel: undefined,
112
+ });
113
+ // Initialize MCP servers per-session
114
+ const mcpManager = new MCPServerManager();
115
+ // Ensure base filesystem MCP server is always available
116
+ const allowedPath = process.platform === 'win32' ? 'C:\\Users' : '/Users';
117
+ const baseMcpServers = {
118
+ filesystem: {
119
+ command: 'npx',
120
+ args: ['-y', '@modelcontextprotocol/server-filesystem', allowedPath],
121
+ enabled: true,
122
+ }
123
+ };
124
+ // Load MCP server config from storage
125
+ const mcpConfig = await this.config.storageProvider.getConfig('mcpServers');
126
+ if (mcpConfig && Array.isArray(mcpConfig)) {
127
+ for (const serverConfig of mcpConfig) {
128
+ // Add to base servers (will override filesystem if configured)
129
+ baseMcpServers[serverConfig.name] = {
130
+ command: serverConfig.command,
131
+ args: serverConfig.args,
132
+ env: serverConfig.env,
133
+ enabled: true,
134
+ };
135
+ }
136
+ }
137
+ // Initialize all MCP servers (base + configured)
138
+ await mcpManager.initialize(baseMcpServers);
139
+ // Initialize workspace
140
+ const workspace = new WorkspaceManager(this.config.storageProvider);
141
+ await workspace.initialize();
142
+ // Initialize conversation manager
143
+ const conversationManager = new ConversationManager(this.config.storageProvider);
144
+ // Initialize persona manager
145
+ const personaManager = new PersonaManager();
146
+ await personaManager.initialize();
147
+ // Merge persona MCP servers with session MCP servers
148
+ const personaMCPServers = personaManager.getPersonaMCPServers();
149
+ if (Object.keys(personaMCPServers).length > 0) {
150
+ logger.info(`[SessionManager] Adding ${Object.keys(personaMCPServers).length} MCP servers from active persona`);
151
+ for (const [name, config] of Object.entries(personaMCPServers)) {
152
+ try {
153
+ await mcpManager.addServer(name, config);
154
+ logger.success(`[SessionManager] Added persona MCP server: ${name}`);
155
+ }
156
+ catch (error) {
157
+ logger.warn(`[SessionManager] Failed to add persona MCP server '${name}': ${error instanceof Error ? error.message : String(error)}`);
158
+ }
159
+ }
160
+ }
161
+ // Load or create conversation
162
+ const existingConversation = await this.config.storageProvider.loadConversation(sessionId);
163
+ let conversationHistory = [];
164
+ if (existingConversation) {
165
+ conversationHistory = existingConversation.messages;
166
+ info.messageCount = conversationHistory.length;
167
+ logger.info(`[SessionManager] Restored conversation: ${conversationHistory.length} messages`);
168
+ }
169
+ // Create DualAgent
170
+ const agent = new DualAgent({
171
+ orchestrator,
172
+ mcpManager,
173
+ workspace,
174
+ conversationManager,
175
+ personaManager,
176
+ maxSubtasks: 20,
177
+ maxIterations: 10,
178
+ autoSave: true, // Always auto-save in cloud mode
179
+ });
180
+ info.status = 'active';
181
+ return {
182
+ agent,
183
+ mcpManager,
184
+ workspace,
185
+ conversationManager,
186
+ personaManager,
187
+ info,
188
+ };
189
+ }
190
+ catch (error) {
191
+ logger.error(`[SessionManager] Failed to create session ${sessionId}:`, error);
192
+ throw error;
193
+ }
194
+ }
195
+ /**
196
+ * Destroy a session and persist state
197
+ */
198
+ async destroySession(tenantId, sessionId) {
199
+ const key = this.getSessionKey(tenantId, sessionId);
200
+ const session = this.sessions.get(key);
201
+ if (!session) {
202
+ logger.debug(`[SessionManager] Session not found: ${key}`);
203
+ return;
204
+ }
205
+ logger.info(`[SessionManager] Destroying session: ${key}`);
206
+ session.info.status = 'closing';
207
+ // Clear idle timer
208
+ if (session.idleTimer) {
209
+ clearTimeout(session.idleTimer);
210
+ }
211
+ try {
212
+ // Persist conversation state
213
+ const conversationHistory = session.agent.getConversationHistory();
214
+ if (conversationHistory.length > 0) {
215
+ await this.config.storageProvider.saveConversation({
216
+ metadata: {
217
+ id: sessionId,
218
+ created: session.info.createdAt.toISOString(),
219
+ updated: new Date().toISOString(),
220
+ messageCount: conversationHistory.length,
221
+ },
222
+ messages: conversationHistory,
223
+ });
224
+ logger.debug(`[SessionManager] Persisted ${conversationHistory.length} messages`);
225
+ }
226
+ // Flush logs
227
+ await this.config.storageProvider.flushLogs();
228
+ // Cleanup MCP servers
229
+ await session.mcpManager.cleanup();
230
+ }
231
+ catch (error) {
232
+ logger.error(`[SessionManager] Error persisting session ${key}:`, error);
233
+ }
234
+ this.sessions.delete(key);
235
+ this.emit('sessionDestroyed', { tenantId, sessionId });
236
+ logger.info(`[SessionManager] Session destroyed: ${key}`);
237
+ }
238
+ /**
239
+ * Get session info
240
+ */
241
+ getSessionInfo(tenantId, sessionId) {
242
+ const key = this.getSessionKey(tenantId, sessionId);
243
+ const session = this.sessions.get(key);
244
+ return session ? { ...session.info } : null;
245
+ }
246
+ /**
247
+ * List all active sessions for a tenant
248
+ */
249
+ listSessions(tenantId) {
250
+ const sessions = [];
251
+ for (const [key, session] of this.sessions) {
252
+ if (key.startsWith(`${tenantId}:`)) {
253
+ sessions.push({ ...session.info });
254
+ }
255
+ }
256
+ return sessions;
257
+ }
258
+ /**
259
+ * Update activity timestamp (call on each message)
260
+ */
261
+ updateActivity(tenantId, sessionId) {
262
+ const key = this.getSessionKey(tenantId, sessionId);
263
+ const session = this.sessions.get(key);
264
+ if (session) {
265
+ session.info.lastActivityAt = new Date();
266
+ session.info.messageCount++;
267
+ this.resetIdleTimer(key);
268
+ }
269
+ }
270
+ /**
271
+ * Reset idle timer for a session
272
+ */
273
+ resetIdleTimer(key) {
274
+ const session = this.sessions.get(key);
275
+ if (!session)
276
+ return;
277
+ // Clear existing timer
278
+ if (session.idleTimer) {
279
+ clearTimeout(session.idleTimer);
280
+ }
281
+ // Set new timer
282
+ session.idleTimer = setTimeout(async () => {
283
+ logger.info(`[SessionManager] Session idle timeout: ${key}`);
284
+ const [tenantId, sessionId] = key.split(':');
285
+ await this.destroySession(tenantId, sessionId);
286
+ }, this.config.idleTimeoutMs);
287
+ }
288
+ /**
289
+ * Cleanup idle sessions
290
+ */
291
+ async cleanupIdleSessions() {
292
+ const now = Date.now();
293
+ const toDestroy = [];
294
+ for (const [key, session] of this.sessions) {
295
+ const idleMs = now - session.info.lastActivityAt.getTime();
296
+ if (idleMs > this.config.idleTimeoutMs) {
297
+ const [tenantId, sessionId] = key.split(':');
298
+ toDestroy.push({ tenantId, sessionId });
299
+ }
300
+ }
301
+ for (const { tenantId, sessionId } of toDestroy) {
302
+ await this.destroySession(tenantId, sessionId);
303
+ }
304
+ if (toDestroy.length > 0) {
305
+ logger.info(`[SessionManager] Cleaned up ${toDestroy.length} idle session(s)`);
306
+ }
307
+ }
308
+ /**
309
+ * Shutdown all sessions gracefully
310
+ */
311
+ async shutdown() {
312
+ logger.info(`[SessionManager] Shutting down ${this.sessions.size} session(s)...`);
313
+ const shutdownPromises = [];
314
+ for (const [key] of this.sessions) {
315
+ const [tenantId, sessionId] = key.split(':');
316
+ shutdownPromises.push(this.destroySession(tenantId, sessionId));
317
+ }
318
+ await Promise.all(shutdownPromises);
319
+ logger.info('[SessionManager] All sessions shut down');
320
+ }
321
+ /**
322
+ * Get stats
323
+ */
324
+ getStats() {
325
+ const byTenant = {};
326
+ for (const [key] of this.sessions) {
327
+ const tenantId = key.split(':')[0];
328
+ byTenant[tenantId] = (byTenant[tenantId] || 0) + 1;
329
+ }
330
+ return {
331
+ total: this.sessions.size,
332
+ byTenant,
333
+ };
334
+ }
335
+ getSessionKey(tenantId, sessionId) {
336
+ return `${tenantId}:${sessionId}`;
337
+ }
338
+ }
339
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/interfaces/http/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * WebSocket handler for real-time bidirectional communication
3
+ *
4
+ * Protocol:
5
+ * Client -> Server:
6
+ * { type: 'message', content: string }
7
+ * { type: 'ping' }
8
+ *
9
+ * Server -> Client:
10
+ * { type: 'response', content: string, ... }
11
+ * { type: 'status', message: string }
12
+ * { type: 'error', message: string }
13
+ * { type: 'pong' }
14
+ */
15
+ import { WebSocketServer } from 'ws';
16
+ import { SessionManager } from './session-manager.js';
17
+ export declare function setupWebSocketHandler(wss: WebSocketServer, sessionManager: SessionManager): void;
18
+ //# sourceMappingURL=websocket-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/http/websocket-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAa,MAAM,IAAI,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AActD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CA2GhG"}