@amodalai/runtime 0.1.0

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 (277) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.last_build +0 -0
  3. package/dist/src/agent/agent-runner.d.ts +13 -0
  4. package/dist/src/agent/agent-runner.js +827 -0
  5. package/dist/src/agent/agent-runner.js.map +1 -0
  6. package/dist/src/agent/agent-runner.test.d.ts +6 -0
  7. package/dist/src/agent/agent-runner.test.js +552 -0
  8. package/dist/src/agent/agent-runner.test.js.map +1 -0
  9. package/dist/src/agent/agent-types.d.ts +57 -0
  10. package/dist/src/agent/agent-types.js +17 -0
  11. package/dist/src/agent/agent-types.js.map +1 -0
  12. package/dist/src/agent/agent-types.test.d.ts +6 -0
  13. package/dist/src/agent/agent-types.test.js +44 -0
  14. package/dist/src/agent/agent-types.test.js.map +1 -0
  15. package/dist/src/agent/automation-bridge.d.ts +24 -0
  16. package/dist/src/agent/automation-bridge.js +24 -0
  17. package/dist/src/agent/automation-bridge.js.map +1 -0
  18. package/dist/src/agent/automation-bridge.test.d.ts +6 -0
  19. package/dist/src/agent/automation-bridge.test.js +67 -0
  20. package/dist/src/agent/automation-bridge.test.js.map +1 -0
  21. package/dist/src/agent/config-watcher.d.ts +20 -0
  22. package/dist/src/agent/config-watcher.js +68 -0
  23. package/dist/src/agent/config-watcher.js.map +1 -0
  24. package/dist/src/agent/config-watcher.test.d.ts +6 -0
  25. package/dist/src/agent/config-watcher.test.js +83 -0
  26. package/dist/src/agent/config-watcher.test.js.map +1 -0
  27. package/dist/src/agent/custom-tools-e2e.test.d.ts +6 -0
  28. package/dist/src/agent/custom-tools-e2e.test.js +566 -0
  29. package/dist/src/agent/custom-tools-e2e.test.js.map +1 -0
  30. package/dist/src/agent/local-server.d.ts +15 -0
  31. package/dist/src/agent/local-server.js +158 -0
  32. package/dist/src/agent/local-server.js.map +1 -0
  33. package/dist/src/agent/local-server.test.d.ts +6 -0
  34. package/dist/src/agent/local-server.test.js +126 -0
  35. package/dist/src/agent/local-server.test.js.map +1 -0
  36. package/dist/src/agent/proactive/delivery.d.ts +21 -0
  37. package/dist/src/agent/proactive/delivery.js +68 -0
  38. package/dist/src/agent/proactive/delivery.js.map +1 -0
  39. package/dist/src/agent/proactive/delivery.test.d.ts +6 -0
  40. package/dist/src/agent/proactive/delivery.test.js +65 -0
  41. package/dist/src/agent/proactive/delivery.test.js.map +1 -0
  42. package/dist/src/agent/proactive/proactive-runner.d.ts +76 -0
  43. package/dist/src/agent/proactive/proactive-runner.js +201 -0
  44. package/dist/src/agent/proactive/proactive-runner.js.map +1 -0
  45. package/dist/src/agent/proactive/proactive-runner.test.d.ts +6 -0
  46. package/dist/src/agent/proactive/proactive-runner.test.js +265 -0
  47. package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -0
  48. package/dist/src/agent/request-helper.d.ts +16 -0
  49. package/dist/src/agent/request-helper.js +87 -0
  50. package/dist/src/agent/request-helper.js.map +1 -0
  51. package/dist/src/agent/routes/automations.d.ts +19 -0
  52. package/dist/src/agent/routes/automations.js +58 -0
  53. package/dist/src/agent/routes/automations.js.map +1 -0
  54. package/dist/src/agent/routes/automations.test.d.ts +6 -0
  55. package/dist/src/agent/routes/automations.test.js +117 -0
  56. package/dist/src/agent/routes/automations.test.js.map +1 -0
  57. package/dist/src/agent/routes/chat.d.ts +35 -0
  58. package/dist/src/agent/routes/chat.js +88 -0
  59. package/dist/src/agent/routes/chat.js.map +1 -0
  60. package/dist/src/agent/routes/chat.test.d.ts +6 -0
  61. package/dist/src/agent/routes/chat.test.js +115 -0
  62. package/dist/src/agent/routes/chat.test.js.map +1 -0
  63. package/dist/src/agent/routes/inspect.d.ts +12 -0
  64. package/dist/src/agent/routes/inspect.js +40 -0
  65. package/dist/src/agent/routes/inspect.js.map +1 -0
  66. package/dist/src/agent/routes/inspect.test.d.ts +6 -0
  67. package/dist/src/agent/routes/inspect.test.js +80 -0
  68. package/dist/src/agent/routes/inspect.test.js.map +1 -0
  69. package/dist/src/agent/routes/stores.d.ts +20 -0
  70. package/dist/src/agent/routes/stores.js +137 -0
  71. package/dist/src/agent/routes/stores.js.map +1 -0
  72. package/dist/src/agent/routes/stores.test.d.ts +6 -0
  73. package/dist/src/agent/routes/stores.test.js +191 -0
  74. package/dist/src/agent/routes/stores.test.js.map +1 -0
  75. package/dist/src/agent/routes/task.d.ts +11 -0
  76. package/dist/src/agent/routes/task.js +116 -0
  77. package/dist/src/agent/routes/task.js.map +1 -0
  78. package/dist/src/agent/routes/task.test.d.ts +6 -0
  79. package/dist/src/agent/routes/task.test.js +91 -0
  80. package/dist/src/agent/routes/task.test.js.map +1 -0
  81. package/dist/src/agent/routes/webhooks.d.ts +17 -0
  82. package/dist/src/agent/routes/webhooks.js +53 -0
  83. package/dist/src/agent/routes/webhooks.js.map +1 -0
  84. package/dist/src/agent/routes/webhooks.test.d.ts +6 -0
  85. package/dist/src/agent/routes/webhooks.test.js +100 -0
  86. package/dist/src/agent/routes/webhooks.test.js.map +1 -0
  87. package/dist/src/agent/session-manager.d.ts +72 -0
  88. package/dist/src/agent/session-manager.js +214 -0
  89. package/dist/src/agent/session-manager.js.map +1 -0
  90. package/dist/src/agent/session-manager.test.d.ts +6 -0
  91. package/dist/src/agent/session-manager.test.js +145 -0
  92. package/dist/src/agent/session-manager.test.js.map +1 -0
  93. package/dist/src/agent/shell-executor-local.d.ts +16 -0
  94. package/dist/src/agent/shell-executor-local.js +51 -0
  95. package/dist/src/agent/shell-executor-local.js.map +1 -0
  96. package/dist/src/agent/shell-executor-local.test.d.ts +6 -0
  97. package/dist/src/agent/shell-executor-local.test.js +46 -0
  98. package/dist/src/agent/shell-executor-local.test.js.map +1 -0
  99. package/dist/src/agent/snapshot-server.d.ts +38 -0
  100. package/dist/src/agent/snapshot-server.js +114 -0
  101. package/dist/src/agent/snapshot-server.js.map +1 -0
  102. package/dist/src/agent/stores-e2e.test.d.ts +6 -0
  103. package/dist/src/agent/stores-e2e.test.js +433 -0
  104. package/dist/src/agent/stores-e2e.test.js.map +1 -0
  105. package/dist/src/agent/tool-context-builder.d.ts +11 -0
  106. package/dist/src/agent/tool-context-builder.js +84 -0
  107. package/dist/src/agent/tool-context-builder.js.map +1 -0
  108. package/dist/src/agent/tool-context-builder.test.d.ts +6 -0
  109. package/dist/src/agent/tool-context-builder.test.js +152 -0
  110. package/dist/src/agent/tool-context-builder.test.js.map +1 -0
  111. package/dist/src/agent/tool-executor-local.d.ts +15 -0
  112. package/dist/src/agent/tool-executor-local.js +74 -0
  113. package/dist/src/agent/tool-executor-local.js.map +1 -0
  114. package/dist/src/agent/tool-executor-local.test.d.ts +6 -0
  115. package/dist/src/agent/tool-executor-local.test.js +116 -0
  116. package/dist/src/agent/tool-executor-local.test.js.map +1 -0
  117. package/dist/src/agent/tool-harness-template.d.ts +23 -0
  118. package/dist/src/agent/tool-harness-template.js +94 -0
  119. package/dist/src/agent/tool-harness-template.js.map +1 -0
  120. package/dist/src/agent/user-context-fetcher.d.ts +25 -0
  121. package/dist/src/agent/user-context-fetcher.js +79 -0
  122. package/dist/src/agent/user-context-fetcher.js.map +1 -0
  123. package/dist/src/agent/user-context-fetcher.test.d.ts +6 -0
  124. package/dist/src/agent/user-context-fetcher.test.js +121 -0
  125. package/dist/src/agent/user-context-fetcher.test.js.map +1 -0
  126. package/dist/src/audit/audit-client.d.ts +46 -0
  127. package/dist/src/audit/audit-client.js +83 -0
  128. package/dist/src/audit/audit-client.js.map +1 -0
  129. package/dist/src/cron/heartbeat-runner.d.ts +24 -0
  130. package/dist/src/cron/heartbeat-runner.js +87 -0
  131. package/dist/src/cron/heartbeat-runner.js.map +1 -0
  132. package/dist/src/cron/heartbeat-runner.test.d.ts +6 -0
  133. package/dist/src/cron/heartbeat-runner.test.js +120 -0
  134. package/dist/src/cron/heartbeat-runner.test.js.map +1 -0
  135. package/dist/src/cron/heartbeat-scheduler.d.ts +26 -0
  136. package/dist/src/cron/heartbeat-scheduler.js +54 -0
  137. package/dist/src/cron/heartbeat-scheduler.js.map +1 -0
  138. package/dist/src/cron/heartbeat-scheduler.test.d.ts +6 -0
  139. package/dist/src/cron/heartbeat-scheduler.test.js +61 -0
  140. package/dist/src/cron/heartbeat-scheduler.test.js.map +1 -0
  141. package/dist/src/index.d.ts +24 -0
  142. package/dist/src/index.js +118 -0
  143. package/dist/src/index.js.map +1 -0
  144. package/dist/src/middleware/auth.d.ts +40 -0
  145. package/dist/src/middleware/auth.js +135 -0
  146. package/dist/src/middleware/auth.js.map +1 -0
  147. package/dist/src/middleware/auth.test.d.ts +6 -0
  148. package/dist/src/middleware/auth.test.js +268 -0
  149. package/dist/src/middleware/auth.test.js.map +1 -0
  150. package/dist/src/middleware/error-handler.d.ts +20 -0
  151. package/dist/src/middleware/error-handler.js +48 -0
  152. package/dist/src/middleware/error-handler.js.map +1 -0
  153. package/dist/src/middleware/error-handler.test.d.ts +6 -0
  154. package/dist/src/middleware/error-handler.test.js +68 -0
  155. package/dist/src/middleware/error-handler.test.js.map +1 -0
  156. package/dist/src/middleware/request-validation.d.ts +13 -0
  157. package/dist/src/middleware/request-validation.js +26 -0
  158. package/dist/src/middleware/request-validation.js.map +1 -0
  159. package/dist/src/middleware/request-validation.test.d.ts +6 -0
  160. package/dist/src/middleware/request-validation.test.js +57 -0
  161. package/dist/src/middleware/request-validation.test.js.map +1 -0
  162. package/dist/src/output/email-output.d.ts +10 -0
  163. package/dist/src/output/email-output.js +12 -0
  164. package/dist/src/output/email-output.js.map +1 -0
  165. package/dist/src/output/output-router.d.ts +12 -0
  166. package/dist/src/output/output-router.js +36 -0
  167. package/dist/src/output/output-router.js.map +1 -0
  168. package/dist/src/output/output-router.test.d.ts +6 -0
  169. package/dist/src/output/output-router.test.js +132 -0
  170. package/dist/src/output/output-router.test.js.map +1 -0
  171. package/dist/src/output/slack-output.d.ts +10 -0
  172. package/dist/src/output/slack-output.js +54 -0
  173. package/dist/src/output/slack-output.js.map +1 -0
  174. package/dist/src/output/webhook-output.d.ts +10 -0
  175. package/dist/src/output/webhook-output.js +25 -0
  176. package/dist/src/output/webhook-output.js.map +1 -0
  177. package/dist/src/routes/ai-stream.d.ts +159 -0
  178. package/dist/src/routes/ai-stream.js +309 -0
  179. package/dist/src/routes/ai-stream.js.map +1 -0
  180. package/dist/src/routes/ai-stream.test.d.ts +6 -0
  181. package/dist/src/routes/ai-stream.test.js +586 -0
  182. package/dist/src/routes/ai-stream.test.js.map +1 -0
  183. package/dist/src/routes/ask-user-response.d.ts +30 -0
  184. package/dist/src/routes/ask-user-response.js +61 -0
  185. package/dist/src/routes/ask-user-response.js.map +1 -0
  186. package/dist/src/routes/ask-user-response.test.d.ts +6 -0
  187. package/dist/src/routes/ask-user-response.test.js +88 -0
  188. package/dist/src/routes/ask-user-response.test.js.map +1 -0
  189. package/dist/src/routes/chat-stream.d.ts +14 -0
  190. package/dist/src/routes/chat-stream.js +84 -0
  191. package/dist/src/routes/chat-stream.js.map +1 -0
  192. package/dist/src/routes/chat-stream.test.d.ts +6 -0
  193. package/dist/src/routes/chat-stream.test.js +155 -0
  194. package/dist/src/routes/chat-stream.test.js.map +1 -0
  195. package/dist/src/routes/chat.d.ts +13 -0
  196. package/dist/src/routes/chat.js +55 -0
  197. package/dist/src/routes/chat.js.map +1 -0
  198. package/dist/src/routes/chat.test.d.ts +6 -0
  199. package/dist/src/routes/chat.test.js +99 -0
  200. package/dist/src/routes/chat.test.js.map +1 -0
  201. package/dist/src/routes/health.d.ts +13 -0
  202. package/dist/src/routes/health.js +23 -0
  203. package/dist/src/routes/health.js.map +1 -0
  204. package/dist/src/routes/health.test.d.ts +6 -0
  205. package/dist/src/routes/health.test.js +45 -0
  206. package/dist/src/routes/health.test.js.map +1 -0
  207. package/dist/src/routes/sessions.d.ts +14 -0
  208. package/dist/src/routes/sessions.js +82 -0
  209. package/dist/src/routes/sessions.js.map +1 -0
  210. package/dist/src/routes/webhooks.d.ts +13 -0
  211. package/dist/src/routes/webhooks.js +43 -0
  212. package/dist/src/routes/webhooks.js.map +1 -0
  213. package/dist/src/routes/webhooks.test.d.ts +6 -0
  214. package/dist/src/routes/webhooks.test.js +80 -0
  215. package/dist/src/routes/webhooks.test.js.map +1 -0
  216. package/dist/src/routes/widget-actions.d.ts +49 -0
  217. package/dist/src/routes/widget-actions.js +78 -0
  218. package/dist/src/routes/widget-actions.js.map +1 -0
  219. package/dist/src/server.d.ts +31 -0
  220. package/dist/src/server.js +129 -0
  221. package/dist/src/server.js.map +1 -0
  222. package/dist/src/server.test.d.ts +6 -0
  223. package/dist/src/server.test.js +153 -0
  224. package/dist/src/server.test.js.map +1 -0
  225. package/dist/src/session/history-converter.d.ts +21 -0
  226. package/dist/src/session/history-converter.js +59 -0
  227. package/dist/src/session/history-converter.js.map +1 -0
  228. package/dist/src/session/history-converter.test.d.ts +6 -0
  229. package/dist/src/session/history-converter.test.js +130 -0
  230. package/dist/src/session/history-converter.test.js.map +1 -0
  231. package/dist/src/session/session-manager.d.ts +117 -0
  232. package/dist/src/session/session-manager.js +480 -0
  233. package/dist/src/session/session-manager.js.map +1 -0
  234. package/dist/src/session/session-manager.test.d.ts +6 -0
  235. package/dist/src/session/session-manager.test.js +586 -0
  236. package/dist/src/session/session-manager.test.js.map +1 -0
  237. package/dist/src/session/session-runner.d.ts +30 -0
  238. package/dist/src/session/session-runner.js +771 -0
  239. package/dist/src/session/session-runner.js.map +1 -0
  240. package/dist/src/session/session-runner.test.d.ts +6 -0
  241. package/dist/src/session/session-runner.test.js +842 -0
  242. package/dist/src/session/session-runner.test.js.map +1 -0
  243. package/dist/src/stores/index.d.ts +8 -0
  244. package/dist/src/stores/index.js +9 -0
  245. package/dist/src/stores/index.js.map +1 -0
  246. package/dist/src/stores/key-resolver.d.ts +21 -0
  247. package/dist/src/stores/key-resolver.js +30 -0
  248. package/dist/src/stores/key-resolver.js.map +1 -0
  249. package/dist/src/stores/key-resolver.test.d.ts +6 -0
  250. package/dist/src/stores/key-resolver.test.js +31 -0
  251. package/dist/src/stores/key-resolver.test.js.map +1 -0
  252. package/dist/src/stores/pglite-store-backend.d.ts +36 -0
  253. package/dist/src/stores/pglite-store-backend.js +227 -0
  254. package/dist/src/stores/pglite-store-backend.js.map +1 -0
  255. package/dist/src/stores/pglite-store-backend.test.d.ts +6 -0
  256. package/dist/src/stores/pglite-store-backend.test.js +150 -0
  257. package/dist/src/stores/pglite-store-backend.test.js.map +1 -0
  258. package/dist/src/stores/ttl-resolver.d.ts +24 -0
  259. package/dist/src/stores/ttl-resolver.js +64 -0
  260. package/dist/src/stores/ttl-resolver.js.map +1 -0
  261. package/dist/src/stores/ttl-resolver.test.d.ts +6 -0
  262. package/dist/src/stores/ttl-resolver.test.js +68 -0
  263. package/dist/src/stores/ttl-resolver.test.js.map +1 -0
  264. package/dist/src/types.d.ts +227 -0
  265. package/dist/src/types.js +50 -0
  266. package/dist/src/types.js.map +1 -0
  267. package/dist/src/types.test.d.ts +6 -0
  268. package/dist/src/types.test.js +68 -0
  269. package/dist/src/types.test.js.map +1 -0
  270. package/dist/src/utils/jwt-verify.d.ts +20 -0
  271. package/dist/src/utils/jwt-verify.js +34 -0
  272. package/dist/src/utils/jwt-verify.js.map +1 -0
  273. package/dist/src/utils/jwt-verify.test.d.ts +6 -0
  274. package/dist/src/utils/jwt-verify.test.js +156 -0
  275. package/dist/src/utils/jwt-verify.test.js.map +1 -0
  276. package/dist/tsconfig.tsbuildinfo +1 -0
  277. package/package.json +51 -0
