@stigmer/react 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/billing/AutoRechargeCard.d.ts +38 -0
  2. package/billing/AutoRechargeCard.d.ts.map +1 -0
  3. package/billing/AutoRechargeCard.js +90 -0
  4. package/billing/AutoRechargeCard.js.map +1 -0
  5. package/billing/BillingSection.d.ts +32 -0
  6. package/billing/BillingSection.d.ts.map +1 -0
  7. package/billing/BillingSection.js +81 -0
  8. package/billing/BillingSection.js.map +1 -0
  9. package/billing/CreditBalanceCard.d.ts +25 -0
  10. package/billing/CreditBalanceCard.d.ts.map +1 -0
  11. package/billing/CreditBalanceCard.js +28 -0
  12. package/billing/CreditBalanceCard.js.map +1 -0
  13. package/billing/CreditLedgerTable.d.ts +22 -0
  14. package/billing/CreditLedgerTable.d.ts.map +1 -0
  15. package/billing/CreditLedgerTable.js +75 -0
  16. package/billing/CreditLedgerTable.js.map +1 -0
  17. package/billing/CreditPackGrid.d.ts +31 -0
  18. package/billing/CreditPackGrid.d.ts.map +1 -0
  19. package/billing/CreditPackGrid.js +35 -0
  20. package/billing/CreditPackGrid.js.map +1 -0
  21. package/billing/LowBalanceBanner.d.ts +26 -0
  22. package/billing/LowBalanceBanner.d.ts.map +1 -0
  23. package/billing/LowBalanceBanner.js +33 -0
  24. package/billing/LowBalanceBanner.js.map +1 -0
  25. package/billing/PaymentMethodCard.d.ts +35 -0
  26. package/billing/PaymentMethodCard.d.ts.map +1 -0
  27. package/billing/PaymentMethodCard.js +48 -0
  28. package/billing/PaymentMethodCard.js.map +1 -0
  29. package/billing/credit-packs.d.ts +25 -0
  30. package/billing/credit-packs.d.ts.map +1 -0
  31. package/billing/credit-packs.js +39 -0
  32. package/billing/credit-packs.js.map +1 -0
  33. package/billing/format.d.ts +39 -0
  34. package/billing/format.d.ts.map +1 -0
  35. package/billing/format.js +90 -0
  36. package/billing/format.js.map +1 -0
  37. package/billing/index.d.ts +32 -0
  38. package/billing/index.d.ts.map +1 -0
  39. package/billing/index.js +21 -0
  40. package/billing/index.js.map +1 -0
  41. package/billing/useBillingAccount.d.ts +40 -0
  42. package/billing/useBillingAccount.d.ts.map +1 -0
  43. package/billing/useBillingAccount.js +35 -0
  44. package/billing/useBillingAccount.js.map +1 -0
  45. package/billing/useBillingUsageReport.d.ts +42 -0
  46. package/billing/useBillingUsageReport.d.ts.map +1 -0
  47. package/billing/useBillingUsageReport.js +43 -0
  48. package/billing/useBillingUsageReport.js.map +1 -0
  49. package/billing/useCreateBillingPortalSession.d.ts +35 -0
  50. package/billing/useCreateBillingPortalSession.d.ts.map +1 -0
  51. package/billing/useCreateBillingPortalSession.js +50 -0
  52. package/billing/useCreateBillingPortalSession.js.map +1 -0
  53. package/billing/useCreateCheckoutSession.d.ts +54 -0
  54. package/billing/useCreateCheckoutSession.d.ts.map +1 -0
  55. package/billing/useCreateCheckoutSession.js +58 -0
  56. package/billing/useCreateCheckoutSession.js.map +1 -0
  57. package/billing/useCreditLedger.d.ts +48 -0
  58. package/billing/useCreditLedger.d.ts.map +1 -0
  59. package/billing/useCreditLedger.js +39 -0
  60. package/billing/useCreditLedger.js.map +1 -0
  61. package/billing/useCustomerModelPricing.d.ts +41 -0
  62. package/billing/useCustomerModelPricing.d.ts.map +1 -0
  63. package/billing/useCustomerModelPricing.js +37 -0
  64. package/billing/useCustomerModelPricing.js.map +1 -0
  65. package/billing/useSetAutoRechargeConfig.d.ts +50 -0
  66. package/billing/useSetAutoRechargeConfig.d.ts.map +1 -0
  67. package/billing/useSetAutoRechargeConfig.js +53 -0
  68. package/billing/useSetAutoRechargeConfig.js.map +1 -0
  69. package/composer/ComposerToolbar.js +1 -1
  70. package/composer/ComposerToolbar.js.map +1 -1
  71. package/composer/SessionComposer.d.ts +1 -1
  72. package/composer/SessionComposer.d.ts.map +1 -1
  73. package/composer/SessionComposer.js +19 -4
  74. package/composer/SessionComposer.js.map +1 -1
  75. package/composer/__tests__/SessionComposer-memo.test.d.ts +2 -0
  76. package/composer/__tests__/SessionComposer-memo.test.d.ts.map +1 -0
  77. package/composer/__tests__/SessionComposer-memo.test.js +23 -0
  78. package/composer/__tests__/SessionComposer-memo.test.js.map +1 -0
  79. package/execution/ApprovalCard.d.ts +5 -1
  80. package/execution/ApprovalCard.d.ts.map +1 -1
  81. package/execution/ApprovalCard.js +7 -3
  82. package/execution/ApprovalCard.js.map +1 -1
  83. package/execution/ExecutionPhaseBadge.d.ts +1 -1
  84. package/execution/ExecutionPhaseBadge.d.ts.map +1 -1
  85. package/execution/ExecutionPhaseBadge.js +3 -2
  86. package/execution/ExecutionPhaseBadge.js.map +1 -1
  87. package/execution/MessageEntry.d.ts +7 -3
  88. package/execution/MessageEntry.d.ts.map +1 -1
  89. package/execution/MessageEntry.js +19 -8
  90. package/execution/MessageEntry.js.map +1 -1
  91. package/execution/MessageThread.d.ts +84 -3
  92. package/execution/MessageThread.d.ts.map +1 -1
  93. package/execution/MessageThread.js +113 -65
  94. package/execution/MessageThread.js.map +1 -1
  95. package/execution/SetupProgress.d.ts +1 -1
  96. package/execution/SetupProgress.d.ts.map +1 -1
  97. package/execution/SetupProgress.js +3 -3
  98. package/execution/SetupProgress.js.map +1 -1
  99. package/execution/SubAgentSection.d.ts +5 -1
  100. package/execution/SubAgentSection.d.ts.map +1 -1
  101. package/execution/SubAgentSection.js +13 -7
  102. package/execution/SubAgentSection.js.map +1 -1
  103. package/execution/ThreadSkeleton.d.ts +22 -0
  104. package/execution/ThreadSkeleton.d.ts.map +1 -0
  105. package/execution/ThreadSkeleton.js +26 -0
  106. package/execution/ThreadSkeleton.js.map +1 -0
  107. package/execution/ToolCallGroup.d.ts +16 -1
  108. package/execution/ToolCallGroup.d.ts.map +1 -1
  109. package/execution/ToolCallGroup.js +31 -3
  110. package/execution/ToolCallGroup.js.map +1 -1
  111. package/execution/UsageWidget.d.ts +1 -1
  112. package/execution/__tests__/message-entry.test.d.ts +2 -0
  113. package/execution/__tests__/message-entry.test.d.ts.map +1 -0
  114. package/execution/__tests__/message-entry.test.js +178 -0
  115. package/execution/__tests__/message-entry.test.js.map +1 -0
  116. package/execution/__tests__/thread-keys.test.d.ts +2 -0
  117. package/execution/__tests__/thread-keys.test.d.ts.map +1 -0
  118. package/execution/__tests__/thread-keys.test.js +289 -0
  119. package/execution/__tests__/thread-keys.test.js.map +1 -0
  120. package/execution/__tests__/thread-memoization.test.d.ts +2 -0
  121. package/execution/__tests__/thread-memoization.test.d.ts.map +1 -0
  122. package/execution/__tests__/thread-memoization.test.js +262 -0
  123. package/execution/__tests__/thread-memoization.test.js.map +1 -0
  124. package/execution/__tests__/thread-skeleton.test.d.ts +2 -0
  125. package/execution/__tests__/thread-skeleton.test.d.ts.map +1 -0
  126. package/execution/__tests__/thread-skeleton.test.js +35 -0
  127. package/execution/__tests__/thread-skeleton.test.js.map +1 -0
  128. package/execution/__tests__/useExecutionStream.test.js +73 -10
  129. package/execution/__tests__/useExecutionStream.test.js.map +1 -1
  130. package/execution/__tests__/useSessionVariables-stability.test.d.ts +2 -0
  131. package/execution/__tests__/useSessionVariables-stability.test.d.ts.map +1 -0
  132. package/execution/__tests__/useSessionVariables-stability.test.js +69 -0
  133. package/execution/__tests__/useSessionVariables-stability.test.js.map +1 -0
  134. package/execution/__tests__/virtualized-thread.test.d.ts +2 -0
  135. package/execution/__tests__/virtualized-thread.test.d.ts.map +1 -0
  136. package/execution/__tests__/virtualized-thread.test.js +274 -0
  137. package/execution/__tests__/virtualized-thread.test.js.map +1 -0
  138. package/execution/index.d.ts +2 -0
  139. package/execution/index.d.ts.map +1 -1
  140. package/execution/index.js +1 -0
  141. package/execution/index.js.map +1 -1
  142. package/execution/useExecutionStream.d.ts +35 -10
  143. package/execution/useExecutionStream.d.ts.map +1 -1
  144. package/execution/useExecutionStream.js +79 -40
  145. package/execution/useExecutionStream.js.map +1 -1
  146. package/execution/useSessionVariables.d.ts.map +1 -1
  147. package/execution/useSessionVariables.js +4 -3
  148. package/execution/useSessionVariables.js.map +1 -1
  149. package/github/useGitHubConnection.d.ts.map +1 -1
  150. package/github/useGitHubConnection.js +5 -4
  151. package/github/useGitHubConnection.js.map +1 -1
  152. package/identity-account/index.d.ts +2 -0
  153. package/identity-account/index.d.ts.map +1 -0
  154. package/identity-account/index.js +2 -0
  155. package/identity-account/index.js.map +1 -0
  156. package/identity-account/useIdentityAccountGate.d.ts +81 -0
  157. package/identity-account/useIdentityAccountGate.d.ts.map +1 -0
  158. package/identity-account/useIdentityAccountGate.js +100 -0
  159. package/identity-account/useIdentityAccountGate.js.map +1 -0
  160. package/index.d.ts +10 -4
  161. package/index.d.ts.map +1 -1
  162. package/index.js +8 -2
  163. package/index.js.map +1 -1
  164. package/internal/FetchCacheProvider.d.ts +44 -0
  165. package/internal/FetchCacheProvider.d.ts.map +1 -0
  166. package/internal/FetchCacheProvider.js +61 -0
  167. package/internal/FetchCacheProvider.js.map +1 -0
  168. package/internal/JumpToLatestButton.d.ts +14 -0
  169. package/internal/JumpToLatestButton.d.ts.map +1 -0
  170. package/internal/JumpToLatestButton.js +19 -0
  171. package/internal/JumpToLatestButton.js.map +1 -0
  172. package/internal/ThreadItemWrapper.d.ts +20 -0
  173. package/internal/ThreadItemWrapper.d.ts.map +1 -0
  174. package/internal/ThreadItemWrapper.js +44 -0
  175. package/internal/ThreadItemWrapper.js.map +1 -0
  176. package/internal/VirtualizedThread.d.ts +25 -0
  177. package/internal/VirtualizedThread.d.ts.map +1 -0
  178. package/internal/VirtualizedThread.js +58 -0
  179. package/internal/VirtualizedThread.js.map +1 -0
  180. package/internal/__tests__/fetch-cache.test.d.ts +2 -0
  181. package/internal/__tests__/fetch-cache.test.d.ts.map +1 -0
  182. package/internal/__tests__/fetch-cache.test.js +182 -0
  183. package/internal/__tests__/fetch-cache.test.js.map +1 -0
  184. package/internal/__tests__/stream-controller.test.d.ts +2 -0
  185. package/internal/__tests__/stream-controller.test.d.ts.map +1 -0
  186. package/internal/__tests__/stream-controller.test.js +294 -0
  187. package/internal/__tests__/stream-controller.test.js.map +1 -0
  188. package/internal/__tests__/thread-animation.test.d.ts +2 -0
  189. package/internal/__tests__/thread-animation.test.d.ts.map +1 -0
  190. package/internal/__tests__/thread-animation.test.js +79 -0
  191. package/internal/__tests__/thread-animation.test.js.map +1 -0
  192. package/internal/__tests__/useAutoScroll.test.d.ts +2 -0
  193. package/internal/__tests__/useAutoScroll.test.d.ts.map +1 -0
  194. package/internal/__tests__/useAutoScroll.test.js +188 -0
  195. package/internal/__tests__/useAutoScroll.test.js.map +1 -0
  196. package/internal/__tests__/useFetch-cache.test.d.ts +2 -0
  197. package/internal/__tests__/useFetch-cache.test.d.ts.map +1 -0
  198. package/internal/__tests__/useFetch-cache.test.js +137 -0
  199. package/internal/__tests__/useFetch-cache.test.js.map +1 -0
  200. package/internal/dev/__tests__/use-key-stability.test.d.ts +2 -0
  201. package/internal/dev/__tests__/use-key-stability.test.d.ts.map +1 -0
  202. package/internal/dev/__tests__/use-key-stability.test.js +72 -0
  203. package/internal/dev/__tests__/use-key-stability.test.js.map +1 -0
  204. package/internal/dev/__tests__/use-render-tracer.test.d.ts +2 -0
  205. package/internal/dev/__tests__/use-render-tracer.test.d.ts.map +1 -0
  206. package/internal/dev/__tests__/use-render-tracer.test.js +55 -0
  207. package/internal/dev/__tests__/use-render-tracer.test.js.map +1 -0
  208. package/internal/dev/dom-counter.d.ts +14 -0
  209. package/internal/dev/dom-counter.d.ts.map +1 -0
  210. package/internal/dev/dom-counter.js +39 -0
  211. package/internal/dev/dom-counter.js.map +1 -0
  212. package/internal/dev/index.d.ts +6 -0
  213. package/internal/dev/index.d.ts.map +1 -0
  214. package/internal/dev/index.js +6 -0
  215. package/internal/dev/index.js.map +1 -0
  216. package/internal/dev/profiler-wrapper.d.ts +16 -0
  217. package/internal/dev/profiler-wrapper.d.ts.map +1 -0
  218. package/internal/dev/profiler-wrapper.js +31 -0
  219. package/internal/dev/profiler-wrapper.js.map +1 -0
  220. package/internal/dev/use-key-stability.d.ts +22 -0
  221. package/internal/dev/use-key-stability.d.ts.map +1 -0
  222. package/internal/dev/use-key-stability.js +67 -0
  223. package/internal/dev/use-key-stability.js.map +1 -0
  224. package/internal/dev/use-render-tracer.d.ts +13 -0
  225. package/internal/dev/use-render-tracer.d.ts.map +1 -0
  226. package/internal/dev/use-render-tracer.js +57 -0
  227. package/internal/dev/use-render-tracer.js.map +1 -0
  228. package/internal/dev/use-stream-rate.d.ts +23 -0
  229. package/internal/dev/use-stream-rate.d.ts.map +1 -0
  230. package/internal/dev/use-stream-rate.js +94 -0
  231. package/internal/dev/use-stream-rate.js.map +1 -0
  232. package/internal/fetch-cache.d.ts +72 -0
  233. package/internal/fetch-cache.d.ts.map +1 -0
  234. package/internal/fetch-cache.js +118 -0
  235. package/internal/fetch-cache.js.map +1 -0
  236. package/internal/store/__tests__/conversation-store.test.d.ts +2 -0
  237. package/internal/store/__tests__/conversation-store.test.d.ts.map +1 -0
  238. package/internal/store/__tests__/conversation-store.test.js +200 -0
  239. package/internal/store/__tests__/conversation-store.test.js.map +1 -0
  240. package/internal/store/__tests__/structural-share.test.d.ts +2 -0
  241. package/internal/store/__tests__/structural-share.test.d.ts.map +1 -0
  242. package/internal/store/__tests__/structural-share.test.js +368 -0
  243. package/internal/store/__tests__/structural-share.test.js.map +1 -0
  244. package/internal/store/conversation-store.d.ts +62 -0
  245. package/internal/store/conversation-store.d.ts.map +1 -0
  246. package/internal/store/conversation-store.js +95 -0
  247. package/internal/store/conversation-store.js.map +1 -0
  248. package/internal/store/index.d.ts +31 -0
  249. package/internal/store/index.d.ts.map +1 -0
  250. package/internal/store/index.js +54 -0
  251. package/internal/store/index.js.map +1 -0
  252. package/internal/store/structural-share.d.ts +13 -0
  253. package/internal/store/structural-share.d.ts.map +1 -0
  254. package/internal/store/structural-share.js +240 -0
  255. package/internal/store/structural-share.js.map +1 -0
  256. package/internal/stream-controller.d.ts +85 -0
  257. package/internal/stream-controller.d.ts.map +1 -0
  258. package/internal/stream-controller.js +146 -0
  259. package/internal/stream-controller.js.map +1 -0
  260. package/internal/useAutoScroll.d.ts +32 -0
  261. package/internal/useAutoScroll.d.ts.map +1 -0
  262. package/internal/useAutoScroll.js +97 -0
  263. package/internal/useAutoScroll.js.map +1 -0
  264. package/internal/useFetch.d.ts +14 -0
  265. package/internal/useFetch.d.ts.map +1 -1
  266. package/internal/useFetch.js +32 -2
  267. package/internal/useFetch.js.map +1 -1
  268. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  269. package/mcp-server/McpServerDetailView.js +3 -3
  270. package/mcp-server/McpServerDetailView.js.map +1 -1
  271. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  272. package/mcp-server/useMcpServerOAuthConnect.js +37 -9
  273. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  274. package/package.json +7 -5
  275. package/session/__tests__/useNewSessionFlow.test.js +16 -0
  276. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  277. package/session/__tests__/usePersistedModel.test.d.ts +2 -0
  278. package/session/__tests__/usePersistedModel.test.d.ts.map +1 -0
  279. package/session/__tests__/usePersistedModel.test.js +82 -0
  280. package/session/__tests__/usePersistedModel.test.js.map +1 -0
  281. package/session/__tests__/useSession.test.d.ts +2 -0
  282. package/session/__tests__/useSession.test.d.ts.map +1 -0
  283. package/session/__tests__/useSession.test.js +130 -0
  284. package/session/__tests__/useSession.test.js.map +1 -0
  285. package/session/useNewSessionFlow.d.ts.map +1 -1
  286. package/session/useNewSessionFlow.js +12 -6
  287. package/session/useNewSessionFlow.js.map +1 -1
  288. package/session/usePersistedModel.d.ts +3 -0
  289. package/session/usePersistedModel.d.ts.map +1 -1
  290. package/session/usePersistedModel.js +27 -2
  291. package/session/usePersistedModel.js.map +1 -1
  292. package/session/useSession.d.ts.map +1 -1
  293. package/session/useSession.js +1 -1
  294. package/session/useSession.js.map +1 -1
  295. package/session/useSessionConversation.d.ts.map +1 -1
  296. package/session/useSessionConversation.js +9 -1
  297. package/session/useSessionConversation.js.map +1 -1
  298. package/session/useSessionExecutions.d.ts.map +1 -1
  299. package/session/useSessionExecutions.js +1 -1
  300. package/session/useSessionExecutions.js.map +1 -1
  301. package/session/useSessionPageFlow.js +1 -1
  302. package/session/useSessionPageFlow.js.map +1 -1
  303. package/session/useSessionUsage.d.ts +24 -40
  304. package/session/useSessionUsage.d.ts.map +1 -1
  305. package/session/useSessionUsage.js +64 -97
  306. package/session/useSessionUsage.js.map +1 -1
  307. package/settings/BillingSection.d.ts +3 -0
  308. package/settings/BillingSection.d.ts.map +1 -0
  309. package/settings/BillingSection.js +3 -0
  310. package/settings/BillingSection.js.map +1 -0
  311. package/settings/index.d.ts +2 -0
  312. package/settings/index.d.ts.map +1 -1
  313. package/settings/index.js +1 -0
  314. package/settings/index.js.map +1 -1
  315. package/settings/settings-nav.js +1 -1
  316. package/settings/settings-nav.js.map +1 -1
  317. package/src/billing/AutoRechargeCard.tsx +274 -0
  318. package/src/billing/BillingSection.tsx +255 -0
  319. package/src/billing/CreditBalanceCard.tsx +81 -0
  320. package/src/billing/CreditLedgerTable.tsx +281 -0
  321. package/src/billing/CreditPackGrid.tsx +132 -0
  322. package/src/billing/LowBalanceBanner.tsx +67 -0
  323. package/src/billing/PaymentMethodCard.tsx +133 -0
  324. package/src/billing/credit-packs.ts +54 -0
  325. package/src/billing/format.ts +97 -0
  326. package/src/billing/index.ts +51 -0
  327. package/src/billing/useBillingAccount.ts +64 -0
  328. package/src/billing/useBillingUsageReport.ts +73 -0
  329. package/src/billing/useCreateBillingPortalSession.ts +76 -0
  330. package/src/billing/useCreateCheckoutSession.ts +101 -0
  331. package/src/billing/useCreditLedger.ts +79 -0
  332. package/src/billing/useCustomerModelPricing.ts +67 -0
  333. package/src/billing/useSetAutoRechargeConfig.ts +90 -0
  334. package/src/composer/ComposerToolbar.tsx +1 -1
  335. package/src/composer/SessionComposer.tsx +22 -4
  336. package/src/composer/__tests__/SessionComposer-memo.test.ts +26 -0
  337. package/src/execution/ApprovalCard.tsx +7 -3
  338. package/src/execution/ExecutionPhaseBadge.tsx +3 -2
  339. package/src/execution/MessageEntry.tsx +27 -16
  340. package/src/execution/MessageThread.tsx +308 -131
  341. package/src/execution/SetupProgress.tsx +3 -3
  342. package/src/execution/SubAgentSection.tsx +14 -6
  343. package/src/execution/ThreadSkeleton.tsx +73 -0
  344. package/src/execution/ToolCallGroup.tsx +36 -3
  345. package/src/execution/UsageWidget.tsx +1 -1
  346. package/src/execution/__tests__/message-entry.test.tsx +236 -0
  347. package/src/execution/__tests__/thread-keys.test.ts +409 -0
  348. package/src/execution/__tests__/thread-memoization.test.ts +320 -0
  349. package/src/execution/__tests__/thread-skeleton.test.tsx +44 -0
  350. package/src/execution/__tests__/useExecutionStream.test.tsx +109 -12
  351. package/src/execution/__tests__/useSessionVariables-stability.test.ts +95 -0
  352. package/src/execution/__tests__/virtualized-thread.test.tsx +401 -0
  353. package/src/execution/index.ts +3 -0
  354. package/src/execution/useExecutionStream.ts +123 -48
  355. package/src/execution/useSessionVariables.ts +17 -12
  356. package/src/github/useGitHubConnection.ts +18 -13
  357. package/src/identity-account/index.ts +5 -0
  358. package/src/identity-account/useIdentityAccountGate.ts +163 -0
  359. package/src/index.ts +73 -0
  360. package/src/internal/FetchCacheProvider.tsx +74 -0
  361. package/src/internal/JumpToLatestButton.tsx +61 -0
  362. package/src/internal/ThreadItemWrapper.tsx +65 -0
  363. package/src/internal/VirtualizedThread.tsx +162 -0
  364. package/src/internal/__tests__/fetch-cache.test.ts +230 -0
  365. package/src/internal/__tests__/stream-controller.test.ts +395 -0
  366. package/src/internal/__tests__/thread-animation.test.tsx +121 -0
  367. package/src/internal/__tests__/useAutoScroll.test.tsx +261 -0
  368. package/src/internal/__tests__/useFetch-cache.test.ts +214 -0
  369. package/src/internal/dev/__tests__/use-key-stability.test.ts +124 -0
  370. package/src/internal/dev/__tests__/use-render-tracer.test.ts +78 -0
  371. package/src/internal/dev/dom-counter.ts +47 -0
  372. package/src/internal/dev/index.ts +5 -0
  373. package/src/internal/dev/profiler-wrapper.tsx +52 -0
  374. package/src/internal/dev/use-key-stability.ts +86 -0
  375. package/src/internal/dev/use-render-tracer.ts +70 -0
  376. package/src/internal/dev/use-stream-rate.ts +138 -0
  377. package/src/internal/fetch-cache.ts +155 -0
  378. package/src/internal/store/__tests__/conversation-store.test.ts +257 -0
  379. package/src/internal/store/__tests__/structural-share.test.ts +454 -0
  380. package/src/internal/store/conversation-store.ts +128 -0
  381. package/src/internal/store/index.ts +68 -0
  382. package/src/internal/store/structural-share.ts +318 -0
  383. package/src/internal/stream-controller.ts +201 -0
  384. package/src/internal/useAutoScroll.ts +121 -0
  385. package/src/internal/useFetch.ts +51 -2
  386. package/src/mcp-server/McpServerDetailView.tsx +15 -0
  387. package/src/mcp-server/useMcpServerOAuthConnect.ts +37 -9
  388. package/src/session/__tests__/useNewSessionFlow.test.tsx +22 -0
  389. package/src/session/__tests__/usePersistedModel.test.tsx +117 -0
  390. package/src/session/__tests__/useSession.test.tsx +187 -0
  391. package/src/session/useNewSessionFlow.ts +12 -6
  392. package/src/session/usePersistedModel.ts +28 -2
  393. package/src/session/useSession.ts +1 -0
  394. package/src/session/useSessionConversation.ts +11 -2
  395. package/src/session/useSessionExecutions.ts +1 -0
  396. package/src/session/useSessionPageFlow.ts +1 -1
  397. package/src/session/useSessionUsage.ts +102 -123
  398. package/src/settings/BillingSection.tsx +4 -0
  399. package/src/settings/index.ts +2 -0
  400. package/src/settings/settings-nav.ts +1 -1
  401. package/src/styles.css +31 -0
  402. package/src/usage/AgentBreakdownList.tsx +147 -0
  403. package/src/usage/CreditRunwayIndicator.tsx +71 -0
  404. package/src/usage/ExportButton.tsx +115 -0
  405. package/src/usage/HarnessSplitCard.tsx +103 -0
  406. package/src/usage/OrgUsagePanel.tsx +109 -45
  407. package/src/usage/index.ts +15 -0
  408. package/src/usage/useExportCSV.ts +115 -0
  409. package/src/usage/useOrgUsageReport.ts +2 -1
  410. package/src/workspace/__tests__/useWorkspaceEntries-stability.test.ts +76 -0
  411. package/src/workspace/useWorkspaceEntries.ts +16 -11
  412. package/styles.css +1 -1
  413. package/usage/AgentBreakdownList.d.ts +21 -0
  414. package/usage/AgentBreakdownList.d.ts.map +1 -0
  415. package/usage/AgentBreakdownList.js +44 -0
  416. package/usage/AgentBreakdownList.js.map +1 -0
  417. package/usage/CreditRunwayIndicator.d.ts +21 -0
  418. package/usage/CreditRunwayIndicator.d.ts.map +1 -0
  419. package/usage/CreditRunwayIndicator.js +38 -0
  420. package/usage/CreditRunwayIndicator.js.map +1 -0
  421. package/usage/ExportButton.d.ts +20 -0
  422. package/usage/ExportButton.d.ts.map +1 -0
  423. package/usage/ExportButton.js +36 -0
  424. package/usage/ExportButton.js.map +1 -0
  425. package/usage/HarnessSplitCard.d.ts +17 -0
  426. package/usage/HarnessSplitCard.d.ts.map +1 -0
  427. package/usage/HarnessSplitCard.js +38 -0
  428. package/usage/HarnessSplitCard.js.map +1 -0
  429. package/usage/OrgUsagePanel.d.ts.map +1 -1
  430. package/usage/OrgUsagePanel.js +30 -22
  431. package/usage/OrgUsagePanel.js.map +1 -1
  432. package/usage/index.d.ts +10 -0
  433. package/usage/index.d.ts.map +1 -1
  434. package/usage/index.js +5 -0
  435. package/usage/index.js.map +1 -1
  436. package/usage/useExportCSV.d.ts +23 -0
  437. package/usage/useExportCSV.d.ts.map +1 -0
  438. package/usage/useExportCSV.js +81 -0
  439. package/usage/useExportCSV.js.map +1 -0
  440. package/usage/useOrgUsageReport.d.ts +2 -1
  441. package/usage/useOrgUsageReport.d.ts.map +1 -1
  442. package/usage/useOrgUsageReport.js +2 -1
  443. package/usage/useOrgUsageReport.js.map +1 -1
  444. package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts +2 -0
  445. package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts.map +1 -0
  446. package/workspace/__tests__/useWorkspaceEntries-stability.test.js +57 -0
  447. package/workspace/__tests__/useWorkspaceEntries-stability.test.js.map +1 -0
  448. package/workspace/useWorkspaceEntries.d.ts.map +1 -1
  449. package/workspace/useWorkspaceEntries.js +5 -4
  450. package/workspace/useWorkspaceEntries.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-render-tracer.js","sourceRoot":"","sources":["../../../src/internal/dev/use-render-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,KAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAiC,IAAI,CAAC,CAAC;IAE7D,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAE7B,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,sBAAsB,aAAa,EAAE;YACrC,WAAW,KAAK,EAAE;SACnB,CAAC;QAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAClC,CAAC,CAAC,YAAY,CACjB,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Imperative tracker returned by {@link useStreamRate}.
