@kilnai/runtime 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/a2a/a2a-client.d.ts +6 -0
  2. package/dist/a2a/a2a-client.d.ts.map +1 -0
  3. package/dist/a2a/a2a-client.js +112 -0
  4. package/dist/a2a/a2a-client.js.map +1 -0
  5. package/dist/a2a/index.d.ts +2 -0
  6. package/dist/a2a/index.d.ts.map +1 -0
  7. package/dist/a2a/index.js +3 -0
  8. package/dist/a2a/index.js.map +1 -0
  9. package/dist/channels/api-channel.d.ts +43 -0
  10. package/dist/channels/api-channel.d.ts.map +1 -0
  11. package/dist/channels/api-channel.js +95 -0
  12. package/dist/channels/api-channel.js.map +1 -0
  13. package/dist/channels/channel-registry.d.ts +25 -0
  14. package/dist/channels/channel-registry.d.ts.map +1 -0
  15. package/dist/channels/channel-registry.js +49 -0
  16. package/dist/channels/channel-registry.js.map +1 -0
  17. package/dist/channels/channel-router.d.ts +43 -0
  18. package/dist/channels/channel-router.d.ts.map +1 -0
  19. package/dist/channels/channel-router.js +72 -0
  20. package/dist/channels/channel-router.js.map +1 -0
  21. package/dist/channels/cli-channel.d.ts +19 -0
  22. package/dist/channels/cli-channel.d.ts.map +1 -0
  23. package/dist/channels/cli-channel.js +37 -0
  24. package/dist/channels/cli-channel.js.map +1 -0
  25. package/dist/channels/event-bridge.d.ts +27 -0
  26. package/dist/channels/event-bridge.d.ts.map +1 -0
  27. package/dist/channels/event-bridge.js +83 -0
  28. package/dist/channels/event-bridge.js.map +1 -0
  29. package/dist/channels/index.d.ts +17 -0
  30. package/dist/channels/index.d.ts.map +1 -0
  31. package/dist/channels/index.js +12 -0
  32. package/dist/channels/index.js.map +1 -0
  33. package/dist/channels/message-formatter.d.ts +4 -0
  34. package/dist/channels/message-formatter.d.ts.map +1 -0
  35. package/dist/channels/message-formatter.js +32 -0
  36. package/dist/channels/message-formatter.js.map +1 -0
  37. package/dist/channels/slack-channel.d.ts +32 -0
  38. package/dist/channels/slack-channel.d.ts.map +1 -0
  39. package/dist/channels/slack-channel.js +71 -0
  40. package/dist/channels/slack-channel.js.map +1 -0
  41. package/dist/channels/types.d.ts +27 -0
  42. package/dist/channels/types.d.ts.map +1 -0
  43. package/dist/channels/types.js +12 -0
  44. package/dist/channels/types.js.map +1 -0
  45. package/dist/channels/web-channel.d.ts +37 -0
  46. package/dist/channels/web-channel.d.ts.map +1 -0
  47. package/dist/channels/web-channel.js +112 -0
  48. package/dist/channels/web-channel.js.map +1 -0
  49. package/dist/channels/whatsapp-api.d.ts +20 -0
  50. package/dist/channels/whatsapp-api.d.ts.map +1 -0
  51. package/dist/channels/whatsapp-api.js +44 -0
  52. package/dist/channels/whatsapp-api.js.map +1 -0
  53. package/dist/channels/whatsapp-channel.d.ts +32 -0
  54. package/dist/channels/whatsapp-channel.d.ts.map +1 -0
  55. package/dist/channels/whatsapp-channel.js +85 -0
  56. package/dist/channels/whatsapp-channel.js.map +1 -0
  57. package/dist/gateway/app-resolver.d.ts +11 -0
  58. package/dist/gateway/app-resolver.d.ts.map +1 -0
  59. package/dist/gateway/app-resolver.js +36 -0
  60. package/dist/gateway/app-resolver.js.map +1 -0
  61. package/dist/gateway/approval-registry.d.ts +19 -0
  62. package/dist/gateway/approval-registry.d.ts.map +1 -0
  63. package/dist/gateway/approval-registry.js +49 -0
  64. package/dist/gateway/approval-registry.js.map +1 -0
  65. package/dist/gateway/budget-middleware.d.ts +47 -0
  66. package/dist/gateway/budget-middleware.d.ts.map +1 -0
  67. package/dist/gateway/budget-middleware.js +88 -0
  68. package/dist/gateway/budget-middleware.js.map +1 -0
  69. package/dist/gateway/config-validator.d.ts +31 -0
  70. package/dist/gateway/config-validator.d.ts.map +1 -0
  71. package/dist/gateway/config-validator.js +68 -0
  72. package/dist/gateway/config-validator.js.map +1 -0
  73. package/dist/gateway/delegation-handler.d.ts +53 -0
  74. package/dist/gateway/delegation-handler.d.ts.map +1 -0
  75. package/dist/gateway/delegation-handler.js +257 -0
  76. package/dist/gateway/delegation-handler.js.map +1 -0
  77. package/dist/gateway/delegation-routes.d.ts +7 -0
  78. package/dist/gateway/delegation-routes.d.ts.map +1 -0
  79. package/dist/gateway/delegation-routes.js +48 -0
  80. package/dist/gateway/delegation-routes.js.map +1 -0
  81. package/dist/gateway/dev-inspector.d.ts +2 -0
  82. package/dist/gateway/dev-inspector.d.ts.map +1 -0
  83. package/dist/gateway/dev-inspector.js +355 -0
  84. package/dist/gateway/dev-inspector.js.map +1 -0
  85. package/dist/gateway/dev-orchestrator.d.ts +24 -0
  86. package/dist/gateway/dev-orchestrator.d.ts.map +1 -0
  87. package/dist/gateway/dev-orchestrator.js +71 -0
  88. package/dist/gateway/dev-orchestrator.js.map +1 -0
  89. package/dist/gateway/dev-routes-types.d.ts +39 -0
  90. package/dist/gateway/dev-routes-types.d.ts.map +1 -0
  91. package/dist/gateway/dev-routes-types.js +3 -0
  92. package/dist/gateway/dev-routes-types.js.map +1 -0
  93. package/dist/gateway/dev-routes.d.ts +53 -0
  94. package/dist/gateway/dev-routes.d.ts.map +1 -0
  95. package/dist/gateway/dev-routes.js +217 -0
  96. package/dist/gateway/dev-routes.js.map +1 -0
  97. package/dist/gateway/dev-token-store.d.ts +19 -0
  98. package/dist/gateway/dev-token-store.d.ts.map +1 -0
  99. package/dist/gateway/dev-token-store.js +40 -0
  100. package/dist/gateway/dev-token-store.js.map +1 -0
  101. package/dist/gateway/gateway-routes.d.ts +46 -0
  102. package/dist/gateway/gateway-routes.d.ts.map +1 -0
  103. package/dist/gateway/gateway-routes.js +143 -0
  104. package/dist/gateway/gateway-routes.js.map +1 -0
  105. package/dist/gateway/gateway-server.d.ts +25 -0
  106. package/dist/gateway/gateway-server.d.ts.map +1 -0
  107. package/dist/gateway/gateway-server.js +736 -0
  108. package/dist/gateway/gateway-server.js.map +1 -0
  109. package/dist/gateway/health-registry.d.ts +18 -0
  110. package/dist/gateway/health-registry.d.ts.map +1 -0
  111. package/dist/gateway/health-registry.js +40 -0
  112. package/dist/gateway/health-registry.js.map +1 -0
  113. package/dist/gateway/memory-routes.d.ts +12 -0
  114. package/dist/gateway/memory-routes.d.ts.map +1 -0
  115. package/dist/gateway/memory-routes.js +32 -0
  116. package/dist/gateway/memory-routes.js.map +1 -0
  117. package/dist/gateway/mode-b-routes.d.ts +14 -0
  118. package/dist/gateway/mode-b-routes.d.ts.map +1 -0
  119. package/dist/gateway/mode-b-routes.js +96 -0
  120. package/dist/gateway/mode-b-routes.js.map +1 -0
  121. package/dist/gateway/safety-middleware.d.ts +21 -0
  122. package/dist/gateway/safety-middleware.d.ts.map +1 -0
  123. package/dist/gateway/safety-middleware.js +175 -0
  124. package/dist/gateway/safety-middleware.js.map +1 -0
  125. package/dist/gateway/security-middleware.d.ts +12 -0
  126. package/dist/gateway/security-middleware.d.ts.map +1 -0
  127. package/dist/gateway/security-middleware.js +62 -0
  128. package/dist/gateway/security-middleware.js.map +1 -0
  129. package/dist/gateway/tenant-admin-routes.d.ts +15 -0
  130. package/dist/gateway/tenant-admin-routes.d.ts.map +1 -0
  131. package/dist/gateway/tenant-admin-routes.js +148 -0
  132. package/dist/gateway/tenant-admin-routes.js.map +1 -0
  133. package/dist/gateway/tenant-routes.d.ts +15 -0
  134. package/dist/gateway/tenant-routes.d.ts.map +1 -0
  135. package/dist/gateway/tenant-routes.js +107 -0
  136. package/dist/gateway/tenant-routes.js.map +1 -0
  137. package/dist/gateway/whatsapp-webhook-routes.d.ts +15 -0
  138. package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -0
  139. package/dist/gateway/whatsapp-webhook-routes.js +217 -0
  140. package/dist/gateway/whatsapp-webhook-routes.js.map +1 -0
  141. package/dist/gateway/ws-routes.d.ts +19 -0
  142. package/dist/gateway/ws-routes.d.ts.map +1 -0
  143. package/dist/gateway/ws-routes.js +79 -0
  144. package/dist/gateway/ws-routes.js.map +1 -0
  145. package/dist/index.d.ts +64 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +44 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/session/index.d.ts +6 -0
  150. package/dist/session/index.d.ts.map +1 -0
  151. package/dist/session/index.js +4 -0
  152. package/dist/session/index.js.map +1 -0
  153. package/dist/session/mode-b-orchestrator.d.ts +43 -0
  154. package/dist/session/mode-b-orchestrator.d.ts.map +1 -0
  155. package/dist/session/mode-b-orchestrator.js +224 -0
  156. package/dist/session/mode-b-orchestrator.js.map +1 -0
  157. package/dist/session/mode-b-session.d.ts +29 -0
  158. package/dist/session/mode-b-session.d.ts.map +1 -0
  159. package/dist/session/mode-b-session.js +50 -0
  160. package/dist/session/mode-b-session.js.map +1 -0
  161. package/dist/session/session-registry.d.ts +15 -0
  162. package/dist/session/session-registry.d.ts.map +1 -0
  163. package/dist/session/session-registry.js +60 -0
  164. package/dist/session/session-registry.js.map +1 -0
  165. package/dist/tenant/index.d.ts +3 -0
  166. package/dist/tenant/index.d.ts.map +1 -0
  167. package/dist/tenant/index.js +3 -0
  168. package/dist/tenant/index.js.map +1 -0
  169. package/dist/tenant/system-prompt-builder.d.ts +3 -0
  170. package/dist/tenant/system-prompt-builder.d.ts.map +1 -0
  171. package/dist/tenant/system-prompt-builder.js +76 -0
  172. package/dist/tenant/system-prompt-builder.js.map +1 -0
  173. package/dist/tenant/tenant-registry.d.ts +33 -0
  174. package/dist/tenant/tenant-registry.d.ts.map +1 -0
  175. package/dist/tenant/tenant-registry.js +156 -0
  176. package/dist/tenant/tenant-registry.js.map +1 -0
  177. package/dist/trigger/event-listener.d.ts +22 -0
  178. package/dist/trigger/event-listener.d.ts.map +1 -0
  179. package/dist/trigger/event-listener.js +64 -0
  180. package/dist/trigger/event-listener.js.map +1 -0
  181. package/dist/trigger/index.d.ts +10 -0
  182. package/dist/trigger/index.d.ts.map +1 -0
  183. package/dist/trigger/index.js +7 -0
  184. package/dist/trigger/index.js.map +1 -0
  185. package/dist/trigger/scheduler.d.ts +22 -0
  186. package/dist/trigger/scheduler.d.ts.map +1 -0
  187. package/dist/trigger/scheduler.js +77 -0
  188. package/dist/trigger/scheduler.js.map +1 -0
  189. package/dist/trigger/trigger-executor.d.ts +14 -0
  190. package/dist/trigger/trigger-executor.d.ts.map +1 -0
  191. package/dist/trigger/trigger-executor.js +47 -0
  192. package/dist/trigger/trigger-executor.js.map +1 -0
  193. package/dist/trigger/trigger-registry.d.ts +28 -0
  194. package/dist/trigger/trigger-registry.d.ts.map +1 -0
  195. package/dist/trigger/trigger-registry.js +118 -0
  196. package/dist/trigger/trigger-registry.js.map +1 -0
  197. package/dist/trigger/webhook-handler.d.ts +11 -0
  198. package/dist/trigger/webhook-handler.d.ts.map +1 -0
  199. package/dist/trigger/webhook-handler.js +71 -0
  200. package/dist/trigger/webhook-handler.js.map +1 -0
  201. package/dist/utils/hmac.d.ts +15 -0
  202. package/dist/utils/hmac.d.ts.map +1 -0
  203. package/dist/utils/hmac.js +27 -0
  204. package/dist/utils/hmac.js.map +1 -0
  205. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-routes.js","sourceRoot":"","sources":["../../src/gateway/ws-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ export { createGatewayApp } from "./gateway/gateway-routes.js";
