@methodts/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 (537) hide show
  1. package/dist/__fixtures__/executor-fixtures.d.ts +10 -0
  2. package/dist/__fixtures__/executor-fixtures.d.ts.map +1 -0
  3. package/dist/__fixtures__/executor-fixtures.js +36 -0
  4. package/dist/__fixtures__/executor-fixtures.js.map +1 -0
  5. package/dist/architecture.test.d.ts +2 -0
  6. package/dist/architecture.test.d.ts.map +1 -0
  7. package/dist/architecture.test.js +143 -0
  8. package/dist/architecture.test.js.map +1 -0
  9. package/dist/config/cost-governor-config.d.ts +40 -0
  10. package/dist/config/cost-governor-config.d.ts.map +1 -0
  11. package/dist/config/cost-governor-config.js +48 -0
  12. package/dist/config/cost-governor-config.js.map +1 -0
  13. package/dist/config/index.d.ts +7 -0
  14. package/dist/config/index.d.ts.map +1 -0
  15. package/dist/config/index.js +6 -0
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/config/sessions-config.d.ts +29 -0
  18. package/dist/config/sessions-config.d.ts.map +1 -0
  19. package/dist/config/sessions-config.js +37 -0
  20. package/dist/config/sessions-config.js.map +1 -0
  21. package/dist/config/strategies-config.d.ts +38 -0
  22. package/dist/config/strategies-config.d.ts.map +1 -0
  23. package/dist/config/strategies-config.js +41 -0
  24. package/dist/config/strategies-config.js.map +1 -0
  25. package/dist/cost-governor/backpressure-queue.d.ts +20 -0
  26. package/dist/cost-governor/backpressure-queue.d.ts.map +1 -0
  27. package/dist/cost-governor/backpressure-queue.js +78 -0
  28. package/dist/cost-governor/backpressure-queue.js.map +1 -0
  29. package/dist/cost-governor/backpressure-queue.test.d.ts +2 -0
  30. package/dist/cost-governor/backpressure-queue.test.d.ts.map +1 -0
  31. package/dist/cost-governor/backpressure-queue.test.js +48 -0
  32. package/dist/cost-governor/backpressure-queue.test.js.map +1 -0
  33. package/dist/cost-governor/cost-events.d.ts +65 -0
  34. package/dist/cost-governor/cost-events.d.ts.map +1 -0
  35. package/dist/cost-governor/cost-events.js +48 -0
  36. package/dist/cost-governor/cost-events.js.map +1 -0
  37. package/dist/cost-governor/cost-governor-app-id.test.d.ts +19 -0
  38. package/dist/cost-governor/cost-governor-app-id.test.d.ts.map +1 -0
  39. package/dist/cost-governor/cost-governor-app-id.test.js +201 -0
  40. package/dist/cost-governor/cost-governor-app-id.test.js.map +1 -0
  41. package/dist/cost-governor/cost-oracle-impl.d.ts +19 -0
  42. package/dist/cost-governor/cost-oracle-impl.d.ts.map +1 -0
  43. package/dist/cost-governor/cost-oracle-impl.js +52 -0
  44. package/dist/cost-governor/cost-oracle-impl.js.map +1 -0
  45. package/dist/cost-governor/estimator.d.ts +22 -0
  46. package/dist/cost-governor/estimator.d.ts.map +1 -0
  47. package/dist/cost-governor/estimator.js +119 -0
  48. package/dist/cost-governor/estimator.js.map +1 -0
  49. package/dist/cost-governor/estimator.test.d.ts +2 -0
  50. package/dist/cost-governor/estimator.test.d.ts.map +1 -0
  51. package/dist/cost-governor/estimator.test.js +141 -0
  52. package/dist/cost-governor/estimator.test.js.map +1 -0
  53. package/dist/cost-governor/index.d.ts +75 -0
  54. package/dist/cost-governor/index.d.ts.map +1 -0
  55. package/dist/cost-governor/index.js +120 -0
  56. package/dist/cost-governor/index.js.map +1 -0
  57. package/dist/cost-governor/observations-store.d.ts +49 -0
  58. package/dist/cost-governor/observations-store.d.ts.map +1 -0
  59. package/dist/cost-governor/observations-store.js +179 -0
  60. package/dist/cost-governor/observations-store.js.map +1 -0
  61. package/dist/cost-governor/observations-store.test.d.ts +2 -0
  62. package/dist/cost-governor/observations-store.test.d.ts.map +1 -0
  63. package/dist/cost-governor/observations-store.test.js +191 -0
  64. package/dist/cost-governor/observations-store.test.js.map +1 -0
  65. package/dist/cost-governor/percentile.d.ts +17 -0
  66. package/dist/cost-governor/percentile.d.ts.map +1 -0
  67. package/dist/cost-governor/percentile.js +33 -0
  68. package/dist/cost-governor/percentile.js.map +1 -0
  69. package/dist/cost-governor/percentile.test.d.ts +2 -0
  70. package/dist/cost-governor/percentile.test.d.ts.map +1 -0
  71. package/dist/cost-governor/percentile.test.js +46 -0
  72. package/dist/cost-governor/percentile.test.js.map +1 -0
  73. package/dist/cost-governor/rate-governor-impl.d.ts +73 -0
  74. package/dist/cost-governor/rate-governor-impl.d.ts.map +1 -0
  75. package/dist/cost-governor/rate-governor-impl.js +148 -0
  76. package/dist/cost-governor/rate-governor-impl.js.map +1 -0
  77. package/dist/cost-governor/signature-builder.d.ts +22 -0
  78. package/dist/cost-governor/signature-builder.d.ts.map +1 -0
  79. package/dist/cost-governor/signature-builder.js +43 -0
  80. package/dist/cost-governor/signature-builder.js.map +1 -0
  81. package/dist/cost-governor/signature-builder.test.d.ts +2 -0
  82. package/dist/cost-governor/signature-builder.test.d.ts.map +1 -0
  83. package/dist/cost-governor/signature-builder.test.js +58 -0
  84. package/dist/cost-governor/signature-builder.test.js.map +1 -0
  85. package/dist/cost-governor/token-bucket.d.ts +57 -0
  86. package/dist/cost-governor/token-bucket.d.ts.map +1 -0
  87. package/dist/cost-governor/token-bucket.js +109 -0
  88. package/dist/cost-governor/token-bucket.js.map +1 -0
  89. package/dist/cost-governor/token-bucket.test.d.ts +2 -0
  90. package/dist/cost-governor/token-bucket.test.d.ts.map +1 -0
  91. package/dist/cost-governor/token-bucket.test.js +67 -0
  92. package/dist/cost-governor/token-bucket.test.js.map +1 -0
  93. package/dist/dlq/cortex-dlq-observer.d.ts +22 -0
  94. package/dist/dlq/cortex-dlq-observer.d.ts.map +1 -0
  95. package/dist/dlq/cortex-dlq-observer.js +29 -0
  96. package/dist/dlq/cortex-dlq-observer.js.map +1 -0
  97. package/dist/dlq/dlq-observer.test.d.ts +8 -0
  98. package/dist/dlq/dlq-observer.test.d.ts.map +1 -0
  99. package/dist/dlq/dlq-observer.test.js +103 -0
  100. package/dist/dlq/dlq-observer.test.js.map +1 -0
  101. package/dist/dlq/index.d.ts +6 -0
  102. package/dist/dlq/index.d.ts.map +1 -0
  103. package/dist/dlq/index.js +6 -0
  104. package/dist/dlq/index.js.map +1 -0
  105. package/dist/event-bus/adapters.d.ts +50 -0
  106. package/dist/event-bus/adapters.d.ts.map +1 -0
  107. package/dist/event-bus/adapters.js +51 -0
  108. package/dist/event-bus/adapters.js.map +1 -0
  109. package/dist/event-bus/adapters.test.d.ts +5 -0
  110. package/dist/event-bus/adapters.test.d.ts.map +1 -0
  111. package/dist/event-bus/adapters.test.js +73 -0
  112. package/dist/event-bus/adapters.test.js.map +1 -0
  113. package/dist/event-bus/agent-event-adapter.d.ts +22 -0
  114. package/dist/event-bus/agent-event-adapter.d.ts.map +1 -0
  115. package/dist/event-bus/agent-event-adapter.js +49 -0
  116. package/dist/event-bus/agent-event-adapter.js.map +1 -0
  117. package/dist/event-bus/agent-event-adapter.test.d.ts +5 -0
  118. package/dist/event-bus/agent-event-adapter.test.d.ts.map +1 -0
  119. package/dist/event-bus/agent-event-adapter.test.js +170 -0
  120. package/dist/event-bus/agent-event-adapter.test.js.map +1 -0
  121. package/dist/event-bus/channel-sink.d.ts +71 -0
  122. package/dist/event-bus/channel-sink.d.ts.map +1 -0
  123. package/dist/event-bus/channel-sink.js +159 -0
  124. package/dist/event-bus/channel-sink.js.map +1 -0
  125. package/dist/event-bus/channel-sink.test.d.ts +5 -0
  126. package/dist/event-bus/channel-sink.test.d.ts.map +1 -0
  127. package/dist/event-bus/channel-sink.test.js +234 -0
  128. package/dist/event-bus/channel-sink.test.js.map +1 -0
  129. package/dist/event-bus/event-types.snapshot.test.d.ts +27 -0
  130. package/dist/event-bus/event-types.snapshot.test.d.ts.map +1 -0
  131. package/dist/event-bus/event-types.snapshot.test.js +165 -0
  132. package/dist/event-bus/event-types.snapshot.test.js.map +1 -0
  133. package/dist/event-bus/genesis-sink.d.ts +55 -0
  134. package/dist/event-bus/genesis-sink.d.ts.map +1 -0
  135. package/dist/event-bus/genesis-sink.js +141 -0
  136. package/dist/event-bus/genesis-sink.js.map +1 -0
  137. package/dist/event-bus/genesis-sink.test.d.ts +5 -0
  138. package/dist/event-bus/genesis-sink.test.d.ts.map +1 -0
  139. package/dist/event-bus/genesis-sink.test.js +160 -0
  140. package/dist/event-bus/genesis-sink.test.js.map +1 -0
  141. package/dist/event-bus/in-memory-event-bus.d.ts +60 -0
  142. package/dist/event-bus/in-memory-event-bus.d.ts.map +1 -0
  143. package/dist/event-bus/in-memory-event-bus.js +274 -0
  144. package/dist/event-bus/in-memory-event-bus.js.map +1 -0
  145. package/dist/event-bus/in-memory-event-bus.test.d.ts +5 -0
  146. package/dist/event-bus/in-memory-event-bus.test.d.ts.map +1 -0
  147. package/dist/event-bus/in-memory-event-bus.test.js +457 -0
  148. package/dist/event-bus/in-memory-event-bus.test.js.map +1 -0
  149. package/dist/event-bus/index.d.ts +22 -0
  150. package/dist/event-bus/index.d.ts.map +1 -0
  151. package/dist/event-bus/index.js +17 -0
  152. package/dist/event-bus/index.js.map +1 -0
  153. package/dist/event-bus/persistence-sink.d.ts +74 -0
  154. package/dist/event-bus/persistence-sink.d.ts.map +1 -0
  155. package/dist/event-bus/persistence-sink.js +193 -0
  156. package/dist/event-bus/persistence-sink.js.map +1 -0
  157. package/dist/event-bus/persistence-sink.test.d.ts +6 -0
  158. package/dist/event-bus/persistence-sink.test.d.ts.map +1 -0
  159. package/dist/event-bus/persistence-sink.test.js +319 -0
  160. package/dist/event-bus/persistence-sink.test.js.map +1 -0
  161. package/dist/event-bus/session-checkpoint-sink.d.ts +91 -0
  162. package/dist/event-bus/session-checkpoint-sink.d.ts.map +1 -0
  163. package/dist/event-bus/session-checkpoint-sink.js +107 -0
  164. package/dist/event-bus/session-checkpoint-sink.js.map +1 -0
  165. package/dist/event-bus/session-checkpoint-sink.test.d.ts +5 -0
  166. package/dist/event-bus/session-checkpoint-sink.test.d.ts.map +1 -0
  167. package/dist/event-bus/session-checkpoint-sink.test.js +215 -0
  168. package/dist/event-bus/session-checkpoint-sink.test.js.map +1 -0
  169. package/dist/event-bus/webhook-connector.d.ts +59 -0
  170. package/dist/event-bus/webhook-connector.d.ts.map +1 -0
  171. package/dist/event-bus/webhook-connector.js +191 -0
  172. package/dist/event-bus/webhook-connector.js.map +1 -0
  173. package/dist/event-bus/webhook-connector.test.d.ts +5 -0
  174. package/dist/event-bus/webhook-connector.test.d.ts.map +1 -0
  175. package/dist/event-bus/webhook-connector.test.js +214 -0
  176. package/dist/event-bus/webhook-connector.test.js.map +1 -0
  177. package/dist/executors/cortex-job-backed-executor.d.ts +137 -0
  178. package/dist/executors/cortex-job-backed-executor.d.ts.map +1 -0
  179. package/dist/executors/cortex-job-backed-executor.js +441 -0
  180. package/dist/executors/cortex-job-backed-executor.js.map +1 -0
  181. package/dist/executors/cortex-job-backed-executor.test.d.ts +13 -0
  182. package/dist/executors/cortex-job-backed-executor.test.d.ts.map +1 -0
  183. package/dist/executors/cortex-job-backed-executor.test.js +303 -0
  184. package/dist/executors/cortex-job-backed-executor.test.js.map +1 -0
  185. package/dist/executors/index.d.ts +9 -0
  186. package/dist/executors/index.d.ts.map +1 -0
  187. package/dist/executors/index.js +9 -0
  188. package/dist/executors/index.js.map +1 -0
  189. package/dist/index.d.ts +2 -0
  190. package/dist/index.d.ts.map +1 -0
  191. package/dist/index.js +13 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/ports/checkpoint-sink.d.ts +69 -0
  194. package/dist/ports/checkpoint-sink.d.ts.map +1 -0
  195. package/dist/ports/checkpoint-sink.js +16 -0
  196. package/dist/ports/checkpoint-sink.js.map +1 -0
  197. package/dist/ports/checkpoint.d.ts +68 -0
  198. package/dist/ports/checkpoint.d.ts.map +1 -0
  199. package/dist/ports/checkpoint.js +14 -0
  200. package/dist/ports/checkpoint.js.map +1 -0
  201. package/dist/ports/continuation-envelope-cross-app.test.d.ts +10 -0
  202. package/dist/ports/continuation-envelope-cross-app.test.d.ts.map +1 -0
  203. package/dist/ports/continuation-envelope-cross-app.test.js +95 -0
  204. package/dist/ports/continuation-envelope-cross-app.test.js.map +1 -0
  205. package/dist/ports/continuation-envelope.d.ts +199 -0
  206. package/dist/ports/continuation-envelope.d.ts.map +1 -0
  207. package/dist/ports/continuation-envelope.js +69 -0
  208. package/dist/ports/continuation-envelope.js.map +1 -0
  209. package/dist/ports/conversation.d.ts +64 -0
  210. package/dist/ports/conversation.d.ts.map +1 -0
  211. package/dist/ports/conversation.js +19 -0
  212. package/dist/ports/conversation.js.map +1 -0
  213. package/dist/ports/cost-oracle.d.ts +26 -0
  214. package/dist/ports/cost-oracle.d.ts.map +1 -0
  215. package/dist/ports/cost-oracle.js +9 -0
  216. package/dist/ports/cost-oracle.js.map +1 -0
  217. package/dist/ports/cross-app-invoker.d.ts +198 -0
  218. package/dist/ports/cross-app-invoker.d.ts.map +1 -0
  219. package/dist/ports/cross-app-invoker.js +157 -0
  220. package/dist/ports/cross-app-invoker.js.map +1 -0
  221. package/dist/ports/dlq-observer.d.ts +40 -0
  222. package/dist/ports/dlq-observer.d.ts.map +1 -0
  223. package/dist/ports/dlq-observer.js +20 -0
  224. package/dist/ports/dlq-observer.js.map +1 -0
  225. package/dist/ports/event-bus.d.ts +169 -0
  226. package/dist/ports/event-bus.d.ts.map +1 -0
  227. package/dist/ports/event-bus.js +20 -0
  228. package/dist/ports/event-bus.js.map +1 -0
  229. package/dist/ports/event-reader.d.ts +21 -0
  230. package/dist/ports/event-reader.d.ts.map +1 -0
  231. package/dist/ports/event-reader.js +12 -0
  232. package/dist/ports/event-reader.js.map +1 -0
  233. package/dist/ports/event-rotator.d.ts +39 -0
  234. package/dist/ports/event-rotator.d.ts.map +1 -0
  235. package/dist/ports/event-rotator.js +15 -0
  236. package/dist/ports/event-rotator.js.map +1 -0
  237. package/dist/ports/file-system.d.ts +48 -0
  238. package/dist/ports/file-system.d.ts.map +1 -0
  239. package/dist/ports/file-system.js +10 -0
  240. package/dist/ports/file-system.js.map +1 -0
  241. package/dist/ports/historical-observations.d.ts +39 -0
  242. package/dist/ports/historical-observations.d.ts.map +1 -0
  243. package/dist/ports/historical-observations.js +12 -0
  244. package/dist/ports/historical-observations.js.map +1 -0
  245. package/dist/ports/in-memory-source.d.ts +46 -0
  246. package/dist/ports/in-memory-source.d.ts.map +1 -0
  247. package/dist/ports/in-memory-source.js +69 -0
  248. package/dist/ports/in-memory-source.js.map +1 -0
  249. package/dist/ports/index.d.ts +32 -0
  250. package/dist/ports/index.d.ts.map +1 -0
  251. package/dist/ports/index.js +10 -0
  252. package/dist/ports/index.js.map +1 -0
  253. package/dist/ports/job-backed-executor.d.ts +139 -0
  254. package/dist/ports/job-backed-executor.d.ts.map +1 -0
  255. package/dist/ports/job-backed-executor.js +56 -0
  256. package/dist/ports/job-backed-executor.js.map +1 -0
  257. package/dist/ports/methodology-source.d.ts +95 -0
  258. package/dist/ports/methodology-source.d.ts.map +1 -0
  259. package/dist/ports/methodology-source.js +26 -0
  260. package/dist/ports/methodology-source.js.map +1 -0
  261. package/dist/ports/native-session-discovery.d.ts +20 -0
  262. package/dist/ports/native-session-discovery.d.ts.map +1 -0
  263. package/dist/ports/native-session-discovery.js +13 -0
  264. package/dist/ports/native-session-discovery.js.map +1 -0
  265. package/dist/ports/projection-store.d.ts +48 -0
  266. package/dist/ports/projection-store.d.ts.map +1 -0
  267. package/dist/ports/projection-store.js +17 -0
  268. package/dist/ports/projection-store.js.map +1 -0
  269. package/dist/ports/projection.d.ts +29 -0
  270. package/dist/ports/projection.d.ts.map +1 -0
  271. package/dist/ports/projection.js +13 -0
  272. package/dist/ports/projection.js.map +1 -0
  273. package/dist/ports/rate-governor.d.ts +17 -0
  274. package/dist/ports/rate-governor.d.ts.map +1 -0
  275. package/dist/ports/rate-governor.js +11 -0
  276. package/dist/ports/rate-governor.js.map +1 -0
  277. package/dist/ports/schedule-client.d.ts +29 -0
  278. package/dist/ports/schedule-client.d.ts.map +1 -0
  279. package/dist/ports/schedule-client.js +2 -0
  280. package/dist/ports/schedule-client.js.map +1 -0
  281. package/dist/ports/session-pool.d.ts +162 -0
  282. package/dist/ports/session-pool.d.ts.map +1 -0
  283. package/dist/ports/session-pool.js +21 -0
  284. package/dist/ports/session-pool.js.map +1 -0
  285. package/dist/ports/session-store-errors.d.ts +22 -0
  286. package/dist/ports/session-store-errors.d.ts.map +1 -0
  287. package/dist/ports/session-store-errors.js +29 -0
  288. package/dist/ports/session-store-errors.js.map +1 -0
  289. package/dist/ports/session-store-types.d.ts +132 -0
  290. package/dist/ports/session-store-types.d.ts.map +1 -0
  291. package/dist/ports/session-store-types.js +14 -0
  292. package/dist/ports/session-store-types.js.map +1 -0
  293. package/dist/ports/session-store.d.ts +69 -0
  294. package/dist/ports/session-store.d.ts.map +1 -0
  295. package/dist/ports/session-store.js +23 -0
  296. package/dist/ports/session-store.js.map +1 -0
  297. package/dist/ports/yaml-loader.d.ts +15 -0
  298. package/dist/ports/yaml-loader.d.ts.map +1 -0
  299. package/dist/ports/yaml-loader.js +13 -0
  300. package/dist/ports/yaml-loader.js.map +1 -0
  301. package/dist/scheduling/index.d.ts +6 -0
  302. package/dist/scheduling/index.d.ts.map +1 -0
  303. package/dist/scheduling/index.js +6 -0
  304. package/dist/scheduling/index.js.map +1 -0
  305. package/dist/scheduling/scheduled-pact.d.ts +97 -0
  306. package/dist/scheduling/scheduled-pact.d.ts.map +1 -0
  307. package/dist/scheduling/scheduled-pact.js +89 -0
  308. package/dist/scheduling/scheduled-pact.js.map +1 -0
  309. package/dist/sessions/__tests__/cognitive-modules.test.d.ts +10 -0
  310. package/dist/sessions/__tests__/cognitive-modules.test.d.ts.map +1 -0
  311. package/dist/sessions/__tests__/cognitive-modules.test.js +535 -0
  312. package/dist/sessions/__tests__/cognitive-modules.test.js.map +1 -0
  313. package/dist/sessions/__tests__/cognitive-provider.test.d.ts +13 -0
  314. package/dist/sessions/__tests__/cognitive-provider.test.d.ts.map +1 -0
  315. package/dist/sessions/__tests__/cognitive-provider.test.js +331 -0
  316. package/dist/sessions/__tests__/cognitive-provider.test.js.map +1 -0
  317. package/dist/sessions/__tests__/cognitive-sink.test.d.ts +19 -0
  318. package/dist/sessions/__tests__/cognitive-sink.test.d.ts.map +1 -0
  319. package/dist/sessions/__tests__/cognitive-sink.test.js +334 -0
  320. package/dist/sessions/__tests__/cognitive-sink.test.js.map +1 -0
  321. package/dist/sessions/__tests__/runtime-tools.test.d.ts +2 -0
  322. package/dist/sessions/__tests__/runtime-tools.test.d.ts.map +1 -0
  323. package/dist/sessions/__tests__/runtime-tools.test.js +83 -0
  324. package/dist/sessions/__tests__/runtime-tools.test.js.map +1 -0
  325. package/dist/sessions/auto-retro.d.ts +29 -0
  326. package/dist/sessions/auto-retro.d.ts.map +1 -0
  327. package/dist/sessions/auto-retro.js +181 -0
  328. package/dist/sessions/auto-retro.js.map +1 -0
  329. package/dist/sessions/auto-retro.test.d.ts +2 -0
  330. package/dist/sessions/auto-retro.test.d.ts.map +1 -0
  331. package/dist/sessions/auto-retro.test.js +361 -0
  332. package/dist/sessions/auto-retro.test.js.map +1 -0
  333. package/dist/sessions/channels.d.ts +55 -0
  334. package/dist/sessions/channels.d.ts.map +1 -0
  335. package/dist/sessions/channels.js +118 -0
  336. package/dist/sessions/channels.js.map +1 -0
  337. package/dist/sessions/channels.test.d.ts +2 -0
  338. package/dist/sessions/channels.test.d.ts.map +1 -0
  339. package/dist/sessions/channels.test.js +285 -0
  340. package/dist/sessions/channels.test.js.map +1 -0
  341. package/dist/sessions/cognitive-modules.d.ts +100 -0
  342. package/dist/sessions/cognitive-modules.d.ts.map +1 -0
  343. package/dist/sessions/cognitive-modules.js +458 -0
  344. package/dist/sessions/cognitive-modules.js.map +1 -0
  345. package/dist/sessions/cognitive-provider.d.ts +42 -0
  346. package/dist/sessions/cognitive-provider.d.ts.map +1 -0
  347. package/dist/sessions/cognitive-provider.js +208 -0
  348. package/dist/sessions/cognitive-provider.js.map +1 -0
  349. package/dist/sessions/cognitive-sink.d.ts +73 -0
  350. package/dist/sessions/cognitive-sink.d.ts.map +1 -0
  351. package/dist/sessions/cognitive-sink.js +154 -0
  352. package/dist/sessions/cognitive-sink.js.map +1 -0
  353. package/dist/sessions/diagnostics.d.ts +70 -0
  354. package/dist/sessions/diagnostics.d.ts.map +1 -0
  355. package/dist/sessions/diagnostics.js +129 -0
  356. package/dist/sessions/diagnostics.js.map +1 -0
  357. package/dist/sessions/diagnostics.test.d.ts +2 -0
  358. package/dist/sessions/diagnostics.test.d.ts.map +1 -0
  359. package/dist/sessions/diagnostics.test.js +135 -0
  360. package/dist/sessions/diagnostics.test.js.map +1 -0
  361. package/dist/sessions/index.d.ts +32 -0
  362. package/dist/sessions/index.d.ts.map +1 -0
  363. package/dist/sessions/index.js +33 -0
  364. package/dist/sessions/index.js.map +1 -0
  365. package/dist/sessions/pool.d.ts +218 -0
  366. package/dist/sessions/pool.d.ts.map +1 -0
  367. package/dist/sessions/pool.js +991 -0
  368. package/dist/sessions/pool.js.map +1 -0
  369. package/dist/sessions/pool.test.d.ts +2 -0
  370. package/dist/sessions/pool.test.d.ts.map +1 -0
  371. package/dist/sessions/pool.test.js +633 -0
  372. package/dist/sessions/pool.test.js.map +1 -0
  373. package/dist/sessions/print-session.d.ts +142 -0
  374. package/dist/sessions/print-session.d.ts.map +1 -0
  375. package/dist/sessions/print-session.js +325 -0
  376. package/dist/sessions/print-session.js.map +1 -0
  377. package/dist/sessions/print-session.test.d.ts +2 -0
  378. package/dist/sessions/print-session.test.d.ts.map +1 -0
  379. package/dist/sessions/print-session.test.js +418 -0
  380. package/dist/sessions/print-session.test.js.map +1 -0
  381. package/dist/sessions/runtime-tools.d.ts +22 -0
  382. package/dist/sessions/runtime-tools.d.ts.map +1 -0
  383. package/dist/sessions/runtime-tools.js +162 -0
  384. package/dist/sessions/runtime-tools.js.map +1 -0
  385. package/dist/sessions/scope-hook.d.ts +77 -0
  386. package/dist/sessions/scope-hook.d.ts.map +1 -0
  387. package/dist/sessions/scope-hook.js +323 -0
  388. package/dist/sessions/scope-hook.js.map +1 -0
  389. package/dist/sessions/scope-hook.test.d.ts +2 -0
  390. package/dist/sessions/scope-hook.test.d.ts.map +1 -0
  391. package/dist/sessions/scope-hook.test.js +249 -0
  392. package/dist/sessions/scope-hook.test.js.map +1 -0
  393. package/dist/sessions/session-store/checkpoint-sink-impl.d.ts +16 -0
  394. package/dist/sessions/session-store/checkpoint-sink-impl.d.ts.map +1 -0
  395. package/dist/sessions/session-store/checkpoint-sink-impl.js +191 -0
  396. package/dist/sessions/session-store/checkpoint-sink-impl.js.map +1 -0
  397. package/dist/sessions/session-store/checkpoint-sink-impl.test.d.ts +5 -0
  398. package/dist/sessions/session-store/checkpoint-sink-impl.test.d.ts.map +1 -0
  399. package/dist/sessions/session-store/checkpoint-sink-impl.test.js +137 -0
  400. package/dist/sessions/session-store/checkpoint-sink-impl.test.js.map +1 -0
  401. package/dist/sessions/session-store/conformance.d.ts +59 -0
  402. package/dist/sessions/session-store/conformance.d.ts.map +1 -0
  403. package/dist/sessions/session-store/conformance.js +172 -0
  404. package/dist/sessions/session-store/conformance.js.map +1 -0
  405. package/dist/sessions/session-store/conformance.test.d.ts +7 -0
  406. package/dist/sessions/session-store/conformance.test.d.ts.map +1 -0
  407. package/dist/sessions/session-store/conformance.test.js +22 -0
  408. package/dist/sessions/session-store/conformance.test.js.map +1 -0
  409. package/dist/sessions/session-store/in-memory-session-store.d.ts +23 -0
  410. package/dist/sessions/session-store/in-memory-session-store.d.ts.map +1 -0
  411. package/dist/sessions/session-store/in-memory-session-store.js +197 -0
  412. package/dist/sessions/session-store/in-memory-session-store.js.map +1 -0
  413. package/dist/sessions/session-store/in-memory-session-store.test.d.ts +6 -0
  414. package/dist/sessions/session-store/in-memory-session-store.test.d.ts.map +1 -0
  415. package/dist/sessions/session-store/in-memory-session-store.test.js +183 -0
  416. package/dist/sessions/session-store/in-memory-session-store.test.js.map +1 -0
  417. package/dist/sessions/session-store/index.d.ts +20 -0
  418. package/dist/sessions/session-store/index.d.ts.map +1 -0
  419. package/dist/sessions/session-store/index.js +15 -0
  420. package/dist/sessions/session-store/index.js.map +1 -0
  421. package/dist/sessions/session-store/resume.d.ts +88 -0
  422. package/dist/sessions/session-store/resume.d.ts.map +1 -0
  423. package/dist/sessions/session-store/resume.js +96 -0
  424. package/dist/sessions/session-store/resume.js.map +1 -0
  425. package/dist/sessions/session-store/resume.test.d.ts +5 -0
  426. package/dist/sessions/session-store/resume.test.d.ts.map +1 -0
  427. package/dist/sessions/session-store/resume.test.js +119 -0
  428. package/dist/sessions/session-store/resume.test.js.map +1 -0
  429. package/dist/sessions/spawn-queue.d.ts +28 -0
  430. package/dist/sessions/spawn-queue.d.ts.map +1 -0
  431. package/dist/sessions/spawn-queue.js +63 -0
  432. package/dist/sessions/spawn-queue.js.map +1 -0
  433. package/dist/sessions/spawn-queue.test.d.ts +2 -0
  434. package/dist/sessions/spawn-queue.test.d.ts.map +1 -0
  435. package/dist/sessions/spawn-queue.test.js +65 -0
  436. package/dist/sessions/spawn-queue.test.js.map +1 -0
  437. package/dist/sessions/types.d.ts +16 -0
  438. package/dist/sessions/types.d.ts.map +1 -0
  439. package/dist/sessions/types.js +11 -0
  440. package/dist/sessions/types.js.map +1 -0
  441. package/dist/sessions/worktree-stale.test.d.ts +2 -0
  442. package/dist/sessions/worktree-stale.test.d.ts.map +1 -0
  443. package/dist/sessions/worktree-stale.test.js +468 -0
  444. package/dist/sessions/worktree-stale.test.js.map +1 -0
  445. package/dist/strategy/artifact-store.d.ts +12 -0
  446. package/dist/strategy/artifact-store.d.ts.map +1 -0
  447. package/dist/strategy/artifact-store.js +12 -0
  448. package/dist/strategy/artifact-store.js.map +1 -0
  449. package/dist/strategy/artifact-store.test.d.ts +2 -0
  450. package/dist/strategy/artifact-store.test.d.ts.map +1 -0
  451. package/dist/strategy/artifact-store.test.js +170 -0
  452. package/dist/strategy/artifact-store.test.js.map +1 -0
  453. package/dist/strategy/context-load-executor.d.ts +23 -0
  454. package/dist/strategy/context-load-executor.d.ts.map +1 -0
  455. package/dist/strategy/context-load-executor.js +87 -0
  456. package/dist/strategy/context-load-executor.js.map +1 -0
  457. package/dist/strategy/context-load-executor.test.d.ts +16 -0
  458. package/dist/strategy/context-load-executor.test.d.ts.map +1 -0
  459. package/dist/strategy/context-load-executor.test.js +158 -0
  460. package/dist/strategy/context-load-executor.test.js.map +1 -0
  461. package/dist/strategy/cortex-cross-app-invoker.stub.d.ts +65 -0
  462. package/dist/strategy/cortex-cross-app-invoker.stub.d.ts.map +1 -0
  463. package/dist/strategy/cortex-cross-app-invoker.stub.js +68 -0
  464. package/dist/strategy/cortex-cross-app-invoker.stub.js.map +1 -0
  465. package/dist/strategy/cross-app-node-executor.d.ts +54 -0
  466. package/dist/strategy/cross-app-node-executor.d.ts.map +1 -0
  467. package/dist/strategy/cross-app-node-executor.js +98 -0
  468. package/dist/strategy/cross-app-node-executor.js.map +1 -0
  469. package/dist/strategy/cross-app-node-executor.test.d.ts +13 -0
  470. package/dist/strategy/cross-app-node-executor.test.d.ts.map +1 -0
  471. package/dist/strategy/cross-app-node-executor.test.js +160 -0
  472. package/dist/strategy/cross-app-node-executor.test.js.map +1 -0
  473. package/dist/strategy/gates.d.ts +13 -0
  474. package/dist/strategy/gates.d.ts.map +1 -0
  475. package/dist/strategy/gates.js +13 -0
  476. package/dist/strategy/gates.js.map +1 -0
  477. package/dist/strategy/gates.test.d.ts +2 -0
  478. package/dist/strategy/gates.test.d.ts.map +1 -0
  479. package/dist/strategy/gates.test.js +299 -0
  480. package/dist/strategy/gates.test.js.map +1 -0
  481. package/dist/strategy/human-approval-resolver.d.ts +23 -0
  482. package/dist/strategy/human-approval-resolver.d.ts.map +1 -0
  483. package/dist/strategy/human-approval-resolver.js +94 -0
  484. package/dist/strategy/human-approval-resolver.js.map +1 -0
  485. package/dist/strategy/human-approval-resolver.test.d.ts +16 -0
  486. package/dist/strategy/human-approval-resolver.test.d.ts.map +1 -0
  487. package/dist/strategy/human-approval-resolver.test.js +200 -0
  488. package/dist/strategy/human-approval-resolver.test.js.map +1 -0
  489. package/dist/strategy/in-process-cross-app-invoker.d.ts +105 -0
  490. package/dist/strategy/in-process-cross-app-invoker.d.ts.map +1 -0
  491. package/dist/strategy/in-process-cross-app-invoker.js +206 -0
  492. package/dist/strategy/in-process-cross-app-invoker.js.map +1 -0
  493. package/dist/strategy/in-process-cross-app-invoker.test.d.ts +15 -0
  494. package/dist/strategy/in-process-cross-app-invoker.test.d.ts.map +1 -0
  495. package/dist/strategy/in-process-cross-app-invoker.test.js +190 -0
  496. package/dist/strategy/in-process-cross-app-invoker.test.js.map +1 -0
  497. package/dist/strategy/index.d.ts +29 -0
  498. package/dist/strategy/index.d.ts.map +1 -0
  499. package/dist/strategy/index.js +29 -0
  500. package/dist/strategy/index.js.map +1 -0
  501. package/dist/strategy/pacta-strategy.d.ts +97 -0
  502. package/dist/strategy/pacta-strategy.d.ts.map +1 -0
  503. package/dist/strategy/pacta-strategy.js +117 -0
  504. package/dist/strategy/pacta-strategy.js.map +1 -0
  505. package/dist/strategy/pacta-strategy.test.d.ts +2 -0
  506. package/dist/strategy/pacta-strategy.test.d.ts.map +1 -0
  507. package/dist/strategy/pacta-strategy.test.js +234 -0
  508. package/dist/strategy/pacta-strategy.test.js.map +1 -0
  509. package/dist/strategy/retro-generator.d.ts +18 -0
  510. package/dist/strategy/retro-generator.d.ts.map +1 -0
  511. package/dist/strategy/retro-generator.js +22 -0
  512. package/dist/strategy/retro-generator.js.map +1 -0
  513. package/dist/strategy/retro-writer.d.ts +25 -0
  514. package/dist/strategy/retro-writer.d.ts.map +1 -0
  515. package/dist/strategy/retro-writer.js +65 -0
  516. package/dist/strategy/retro-writer.js.map +1 -0
  517. package/dist/strategy/strategy-executor.d.ts +39 -0
  518. package/dist/strategy/strategy-executor.d.ts.map +1 -0
  519. package/dist/strategy/strategy-executor.js +253 -0
  520. package/dist/strategy/strategy-executor.js.map +1 -0
  521. package/dist/strategy/strategy-executor.test.d.ts +8 -0
  522. package/dist/strategy/strategy-executor.test.d.ts.map +1 -0
  523. package/dist/strategy/strategy-executor.test.js +1301 -0
  524. package/dist/strategy/strategy-executor.test.js.map +1 -0
  525. package/dist/strategy/strategy-parser.d.ts +30 -0
  526. package/dist/strategy/strategy-parser.d.ts.map +1 -0
  527. package/dist/strategy/strategy-parser.js +30 -0
  528. package/dist/strategy/strategy-parser.js.map +1 -0
  529. package/dist/strategy/sub-strategy-source.d.ts +27 -0
  530. package/dist/strategy/sub-strategy-source.d.ts.map +1 -0
  531. package/dist/strategy/sub-strategy-source.js +77 -0
  532. package/dist/strategy/sub-strategy-source.js.map +1 -0
  533. package/dist/strategy/types.d.ts +12 -0
  534. package/dist/strategy/types.d.ts.map +1 -0
  535. package/dist/strategy/types.js +9 -0
  536. package/dist/strategy/types.js.map +1 -0
  537. package/package.json +87 -0
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { describe, it } from 'node:test';
3
+ import assert from 'node:assert/strict';
4
+ import { buildSignature, inputSizeBucket, signatureKey } from './signature-builder.js';
5
+ describe('inputSizeBucket', () => {
6
+ it('xs for < 1000 chars', () => assert.equal(inputSizeBucket(500), 'xs'));
7
+ it('s for < 10000 chars', () => assert.equal(inputSizeBucket(5000), 's'));
8
+ it('m for < 100000 chars', () => assert.equal(inputSizeBucket(50000), 'm'));
9
+ it('l for < 1000000 chars', () => assert.equal(inputSizeBucket(500000), 'l'));
10
+ it('xl for >= 1000000 chars', () => assert.equal(inputSizeBucket(1500000), 'xl'));
11
+ it('boundary: exactly 1000 is s', () => assert.equal(inputSizeBucket(1000), 's'));
12
+ it('boundary: exactly 0 is xs', () => assert.equal(inputSizeBucket(0), 'xs'));
13
+ });
14
+ describe('buildSignature', () => {
15
+ it('produces deterministic output', () => {
16
+ const a = buildSignature({
17
+ methodologyId: 'P2-SD',
18
+ capabilities: ['write', 'read', 'analyze'],
19
+ model: 'claude-opus-4-6',
20
+ promptCharCount: 5000,
21
+ });
22
+ const b = buildSignature({
23
+ methodologyId: 'P2-SD',
24
+ capabilities: ['analyze', 'read', 'write'], // different order
25
+ model: 'claude-opus-4-6',
26
+ promptCharCount: 5000,
27
+ });
28
+ // Capabilities should be sorted
29
+ assert.deepEqual(a.capabilities, ['analyze', 'read', 'write']);
30
+ assert.deepEqual(a, b);
31
+ });
32
+ it('maps promptCharCount to correct bucket', () => {
33
+ const sig = buildSignature({
34
+ methodologyId: 'test',
35
+ capabilities: [],
36
+ model: 'test-model',
37
+ promptCharCount: 150_000,
38
+ });
39
+ assert.equal(sig.inputSizeBucket, 'l');
40
+ });
41
+ });
42
+ describe('signatureKey', () => {
43
+ it('produces stable key', () => {
44
+ const sig = buildSignature({
45
+ methodologyId: 'P2-SD',
46
+ capabilities: ['b', 'a'],
47
+ model: 'opus',
48
+ promptCharCount: 100,
49
+ });
50
+ assert.equal(signatureKey(sig), 'P2-SD|a,b|opus|xs');
51
+ });
52
+ it('different signatures produce different keys', () => {
53
+ const a = buildSignature({ methodologyId: 'A', capabilities: [], model: 'x', promptCharCount: 0 });
54
+ const b = buildSignature({ methodologyId: 'B', capabilities: [], model: 'x', promptCharCount: 0 });
55
+ assert.notEqual(signatureKey(a), signatureKey(b));
56
+ });
57
+ });
58
+ //# sourceMappingURL=signature-builder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-builder.test.js","sourceRoot":"","sources":["../../src/cost-governor/signature-builder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Token Bucket — monotonic-clock-based rate limiter.
3
+ *
4
+ * Supports a 5h burst window + weekly cap + concurrency cap.
5
+ * Uses process.hrtime.bigint() for elapsed-time math to avoid
6
+ * wall-clock drift from system sleep.
7
+ */
8
+ export interface TokenBucketConfig {
9
+ /** Max messages in the burst window. */
10
+ burstCapacity: number;
11
+ /** Burst window duration in ms (default: 5h = 18_000_000). */
12
+ burstWindowMs?: number;
13
+ /** Max messages per week (0 = unlimited). */
14
+ weeklyCap?: number;
15
+ /** Max concurrent in-flight slots. */
16
+ concurrentCap: number;
17
+ }
18
+ export declare class TokenBucket {
19
+ private burstConsumed;
20
+ private weeklyConsumed;
21
+ private inFlight;
22
+ private lastRefillNs;
23
+ private weekStartMs;
24
+ readonly burstCapacity: number;
25
+ readonly burstWindowMs: number;
26
+ readonly weeklyCap: number;
27
+ readonly concurrentCap: number;
28
+ /** Messages per nanosecond refill rate. */
29
+ private readonly refillRatePerNs;
30
+ constructor(config: TokenBucketConfig);
31
+ /** Refill burst tokens based on elapsed monotonic time. */
32
+ refill(): void;
33
+ /** Try to consume one slot. Returns true if allowed. */
34
+ tryConsume(): boolean;
35
+ /** Release one in-flight slot. */
36
+ release(): void;
37
+ /** Current available burst tokens (after refill). */
38
+ available(): number;
39
+ /** Snapshot for persistence / debugging. */
40
+ snapshot(): TokenBucketSnapshot;
41
+ /** Restore from a persisted snapshot, clamping by elapsed time. */
42
+ restore(snap: TokenBucketSnapshot): void;
43
+ /** Utilization percentages. */
44
+ utilization(): {
45
+ burstPct: number;
46
+ weeklyPct: number;
47
+ inFlight: number;
48
+ };
49
+ }
50
+ export interface TokenBucketSnapshot {
51
+ burstConsumed: number;
52
+ weeklyConsumed: number;
53
+ inFlight: number;
54
+ weekStartMs: number;
55
+ lastRefillEpochMs: number;
56
+ }
57
+ //# sourceMappingURL=token-bucket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-bucket.d.ts","sourceRoot":"","sources":["../../src/cost-governor/token-bucket.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAE5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,MAAM,EAAE,iBAAiB;IAYrC,2DAA2D;IAC3D,MAAM,IAAI,IAAI;IA4Bd,wDAAwD;IACxD,UAAU,IAAI,OAAO;IAarB,kCAAkC;IAClC,OAAO,IAAI,IAAI;IAIf,qDAAqD;IACrD,SAAS,IAAI,MAAM;IAKnB,4CAA4C;IAC5C,QAAQ,IAAI,mBAAmB;IAU/B,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAYxC,+BAA+B;IAC/B,WAAW,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAYzE;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,109 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Token Bucket — monotonic-clock-based rate limiter.
4
+ *
5
+ * Supports a 5h burst window + weekly cap + concurrency cap.
6
+ * Uses process.hrtime.bigint() for elapsed-time math to avoid
7
+ * wall-clock drift from system sleep.
8
+ */
9
+ export class TokenBucket {
10
+ burstConsumed = 0;
11
+ weeklyConsumed = 0;
12
+ inFlight = 0;
13
+ lastRefillNs;
14
+ weekStartMs;
15
+ burstCapacity;
16
+ burstWindowMs;
17
+ weeklyCap;
18
+ concurrentCap;
19
+ /** Messages per nanosecond refill rate. */
20
+ refillRatePerNs;
21
+ constructor(config) {
22
+ this.burstCapacity = config.burstCapacity;
23
+ this.burstWindowMs = config.burstWindowMs ?? 18_000_000; // 5h
24
+ this.weeklyCap = config.weeklyCap ?? 0;
25
+ this.concurrentCap = config.concurrentCap;
26
+ this.refillRatePerNs =
27
+ this.burstCapacity / (this.burstWindowMs * 1_000_000);
28
+ this.lastRefillNs = process.hrtime.bigint();
29
+ this.weekStartMs = Date.now();
30
+ }
31
+ /** Refill burst tokens based on elapsed monotonic time. */
32
+ refill() {
33
+ const now = process.hrtime.bigint();
34
+ const elapsedNs = now - this.lastRefillNs;
35
+ // Resume-from-sleep detection: elapsed > 5min → conservative 50% reset
36
+ const elapsedMs = Number(elapsedNs) / 1_000_000;
37
+ if (elapsedMs > 300_000) {
38
+ this.burstConsumed = Math.floor(this.burstCapacity * 0.5);
39
+ this.lastRefillNs = now;
40
+ return;
41
+ }
42
+ const refilled = Math.min(Number(elapsedNs) * this.refillRatePerNs, this.burstConsumed);
43
+ this.burstConsumed = Math.max(0, this.burstConsumed - Math.floor(refilled));
44
+ this.lastRefillNs = now;
45
+ // Weekly reset check (wall clock — only for week boundary)
46
+ const weekElapsedMs = Date.now() - this.weekStartMs;
47
+ if (weekElapsedMs >= 7 * 24 * 60 * 60 * 1000) {
48
+ this.weeklyConsumed = 0;
49
+ this.weekStartMs = Date.now();
50
+ }
51
+ }
52
+ /** Try to consume one slot. Returns true if allowed. */
53
+ tryConsume() {
54
+ this.refill();
55
+ if (this.inFlight >= this.concurrentCap)
56
+ return false;
57
+ if (this.burstConsumed >= this.burstCapacity)
58
+ return false;
59
+ if (this.weeklyCap > 0 && this.weeklyConsumed >= this.weeklyCap)
60
+ return false;
61
+ this.burstConsumed++;
62
+ this.weeklyConsumed++;
63
+ this.inFlight++;
64
+ return true;
65
+ }
66
+ /** Release one in-flight slot. */
67
+ release() {
68
+ this.inFlight = Math.max(0, this.inFlight - 1);
69
+ }
70
+ /** Current available burst tokens (after refill). */
71
+ available() {
72
+ this.refill();
73
+ return Math.max(0, this.burstCapacity - this.burstConsumed);
74
+ }
75
+ /** Snapshot for persistence / debugging. */
76
+ snapshot() {
77
+ return {
78
+ burstConsumed: this.burstConsumed,
79
+ weeklyConsumed: this.weeklyConsumed,
80
+ inFlight: this.inFlight,
81
+ weekStartMs: this.weekStartMs,
82
+ lastRefillEpochMs: Date.now(),
83
+ };
84
+ }
85
+ /** Restore from a persisted snapshot, clamping by elapsed time. */
86
+ restore(snap) {
87
+ const elapsedMs = Date.now() - snap.lastRefillEpochMs;
88
+ const refilled = Math.floor((elapsedMs * 1_000_000) * this.refillRatePerNs);
89
+ this.burstConsumed = Math.max(0, snap.burstConsumed - refilled);
90
+ this.weeklyConsumed = snap.weeklyConsumed;
91
+ this.weekStartMs = snap.weekStartMs;
92
+ this.inFlight = 0; // In-flight slots lost on restart
93
+ this.lastRefillNs = process.hrtime.bigint();
94
+ }
95
+ /** Utilization percentages. */
96
+ utilization() {
97
+ this.refill();
98
+ return {
99
+ burstPct: this.burstCapacity > 0
100
+ ? (this.burstConsumed / this.burstCapacity) * 100
101
+ : 0,
102
+ weeklyPct: this.weeklyCap > 0
103
+ ? (this.weeklyConsumed / this.weeklyCap) * 100
104
+ : 0,
105
+ inFlight: this.inFlight,
106
+ };
107
+ }
108
+ }
109
+ //# sourceMappingURL=token-bucket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-bucket.js","sourceRoot":"","sources":["../../src/cost-governor/token-bucket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token-bucket.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-bucket.test.d.ts","sourceRoot":"","sources":["../../src/cost-governor/token-bucket.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { describe, it } from 'node:test';
3
+ import assert from 'node:assert/strict';
4
+ import { TokenBucket } from './token-bucket.js';
5
+ describe('TokenBucket', () => {
6
+ it('allows consumption up to burst capacity', () => {
7
+ const bucket = new TokenBucket({ burstCapacity: 3, concurrentCap: 10 });
8
+ assert.ok(bucket.tryConsume());
9
+ assert.ok(bucket.tryConsume());
10
+ assert.ok(bucket.tryConsume());
11
+ assert.ok(!bucket.tryConsume()); // exhausted
12
+ });
13
+ it('enforces concurrent cap', () => {
14
+ const bucket = new TokenBucket({ burstCapacity: 100, concurrentCap: 2 });
15
+ assert.ok(bucket.tryConsume());
16
+ assert.ok(bucket.tryConsume());
17
+ assert.ok(!bucket.tryConsume()); // concurrent cap hit
18
+ bucket.release();
19
+ assert.ok(bucket.tryConsume()); // now we have room
20
+ });
21
+ it('available never goes negative', () => {
22
+ const bucket = new TokenBucket({ burstCapacity: 2, concurrentCap: 10 });
23
+ bucket.tryConsume();
24
+ bucket.tryConsume();
25
+ bucket.tryConsume(); // fails but shouldn't break
26
+ assert.ok(bucket.available() >= 0);
27
+ });
28
+ it('release does not underflow inFlight', () => {
29
+ const bucket = new TokenBucket({ burstCapacity: 10, concurrentCap: 10 });
30
+ bucket.release(); // release without consume
31
+ bucket.release();
32
+ // Should not crash or go negative
33
+ const snap = bucket.snapshot();
34
+ assert.equal(snap.inFlight, 0);
35
+ });
36
+ it('snapshot and restore round-trip', () => {
37
+ const bucket = new TokenBucket({ burstCapacity: 100, concurrentCap: 10 });
38
+ bucket.tryConsume();
39
+ bucket.tryConsume();
40
+ const snap = bucket.snapshot();
41
+ const bucket2 = new TokenBucket({ burstCapacity: 100, concurrentCap: 10 });
42
+ bucket2.restore(snap);
43
+ // inFlight is always 0 after restore (in-flight lost on restart)
44
+ assert.equal(bucket2.snapshot().inFlight, 0);
45
+ // burstConsumed should be approximately restored (minus refill for elapsed)
46
+ assert.ok(bucket2.snapshot().burstConsumed <= 2);
47
+ });
48
+ it('utilization reports percentages', () => {
49
+ const bucket = new TokenBucket({ burstCapacity: 10, concurrentCap: 5, weeklyCap: 100 });
50
+ bucket.tryConsume();
51
+ const util = bucket.utilization();
52
+ assert.equal(util.burstPct, 10);
53
+ assert.equal(util.weeklyPct, 1);
54
+ assert.equal(util.inFlight, 1);
55
+ });
56
+ it('weekly cap enforcement', () => {
57
+ const bucket = new TokenBucket({ burstCapacity: 1000, concurrentCap: 1000, weeklyCap: 3 });
58
+ assert.ok(bucket.tryConsume());
59
+ bucket.release();
60
+ assert.ok(bucket.tryConsume());
61
+ bucket.release();
62
+ assert.ok(bucket.tryConsume());
63
+ bucket.release();
64
+ assert.ok(!bucket.tryConsume()); // weekly cap hit
65
+ });
66
+ });
67
+ //# sourceMappingURL=token-bucket.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-bucket.test.js","sourceRoot":"","sources":["../../src/cost-governor/token-bucket.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * CortexDlqObserver — external DLQ emission path for PactDeadLetterEvent.
3
+ *
4
+ * PRD-062 / S5 §2.4 + §7. Coordinates single-emit (gate G-DLQ-SINGLE-EMIT)
5
+ * with the `CortexJobBackedExecutor` so that each sessionId emits at most
6
+ * ONE `PactDeadLetterEvent` across the union of inline + external paths.
7
+ */
8
+ import type { PactDeadLetterEvent } from '@methodts/pacta';
9
+ import type { ContinuationEnvelope } from '../ports/continuation-envelope.js';
10
+ import type { DlqObserver, DlqRecord } from '../ports/dlq-observer.js';
11
+ import type { CortexJobBackedExecutor } from '../executors/cortex-job-backed-executor.js';
12
+ export interface CortexDlqObserverOptions {
13
+ executor: CortexJobBackedExecutor;
14
+ emitAgentEvent?: (event: PactDeadLetterEvent) => void;
15
+ }
16
+ export declare class CortexDlqObserver implements DlqObserver {
17
+ private readonly executor;
18
+ private readonly emit?;
19
+ constructor(options: CortexDlqObserverOptions);
20
+ onDeadLetter(envelope: ContinuationEnvelope, record: DlqRecord): Promise<PactDeadLetterEvent | null>;
21
+ }
22
+ //# sourceMappingURL=cortex-dlq-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cortex-dlq-observer.d.ts","sourceRoot":"","sources":["../../src/dlq/cortex-dlq-observer.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACvD;AAED,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAuC;gBAEjD,OAAO,EAAE,wBAAwB;IAKvC,YAAY,CAChB,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;CAevC"}
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * CortexDlqObserver — external DLQ emission path for PactDeadLetterEvent.
4
+ *
5
+ * PRD-062 / S5 §2.4 + §7. Coordinates single-emit (gate G-DLQ-SINGLE-EMIT)
6
+ * with the `CortexJobBackedExecutor` so that each sessionId emits at most
7
+ * ONE `PactDeadLetterEvent` across the union of inline + external paths.
8
+ */
9
+ export class CortexDlqObserver {
10
+ executor;
11
+ emit;
12
+ constructor(options) {
13
+ this.executor = options.executor;
14
+ this.emit = options.emitAgentEvent;
15
+ }
16
+ async onDeadLetter(envelope, record) {
17
+ if (await this.executor.isDlqEmitted(envelope.sessionId)) {
18
+ return null;
19
+ }
20
+ // Delegate to the executor so the emission + finalization path stays
21
+ // centralised. The executor persists the DLQ-emitted flag, so
22
+ // subsequent calls for the same sessionId return null.
23
+ const event = await this.executor.emitInlineDeadLetter(envelope, record.lastError, record.attempts);
24
+ if (event && this.emit)
25
+ this.emit(event);
26
+ return event;
27
+ }
28
+ }
29
+ //# sourceMappingURL=cortex-dlq-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cortex-dlq-observer.js","sourceRoot":"","sources":["../../src/dlq/cortex-dlq-observer.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;GAMG;AAeH,MAAM,OAAO,iBAAiB;IACX,QAAQ,CAA0B;IAClC,IAAI,CAAwC;IAE7D,YAAY,OAAiC;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAA8B,EAC9B,MAAiB;QAEjB,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,qEAAqE;QACrE,8DAA8D;QAC9D,uDAAuD;QACvD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CACpD,QAAQ,EACR,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,CAChB,CAAC;QACF,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * G-DLQ-SINGLE-EMIT — PRD-062 / S5 §7.
3
+ *
4
+ * Both inline (from the handler) and external (from CortexDlqObserver)
5
+ * DLQ paths must produce at most ONE `PactDeadLetterEvent` per sessionId.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=dlq-observer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dlq-observer.test.d.ts","sourceRoot":"","sources":["../../src/dlq/dlq-observer.test.ts"],"names":[],"mappings":"AACA;;;;;GAKG"}
@@ -0,0 +1,103 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * G-DLQ-SINGLE-EMIT — PRD-062 / S5 §7.
4
+ *
5
+ * Both inline (from the handler) and external (from CortexDlqObserver)
6
+ * DLQ paths must produce at most ONE `PactDeadLetterEvent` per sessionId.
7
+ */
8
+ import { describe, it, beforeEach } from 'node:test';
9
+ import assert from 'node:assert/strict';
10
+ import { CortexJobBackedExecutor } from '../executors/cortex-job-backed-executor.js';
11
+ import { CortexDlqObserver } from './cortex-dlq-observer.js';
12
+ import { makeInMemorySessionStore, sampleEnvelope } from '../__fixtures__/executor-fixtures.js';
13
+ describe('G-DLQ-SINGLE-EMIT — only one PactDeadLetterEvent per sessionId', () => {
14
+ let events;
15
+ let executor;
16
+ let observer;
17
+ let envelope;
18
+ beforeEach(async () => {
19
+ events = [];
20
+ const store = makeInMemorySessionStore();
21
+ envelope = sampleEnvelope();
22
+ await store.create({
23
+ schemaVersion: 1,
24
+ sessionId: envelope.sessionId,
25
+ scopeId: 'scope',
26
+ pactRef: { id: envelope.pactKey, version: '1', fingerprint: envelope.pactKey },
27
+ status: 'running',
28
+ createdAt: new Date().toISOString(),
29
+ updatedAt: new Date().toISOString(),
30
+ latestCheckpointSequence: null,
31
+ depth: 0,
32
+ metadata: { '__method.lastAckedTurn': -1 },
33
+ });
34
+ executor = new CortexJobBackedExecutor({
35
+ sessionStore: store,
36
+ workerId: 'test-worker',
37
+ emitAgentEvent: (e) => events.push(e),
38
+ });
39
+ observer = new CortexDlqObserver({
40
+ executor,
41
+ emitAgentEvent: (_e) => {
42
+ /* counted already by executor.emitAgentEvent */
43
+ },
44
+ });
45
+ });
46
+ it('inline path emits one event on first fire', async () => {
47
+ const event = await executor.emitInlineDeadLetter(envelope, 'boom', 1);
48
+ assert.ok(event);
49
+ assert.equal(events.length, 1);
50
+ assert.equal(events[0].type, 'pact.dead_letter');
51
+ assert.equal(events[0].sessionId, envelope.sessionId);
52
+ assert.equal(events[0].lastError, 'boom');
53
+ assert.equal(events[0].attempts, 1);
54
+ });
55
+ it('inline path is idempotent — second fire returns null', async () => {
56
+ await executor.emitInlineDeadLetter(envelope, 'boom', 1);
57
+ const second = await executor.emitInlineDeadLetter(envelope, 'boom again', 2);
58
+ assert.equal(second, null);
59
+ assert.equal(events.length, 1);
60
+ });
61
+ it('external DLQ path suppresses when inline already fired', async () => {
62
+ await executor.emitInlineDeadLetter(envelope, 'inline-boom', 1);
63
+ const external = await observer.onDeadLetter(envelope, {
64
+ jobId: 'job-123',
65
+ attempts: 4,
66
+ lastError: 'exhausted',
67
+ deadLetteredAt: Date.now(),
68
+ });
69
+ assert.equal(external, null);
70
+ assert.equal(events.length, 1);
71
+ });
72
+ it('external path fires once if inline never did', async () => {
73
+ const event = await observer.onDeadLetter(envelope, {
74
+ jobId: 'job-123',
75
+ attempts: 4,
76
+ lastError: 'exhausted',
77
+ deadLetteredAt: Date.now(),
78
+ });
79
+ assert.ok(event);
80
+ assert.equal(events.length, 1);
81
+ assert.equal(events[0].attempts, 4);
82
+ });
83
+ it('both paths firing sequentially for the same sessionId emit exactly one event', async () => {
84
+ await executor.emitInlineDeadLetter(envelope, 'inline', 1);
85
+ await observer.onDeadLetter(envelope, {
86
+ jobId: 'job-123',
87
+ attempts: 4,
88
+ lastError: 'external',
89
+ deadLetteredAt: Date.now(),
90
+ });
91
+ assert.equal(events.length, 1, 'exactly one PactDeadLetterEvent per sessionId');
92
+ // Repeated calls remain idempotent.
93
+ await executor.emitInlineDeadLetter(envelope, 'again', 5);
94
+ await observer.onDeadLetter(envelope, {
95
+ jobId: 'j2',
96
+ attempts: 4,
97
+ lastError: 'again',
98
+ deadLetteredAt: Date.now(),
99
+ });
100
+ assert.equal(events.length, 1);
101
+ });
102
+ });
103
+ //# sourceMappingURL=dlq-observer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dlq-observer.test.js","sourceRoot":"","sources":["../../src/dlq/dlq-observer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @methodts/runtime/dlq — PRD-062 / S5 §2.4 + §7.
3
+ */
4
+ export { CortexDlqObserver, } from './cortex-dlq-observer.js';
5
+ export type { CortexDlqObserverOptions, } from './cortex-dlq-observer.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dlq/index.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,EACL,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * @methodts/runtime/dlq — PRD-062 / S5 §2.4 + §7.
4
+ */
5
+ export { CortexDlqObserver, } from './cortex-dlq-observer.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dlq/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;GAEG;AAEH,OAAO,EACL,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * PRD 026 Phase 2: MCP Adapter Layer
3
+ *
4
+ * Translates RuntimeEvent → legacy channel/event shapes so that
5
+ * bridge_read_events and bridge_all_events MCP tools return
6
+ * backward-compatible JSON. Used during the transition from channels
7
+ * to bus-native reads (Phase 3).
8
+ */
9
+ import type { RuntimeEvent } from '../ports/event-bus.js';
10
+ /**
11
+ * Convert a RuntimeEvent to the legacy ChannelMessage shape used by
12
+ * `bridge_read_events` (session-scoped channel reads).
13
+ *
14
+ * Legacy shape:
15
+ * ```json
16
+ * { "sequence": N, "timestamp": "...", "sender": "...", "type": "...", "content": {...} }
17
+ * ```
18
+ */
19
+ export declare function toChannelMessage(event: RuntimeEvent): {
20
+ sequence: number;
21
+ timestamp: string;
22
+ sender: string;
23
+ type: string;
24
+ content: Record<string, unknown>;
25
+ };
26
+ /**
27
+ * Convert an array of RuntimeEvents to the legacy all-events wrapper shape
28
+ * used by `bridge_all_events` (cross-session event polling).
29
+ *
30
+ * Legacy shape:
31
+ * ```json
32
+ * {
33
+ * "messages": [...],
34
+ * "last_sequence": N,
35
+ * "has_more": false
36
+ * }
37
+ * ```
38
+ */
39
+ export declare function toAllEventsWrapper(events: RuntimeEvent[], hasMore?: boolean): {
40
+ messages: Array<{
41
+ sequence: number;
42
+ timestamp: string;
43
+ sender: string;
44
+ type: string;
45
+ content: Record<string, unknown>;
46
+ }>;
47
+ last_sequence: number;
48
+ has_more: boolean;
49
+ };
50
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/event-bus/adapters.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAQA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,UAAQ,GACd;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CASA"}
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * PRD 026 Phase 2: MCP Adapter Layer
4
+ *
5
+ * Translates RuntimeEvent → legacy channel/event shapes so that
6
+ * bridge_read_events and bridge_all_events MCP tools return
7
+ * backward-compatible JSON. Used during the transition from channels
8
+ * to bus-native reads (Phase 3).
9
+ */
10
+ /**
11
+ * Convert a RuntimeEvent to the legacy ChannelMessage shape used by
12
+ * `bridge_read_events` (session-scoped channel reads).
13
+ *
14
+ * Legacy shape:
15
+ * ```json
16
+ * { "sequence": N, "timestamp": "...", "sender": "...", "type": "...", "content": {...} }
17
+ * ```
18
+ */
19
+ export function toChannelMessage(event) {
20
+ return {
21
+ sequence: event.sequence,
22
+ timestamp: event.timestamp,
23
+ sender: event.source,
24
+ type: event.type,
25
+ content: event.payload,
26
+ };
27
+ }
28
+ /**
29
+ * Convert an array of RuntimeEvents to the legacy all-events wrapper shape
30
+ * used by `bridge_all_events` (cross-session event polling).
31
+ *
32
+ * Legacy shape:
33
+ * ```json
34
+ * {
35
+ * "messages": [...],
36
+ * "last_sequence": N,
37
+ * "has_more": false
38
+ * }
39
+ * ```
40
+ */
41
+ export function toAllEventsWrapper(events, hasMore = false) {
42
+ const messages = events.map(toChannelMessage);
43
+ return {
44
+ messages,
45
+ last_sequence: messages.length > 0
46
+ ? messages[messages.length - 1].sequence
47
+ : 0,
48
+ has_more: hasMore,
49
+ };
50
+ }
51
+ //# sourceMappingURL=adapters.js.map