@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,418 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { describe, it, beforeEach, mock } from 'node:test';
3
+ import assert from 'node:assert/strict';
4
+ import { EventEmitter } from 'node:events';
5
+ import { Readable } from 'node:stream';
6
+ // ── PrintSession Unit Tests (PRD 012 Phase 4 / PRD 028) ──────────
7
+ //
8
+ // Node 22 does not support mock.module() for ESM (it's experimental
9
+ // and undefined in this version). We cannot mock child_process.spawn
10
+ // that claudeCliProvider uses internally.
11
+ //
12
+ // Strategy:
13
+ // - Tests that exercise sendPrompt() use mock.module() if available,
14
+ // otherwise they are skipped with a descriptive message.
15
+ // - Tests for the synchronous public interface (status, kill, resize,
16
+ // adaptiveSettle, onOutput, onExit, printMetadata) run without mocking.
17
+ // ── Mock infrastructure ──────────────────────────────────────────
18
+ // Realistic JSON fixture matching Claude Code --output-format json
19
+ const MOCK_JSON_RESULT = {
20
+ type: 'result',
21
+ subtype: 'success',
22
+ is_error: false,
23
+ duration_ms: 5432,
24
+ duration_api_ms: 4200,
25
+ num_turns: 2,
26
+ result: 'I have completed the task successfully.',
27
+ stop_reason: 'end_turn',
28
+ session_id: 'test-session-id',
29
+ total_cost_usd: 0.035,
30
+ usage: {
31
+ input_tokens: 3000,
32
+ cache_creation_input_tokens: 1500,
33
+ cache_read_input_tokens: 10000,
34
+ output_tokens: 500,
35
+ },
36
+ model_usage: {
37
+ 'claude-sonnet-4-6': {
38
+ inputTokens: 3000,
39
+ outputTokens: 500,
40
+ costUSD: 0.035,
41
+ },
42
+ },
43
+ permission_denials: [],
44
+ };
45
+ function createMockProcess(jsonOutput, exitCode = 0) {
46
+ const stdout = new Readable({ read() { } });
47
+ const stderr = new Readable({ read() { } });
48
+ const proc = Object.assign(new EventEmitter(), {
49
+ stdout,
50
+ stderr,
51
+ stdin: { write() { }, end() { } },
52
+ pid: 12345,
53
+ kill: () => { },
54
+ });
55
+ // Schedule output and exit on next ticks
56
+ process.nextTick(() => {
57
+ stdout.push(JSON.stringify(jsonOutput) + '\n');
58
+ stdout.push(null);
59
+ });
60
+ process.nextTick(() => {
61
+ process.nextTick(() => {
62
+ proc.emit('close', exitCode);
63
+ });
64
+ });
65
+ return proc;
66
+ }
67
+ // Attempt to set up mock.module — if unavailable, sendPrompt tests will be skipped.
68
+ const canMockModules = typeof mock.module === 'function';
69
+ let mockSpawn;
70
+ let createPrintSession;
71
+ if (canMockModules) {
72
+ mockSpawn = mock.fn(() => createMockProcess(MOCK_JSON_RESULT));
73
+ mock.module('node:child_process', {
74
+ namedExports: {
75
+ spawn: mockSpawn,
76
+ },
77
+ });
78
+ const mod = await import('./print-session.js');
79
+ createPrintSession = mod.createPrintSession;
80
+ }
81
+ // Separate import path for non-mocked tests (public interface only)
82
+ const realMod = canMockModules ? null : await import('./print-session.js');
83
+ const rawCreateSession = createPrintSession ?? realMod.createPrintSession;
84
+ /** Helper: create a session */
85
+ function createSession(opts) {
86
+ return rawCreateSession({ ...opts });
87
+ }
88
+ // ── Tests ────────────────────────────────────────────────────────
89
+ describe('PrintSession', () => {
90
+ beforeEach(() => {
91
+ if (mockSpawn) {
92
+ mockSpawn.mock.resetCalls();
93
+ mockSpawn.mock.mockImplementation(() => createMockProcess(MOCK_JSON_RESULT));
94
+ }
95
+ });
96
+ // ── Synchronous interface tests (no mocking needed) ──────────
97
+ describe('initial state', () => {
98
+ it('starts in ready status', () => {
99
+ const session = createSession({ id: 'ps-1', workdir: '/tmp/test' });
100
+ assert.equal(session.status, 'ready');
101
+ });
102
+ it('starts with promptCount 0', () => {
103
+ const session = createSession({ id: 'ps-2', workdir: '/tmp/test' });
104
+ assert.equal(session.promptCount, 0);
105
+ });
106
+ it('starts with empty transcript', () => {
107
+ const session = createSession({ id: 'ps-3', workdir: '/tmp/test' });
108
+ assert.equal(session.transcript, '');
109
+ });
110
+ it('starts with null printMetadata', () => {
111
+ const session = createSession({ id: 'ps-4', workdir: '/tmp/test' });
112
+ assert.equal(session.printMetadata, null);
113
+ });
114
+ it('adaptiveSettle is always null', () => {
115
+ const session = createSession({ id: 'ps-5', workdir: '/tmp/test' });
116
+ assert.equal(session.adaptiveSettle, null);
117
+ });
118
+ it('has the correct id', () => {
119
+ const session = createSession({ id: 'my-session-42', workdir: '/tmp/test' });
120
+ assert.equal(session.id, 'my-session-42');
121
+ });
122
+ it('has a lastActivityAt date', () => {
123
+ const before = new Date();
124
+ const session = createSession({ id: 'ps-6', workdir: '/tmp/test' });
125
+ const after = new Date();
126
+ assert.ok(session.lastActivityAt >= before);
127
+ assert.ok(session.lastActivityAt <= after);
128
+ });
129
+ });
130
+ describe('kill()', () => {
131
+ it('sets status to dead', () => {
132
+ const session = createSession({ id: 'ps-kill-1', workdir: '/tmp/test' });
133
+ session.kill();
134
+ assert.equal(session.status, 'dead');
135
+ });
136
+ it('fires exit callbacks with code 0', () => {
137
+ const session = createSession({ id: 'ps-kill-2', workdir: '/tmp/test' });
138
+ let exitCode = null;
139
+ session.onExit((code) => { exitCode = code; });
140
+ session.kill();
141
+ assert.equal(exitCode, 0);
142
+ });
143
+ it('fires multiple exit callbacks', () => {
144
+ const session = createSession({ id: 'ps-kill-3', workdir: '/tmp/test' });
145
+ const codes = [];
146
+ session.onExit((code) => codes.push(code));
147
+ session.onExit((code) => codes.push(code * 10));
148
+ session.kill();
149
+ assert.deepEqual(codes, [0, 0]);
150
+ });
151
+ it('does not throw if exit callback throws', () => {
152
+ const session = createSession({ id: 'ps-kill-4', workdir: '/tmp/test' });
153
+ session.onExit(() => { throw new Error('callback error'); });
154
+ // Should not throw
155
+ assert.doesNotThrow(() => session.kill());
156
+ assert.equal(session.status, 'dead');
157
+ });
158
+ });
159
+ describe('resize()', () => {
160
+ it('is a no-op — does not throw', () => {
161
+ const session = createSession({ id: 'ps-resize', workdir: '/tmp/test' });
162
+ assert.doesNotThrow(() => session.resize(120, 40));
163
+ });
164
+ it('does not change status', () => {
165
+ const session = createSession({ id: 'ps-resize-2', workdir: '/tmp/test' });
166
+ session.resize(80, 24);
167
+ assert.equal(session.status, 'ready');
168
+ });
169
+ });
170
+ describe('onOutput()', () => {
171
+ it('returns an unsubscribe function', () => {
172
+ const session = createSession({ id: 'ps-out-1', workdir: '/tmp/test' });
173
+ const unsub = session.onOutput(() => { });
174
+ assert.equal(typeof unsub, 'function');
175
+ });
176
+ });
177
+ describe('sendPrompt() rejection when dead', () => {
178
+ it('rejects with /dead/ when session is already killed', async () => {
179
+ const session = createSession({ id: 'ps-dead-1', workdir: '/tmp/test' });
180
+ session.kill();
181
+ await assert.rejects(() => session.sendPrompt('test'), /dead/);
182
+ });
183
+ });
184
+ // ── sendPrompt() tests (require mock.module) ──────────────────
185
+ // These tests exercise the full claudeCliProvider.invoke() path.
186
+ // They are conditionally run based on mock.module availability.
187
+ const describeSendPrompt = canMockModules ? describe : describe.skip;
188
+ describeSendPrompt('sendPrompt() (mocked child_process)', () => {
189
+ it('returns structured result from JSON output', async () => {
190
+ const session = createSession({ id: 'ps-sp-1', workdir: '/tmp/test' });
191
+ const result = await session.sendPrompt('Do something');
192
+ assert.equal(result.output, 'I have completed the task successfully.');
193
+ assert.equal(result.timedOut, false);
194
+ });
195
+ it('transitions through working → ready on successful prompt', async () => {
196
+ const session = createSession({ id: 'ps-sp-2', workdir: '/tmp/test' });
197
+ const statuses = [];
198
+ statuses.push(session.status); // ready
199
+ const promise = session.sendPrompt('test');
200
+ // Status transitions to working synchronously after queue picks up
201
+ await new Promise(r => setTimeout(r, 10));
202
+ statuses.push(session.status); // working
203
+ await promise;
204
+ statuses.push(session.status); // ready
205
+ assert.equal(statuses[0], 'ready');
206
+ assert.equal(statuses[2], 'ready');
207
+ });
208
+ it('increments promptCount on each sendPrompt', async () => {
209
+ const session = createSession({ id: 'ps-sp-3', workdir: '/tmp/test' });
210
+ assert.equal(session.promptCount, 0);
211
+ await session.sendPrompt('first');
212
+ assert.equal(session.promptCount, 1);
213
+ await session.sendPrompt('second');
214
+ assert.equal(session.promptCount, 2);
215
+ });
216
+ it('updates lastActivityAt after sendPrompt', async () => {
217
+ const session = createSession({ id: 'ps-sp-4', workdir: '/tmp/test' });
218
+ const before = session.lastActivityAt;
219
+ await new Promise(r => setTimeout(r, 10));
220
+ await session.sendPrompt('test');
221
+ assert.ok(session.lastActivityAt.getTime() >= before.getTime());
222
+ });
223
+ it('accumulates transcript across prompts', async () => {
224
+ const session = createSession({ id: 'ps-sp-5', workdir: '/tmp/test' });
225
+ await session.sendPrompt('first prompt');
226
+ await session.sendPrompt('second prompt');
227
+ assert.ok(session.transcript.includes('first prompt'));
228
+ assert.ok(session.transcript.includes('second prompt'));
229
+ assert.ok(session.transcript.includes('I have completed the task successfully.'));
230
+ });
231
+ it('notifies output subscribers', async () => {
232
+ const session = createSession({ id: 'ps-sp-6', workdir: '/tmp/test' });
233
+ const outputs = [];
234
+ session.onOutput((data) => outputs.push(data));
235
+ await session.sendPrompt('test');
236
+ // Should receive at least the result notification
237
+ assert.ok(outputs.length >= 1);
238
+ assert.ok(outputs.some(o => o.includes('I have completed the task successfully.')));
239
+ });
240
+ it('unsubscribe removes output subscriber', async () => {
241
+ const session = createSession({ id: 'ps-sp-7', workdir: '/tmp/test' });
242
+ const outputs = [];
243
+ const unsub = session.onOutput((data) => outputs.push(data));
244
+ unsub();
245
+ await session.sendPrompt('test');
246
+ assert.equal(outputs.length, 0);
247
+ });
248
+ it('populates printMetadata after sendPrompt', async () => {
249
+ const session = createSession({ id: 'ps-sp-8', workdir: '/tmp/test' });
250
+ await session.sendPrompt('test');
251
+ const meta = session.printMetadata;
252
+ assert.ok(meta);
253
+ assert.equal(meta.total_cost_usd, 0.035);
254
+ assert.equal(meta.num_turns, 2);
255
+ assert.equal(meta.duration_ms, 5432);
256
+ // duration_api_ms is approximated as duration_ms (AgentResult has no separate api duration)
257
+ assert.equal(meta.duration_api_ms, 5432);
258
+ assert.equal(meta.usage.input_tokens, 3000);
259
+ assert.equal(meta.usage.output_tokens, 500);
260
+ assert.equal(meta.usage.cache_creation_input_tokens, 1500);
261
+ assert.equal(meta.usage.cache_read_input_tokens, 10000);
262
+ assert.deepEqual(meta.permission_denials, []);
263
+ assert.equal(meta.stop_reason, 'end_turn');
264
+ assert.equal(meta.subtype, 'success');
265
+ assert.equal(meta.cumulative_cost_usd, 0.035);
266
+ });
267
+ it('accumulates cumulative cost across prompts', async () => {
268
+ const session = createSession({ id: 'ps-sp-9', workdir: '/tmp/test' });
269
+ await session.sendPrompt('first');
270
+ const meta1 = session.printMetadata;
271
+ assert.ok(meta1);
272
+ assert.equal(meta1.cumulative_cost_usd, 0.035);
273
+ await session.sendPrompt('second');
274
+ const meta2 = session.printMetadata;
275
+ assert.ok(meta2);
276
+ assert.ok(Math.abs(meta2.cumulative_cost_usd - 0.07) < 0.001);
277
+ });
278
+ it('handles error from claude process gracefully', async () => {
279
+ mockSpawn.mock.mockImplementation(() => {
280
+ const stdout = new Readable({ read() { } });
281
+ const stderr = new Readable({ read() { } });
282
+ const proc = Object.assign(new EventEmitter(), {
283
+ stdout,
284
+ stderr,
285
+ stdin: { write() { }, end() { } },
286
+ pid: 12345,
287
+ kill: () => { },
288
+ });
289
+ process.nextTick(() => {
290
+ stderr.push('Error: API key invalid\n');
291
+ stderr.push(null);
292
+ stdout.push(null);
293
+ });
294
+ process.nextTick(() => {
295
+ process.nextTick(() => {
296
+ proc.emit('close', 1);
297
+ });
298
+ });
299
+ return proc;
300
+ });
301
+ const session = createSession({ id: 'ps-sp-10', workdir: '/tmp/test' });
302
+ const result = await session.sendPrompt('test');
303
+ // Error should be returned as output, not thrown
304
+ assert.ok(result.output.includes('Error'));
305
+ assert.equal(result.timedOut, false);
306
+ // Session should return to ready, not dead
307
+ assert.equal(session.status, 'ready');
308
+ });
309
+ it('first prompt uses --session-id, subsequent use --resume', async () => {
310
+ const session = createSession({ id: 'ps-sp-11', workdir: '/tmp/test' });
311
+ await session.sendPrompt('first');
312
+ const firstCall = mockSpawn.mock.calls[0];
313
+ const firstArgs = firstCall.arguments[1];
314
+ assert.ok(firstArgs.includes('--session-id'), 'first prompt should use --session-id');
315
+ assert.ok(!firstArgs.includes('--resume'), 'first prompt should not use --resume');
316
+ await session.sendPrompt('second');
317
+ // Find the second spawn call (first call is index 0, second is index 1)
318
+ const secondCall = mockSpawn.mock.calls[1];
319
+ const secondArgs = secondCall.arguments[1];
320
+ assert.ok(secondArgs.includes('--resume'), 'second prompt should use --resume');
321
+ assert.ok(!secondArgs.includes('--session-id'), 'second prompt should not use --session-id');
322
+ });
323
+ });
324
+ // ── PRD 029: Agent hoisting + budget tests (providerOverride) ──
325
+ describe('agent hoisting (PRD 029 BUG-1)', () => {
326
+ it('createAgent is called once across multiple sendPrompt calls', async () => {
327
+ let invokeCount = 0;
328
+ // A mock provider that counts invocations
329
+ const mockProvider = {
330
+ name: 'test-counter',
331
+ capabilities() {
332
+ return { modes: ['oneshot', 'resumable'], streaming: false, resumable: true, budgetEnforcement: 'client', outputValidation: 'none', toolModel: false };
333
+ },
334
+ async invoke(_pact, _request) {
335
+ invokeCount++;
336
+ return {
337
+ output: `Response #${invokeCount}`,
338
+ sessionId: 'test-session-id',
339
+ completed: true,
340
+ stopReason: 'complete',
341
+ turns: 1,
342
+ durationMs: 100,
343
+ cost: {
344
+ totalUsd: 0.01,
345
+ perModel: {
346
+ 'test-model': {
347
+ costUsd: 0.01,
348
+ tokens: { inputTokens: 100, outputTokens: 50, cacheReadTokens: 0, cacheWriteTokens: 0 },
349
+ },
350
+ },
351
+ },
352
+ usage: { inputTokens: 100, outputTokens: 50, cacheReadTokens: 0, cacheWriteTokens: 0 },
353
+ };
354
+ },
355
+ };
356
+ const session = rawCreateSession({
357
+ id: 'ps-hoist-1',
358
+ workdir: '/tmp/test',
359
+ providerOverride: mockProvider,
360
+ });
361
+ await session.sendPrompt('first');
362
+ await session.sendPrompt('second');
363
+ await session.sendPrompt('third');
364
+ // The provider should be invoked 3 times (once per prompt),
365
+ // but createAgent should have been called only once (at session scope).
366
+ // We verify indirectly: if createAgent were called per-prompt, the
367
+ // accumulated state would reset each time.
368
+ assert.equal(invokeCount, 3, 'provider.invoke called 3 times');
369
+ assert.equal(session.promptCount, 3);
370
+ });
371
+ it('budget accumulation: cumulative_cost_usd accumulates across prompts via agent.state', async () => {
372
+ let callNum = 0;
373
+ const mockProvider = {
374
+ name: 'test-budget',
375
+ capabilities() {
376
+ return { modes: ['oneshot', 'resumable'], streaming: false, resumable: true, budgetEnforcement: 'client', outputValidation: 'none', toolModel: false };
377
+ },
378
+ async invoke(_pact, _request) {
379
+ callNum++;
380
+ return {
381
+ output: `Response #${callNum}`,
382
+ sessionId: 'test-session-id',
383
+ completed: true,
384
+ stopReason: 'complete',
385
+ turns: 1,
386
+ durationMs: 100,
387
+ cost: {
388
+ totalUsd: 0.025 * callNum, // increasing cost per prompt
389
+ perModel: {
390
+ 'test-model': {
391
+ costUsd: 0.025 * callNum,
392
+ tokens: { inputTokens: 100, outputTokens: 50, cacheReadTokens: 0, cacheWriteTokens: 0 },
393
+ },
394
+ },
395
+ },
396
+ usage: { inputTokens: 100, outputTokens: 50, cacheReadTokens: 0, cacheWriteTokens: 0 },
397
+ };
398
+ },
399
+ };
400
+ const session = rawCreateSession({
401
+ id: 'ps-budget-1',
402
+ workdir: '/tmp/test',
403
+ providerOverride: mockProvider,
404
+ });
405
+ await session.sendPrompt('first');
406
+ const meta1 = session.printMetadata;
407
+ assert.ok(meta1, 'printMetadata should exist after first prompt');
408
+ // First prompt cost: 0.025 * 1 = 0.025. agent.state.totalUsd should be 0.025.
409
+ assert.ok(Math.abs(meta1.cumulative_cost_usd - 0.025) < 0.001, `cumulative should be ~0.025 but got ${meta1.cumulative_cost_usd}`);
410
+ await session.sendPrompt('second');
411
+ const meta2 = session.printMetadata;
412
+ assert.ok(meta2, 'printMetadata should exist after second prompt');
413
+ // Second prompt cost: 0.025 * 2 = 0.05. agent.state.totalUsd should be 0.025 + 0.05 = 0.075.
414
+ assert.ok(Math.abs(meta2.cumulative_cost_usd - 0.075) < 0.001, `cumulative should be ~0.075 but got ${meta2.cumulative_cost_usd}`);
415
+ });
416
+ });
417
+ });
418
+ //# sourceMappingURL=print-session.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-session.test.js","sourceRoot":"","sources":["../../src/sessions/print-session.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Runtime Tool Provider — real filesystem-backed tools for cognitive sessions.
3
+ *
4
+ * Provides Read, Write, Edit, Glob, Grep, and Bash tools scoped to a workdir.
5
+ * Used by cognitive-provider.ts to give the reasoner-actor real file access.
6
+ *
7
+ * PRD-057 / S2 §3.3 / C5: moved from `bridge/domains/sessions/bridge-tools.ts`
8
+ * to `runtime/sessions/runtime-tools.ts`. Legacy `createBridgeToolProvider`
9
+ * is retained as an alias export for existing callers; new callers should
10
+ * use `createRuntimeToolProvider`.
11
+ */
12
+ import type { ToolProvider } from '@methodts/pacta';
13
+ /**
14
+ * Canonical name after C5 rename (PRD-057 / S2 §3.3). Use this for new code.
15
+ */
16
+ export declare function createRuntimeToolProvider(workdir: string): ToolProvider;
17
+ /**
18
+ * @deprecated Use `createRuntimeToolProvider`. Legacy alias preserved for
19
+ * bridge-internal callers during the PRD-057 migration window; removed in C7.
20
+ */
21
+ export declare const createBridgeToolProvider: typeof createRuntimeToolProvider;
22
+ //# sourceMappingURL=runtime-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-tools.d.ts","sourceRoot":"","sources":["../../src/sessions/runtime-tools.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,iBAAiB,CAAC;AAqChF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAuGvE;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,kCAA4B,CAAC"}
@@ -0,0 +1,162 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Runtime Tool Provider — real filesystem-backed tools for cognitive sessions.
4
+ *
5
+ * Provides Read, Write, Edit, Glob, Grep, and Bash tools scoped to a workdir.
6
+ * Used by cognitive-provider.ts to give the reasoner-actor real file access.
7
+ *
8
+ * PRD-057 / S2 §3.3 / C5: moved from `bridge/domains/sessions/bridge-tools.ts`
9
+ * to `runtime/sessions/runtime-tools.ts`. Legacy `createBridgeToolProvider`
10
+ * is retained as an alias export for existing callers; new callers should
11
+ * use `createRuntimeToolProvider`.
12
+ */
13
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
14
+ import { execFileSync, execSync } from 'node:child_process';
15
+ import { resolve, dirname, relative, isAbsolute } from 'node:path';
16
+ const TOOL_DEFS = [
17
+ { name: 'Read', description: 'Read a file by path. Input: { path: string, offset?: number, limit?: number } — offset/limit are line numbers (1-based start, count of lines). Use these for large files that exceed the 8000-char output limit.' },
18
+ { name: 'Write', description: 'Write content to a file. Input: { path: string, content: string }' },
19
+ { name: 'Edit', description: 'Replace a specific string in a file. Input: { path: string, old_string: string, new_string: string }' },
20
+ { name: 'Glob', description: 'Find files matching a glob pattern. Input: { pattern: string }' },
21
+ { name: 'Grep', description: 'Search file contents with a regex. Input: { pattern: string, path?: string }' },
22
+ { name: 'Bash', description: 'Execute a shell command. Input: { command: string }' },
23
+ ];
24
+ const MAX_OUTPUT = 8000;
25
+ const ALLOWED_COMMANDS = new Set(['git', 'npm', 'node', 'npx', 'ls', 'cat', 'find', 'grep', 'head', 'tail', 'wc', 'echo', 'pwd', 'which', 'diff', 'sort', 'uniq', 'tsc', 'test']);
26
+ /** Shell metacharacters that enable command chaining/injection. */
27
+ const SHELL_META = /[;|&`$(){}!<>\\]/;
28
+ function truncate(s) {
29
+ return s.length > MAX_OUTPUT ? s.slice(0, MAX_OUTPUT) + '\n... (truncated)' : s;
30
+ }
31
+ function checkPathTraversal(workdir, filePath, rawPath) {
32
+ const rel = relative(workdir, filePath);
33
+ if (rel.startsWith('..') || isAbsolute(rel)) {
34
+ return { output: `Path outside workdir not allowed: ${rawPath}`, isError: true };
35
+ }
36
+ return null;
37
+ }
38
+ /** Validate that a path argument stays within workdir (for Grep/Glob path args). */
39
+ function checkPathArg(workdir, pathArg) {
40
+ if (!pathArg || pathArg === '.')
41
+ return null;
42
+ const resolved = resolve(workdir, pathArg);
43
+ return checkPathTraversal(workdir, resolved, pathArg);
44
+ }
45
+ /**
46
+ * Canonical name after C5 rename (PRD-057 / S2 §3.3). Use this for new code.
47
+ */
48
+ export function createRuntimeToolProvider(workdir) {
49
+ return {
50
+ list: () => TOOL_DEFS,
51
+ async execute(name, input) {
52
+ const args = (input ?? {});
53
+ try {
54
+ switch (name) {
55
+ case 'Read': {
56
+ const filePath = resolve(workdir, args.path);
57
+ const traversalErr = checkPathTraversal(workdir, filePath, args.path);
58
+ if (traversalErr)
59
+ return traversalErr;
60
+ const rawContent = readFileSync(filePath, 'utf-8');
61
+ // Support optional offset (1-based line start) and limit (line count) for large files.
62
+ if (args.offset !== undefined || args.limit !== undefined) {
63
+ const lines = rawContent.split('\n');
64
+ const start = Math.max(0, (Number(args.offset) || 1) - 1); // convert 1-based to 0-based
65
+ const count = Number(args.limit) || (lines.length - start);
66
+ const slice = lines.slice(start, start + count).join('\n');
67
+ const totalLines = lines.length;
68
+ const header = `Lines ${start + 1}-${Math.min(start + count, totalLines)} of ${totalLines}:\n`;
69
+ return { output: truncate(header + slice) };
70
+ }
71
+ return { output: truncate(rawContent) };
72
+ }
73
+ case 'Write': {
74
+ const filePath = resolve(workdir, args.path);
75
+ const traversalErr = checkPathTraversal(workdir, filePath, args.path);
76
+ if (traversalErr)
77
+ return traversalErr;
78
+ mkdirSync(dirname(filePath), { recursive: true });
79
+ writeFileSync(filePath, args.content, 'utf-8');
80
+ return { output: `Written to ${args.path}` };
81
+ }
82
+ case 'Edit': {
83
+ const filePath = resolve(workdir, args.path);
84
+ const traversalErr = checkPathTraversal(workdir, filePath, args.path);
85
+ if (traversalErr)
86
+ return traversalErr;
87
+ const content = readFileSync(filePath, 'utf-8');
88
+ const occurrences = content.split(args.old_string).length - 1;
89
+ if (occurrences === 0) {
90
+ return { output: 'String not found in file', isError: true };
91
+ }
92
+ if (occurrences >= 2) {
93
+ return { output: `Ambiguous: string appears ${occurrences} times. Provide more context to make it unique.`, isError: true };
94
+ }
95
+ const updated = content.replace(args.old_string, args.new_string);
96
+ writeFileSync(filePath, updated, 'utf-8');
97
+ return { output: 'Edit applied successfully' };
98
+ }
99
+ case 'Glob': {
100
+ // Reject patterns that attempt directory traversal
101
+ if (args.pattern.includes('..')) {
102
+ return { output: 'Glob patterns with ".." not allowed', isError: true };
103
+ }
104
+ // Use git ls-files for tracked files, fall back to find
105
+ try {
106
+ const result = execFileSync('git', ['ls-files', '--cached', '--others', '--exclude-standard', args.pattern], {
107
+ cwd: workdir, encoding: 'utf-8', timeout: 10_000,
108
+ });
109
+ return { output: truncate(result) };
110
+ }
111
+ catch {
112
+ const result = execFileSync('find', ['.', '-name', args.pattern, '-type', 'f'], {
113
+ cwd: workdir, encoding: 'utf-8', timeout: 10_000,
114
+ });
115
+ // Limit output to ~50 lines like the old head -50
116
+ const lines = result.split('\n');
117
+ const limited = lines.length > 50 ? lines.slice(0, 50).join('\n') : result;
118
+ return { output: truncate(limited) };
119
+ }
120
+ }
121
+ case 'Grep': {
122
+ const target = args.path || '.';
123
+ const pathErr = checkPathArg(workdir, target);
124
+ if (pathErr)
125
+ return pathErr;
126
+ const result = execFileSync('grep', ['-rn', '--include=*', '-m', '30', args.pattern, target], {
127
+ cwd: workdir, encoding: 'utf-8', timeout: 10_000,
128
+ });
129
+ return { output: truncate(result) };
130
+ }
131
+ case 'Bash': {
132
+ const cmd = args.command.trim();
133
+ const baseCommand = cmd.split(/\s+/)[0];
134
+ if (!ALLOWED_COMMANDS.has(baseCommand)) {
135
+ return { output: `Command not allowed: ${baseCommand}. Allowed: ${[...ALLOWED_COMMANDS].join(', ')}`, isError: true };
136
+ }
137
+ // Reject shell metacharacters that enable command chaining/injection
138
+ if (SHELL_META.test(cmd)) {
139
+ return { output: 'Shell metacharacters (;|&`$(){}!<>) not allowed in cognitive Bash tool', isError: true };
140
+ }
141
+ const result = execSync(cmd, {
142
+ cwd: workdir, encoding: 'utf-8', timeout: 30_000,
143
+ });
144
+ return { output: truncate(result) };
145
+ }
146
+ default:
147
+ return { output: `Unknown tool: ${name}`, isError: true };
148
+ }
149
+ }
150
+ catch (err) {
151
+ const msg = err instanceof Error ? err.message : String(err);
152
+ return { output: msg.slice(0, 2000), isError: true };
153
+ }
154
+ },
155
+ };
156
+ }
157
+ /**
158
+ * @deprecated Use `createRuntimeToolProvider`. Legacy alias preserved for
159
+ * bridge-internal callers during the PRD-057 migration window; removed in C7.
160
+ */
161
+ export const createBridgeToolProvider = createRuntimeToolProvider;
162
+ //# sourceMappingURL=runtime-tools.js.map