2
+ export type { LoadedApp, GatewayServerConfig } from "./gateway/gateway-routes.js";
3
+ export { startGateway } from "./gateway/gateway-server.js";
4
+ export type { StartGatewayOptions } from "./gateway/gateway-server.js";
5
+ export { startDevServer } from "./gateway/gateway-server.js";
6
+ export type { DevServerOptions } from "./gateway/gateway-server.js";
7
+ export { resolveApps } from "./gateway/app-resolver.js";
8
+ export type { ResolvedApp } from "./gateway/app-resolver.js";
9
+ export { createModeBRoutes } from "./gateway/mode-b-routes.js";
10
+ export type { ModeBAppRuntime } from "./gateway/mode-b-routes.js";
11
+ export { checkBudget, reportUsage, checkTier } from "./gateway/budget-middleware.js";
12
+ export type { BudgetCheckResult, TierCheckResult, BillingConfig } from "./gateway/budget-middleware.js";
13
+ export { executeDelegation, validateResponseSchema } from "./gateway/delegation-handler.js";
14
+ export type { DelegationTarget, DelegationRegistry } from "./gateway/delegation-handler.js";
15
+ export { createDelegationRoutes } from "./gateway/delegation-routes.js";
16
+ export { createTenantRoutes } from "./gateway/tenant-routes.js";
17
+ export type { TenantAppRuntime } from "./gateway/tenant-routes.js";
18
+ export { createWhatsAppWebhookRoutes } from "./gateway/whatsapp-webhook-routes.js";
19
+ export type { WhatsAppWebhookConfig } from "./gateway/whatsapp-webhook-routes.js";
20
+ export { createTenantAdminRoutes } from "./gateway/tenant-admin-routes.js";
21
+ export type { TenantAdminRoutesConfig } from "./gateway/tenant-admin-routes.js";
22
+ export { createMemoryRoutes } from "./gateway/memory-routes.js";
23
+ export type { MemoryRoutesConfig } from "./gateway/memory-routes.js";
24
+ export { ApprovalGateRegistry } from "./gateway/approval-registry.js";
25
+ export type { ApprovalTarget } from "./gateway/approval-registry.js";
26
+ export { DevOrchestrator } from "./gateway/dev-orchestrator.js";
27
+ export type { DevOrchestratorConfig, DevRunResult } from "./gateway/dev-orchestrator.js";
28
+ export { DevTokenStore } from "./gateway/dev-token-store.js";
29
+ export type { DevToken } from "./gateway/dev-token-store.js";
30
+ export { ModeBSession } from "./session/mode-b-session.js";
31
+ export type { ModeBSessionConfig } from "./session/mode-b-session.js";
32
+ export { ModeBOrchestrator } from "./session/mode-b-orchestrator.js";
33
+ export type { OrchestratorDeps, OrchestrateResult } from "./session/mode-b-orchestrator.js";
34
+ export { SessionRegistry } from "./session/session-registry.js";
35
+ export { TenantRegistry, TenantNotFoundError, TenantValidationFailedError } from "./tenant/tenant-registry.js";
36
+ export { buildTenantSystemPrompt } from "./tenant/system-prompt-builder.js";
37
+ export { TriggerRegistry } from "./trigger/trigger-registry.js";
38
+ export type { TriggerRegistryConfig } from "./trigger/trigger-registry.js";
39
+ export { createWebhookHandler, validateWebhookSignature } from "./trigger/webhook-handler.js";
40
+ export type { WebhookHandlerConfig } from "./trigger/webhook-handler.js";
41
+ export { EventListener, matchesFilter } from "./trigger/event-listener.js";
42
+ export type { EventListenerConfig } from "./trigger/event-listener.js";
43
+ export { Scheduler } from "./trigger/scheduler.js";
44
+ export { executeTrigger, interpolateTemplate } from "./trigger/trigger-executor.js";
45
+ export type { TriggerExecutionContext } from "./trigger/trigger-executor.js";
46
+ export { EventBridge, toEngineEvent } from "./channels/event-bridge.js";
47
+ export { ChannelRegistry } from "./channels/channel-registry.js";
48
+ export { formatForChannel } from "./channels/message-formatter.js";
49
+ export type { ChannelConfig, ChannelStatus, IdentityMapping, IdentityResolver } from "./channels/types.js";
50
+ export { InMemoryIdentityResolver } from "./channels/types.js";
51
+ export { CliChannel } from "./channels/cli-channel.js";
52
+ export { WebChannel } from "./channels/web-channel.js";
53
+ export type { WebSocketLike } from "./channels/web-channel.js";
54
+ export { ChannelRouter } from "./channels/channel-router.js";
55
+ export type { RouteResult, ChannelRouterRule } from "./channels/channel-router.js";
56
+ export { WhatsAppChannel } from "./channels/whatsapp-channel.js";
57
+ export type { WhatsAppConfig } from "./channels/whatsapp-channel.js";
58
+ export { SlackChannel } from "./channels/slack-channel.js";
59
+ export type { SlackConfig } from "./channels/slack-channel.js";
60
+ export { ApiChannel } from "./channels/api-channel.js";
61
+ export type { SseWriter } from "./channels/api-channel.js";
62
+ export { sendWhatsAppMessage, whatsappMessagesUrl, WHATSAPP_GRAPH_API_VERSION } from "./channels/whatsapp-api.js";
63
+ export { verifyHmacSha256 } from "./utils/hmac.js";
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ // Gateway
2
+ export { createGatewayApp } from "./gateway/gateway-routes.js";
3
+ export { startGateway } from "./gateway/gateway-server.js";
4
+ export { startDevServer } from "./gateway/gateway-server.js";
5
+ export { resolveApps } from "./gateway/app-resolver.js";
6
+ export { createModeBRoutes } from "./gateway/mode-b-routes.js";
7
+ export { checkBudget, reportUsage, checkTier } from "./gateway/budget-middleware.js";
8
+ export { executeDelegation, validateResponseSchema } from "./gateway/delegation-handler.js";
9
+ export { createDelegationRoutes } from "./gateway/delegation-routes.js";
10
+ export { createTenantRoutes } from "./gateway/tenant-routes.js";
11
+ export { createWhatsAppWebhookRoutes } from "./gateway/whatsapp-webhook-routes.js";
12
+ export { createTenantAdminRoutes } from "./gateway/tenant-admin-routes.js";
13
+ export { createMemoryRoutes } from "./gateway/memory-routes.js";
14
+ export { ApprovalGateRegistry } from "./gateway/approval-registry.js";
15
+ export { DevOrchestrator } from "./gateway/dev-orchestrator.js";
16
+ export { DevTokenStore } from "./gateway/dev-token-store.js";
17
+ // Session
18
+ export { ModeBSession } from "./session/mode-b-session.js";
19
+ export { ModeBOrchestrator } from "./session/mode-b-orchestrator.js";
20
+ export { SessionRegistry } from "./session/session-registry.js";
21
+ // Tenant
22
+ export { TenantRegistry, TenantNotFoundError, TenantValidationFailedError } from "./tenant/tenant-registry.js";
23
+ export { buildTenantSystemPrompt } from "./tenant/system-prompt-builder.js";
24
+ // Triggers
25
+ export { TriggerRegistry } from "./trigger/trigger-registry.js";
26
+ export { createWebhookHandler, validateWebhookSignature } from "./trigger/webhook-handler.js";
27
+ export { EventListener, matchesFilter } from "./trigger/event-listener.js";
28
+ export { Scheduler } from "./trigger/scheduler.js";
29
+ export { executeTrigger, interpolateTemplate } from "./trigger/trigger-executor.js";
30
+ // Channels
31
+ export { EventBridge, toEngineEvent } from "./channels/event-bridge.js";
32
+ export { ChannelRegistry } from "./channels/channel-registry.js";
33
+ export { formatForChannel } from "./channels/message-formatter.js";
34
+ export { InMemoryIdentityResolver } from "./channels/types.js";
35
+ export { CliChannel } from "./channels/cli-channel.js";
36
+ export { WebChannel } from "./channels/web-channel.js";
37
+ export { ChannelRouter } from "./channels/channel-router.js";
38
+ export { WhatsAppChannel } from "./channels/whatsapp-channel.js";
39
+ export { SlackChannel } from "./channels/slack-channel.js";
40
+ export { ApiChannel } from "./channels/api-channel.js";
41
+ export { sendWhatsAppMessage, whatsappMessagesUrl, WHATSAPP_GRAPH_API_VERSION } from "./channels/whatsapp-api.js";
42
+ // Utils
43
+ export { verifyHmacSha256 } from "./utils/hmac.js";
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AAEnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC/G,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpF,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAElH,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { ModeBSession } from "./mode-b-session.js";
2
+ export type { ModeBSessionConfig } from "./mode-b-session.js";
3
+ export { ModeBOrchestrator } from "./mode-b-orchestrator.js";
4
+ export type { OrchestratorDeps, OrchestrateResult } from "./mode-b-orchestrator.js";
5
+ export { SessionRegistry } from "./session-registry.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ModeBSession } from "./mode-b-session.js";
2
+ export { ModeBOrchestrator } from "./mode-b-orchestrator.js";
3
+ export { SessionRegistry } from "./session-registry.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { ProviderAdapter, ContentPart, ToolDefinition } from "@kilnai/core";
2
+ import type { McpClient } from "@kilnai/core";
3
+ import type { EventBus } from "@kilnai/core";
4
+ import type { ModeBSession } from "./mode-b-session.js";
5
+ export interface OrchestratorDeps {
6
+ readonly provider: ProviderAdapter;
7
+ readonly model?: string;
8
+ readonly maxTokens?: number;
9
+ readonly maxToolRounds?: number;
10
+ readonly tools?: readonly ToolDefinition[];
11
+ readonly mcpClients?: readonly McpClient[];
12
+ readonly builtinTools?: ReadonlyMap<string, (input: Record<string, unknown>) => Promise<unknown>>;
13
+ readonly eventBus?: EventBus;
14
+ }
15
+ export interface OrchestrateResult {
16
+ readonly parts: readonly ContentPart[];
17
+ readonly inputTokens: number;
18
+ readonly outputTokens: number;
19
+ readonly cacheReadTokens: number;
20
+ readonly cacheWriteTokens: number;
21
+ }
22
+ export declare class ModeBOrchestrator {
23
+ private readonly deps;
24
+ private readonly maxToolRounds;
25
+ private _tools;
26
+ private _callBuiltinTools?;
27
+ constructor(deps: OrchestratorDeps);
28
+ /** The model identifier passed to this orchestrator. Used by callers for usage reporting. */
29
+ get model(): string | undefined;
30
+ /** Current tool definitions. */
31
+ get tools(): readonly ToolDefinition[] | undefined;
32
+ /** Register additional tool definitions at runtime (e.g. builtin tools discovered per-tenant). */
33
+ registerTools(newTools: readonly ToolDefinition[]): void;
34
+ processMessage(session: ModeBSession, userParts: readonly ContentPart[], recalledMemory?: string, callBuiltinTools?: ReadonlyMap<string, (input: Record<string, unknown>) => Promise<unknown>>): Promise<OrchestrateResult>;
35
+ private executeTool;
36
+ private emitToolCalled;
37
+ private emitToolResult;
38
+ private computeTotalCostUsd;
39
+ private get resolvedPricing();
40
+ private emitCostUpdate;
41
+ private emitError;
42
+ }
43
+ //# sourceMappingURL=mode-b-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-orchestrator.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAY,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAClG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,iBAAiB,CAAC,CAA4E;gBAE1F,IAAI,EAAE,gBAAgB;IASlC,6FAA6F;IAC7F,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,gCAAgC;IAChC,IAAI,KAAK,IAAI,SAAS,cAAc,EAAE,GAAG,SAAS,CAEjD;IAED,kGAAkG;IAClG,aAAa,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IASlD,cAAc,CAClB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,SAAS,WAAW,EAAE,EACjC,cAAc,CAAC,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAC3F,OAAO,CAAC,iBAAiB,CAAC;YAuHf,WAAW;IAsBzB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,KAAK,eAAe,GAO1B;IAED,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,SAAS;CAWlB"}
@@ -0,0 +1,224 @@
1
+ import { MODEL_PRICING } from "@kilnai/core";
2
+ const DEFAULT_MAX_TOOL_ROUNDS = 10;
3
+ export class ModeBOrchestrator {
4
+ deps;
5
+ maxToolRounds;
6
+ _tools;
7
+ _callBuiltinTools;
8
+ constructor(deps) {
9
+ this.deps = deps;
10
+ this.maxToolRounds = deps.maxToolRounds ?? DEFAULT_MAX_TOOL_ROUNDS;
11
+ this._tools = deps.tools;
12
+ if (!deps.model) {
13
+ console.warn("[ModeBOrchestrator] No model specified in deps -- cost tracking will be $0. Pass model to OrchestratorDeps for accurate cost reporting.");
14
+ }
15
+ }
16
+ /** The model identifier passed to this orchestrator. Used by callers for usage reporting. */
17
+ get model() {
18
+ return this.deps.model;
19
+ }
20
+ /** Current tool definitions. */
21
+ get tools() {
22
+ return this._tools;
23
+ }
24
+ /** Register additional tool definitions at runtime (e.g. builtin tools discovered per-tenant). */
25
+ registerTools(newTools) {
26
+ const existing = this._tools ?? [];
27
+ const names = new Set(existing.map((t) => t.name));
28
+ const additions = newTools.filter((t) => !names.has(t.name));
29
+ if (additions.length > 0) {
30
+ this._tools = [...existing, ...additions];
31
+ }
32
+ }
33
+ async processMessage(session, userParts, recalledMemory, callBuiltinTools) {
34
+ session.addUserMessage(userParts);
35
+ let system = session.systemPrompt;
36
+ if (recalledMemory) {
37
+ system += "\n\n--- Recalled Memory ---\n" + recalledMemory;
38
+ }
39
+ // Merge dep-level and per-call builtin tools
40
+ this._callBuiltinTools = callBuiltinTools;
41
+ const hasBuiltins = (this.deps.builtinTools?.size ?? 0) + (callBuiltinTools?.size ?? 0) > 0;
42
+ const hasMcp = (this.deps.mcpClients?.length ?? 0) > 0;
43
+ const hasTools = (this._tools?.length ?? 0) > 0 && (hasBuiltins || hasMcp);
44
+ let totalInputTokens = 0;
45
+ let totalOutputTokens = 0;
46
+ let totalCacheRead = 0;
47
+ let totalCacheWrite = 0;
48
+ for (let round = 0; round < this.maxToolRounds; round++) {
49
+ const messages = [...session.conversationHistory];
50
+ const response = await this.deps.provider.createMessage({
51
+ system,
52
+ messages,
53
+ tools: hasTools ? this._tools : undefined,
54
+ maxTokens: this.deps.maxTokens,
55
+ });
56
+ totalInputTokens += response.inputTokens;
57
+ totalOutputTokens += response.outputTokens;
58
+ totalCacheRead += response.cacheReadTokens;
59
+ totalCacheWrite += response.cacheWriteTokens;
60
+ this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite);
61
+ if (!hasTools || response.toolCalls.length === 0) {
62
+ session.addAssistantMessage(response.parts);
63
+ return {
64
+ parts: response.parts,
65
+ inputTokens: totalInputTokens,
66
+ outputTokens: totalOutputTokens,
67
+ cacheReadTokens: totalCacheRead,
68
+ cacheWriteTokens: totalCacheWrite,
69
+ };
70
+ }
71
+ // Build assistant message with text + tool_use parts
72
+ const assistantParts = [...response.parts];
73
+ for (const tc of response.toolCalls) {
74
+ assistantParts.push({
75
+ type: "tool_use",
76
+ id: tc.id,
77
+ name: tc.name,
78
+ input: tc.input,
79
+ });
80
+ }
81
+ session.addAssistantMessage(assistantParts);
82
+ // Execute tools and build tool_result parts
83
+ const resultParts = [];
84
+ for (const tc of response.toolCalls) {
85
+ this.emitToolCalled(session.id, tc.name);
86
+ const startMs = Date.now();
87
+ try {
88
+ const result = await this.executeTool(tc);
89
+ const durationMs = Date.now() - startMs;
90
+ this.emitToolResult(session.id, tc.name, durationMs, true);
91
+ resultParts.push({
92
+ type: "tool_result",
93
+ toolUseId: tc.id,
94
+ content: typeof result === "string" ? result : JSON.stringify(result),
95
+ isError: false,
96
+ });
97
+ }
98
+ catch (err) {
99
+ const durationMs = Date.now() - startMs;
100
+ this.emitToolResult(session.id, tc.name, durationMs, false);
101
+ this.emitError(session.id, `Tool "${tc.name}" failed: ${err}`);
102
+ resultParts.push({
103
+ type: "tool_result",
104
+ toolUseId: tc.id,
105
+ content: `Error: ${err instanceof Error ? err.message : String(err)}`,
106
+ isError: true,
107
+ });
108
+ }
109
+ }
110
+ session.addUserMessage(resultParts);
111
+ }
112
+ // Safety: max rounds exceeded, return last available response
113
+ this.emitError(session.id, `Max tool rounds (${this.maxToolRounds}) exceeded`);
114
+ const finalMessages = [...session.conversationHistory];
115
+ const finalResponse = await this.deps.provider.createMessage({
116
+ system,
117
+ messages: finalMessages,
118
+ maxTokens: this.deps.maxTokens,
119
+ });
120
+ totalInputTokens += finalResponse.inputTokens;
121
+ totalOutputTokens += finalResponse.outputTokens;
122
+ totalCacheRead += finalResponse.cacheReadTokens;
123
+ totalCacheWrite += finalResponse.cacheWriteTokens;
124
+ this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite);
125
+ session.addAssistantMessage(finalResponse.parts);
126
+ return {
127
+ parts: finalResponse.parts,
128
+ inputTokens: totalInputTokens,
129
+ outputTokens: totalOutputTokens,
130
+ cacheReadTokens: totalCacheRead,
131
+ cacheWriteTokens: totalCacheWrite,
132
+ };
133
+ }
134
+ async executeTool(tc) {
135
+ // Check per-call builtin tools first, then dep-level builtins
136
+ const callBuiltin = this._callBuiltinTools?.get(tc.name);
137
+ if (callBuiltin)
138
+ return callBuiltin(tc.input);
139
+ const depBuiltin = this.deps.builtinTools?.get(tc.name);
140
+ if (depBuiltin)
141
+ return depBuiltin(tc.input);
142
+ // Fall back to MCP clients
143
+ if (this.deps.mcpClients) {
144
+ for (const client of this.deps.mcpClients) {
145
+ try {
146
+ return await client.executeTool(tc.name, tc.input);
147
+ }
148
+ catch {
149
+ continue;
150
+ }
151
+ }
152
+ }
153
+ throw new Error(`Tool "${tc.name}" not found`);
154
+ }
155
+ emitToolCalled(sessionId, toolName) {
156
+ const event = {
157
+ type: "tool_called",
158
+ toolName,
159
+ timestamp: new Date(),
160
+ sessionId,
161
+ };
162
+ this.deps.eventBus?.emit(event);
163
+ }
164
+ emitToolResult(sessionId, toolName, durationMs, success) {
165
+ const event = {
166
+ type: "tool_result",
167
+ toolName,
168
+ durationMs,
169
+ success,
170
+ timestamp: new Date(),
171
+ sessionId,
172
+ };
173
+ this.deps.eventBus?.emit(event);
174
+ }
175
+ computeTotalCostUsd(inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens) {
176
+ const pricing = this.resolvedPricing;
177
+ if (!pricing)
178
+ return 0;
179
+ const uncachedInput = Math.max(0, inputTokens - cacheReadTokens - cacheWriteTokens);
180
+ return ((uncachedInput * pricing.inputRate +
181
+ outputTokens * pricing.outputRate +
182
+ cacheReadTokens * pricing.inputRate * pricing.cacheReadMultiplier +
183
+ cacheWriteTokens * pricing.inputRate * pricing.cacheWriteMultiplier) /
184
+ 1_000_000);
185
+ }
186
+ get resolvedPricing() {
187
+ if (!this.deps.model)
188
+ return undefined;
189
+ const pricing = MODEL_PRICING.get(this.deps.model);
190
+ if (!pricing) {
191
+ console.warn(`[ModeBOrchestrator] Model "${this.deps.model}" not found in MODEL_PRICING -- cost will be $0. Add it to the pricing table or use a known model identifier.`);
192
+ }
193
+ return pricing;
194
+ }
195
+ emitCostUpdate(sessionId, inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens) {
196
+ const totalCostUsd = this.computeTotalCostUsd(inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens);
197
+ const model = this.deps.model ?? "unknown";
198
+ const event = {
199
+ type: "cost_update",
200
+ inputTokens,
201
+ outputTokens,
202
+ cacheReadTokens,
203
+ totalCostUsd,
204
+ byRole: {
205
+ assistant: { model, calls: 1, costUsd: totalCostUsd },
206
+ },
207
+ timestamp: new Date(),
208
+ sessionId,
209
+ };
210
+ this.deps.eventBus?.emit(event);
211
+ }
212
+ emitError(sessionId, message) {
213
+ const event = {
214
+ type: "error",
215
+ message,
216
+ code: "MODE_B_ERROR",
217
+ taskId: null,
218
+ timestamp: new Date(),
219
+ sessionId,
220
+ };
221
+ this.deps.eventBus?.emit(event);
222
+ }
223
+ }
224
+ //# sourceMappingURL=mode-b-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-orchestrator.js","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AgentMessage, ContentPart } from "@kilnai/core";
2
+ export interface ModeBSessionConfig {
3
+ readonly appName: string;
4
+ readonly tenantId?: string;
5
+ readonly userId: string;
6
+ readonly systemPrompt: string;
7
+ readonly idleTimeoutMs?: number;
8
+ }
9
+ export declare class ModeBSession {
10
+ readonly id: string;
11
+ readonly appName: string;
12
+ readonly tenantId: string | undefined;
13
+ readonly userId: string;
14
+ readonly createdAt: Date;
15
+ private _lastActivityAt;
16
+ private readonly _systemPrompt;
17
+ private readonly _idleTimeoutMs;
18
+ private readonly _history;
19
+ constructor(config: ModeBSessionConfig);
20
+ get lastActivityAt(): Date;
21
+ get isExpired(): boolean;
22
+ get messageCount(): number;
23
+ get conversationHistory(): readonly AgentMessage[];
24
+ get systemPrompt(): string;
25
+ addUserMessage(parts: readonly ContentPart[]): void;
26
+ addAssistantMessage(parts: readonly ContentPart[]): void;
27
+ touch(): void;
28
+ }
29
+ //# sourceMappingURL=mode-b-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-session.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;gBAEnC,MAAM,EAAE,kBAAkB;IAatC,IAAI,cAAc,IAAI,IAAI,CAEzB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,mBAAmB,IAAI,SAAS,YAAY,EAAE,CAEjD;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,cAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKnD,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKxD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,50 @@
1
+ export class ModeBSession {
2
+ id;
3
+ appName;
4
+ tenantId;
5
+ userId;
6
+ createdAt;
7
+ _lastActivityAt;
8
+ _systemPrompt;
9
+ _idleTimeoutMs;
10
+ _history = [];
11
+ constructor(config) {
12
+ this.appName = config.appName;
13
+ this.tenantId = config.tenantId;
14
+ this.userId = config.userId;
15
+ this._systemPrompt = config.systemPrompt;
16
+ this._idleTimeoutMs = config.idleTimeoutMs ?? 30 * 60 * 1000;
17
+ this.createdAt = new Date();
18
+ this._lastActivityAt = new Date();
19
+ this.id = config.tenantId
20
+ ? `${config.appName}:${config.tenantId}:${config.userId}:${Date.now()}`
21
+ : `${config.appName}:${config.userId}:${Date.now()}`;
22
+ }
23
+ get lastActivityAt() {
24
+ return this._lastActivityAt;
25
+ }
26
+ get isExpired() {
27
+ return Date.now() - this._lastActivityAt.getTime() > this._idleTimeoutMs;
28
+ }
29
+ get messageCount() {
30
+ return this._history.length;
31
+ }
32
+ get conversationHistory() {
33
+ return this._history;
34
+ }
35
+ get systemPrompt() {
36
+ return this._systemPrompt;
37
+ }
38
+ addUserMessage(parts) {
39
+ this._history.push({ role: "user", parts });
40
+ this.touch();
41
+ }
42
+ addAssistantMessage(parts) {
43
+ this._history.push({ role: "assistant", parts });
44
+ this.touch();
45
+ }
46
+ touch() {
47
+ this._lastActivityAt = new Date();
48
+ }
49
+ }
50
+ //# sourceMappingURL=mode-b-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-session.js","sourceRoot":"","sources":["../../src/session/mode-b-session.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,YAAY;IACd,EAAE,CAAS;IACX,OAAO,CAAS;IAChB,QAAQ,CAAqB;IAC7B,MAAM,CAAS;IACf,SAAS,CAAO;IAEjB,eAAe,CAAO;IACb,aAAa,CAAS;IACtB,cAAc,CAAS;IACvB,QAAQ,GAAmB,EAAE,CAAC;IAE/C,YAAY,MAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ;YACvB,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACvE,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;IAC3E,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,cAAc,CAAC,KAA6B;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,mBAAmB,CAAC,KAA6B;QAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { ModeBSession } from "./mode-b-session.js";
2
+ import type { ModeBSessionConfig } from "./mode-b-session.js";
3
+ export declare class SessionRegistry {
4
+ private readonly sessions;
5
+ private readonly defaultIdleTimeoutMs?;
6
+ constructor(defaultIdleTimeoutMs?: number);
7
+ getOrCreate(config: ModeBSessionConfig): ModeBSession;
8
+ get(appName: string, userId: string, tenantId?: string): ModeBSession | undefined;
9
+ remove(appName: string, userId: string, tenantId?: string): boolean;
10
+ activeCount(): number;
11
+ activeSessions(): readonly ModeBSession[];
12
+ cleanup(): number;
13
+ private sessionKey;
14
+ }
15
+ //# sourceMappingURL=session-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../../src/session/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;gBAEnC,oBAAoB,CAAC,EAAE,MAAM;IAIzC,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY;IAiBrD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKjF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAKnE,WAAW,IAAI,MAAM;IAQrB,cAAc,IAAI,SAAS,YAAY,EAAE;IAQzC,OAAO,IAAI,MAAM;IAWjB,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,60 @@
1
+ import { ModeBSession } from "./mode-b-session.js";
2
+ export class SessionRegistry {
3
+ sessions = new Map();
4
+ defaultIdleTimeoutMs;
5
+ constructor(defaultIdleTimeoutMs) {
6
+ this.defaultIdleTimeoutMs = defaultIdleTimeoutMs;
7
+ }
8
+ getOrCreate(config) {
9
+ this.cleanup();
10
+ const key = this.sessionKey(config.appName, config.userId, config.tenantId);
11
+ const existing = this.sessions.get(key);
12
+ if (existing && !existing.isExpired) {
13
+ return existing;
14
+ }
15
+ const sessionConfig = this.defaultIdleTimeoutMs !== undefined
16
+ ? { ...config, idleTimeoutMs: config.idleTimeoutMs ?? this.defaultIdleTimeoutMs }
17
+ : config;
18
+ const session = new ModeBSession(sessionConfig);
19
+ this.sessions.set(key, session);
20
+ return session;
21
+ }
22
+ get(appName, userId, tenantId) {
23
+ const key = this.sessionKey(appName, userId, tenantId);
24
+ return this.sessions.get(key);
25
+ }
26
+ remove(appName, userId, tenantId) {
27
+ const key = this.sessionKey(appName, userId, tenantId);
28
+ return this.sessions.delete(key);
29
+ }
30
+ activeCount() {
31
+ let count = 0;
32
+ for (const session of this.sessions.values()) {
33
+ if (!session.isExpired)
34
+ count++;
35
+ }
36
+ return count;
37
+ }
38
+ activeSessions() {
39
+ const active = [];
40
+ for (const session of this.sessions.values()) {
41
+ if (!session.isExpired)
42
+ active.push(session);
43
+ }
44
+ return active;
45
+ }
46
+ cleanup() {
47
+ let removed = 0;
48
+ for (const [key, session] of this.sessions) {
49
+ if (session.isExpired) {
50
+ this.sessions.delete(key);
51
+ removed++;
52
+ }
53
+ }
54
+ return removed;
55
+ }
56
+ sessionKey(appName, userId, tenantId) {
57
+ return tenantId ? `${appName}:${tenantId}:${userId}` : `${appName}:${userId}`;
58
+ }
59
+ }
60
+ //# sourceMappingURL=session-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/session/session-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { TenantRegistry, TenantNotFoundError, TenantValidationFailedError } from "./tenant-registry.js";
2
+ export { buildTenantSystemPrompt } from "./system-prompt-builder.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { TenantRegistry, TenantNotFoundError, TenantValidationFailedError } from "./tenant-registry.js";
2
+ export { buildTenantSystemPrompt } from "./system-prompt-builder.js";
3
+ //# sourceMappingURL=index.js.map