@@ -0,0 +1,586 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ // Define mock functions at module scope — persists across clearAllMocks
8
+ const mockInitialize = vi.fn().mockResolvedValue(undefined);
9
+ const mockShutdownAudit = vi.fn().mockResolvedValue(undefined);
10
+ const mockGetGeminiClient = vi.fn().mockReturnValue({});
11
+ const mockGetMessageBus = vi.fn().mockReturnValue({
12
+ on: vi.fn(),
13
+ removeListener: vi.fn(),
14
+ });
15
+ // Use a function constructor so each `new Config()` returns a fresh mock object
16
+ // with the same module-scope mock functions.
17
+ const mockGetConnections = vi.fn().mockReturnValue({});
18
+ const mockGetUpstreamConfig = vi.fn().mockReturnValue({});
19
+ const MockConfig = vi.fn(function () {
20
+ this['initialize'] = mockInitialize;
21
+ this['shutdownAudit'] = mockShutdownAudit;
22
+ this['getGeminiClient'] = mockGetGeminiClient;
23
+ this['getMessageBus'] = mockGetMessageBus;
24
+ this['getConnections'] = mockGetConnections;
25
+ this['getUpstreamConfig'] = mockGetUpstreamConfig;
26
+ this['initializeAuth'] = vi.fn().mockResolvedValue(undefined);
27
+ this['getModelConfig'] = vi.fn().mockReturnValue(undefined);
28
+ this['setModelConfig'] = vi.fn();
29
+ this['getBasePrompt'] = vi.fn().mockReturnValue(undefined);
30
+ this['getAgentName'] = vi.fn().mockReturnValue('Test Agent');
31
+ this['getAgentDescription'] = vi.fn().mockReturnValue(undefined);
32
+ this['getAgentContext'] = vi.fn().mockReturnValue(undefined);
33
+ this['getModel'] = vi.fn().mockReturnValue('test-model');
34
+ this['getStores'] = vi.fn().mockReturnValue([]);
35
+ this['getStoreBackend'] = vi.fn().mockReturnValue(undefined);
36
+ this['setStoreBackend'] = vi.fn();
37
+ });
38
+ // AgentSDK mock
39
+ const mockSdkInitialize = vi.fn().mockResolvedValue(undefined);
40
+ const mockSdkGetConfig = vi.fn();
41
+ const MockAgentSDK = vi.fn(function () {
42
+ this['initialize'] = mockSdkInitialize;
43
+ this['getConfig'] = mockSdkGetConfig;
44
+ });
45
+ vi.mock('@amodalai/core', () => ({
46
+ AmodalConfig: MockConfig,
47
+ AgentSDK: MockAgentSDK,
48
+ Scheduler: vi.fn(function () {
49
+ this['schedule'] = vi.fn();
50
+ }),
51
+ ROOT_SCHEDULER_ID: 'root',
52
+ ApprovalMode: { YOLO: 'yolo' },
53
+ PolicyDecision: { ALLOW: 'allow', ASK_USER: 'ask_user', DENY: 'deny' },
54
+ buildDefaultPrompt: vi.fn().mockReturnValue('Default system prompt'),
55
+ }));
56
+ const { SessionManager } = await import('./session-manager.js');
57
+ describe('SessionManager', () => {
58
+ let manager;
59
+ // Build a mock Config object for AgentSDK.getConfig() to return
60
+ function makeMockConfig() {
61
+ return {
62
+ initialize: mockInitialize,
63
+ shutdownAudit: mockShutdownAudit,
64
+ getGeminiClient: mockGetGeminiClient,
65
+ getMessageBus: mockGetMessageBus,
66
+ getConnections: mockGetConnections,
67
+ getUpstreamConfig: mockGetUpstreamConfig,
68
+ refreshAuth: vi.fn().mockResolvedValue(undefined),
69
+ initializeAuth: vi.fn().mockResolvedValue(undefined),
70
+ getModelConfig: vi.fn().mockReturnValue(undefined),
71
+ setModelConfig: vi.fn(),
72
+ getBasePrompt: vi.fn().mockReturnValue(undefined),
73
+ getAgentName: vi.fn().mockReturnValue('Test Agent'),
74
+ getAgentDescription: vi.fn().mockReturnValue(undefined),
75
+ getAgentContext: vi.fn().mockReturnValue(undefined),
76
+ getModel: vi.fn().mockReturnValue('test-model'),
77
+ getStores: vi.fn().mockReturnValue([]),
78
+ getStoreBackend: vi.fn().mockReturnValue(undefined),
79
+ setStoreBackend: vi.fn(),
80
+ };
81
+ }
82
+ beforeEach(() => {
83
+ vi.clearAllMocks();
84
+ // Re-attach default implementations after clearAllMocks
85
+ mockInitialize.mockResolvedValue(undefined);
86
+ mockShutdownAudit.mockResolvedValue(undefined);
87
+ mockGetGeminiClient.mockReturnValue({});
88
+ mockGetMessageBus.mockReturnValue({
89
+ on: vi.fn(),
90
+ removeListener: vi.fn(),
91
+ });
92
+ mockGetConnections.mockReturnValue({});
93
+ mockSdkInitialize.mockResolvedValue(undefined);
94
+ mockSdkGetConfig.mockReturnValue(makeMockConfig());
95
+ manager = new SessionManager({
96
+ baseParams: {
97
+ sessionId: 'base',
98
+ model: 'test-model',
99
+ cwd: '/tmp',
100
+ targetDir: '/tmp',
101
+ debugMode: false,
102
+ },
103
+ cleanupIntervalMs: 60_000,
104
+ });
105
+ });
106
+ afterEach(async () => {
107
+ await manager.shutdown();
108
+ });
109
+ describe('create', () => {
110
+ it('creates a session with unique ID', async () => {
111
+ const session = await manager.create();
112
+ expect(session.id).toBeDefined();
113
+ expect(session.id.length).toBeGreaterThan(0);
114
+ expect(session.config).toBeDefined();
115
+ expect(session.geminiClient).toBeDefined();
116
+ expect(session.scheduler).toBeDefined();
117
+ expect(manager.size).toBe(1);
118
+ });
119
+ it('passes YOLO approval mode and non-interactive flags', async () => {
120
+ await manager.create();
121
+ const calls = MockConfig.mock.calls;
122
+ const configCall = calls[0]?.[0];
123
+ expect(configCall['approvalMode']).toBe('yolo');
124
+ expect(configCall['interactive']).toBe(false);
125
+ expect(configCall['noBrowser']).toBe(true);
126
+ const policyConfig = configCall['policyEngineConfig'];
127
+ expect(policyConfig['approvalMode']).toBe('yolo');
128
+ expect(policyConfig['defaultDecision']).toBe('allow');
129
+ const rules = policyConfig['rules'];
130
+ expect(rules).toHaveLength(1);
131
+ expect(rules[0]?.['decision']).toBe('allow');
132
+ expect(rules[0]?.['priority']).toBe(9999);
133
+ });
134
+ it('overrides role when provided', async () => {
135
+ await manager.create('analyst');
136
+ const calls = MockConfig.mock.calls;
137
+ const configCall = calls[0]?.[0];
138
+ expect(configCall['activeRole']).toBe('analyst');
139
+ });
140
+ it('initializes the Config', async () => {
141
+ await manager.create();
142
+ expect(mockInitialize).toHaveBeenCalledOnce();
143
+ });
144
+ it('creates multiple sessions with different IDs', async () => {
145
+ const s1 = await manager.create();
146
+ const s2 = await manager.create();
147
+ expect(s1.id).not.toBe(s2.id);
148
+ expect(manager.size).toBe(2);
149
+ });
150
+ it('passes platform context via Config fallback when auth has no token', async () => {
151
+ const authManager = new SessionManager({
152
+ baseParams: {
153
+ sessionId: 'base',
154
+ model: 'test-model',
155
+ cwd: '/tmp',
156
+ targetDir: '/tmp',
157
+ debugMode: false,
158
+ },
159
+ cleanupIntervalMs: 60_000,
160
+ platformApiUrl: 'http://localhost:4000',
161
+ });
162
+ const auth = {
163
+ apiKey: 'ak_test-key',
164
+ orgId: 'org-123',
165
+ applicationId: 'app-456',
166
+ tenantId: 'ten-789',
167
+ authMethod: 'api_key',
168
+ };
169
+ const session = await authManager.create(undefined, auth);
170
+ expect(session.orgId).toBe('org-123');
171
+ // No token → falls back to Config path, not AgentSDK
172
+ expect(MockAgentSDK).not.toHaveBeenCalled();
173
+ // Verify platform params were passed to Config
174
+ const calls = MockConfig.mock.calls;
175
+ const lastCall = calls[calls.length - 1]?.[0];
176
+ expect(lastCall['platformApiUrl']).toBe('http://localhost:4000');
177
+ expect(lastCall['platformApiKey']).toBe('ak_test-key');
178
+ expect(lastCall['applicationId']).toBe('app-456');
179
+ expect(lastCall['tenantId']).toBe('ten-789');
180
+ await authManager.shutdown();
181
+ });
182
+ it('uses AgentSDK when auth token is provided', async () => {
183
+ const authManager = new SessionManager({
184
+ baseParams: {
185
+ sessionId: 'base',
186
+ model: 'test-model',
187
+ cwd: '/tmp',
188
+ targetDir: '/tmp',
189
+ debugMode: false,
190
+ agentContext: 'Test agent context',
191
+ },
192
+ cleanupIntervalMs: 60_000,
193
+ platformApiUrl: 'http://localhost:4000',
194
+ });
195
+ const auth = {
196
+ token: 'jwt.token.here',
197
+ orgId: 'org-jwt',
198
+ applicationId: 'app-jwt',
199
+ tenantId: 'tenant-jwt',
200
+ authMethod: 'platform_jwt',
201
+ };
202
+ const session = await authManager.create(undefined, auth);
203
+ expect(session.orgId).toBe('org-jwt');
204
+ // Verify AgentSDK was used
205
+ expect(MockAgentSDK).toHaveBeenCalledOnce();
206
+ const sdkCalls = MockAgentSDK.mock.calls;
207
+ const sdkConfig = sdkCalls[0]?.[0];
208
+ const platform = sdkConfig['platform'];
209
+ expect(platform['apiUrl']).toBe('http://localhost:4000');
210
+ expect(platform['apiKey']).toBe('jwt.token.here');
211
+ expect(sdkConfig['applicationId']).toBe('app-jwt');
212
+ expect(sdkConfig['tenantId']).toBe('tenant-jwt');
213
+ // base_prompt and agent_context fetched from application during SDK initialize
214
+ // Verify Config was NOT called directly (AgentSDK creates it internally)
215
+ expect(MockConfig).not.toHaveBeenCalled();
216
+ expect(mockSdkInitialize).toHaveBeenCalledOnce();
217
+ expect(mockSdkGetConfig).toHaveBeenCalledOnce();
218
+ await authManager.shutdown();
219
+ });
220
+ it('passes role to AgentSDK when auth token is provided', async () => {
221
+ const authManager = new SessionManager({
222
+ baseParams: {
223
+ sessionId: 'base',
224
+ model: 'test-model',
225
+ cwd: '/tmp',
226
+ targetDir: '/tmp',
227
+ debugMode: false,
228
+ },
229
+ cleanupIntervalMs: 60_000,
230
+ platformApiUrl: 'http://localhost:4000',
231
+ });
232
+ const auth = {
233
+ token: 'ak_test-key',
234
+ apiKey: 'ak_test-key',
235
+ orgId: 'org-123',
236
+ applicationId: 'app-456',
237
+ tenantId: 'ten-789',
238
+ authMethod: 'api_key',
239
+ };
240
+ await authManager.create('analyst', auth);
241
+ // Verify role was passed to AgentSDK config
242
+ const sdkCalls = MockAgentSDK.mock.calls;
243
+ const sdkConfig = sdkCalls[0]?.[0];
244
+ expect(sdkConfig['activeRole']).toBe('analyst');
245
+ await authManager.shutdown();
246
+ });
247
+ it('handles JWT auth without token via Config fallback', async () => {
248
+ const authManager = new SessionManager({
249
+ baseParams: {
250
+ sessionId: 'base',
251
+ model: 'test-model',
252
+ cwd: '/tmp',
253
+ targetDir: '/tmp',
254
+ debugMode: false,
255
+ },
256
+ cleanupIntervalMs: 60_000,
257
+ platformApiUrl: 'http://localhost:4000',
258
+ });
259
+ const auth = {
260
+ orgId: 'org-jwt',
261
+ applicationId: 'app-jwt',
262
+ tenantId: 'tenant-jwt',
263
+ authMethod: 'platform_jwt',
264
+ };
265
+ const session = await authManager.create(undefined, auth);
266
+ expect(session.orgId).toBe('org-jwt');
267
+ // No token → Config path, not AgentSDK
268
+ expect(MockAgentSDK).not.toHaveBeenCalled();
269
+ // Verify platform params — no platformApiKey set
270
+ const calls = MockConfig.mock.calls;
271
+ const lastCall = calls[calls.length - 1]?.[0];
272
+ expect(lastCall['platformApiUrl']).toBe('http://localhost:4000');
273
+ expect(lastCall['platformApiKey']).toBeUndefined();
274
+ expect(lastCall['applicationId']).toBe('app-jwt');
275
+ expect(lastCall['tenantId']).toBe('tenant-jwt');
276
+ await authManager.shutdown();
277
+ });
278
+ it('passes session params as configOverrides to AgentSDK', async () => {
279
+ const authManager = new SessionManager({
280
+ baseParams: {
281
+ sessionId: 'base',
282
+ model: 'test-model',
283
+ cwd: '/tmp',
284
+ targetDir: '/tmp',
285
+ debugMode: false,
286
+ },
287
+ cleanupIntervalMs: 60_000,
288
+ platformApiUrl: 'http://localhost:4000',
289
+ });
290
+ const auth = {
291
+ token: 'jwt.token.here',
292
+ orgId: 'org-1',
293
+ applicationId: 'app-1',
294
+ tenantId: 'ten-1',
295
+ authMethod: 'platform_jwt',
296
+ };
297
+ await authManager.create(undefined, auth);
298
+ // Verify configOverrides (second arg to AgentSDK constructor)
299
+ const sdkCalls = MockAgentSDK.mock.calls;
300
+ const overrides = sdkCalls[0]?.[1];
301
+ expect(overrides['approvalMode']).toBe('yolo');
302
+ expect(overrides['interactive']).toBe(false);
303
+ expect(overrides['noBrowser']).toBe(true);
304
+ expect(overrides['model']).toBe('test-model');
305
+ await authManager.shutdown();
306
+ });
307
+ });
308
+ describe('get', () => {
309
+ it('returns existing session', async () => {
310
+ const created = await manager.create();
311
+ const retrieved = manager.get(created.id);
312
+ expect(retrieved).toBeDefined();
313
+ expect(retrieved?.id).toBe(created.id);
314
+ });
315
+ it('returns undefined for unknown ID', () => {
316
+ expect(manager.get('nonexistent')).toBeUndefined();
317
+ });
318
+ it('updates lastAccessedAt on get', async () => {
319
+ const session = await manager.create();
320
+ const originalAccess = session.lastAccessedAt;
321
+ await new Promise((r) => setTimeout(r, 10));
322
+ manager.get(session.id);
323
+ expect(session.lastAccessedAt).toBeGreaterThanOrEqual(originalAccess);
324
+ });
325
+ });
326
+ describe('destroy', () => {
327
+ it('removes session and calls shutdownAudit', async () => {
328
+ const session = await manager.create();
329
+ await manager.destroy(session.id);
330
+ expect(manager.size).toBe(0);
331
+ expect(mockShutdownAudit).toHaveBeenCalledOnce();
332
+ });
333
+ it('is a no-op for unknown ID', async () => {
334
+ await manager.destroy('nonexistent');
335
+ expect(mockShutdownAudit).not.toHaveBeenCalled();
336
+ });
337
+ });
338
+ describe('cleanup', () => {
339
+ it('removes expired sessions', async () => {
340
+ const shortTtlManager = new SessionManager({
341
+ baseParams: {
342
+ sessionId: 'base',
343
+ model: 'test-model',
344
+ cwd: '/tmp',
345
+ targetDir: '/tmp',
346
+ debugMode: false,
347
+ },
348
+ ttlMs: 1,
349
+ cleanupIntervalMs: 60_000,
350
+ });
351
+ await shortTtlManager.create();
352
+ await shortTtlManager.create();
353
+ expect(shortTtlManager.size).toBe(2);
354
+ await new Promise((r) => setTimeout(r, 10));
355
+ const removed = await shortTtlManager.cleanup();
356
+ expect(removed).toBe(2);
357
+ expect(shortTtlManager.size).toBe(0);
358
+ await shortTtlManager.shutdown();
359
+ });
360
+ it('keeps non-expired sessions', async () => {
361
+ await manager.create();
362
+ const removed = await manager.cleanup();
363
+ expect(removed).toBe(0);
364
+ expect(manager.size).toBe(1);
365
+ });
366
+ });
367
+ describe('shutdown', () => {
368
+ it('destroys all sessions', async () => {
369
+ await manager.create();
370
+ await manager.create();
371
+ await manager.shutdown();
372
+ expect(manager.size).toBe(0);
373
+ });
374
+ });
375
+ describe('hydrate', () => {
376
+ const platformAuth = {
377
+ token: 'ak_test-key',
378
+ apiKey: 'ak_test-key',
379
+ orgId: 'org-1',
380
+ applicationId: 'app-1',
381
+ tenantId: 'ten-1',
382
+ authMethod: 'api_key',
383
+ };
384
+ const storedMessages = [
385
+ { type: 'user', id: 'msg-1', text: 'Hello', timestamp: '2024-01-01T00:00:00Z' },
386
+ { type: 'assistant_text', id: 'msg-2', text: 'Hi there!', timestamp: '2024-01-01T00:00:01Z' },
387
+ ];
388
+ function makeHydrateManager() {
389
+ const mockSetHistory = vi.fn();
390
+ mockGetGeminiClient.mockReturnValue({ setHistory: mockSetHistory });
391
+ const mgr = new SessionManager({
392
+ baseParams: {
393
+ sessionId: 'base',
394
+ model: 'test-model',
395
+ cwd: '/tmp',
396
+ targetDir: '/tmp',
397
+ debugMode: false,
398
+ },
399
+ cleanupIntervalMs: 60_000,
400
+ platformApiUrl: 'http://localhost:4000',
401
+ });
402
+ return { mgr, mockSetHistory };
403
+ }
404
+ it('returns null when platformApiUrl is missing', async () => {
405
+ // manager has no platformApiUrl
406
+ const result = await manager.hydrate('conv-1', undefined, platformAuth);
407
+ expect(result).toBeNull();
408
+ });
409
+ it('returns null when auth is missing', async () => {
410
+ const { mgr } = makeHydrateManager();
411
+ const result = await mgr.hydrate('conv-1');
412
+ expect(result).toBeNull();
413
+ await mgr.shutdown();
414
+ });
415
+ it('returns null when auth has no token', async () => {
416
+ const { mgr } = makeHydrateManager();
417
+ const result = await mgr.hydrate('conv-1', undefined, {
418
+ orgId: 'org-1',
419
+ applicationId: 'app-1',
420
+ tenantId: 'ten-1',
421
+ authMethod: 'api_key',
422
+ });
423
+ expect(result).toBeNull();
424
+ await mgr.shutdown();
425
+ });
426
+ it('returns null when auth has no tenantId', async () => {
427
+ const { mgr } = makeHydrateManager();
428
+ const result = await mgr.hydrate('conv-1', undefined, {
429
+ token: 'ak_test',
430
+ orgId: 'org-1',
431
+ applicationId: 'app-1',
432
+ tenantId: '',
433
+ authMethod: 'api_key',
434
+ });
435
+ expect(result).toBeNull();
436
+ await mgr.shutdown();
437
+ });
438
+ it('returns null on fetch failure', async () => {
439
+ const { mgr } = makeHydrateManager();
440
+ const fetchSpy = vi.spyOn(global, 'fetch').mockRejectedValueOnce(new Error('Network error'));
441
+ const result = await mgr.hydrate('conv-1', undefined, platformAuth);
442
+ expect(result).toBeNull();
443
+ fetchSpy.mockRestore();
444
+ await mgr.shutdown();
445
+ });
446
+ it('returns null on non-OK HTTP response', async () => {
447
+ const { mgr } = makeHydrateManager();
448
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValueOnce({
449
+ ok: false,
450
+ status: 404,
451
+ });
452
+ const result = await mgr.hydrate('conv-1', undefined, platformAuth);
453
+ expect(result).toBeNull();
454
+ fetchSpy.mockRestore();
455
+ await mgr.shutdown();
456
+ });
457
+ it('returns null when stored conversation has no messages', async () => {
458
+ const { mgr } = makeHydrateManager();
459
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValueOnce({
460
+ ok: true,
461
+ json: async () => ({ id: 'conv-1', tenant_id: 'ten-1', messages: [], status: 'active' }),
462
+ });
463
+ const result = await mgr.hydrate('conv-1', undefined, platformAuth);
464
+ expect(result).toBeNull();
465
+ fetchSpy.mockRestore();
466
+ await mgr.shutdown();
467
+ });
468
+ it('creates session under original conversation ID', async () => {
469
+ const { mgr, mockSetHistory } = makeHydrateManager();
470
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValueOnce({
471
+ ok: true,
472
+ json: async () => ({
473
+ id: 'conv-original',
474
+ tenant_id: 'ten-1',
475
+ messages: storedMessages,
476
+ status: 'active',
477
+ }),
478
+ });
479
+ const session = await mgr.hydrate('conv-original', undefined, platformAuth);
480
+ expect(session).not.toBeNull();
481
+ expect(session.id).toBe('conv-original');
482
+ expect(mgr.get('conv-original')).toBeDefined();
483
+ expect(mockSetHistory).toHaveBeenCalledOnce();
484
+ fetchSpy.mockRestore();
485
+ await mgr.shutdown();
486
+ });
487
+ it('seeds LLM history via setHistory', async () => {
488
+ const { mgr, mockSetHistory } = makeHydrateManager();
489
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValueOnce({
490
+ ok: true,
491
+ json: async () => ({
492
+ id: 'conv-history',
493
+ tenant_id: 'ten-1',
494
+ messages: storedMessages,
495
+ status: 'active',
496
+ }),
497
+ });
498
+ await mgr.hydrate('conv-history', undefined, platformAuth);
499
+ expect(mockSetHistory).toHaveBeenCalledOnce();
500
+ const historyArg = mockSetHistory.mock.calls[0]?.[0];
501
+ expect(historyArg).toHaveLength(2);
502
+ expect(historyArg[0]?.['role']).toBe('user');
503
+ expect(historyArg[1]?.['role']).toBe('model');
504
+ fetchSpy.mockRestore();
505
+ await mgr.shutdown();
506
+ });
507
+ it('pre-populates accumulatedMessages', async () => {
508
+ const { mgr } = makeHydrateManager();
509
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValueOnce({
510
+ ok: true,
511
+ json: async () => ({
512
+ id: 'conv-acc',
513
+ tenant_id: 'ten-1',
514
+ messages: storedMessages,
515
+ status: 'active',
516
+ }),
517
+ });
518
+ const session = await mgr.hydrate('conv-acc', undefined, platformAuth);
519
+ expect(session.accumulatedMessages).toHaveLength(2);
520
+ expect(session.accumulatedMessages[0]?.text).toBe('Hello');
521
+ expect(session.accumulatedMessages[1]?.text).toBe('Hi there!');
522
+ fetchSpy.mockRestore();
523
+ await mgr.shutdown();
524
+ });
525
+ it('deduplicates concurrent hydration requests', async () => {
526
+ const { mgr } = makeHydrateManager();
527
+ let resolveJson;
528
+ const jsonPromise = new Promise((r) => { resolveJson = r; });
529
+ const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValue({
530
+ ok: true,
531
+ json: () => jsonPromise,
532
+ });
533
+ // Start two concurrent hydrations for the same conversation
534
+ const p1 = mgr.hydrate('conv-dedup', undefined, platformAuth);
535
+ const p2 = mgr.hydrate('conv-dedup', undefined, platformAuth);
536
+ // Resolve the fetch
537
+ resolveJson({
538
+ id: 'conv-dedup',
539
+ tenant_id: 'ten-1',
540
+ messages: storedMessages,
541
+ status: 'active',
542
+ });
543
+ const [s1, s2] = await Promise.all([p1, p2]);
544
+ // Both should return the same session
545
+ expect(s1).toBe(s2);
546
+ // Only one fetch was made
547
+ expect(fetchSpy).toHaveBeenCalledTimes(1);
548
+ fetchSpy.mockRestore();
549
+ await mgr.shutdown();
550
+ });
551
+ });
552
+ describe('waitForAskUserResponse', () => {
553
+ function makeFakeSession() {
554
+ return {
555
+ id: 'fake-sess',
556
+ pendingAskUser: new Map(),
557
+ };
558
+ }
559
+ it('resolves when resolveAskUser is called', async () => {
560
+ const session = makeFakeSession();
561
+ const controller = new AbortController();
562
+ const promise = manager.waitForAskUserResponse(session, 'ask-1', controller.signal);
563
+ // Resolve it
564
+ const resolved = manager.resolveAskUser(session, 'ask-1', { '0': 'yes' });
565
+ expect(resolved).toBe(true);
566
+ const answers = await promise;
567
+ expect(answers).toEqual({ '0': 'yes' });
568
+ // Should be cleaned up
569
+ expect(session.pendingAskUser.size).toBe(0);
570
+ });
571
+ it('returns false for non-existent ask_id', () => {
572
+ const session = makeFakeSession();
573
+ const resolved = manager.resolveAskUser(session, 'no-such-id', {});
574
+ expect(resolved).toBe(false);
575
+ });
576
+ it('rejects when signal is aborted', async () => {
577
+ const session = makeFakeSession();
578
+ const controller = new AbortController();
579
+ const promise = manager.waitForAskUserResponse(session, 'ask-abort', controller.signal);
580
+ controller.abort();
581
+ await expect(promise).rejects.toThrow('ask_user aborted');
582
+ expect(session.pendingAskUser.size).toBe(0);
583
+ });
584
+ });
585
+ });
586
+ //# sourceMappingURL=session-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.test.js","sourceRoot":"","sources":["../../../src/session/session-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { ManagedSession, SessionManager } from './session-manager.js';
7
+ import { type ChatResponse, type SSEEvent } from '../types.js';
8
+ import type { AuditClient } from '../audit/audit-client.js';
9
+ /**
10
+ * Audit context for logging chat events to the platform API.
11
+ */
12
+ export interface StreamAuditContext {
13
+ auditClient: AuditClient;
14
+ appId: string;
15
+ token: string;
16
+ tenantId?: string;
17
+ orgId?: string;
18
+ actor?: string;
19
+ /** Platform API URL for session history persistence */
20
+ platformApiUrl?: string;
21
+ }
22
+ /**
23
+ * Run a synchronous (non-streaming) message through the agentic loop.
24
+ * Collects all text and tool calls, returns a ChatResponse.
25
+ */
26
+ export declare function runMessage(session: ManagedSession, message: string, signal: AbortSignal, audit?: StreamAuditContext): Promise<ChatResponse>;
27
+ /**
28
+ * Stream a message through the agentic loop, yielding SSE events.
29
+ */
30
+ export declare function streamMessage(session: ManagedSession, message: string, signal: AbortSignal, audit?: StreamAuditContext, sessionManager?: SessionManager): AsyncGenerator<SSEEvent>;