3
+ *
4
+ * Call `tick()` on each stream snapshot inside the `for await` loop.
5
+ * Call `summary()` when the stream ends to log aggregate stats.
6
+ */
7
+ export interface StreamRateTracker {
8
+ /** Record a stream snapshot arrival. */
9
+ tick(messageCount: number): void;
10
+ /** Log aggregate statistics for the completed stream. */
11
+ summary(): void;
12
+ }
13
+ /**
14
+ * Dev-only hook that returns an imperative {@link StreamRateTracker}.
15
+ *
16
+ * The tracker is designed to be called inside a `useEffect` async
17
+ * loop (not during render), so it uses a ref-backed mutable object
18
+ * rather than React state.
19
+ *
20
+ * In production the hook returns a no-op tracker.
21
+ */
22
+ export declare function useStreamRate(): StreamRateTracker;
23
+ //# sourceMappingURL=use-stream-rate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-stream-rate.d.ts","sourceRoot":"","sources":["../../../src/internal/dev/use-stream-rate.ts"],"names":[],"mappings":"AAmBA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,CAsEjD"}
@@ -0,0 +1,94 @@
1
+ import { useRef } from "react";
2
+ const DEV = process.env.NODE_ENV !== "production";
3
+ /** Rolling window size for interval statistics. */
4
+ const WINDOW_SIZE = 30;
5
+ /** Log a sampled line every Nth tick. */
6
+ const LOG_EVERY = 10;
7
+ const NOOP_TRACKER = {
8
+ tick() { },
9
+ summary() { },
10
+ };
11
+ /**
12
+ * Dev-only hook that returns an imperative {@link StreamRateTracker}.
13
+ *
14
+ * The tracker is designed to be called inside a `useEffect` async
15
+ * loop (not during render), so it uses a ref-backed mutable object
16
+ * rather than React state.
17
+ *
18
+ * In production the hook returns a no-op tracker.
19
+ */
20
+ export function useStreamRate() {
21
+ const stateRef = useRef(null);
22
+ if (!DEV)
23
+ return NOOP_TRACKER;
24
+ if (!stateRef.current) {
25
+ stateRef.current = {
26
+ tickCount: 0,
27
+ timestamps: [],
28
+ prevMessageCount: 0,
29
+ };
30
+ }
31
+ const state = stateRef.current;
32
+ const tracker = {
33
+ tick(messageCount) {
34
+ const now = performance.now();
35
+ state.tickCount += 1;
36
+ state.timestamps.push(now);
37
+ if (state.timestamps.length > WINDOW_SIZE) {
38
+ state.timestamps.shift();
39
+ }
40
+ const delta = messageCount - state.prevMessageCount;
41
+ state.prevMessageCount = messageCount;
42
+ if (state.tickCount % LOG_EVERY === 0 || state.tickCount === 1) {
43
+ const intervals = computeIntervals(state.timestamps);
44
+ const parts = [
45
+ `[stgm:perf:stream] tick #${state.tickCount}`,
46
+ `messages=${messageCount}`,
47
+ `delta=+${delta}`,
48
+ ];
49
+ if (intervals) {
50
+ parts.push(`interval=${intervals.avg.toFixed(0)}ms`, `rate=${intervals.rate.toFixed(1)}/s`);
51
+ }
52
+ console.debug(parts.join(" "));
53
+ }
54
+ },
55
+ summary() {
56
+ if (state.tickCount === 0)
57
+ return;
58
+ const intervals = computeIntervals(state.timestamps);
59
+ const parts = [
60
+ `[stgm:perf:stream] ✓ stream complete`,
61
+ `totalTicks=${state.tickCount}`,
62
+ `finalMessages=${state.prevMessageCount}`,
63
+ ];
64
+ if (intervals) {
65
+ parts.push(`avgInterval=${intervals.avg.toFixed(0)}ms`, `minInterval=${intervals.min.toFixed(0)}ms`, `maxInterval=${intervals.max.toFixed(0)}ms`, `avgRate=${intervals.rate.toFixed(1)}/s`);
66
+ }
67
+ console.debug(parts.join(" "));
68
+ state.tickCount = 0;
69
+ state.timestamps.length = 0;
70
+ state.prevMessageCount = 0;
71
+ },
72
+ };
73
+ return tracker;
74
+ }
75
+ function computeIntervals(timestamps) {
76
+ if (timestamps.length < 2)
77
+ return null;
78
+ let min = Infinity;
79
+ let max = 0;
80
+ let sum = 0;
81
+ const count = timestamps.length - 1;
82
+ for (let i = 1; i < timestamps.length; i++) {
83
+ const dt = timestamps[i] - timestamps[i - 1];
84
+ sum += dt;
85
+ if (dt < min)
86
+ min = dt;
87
+ if (dt > max)
88
+ max = dt;
89
+ }
90
+ const avg = sum / count;
91
+ const rate = avg > 0 ? 1000 / avg : 0;
92
+ return { min, max, avg, rate };
93
+ }
94
+ //# sourceMappingURL=use-stream-rate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-stream-rate.js","sourceRoot":"","sources":["../../../src/internal/dev/use-stream-rate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Lightweight keyed cache that survives React component remounts.
3
+ *
4
+ * Designed to sit above remount boundaries (via {@link FetchCacheProvider})
5
+ * so hooks backed by `useFetch` can seed their initial state from a
6
+ * previous mount's result instead of showing a loading skeleton.
7
+ *
8
+ * This is **not** a query library. It intentionally omits deduplication,
9
+ * automatic background refetch, retry, devtools, and suspense integration.
10
+ * `useFetch` already provides stale-while-revalidate semantics — this
11
+ * class only gives it memory across mounts.
12
+ *
13
+ * @internal Consumed by `useFetch` via context; not part of the public
14
+ * `@stigmer/react` API surface. The `FetchCacheProvider` component is
15
+ * the public entry point.
16
+ */
17
+ /** Configuration for `FetchCache`. */
18
+ export interface FetchCacheOptions {
19
+ /**
20
+ * Maximum number of entries before the oldest are evicted.
21
+ * @default 100
22
+ */
23
+ readonly maxEntries?: number;
24
+ /**
25
+ * Time-to-live in milliseconds. Entries older than this are
26
+ * treated as missing on read and lazily purged.
27
+ * @default 300_000 (5 minutes)
28
+ */
29
+ readonly ttl?: number;
30
+ }
31
+ export declare class FetchCache {
32
+ private readonly _entries;
33
+ private readonly _maxEntries;
34
+ private readonly _ttl;
35
+ constructor(options?: FetchCacheOptions);
36
+ /**
37
+ * Retrieve a cached value. Returns `undefined` when the key is
38
+ * missing or the entry has expired.
39
+ */
40
+ get<T>(key: string): T | undefined;
41
+ /** `true` when a non-expired entry exists for `key`. */
42
+ has(key: string): boolean;
43
+ /** Write (or overwrite) a cache entry and evict if over capacity. */
44
+ set(key: string, data: unknown): void;
45
+ /** Remove a single entry. */
46
+ invalidate(key: string): void;
47
+ /**
48
+ * Remove all entries whose key starts with `prefix`.
49
+ *
50
+ * Useful for bulk invalidation scoped to a resource type
51
+ * (e.g. `invalidatePrefix("session:")` on logout).
52
+ */
53
+ invalidatePrefix(prefix: string): void;
54
+ /**
55
+ * Fire-and-forget fetch that writes the result to the cache.
56
+ * Errors are silently swallowed — the worst case is a cache miss.
57
+ */
58
+ prefetch<T>(key: string, fetchFn: () => Promise<T>): void;
59
+ /** Drop all entries. */
60
+ clear(): void;
61
+ /** Number of live (non-expired) entries. Mainly useful in tests. */
62
+ get size(): number;
63
+ private _isExpired;
64
+ /**
65
+ * Evict the oldest entries (by insertion order) when the cache
66
+ * exceeds `maxEntries`. Because `Map` preserves insertion order
67
+ * and `set` always re-inserts at the tail, the iterator yields
68
+ * entries from oldest to newest — giving us LRU eviction.
69
+ */
70
+ private _evict;
71
+ }
72
+ //# sourceMappingURL=fetch-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-cache.d.ts","sourceRoot":"","sources":["../../src/internal/fetch-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,OAAO,CAAC,EAAE,iBAAiB;IAKvC;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAUlC,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,qEAAqE;IACrE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAQrC,6BAA6B;IAC7B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQtC;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IASzD,wBAAwB;IACxB,KAAK,IAAI,IAAI;IAIb,oEAAoE;IACpE,IAAI,IAAI,IAAI,MAAM,CAMjB;IAMD,OAAO,CAAC,UAAU;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,MAAM;CAUf"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Lightweight keyed cache that survives React component remounts.
3
+ *
4
+ * Designed to sit above remount boundaries (via {@link FetchCacheProvider})
5
+ * so hooks backed by `useFetch` can seed their initial state from a
6
+ * previous mount's result instead of showing a loading skeleton.
7
+ *
8
+ * This is **not** a query library. It intentionally omits deduplication,
9
+ * automatic background refetch, retry, devtools, and suspense integration.
10
+ * `useFetch` already provides stale-while-revalidate semantics — this
11
+ * class only gives it memory across mounts.
12
+ *
13
+ * @internal Consumed by `useFetch` via context; not part of the public
14
+ * `@stigmer/react` API surface. The `FetchCacheProvider` component is
15
+ * the public entry point.
16
+ */
17
+ // ---------------------------------------------------------------------------
18
+ // FetchCache
19
+ // ---------------------------------------------------------------------------
20
+ export class FetchCache {
21
+ _entries = new Map();
22
+ _maxEntries;
23
+ _ttl;
24
+ constructor(options) {
25
+ this._maxEntries = options?.maxEntries ?? 100;
26
+ this._ttl = options?.ttl ?? 5 * 60 * 1_000;
27
+ }
28
+ /**
29
+ * Retrieve a cached value. Returns `undefined` when the key is
30
+ * missing or the entry has expired.
31
+ */
32
+ get(key) {
33
+ const entry = this._entries.get(key);
34
+ if (!entry)
35
+ return undefined;
36
+ if (this._isExpired(entry)) {
37
+ this._entries.delete(key);
38
+ return undefined;
39
+ }
40
+ return entry.data;
41
+ }
42
+ /** `true` when a non-expired entry exists for `key`. */
43
+ has(key) {
44
+ return this.get(key) !== undefined;
45
+ }
46
+ /** Write (or overwrite) a cache entry and evict if over capacity. */
47
+ set(key, data) {
48
+ // Delete first so the re-insertion moves `key` to the end of
49
+ // the Map's insertion order — gives us LRU semantics for free.
50
+ this._entries.delete(key);
51
+ this._entries.set(key, { data, timestamp: Date.now() });
52
+ this._evict();
53
+ }
54
+ /** Remove a single entry. */
55
+ invalidate(key) {
56
+ this._entries.delete(key);
57
+ }
58
+ /**
59
+ * Remove all entries whose key starts with `prefix`.
60
+ *
61
+ * Useful for bulk invalidation scoped to a resource type
62
+ * (e.g. `invalidatePrefix("session:")` on logout).
63
+ */
64
+ invalidatePrefix(prefix) {
65
+ for (const key of this._entries.keys()) {
66
+ if (key.startsWith(prefix)) {
67
+ this._entries.delete(key);
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Fire-and-forget fetch that writes the result to the cache.
73
+ * Errors are silently swallowed — the worst case is a cache miss.
74
+ */
75
+ prefetch(key, fetchFn) {
76
+ fetchFn().then((data) => this.set(key, data), () => {
77
+ /* intentional no-op */
78
+ });
79
+ }
80
+ /** Drop all entries. */
81
+ clear() {
82
+ this._entries.clear();
83
+ }
84
+ /** Number of live (non-expired) entries. Mainly useful in tests. */
85
+ get size() {
86
+ // Lazy purge expired entries on size read so the count is accurate.
87
+ for (const [key, entry] of this._entries) {
88
+ if (this._isExpired(entry))
89
+ this._entries.delete(key);
90
+ }
91
+ return this._entries.size;
92
+ }
93
+ // -----------------------------------------------------------------------
94
+ // Private
95
+ // -----------------------------------------------------------------------
96
+ _isExpired(entry) {
97
+ return Date.now() - entry.timestamp > this._ttl;
98
+ }
99
+ /**
100
+ * Evict the oldest entries (by insertion order) when the cache
101
+ * exceeds `maxEntries`. Because `Map` preserves insertion order
102
+ * and `set` always re-inserts at the tail, the iterator yields
103
+ * entries from oldest to newest — giving us LRU eviction.
104
+ */
105
+ _evict() {
106
+ if (this._entries.size <= this._maxEntries)
107
+ return;
108
+ const excess = this._entries.size - this._maxEntries;
109
+ const iter = this._entries.keys();
110
+ for (let i = 0; i < excess; i++) {
111
+ const { value: key, done } = iter.next();
112
+ if (done)
113
+ break;
114
+ this._entries.delete(key);
115
+ }
116
+ }
117
+ }
118
+ //# sourceMappingURL=fetch-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-cache.js","sourceRoot":"","sources":["../../src/internal/fetch-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-store.test.d.ts","sourceRoot":"","sources":["../../../../src/internal/store/__tests__/conversation-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,200 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { create } from "@bufbuild/protobuf";
3
+ import { AgentExecutionSchema, AgentExecutionStatusSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
4
+ import { AgentMessageSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
5
+ import { ExecutionPhase, MessageType, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
6
+ import { ConversationStore } from "../conversation-store";
7
+ // ---------------------------------------------------------------------------
8
+ // Helpers
9
+ // ---------------------------------------------------------------------------
10
+ function makeExec(phase, messages) {
11
+ const exec = create(AgentExecutionSchema);
12
+ const status = create(AgentExecutionStatusSchema);
13
+ status.phase = phase;
14
+ if (messages) {
15
+ status.messages = messages.map((m) => {
16
+ const msg = create(AgentMessageSchema);
17
+ msg.type = m.type;
18
+ msg.content = m.content;
19
+ return msg;
20
+ });
21
+ }
22
+ exec.status = status;
23
+ return exec;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Tests
27
+ // ---------------------------------------------------------------------------
28
+ describe("ConversationStore", () => {
29
+ describe("initial state", () => {
30
+ it("starts with null execution and idle stream state", () => {
31
+ const store = new ConversationStore();
32
+ expect(store.getExecution()).toBeNull();
33
+ expect(store.getStreamState()).toEqual({ stage: "idle" });
34
+ });
35
+ });
36
+ describe("subscribe / unsubscribe", () => {
37
+ it("notifies listeners on state changes", () => {
38
+ const store = new ConversationStore();
39
+ const listener = vi.fn();
40
+ store.subscribe(listener);
41
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
42
+ expect(listener).toHaveBeenCalledTimes(1);
43
+ });
44
+ it("stops notifying after unsubscribe", () => {
45
+ const store = new ConversationStore();
46
+ const listener = vi.fn();
47
+ const unsub = store.subscribe(listener);
48
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
49
+ expect(listener).toHaveBeenCalledTimes(1);
50
+ unsub();
51
+ store.setStreamState({ stage: "streaming", executionId: "e1" });
52
+ expect(listener).toHaveBeenCalledTimes(1);
53
+ });
54
+ it("supports multiple listeners", () => {
55
+ const store = new ConversationStore();
56
+ const l1 = vi.fn();
57
+ const l2 = vi.fn();
58
+ store.subscribe(l1);
59
+ store.subscribe(l2);
60
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
61
+ expect(l1).toHaveBeenCalledTimes(1);
62
+ expect(l2).toHaveBeenCalledTimes(1);
63
+ });
64
+ });
65
+ describe("ingestSnapshot", () => {
66
+ it("stores execution and notifies listeners", () => {
67
+ const store = new ConversationStore();
68
+ const listener = vi.fn();
69
+ store.subscribe(listener);
70
+ const snapshot = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
71
+ { type: MessageType.MESSAGE_AI, content: "hello" },
72
+ ]);
73
+ store.ingestSnapshot(snapshot);
74
+ expect(store.getExecution()).toBe(snapshot);
75
+ expect(listener).toHaveBeenCalledTimes(1);
76
+ });
77
+ it("does not notify when structural sharing produces the same reference", () => {
78
+ const store = new ConversationStore();
79
+ const snapshot = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
80
+ { type: MessageType.MESSAGE_AI, content: "hello" },
81
+ ]);
82
+ store.ingestSnapshot(snapshot);
83
+ const listener = vi.fn();
84
+ store.subscribe(listener);
85
+ const identical = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
86
+ { type: MessageType.MESSAGE_AI, content: "hello" },
87
+ ]);
88
+ store.ingestSnapshot(identical);
89
+ expect(listener).not.toHaveBeenCalled();
90
+ expect(store.getExecution()).toBe(snapshot);
91
+ });
92
+ it("applies structural sharing: preserves unchanged message refs", () => {
93
+ const store = new ConversationStore();
94
+ const snap1 = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
95
+ { type: MessageType.MESSAGE_HUMAN, content: "question" },
96
+ { type: MessageType.MESSAGE_AI, content: "partial" },
97
+ ]);
98
+ store.ingestSnapshot(snap1);
99
+ const prevMsgs = store.getExecution().status.messages;
100
+ const humanMsg = prevMsgs[0];
101
+ const snap2 = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
102
+ { type: MessageType.MESSAGE_HUMAN, content: "question" },
103
+ { type: MessageType.MESSAGE_AI, content: "partial answer growing" },
104
+ ]);
105
+ store.ingestSnapshot(snap2);
106
+ const result = store.getExecution();
107
+ expect(result.status.messages[0]).toBe(humanMsg);
108
+ expect(result.status.messages[1].content).toBe("partial answer growing");
109
+ });
110
+ });
111
+ describe("setStreamState", () => {
112
+ it("transitions between stages and notifies", () => {
113
+ const store = new ConversationStore();
114
+ const listener = vi.fn();
115
+ store.subscribe(listener);
116
+ const states = [
117
+ { stage: "connecting", executionId: "e1" },
118
+ { stage: "streaming", executionId: "e1" },
119
+ { stage: "complete", executionId: "e1" },
120
+ ];
121
+ for (const state of states) {
122
+ store.setStreamState(state);
123
+ }
124
+ expect(listener).toHaveBeenCalledTimes(3);
125
+ expect(store.getStreamState()).toEqual({
126
+ stage: "complete",
127
+ executionId: "e1",
128
+ });
129
+ });
130
+ it("does not notify when set to the same state", () => {
131
+ const store = new ConversationStore();
132
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
133
+ const listener = vi.fn();
134
+ store.subscribe(listener);
135
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
136
+ expect(listener).not.toHaveBeenCalled();
137
+ });
138
+ it("handles error state", () => {
139
+ const store = new ConversationStore();
140
+ const err = new Error("network failure");
141
+ store.setStreamState({ stage: "error", executionId: "e1", error: err });
142
+ const state = store.getStreamState();
143
+ expect(state.stage).toBe("error");
144
+ if (state.stage === "error") {
145
+ expect(state.error).toBe(err);
146
+ }
147
+ });
148
+ });
149
+ describe("reset", () => {
150
+ it("clears execution and stream state", () => {
151
+ const store = new ConversationStore();
152
+ store.ingestSnapshot(makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS, [
153
+ { type: MessageType.MESSAGE_AI, content: "hi" },
154
+ ]));
155
+ store.setStreamState({ stage: "streaming", executionId: "e1" });
156
+ const listener = vi.fn();
157
+ store.subscribe(listener);
158
+ store.reset();
159
+ expect(store.getExecution()).toBeNull();
160
+ expect(store.getStreamState()).toEqual({ stage: "idle" });
161
+ expect(listener).toHaveBeenCalledTimes(1);
162
+ });
163
+ it("does not notify when already in initial state", () => {
164
+ const store = new ConversationStore();
165
+ const listener = vi.fn();
166
+ store.subscribe(listener);
167
+ store.reset();
168
+ expect(listener).not.toHaveBeenCalled();
169
+ });
170
+ });
171
+ describe("getExecution / getStreamState referential stability", () => {
172
+ it("getExecution returns the same reference across calls when unchanged", () => {
173
+ const store = new ConversationStore();
174
+ const snap = makeExec(ExecutionPhase.EXECUTION_IN_PROGRESS);
175
+ store.ingestSnapshot(snap);
176
+ const ref1 = store.getExecution();
177
+ const ref2 = store.getExecution();
178
+ expect(ref1).toBe(ref2);
179
+ });
180
+ it("getStreamState returns the same reference across calls when unchanged", () => {
181
+ const store = new ConversationStore();
182
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
183
+ const ref1 = store.getStreamState();
184
+ const ref2 = store.getStreamState();
185
+ expect(ref1).toBe(ref2);
186
+ });
187
+ it("subscribe and getters are bound methods (safe to destructure)", () => {
188
+ const store = new ConversationStore();
189
+ const { subscribe, getExecution, getStreamState } = store;
190
+ expect(getExecution()).toBeNull();
191
+ expect(getStreamState()).toEqual({ stage: "idle" });
192
+ const listener = vi.fn();
193
+ const unsub = subscribe(listener);
194
+ store.setStreamState({ stage: "connecting", executionId: "e1" });
195
+ expect(listener).toHaveBeenCalledTimes(1);
196
+ unsub();
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=conversation-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-store.test.js","sourceRoot":"","sources":["../../../../src/internal/store/__tests__/conversation-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=structural-share.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural-share.test.d.ts","sourceRoot":"","sources":["../../../../src/internal/store/__tests__/structural-share.test.ts"],"names":[],"mappings":""}