@buoy-gg/ask-buoy 7.0.35 → 7.0.38

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 (286) hide show
  1. package/README.md +73 -15
  2. package/lib/commonjs/blocks/AskBlocks.js +1 -338
  3. package/lib/commonjs/blocks/BlockRenderer.js +1 -250
  4. package/lib/commonjs/blocks/ChromePrototypes.js +1 -514
  5. package/lib/commonjs/blocks/DataBlocks.js +1 -688
  6. package/lib/commonjs/blocks/ExtraBlocks.js +1 -1854
  7. package/lib/commonjs/blocks/MediaBlocks.js +1 -140
  8. package/lib/commonjs/blocks/ReceiptBlocks.js +1 -586
  9. package/lib/commonjs/blocks/blockText.js +1 -0
  10. package/lib/commonjs/blocks/blockText.test.js +1 -0
  11. package/lib/commonjs/blocks/context.js +1 -42
  12. package/lib/commonjs/blocks/icons.js +1 -96
  13. package/lib/commonjs/blocks/index.js +1 -95
  14. package/lib/commonjs/blocks/listRow.test.js +1 -55
  15. package/lib/commonjs/blocks/pageState.js +1 -34
  16. package/lib/commonjs/blocks/pageState.test.js +1 -57
  17. package/lib/commonjs/blocks/primitives.js +1 -401
  18. package/lib/commonjs/blocks/primitivesIndex.js +1 -62
  19. package/lib/commonjs/components/ApprovalCard.js +1 -140
  20. package/lib/commonjs/components/AskBuoyHeader.js +1 -164
  21. package/lib/commonjs/components/AskBuoyIcon.js +1 -19
  22. package/lib/commonjs/components/AskBuoyModal.js +1 -353
  23. package/lib/commonjs/components/AskBuoySettings.js +1 -69
  24. package/lib/commonjs/components/ChangesBar.js +1 -211
  25. package/lib/commonjs/components/Composer.js +1 -175
  26. package/lib/commonjs/components/EmptyState.js +1 -154
  27. package/lib/commonjs/components/KeyboardPad.js +1 -0
  28. package/lib/commonjs/components/Markdown.js +1 -252
  29. package/lib/commonjs/components/MessageList.js +1 -683
  30. package/lib/commonjs/components/QueuedMessages.js +1 -0
  31. package/lib/commonjs/components/ThinkingStrip.js +1 -223
  32. package/lib/commonjs/components/TypingDots.js +1 -63
  33. package/lib/commonjs/components/markdownParse.js +1 -0
  34. package/lib/commonjs/components/markdownParse.test.js +1 -0
  35. package/lib/commonjs/components/useCopyAction.js +1 -50
  36. package/lib/commonjs/index.js +1 -252
  37. package/lib/commonjs/preset.js +1 -90
  38. package/lib/commonjs/store/activityGroups.js +1 -0
  39. package/lib/commonjs/store/activityGroups.test.js +1 -0
  40. package/lib/commonjs/store/askBuoySettings.js +1 -67
  41. package/lib/commonjs/store/askBuoyStore.js +1 -365
  42. package/lib/commonjs/store/blockPlacement.js +1 -0
  43. package/lib/commonjs/store/blockPlacement.test.js +1 -0
  44. package/lib/commonjs/store/queue.test.js +1 -0
  45. package/lib/commonjs/store/resetConversation.js +1 -0
  46. package/lib/commonjs/store/restorePending.test.js +1 -0
  47. package/lib/commonjs/store/restoredIds.test.js +1 -47
  48. package/lib/commonjs/store/suggestions.js +1 -0
  49. package/lib/commonjs/store/suggestions.test.js +1 -0
  50. package/lib/commonjs/store/systemLine.test.js +1 -0
  51. package/lib/commonjs/store/ticketPrompt.js +1 -0
  52. package/lib/commonjs/store/traceText.js +1 -81
  53. package/lib/commonjs/store/traceText.test.js +1 -112
  54. package/lib/commonjs/store/transcriptPersistence.js +1 -208
  55. package/lib/commonjs/store/transcriptPersistence.test.js +1 -185
  56. package/lib/commonjs/store/turnRendering.test.js +1 -0
  57. package/lib/commonjs/store/useAskBuoy.js +1 -400
  58. package/lib/commonjs/store/useAskBuoySettings.js +1 -14
  59. package/lib/commonjs/sync/askBuoySyncAdapter.js +1 -119
  60. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +1 -141
  61. package/lib/commonjs/sync/wire.js +1 -58
  62. package/lib/commonjs/types.js +1 -6
  63. package/lib/module/blocks/AskBlocks.js +1 -331
  64. package/lib/module/blocks/BlockRenderer.js +1 -245
  65. package/lib/module/blocks/ChromePrototypes.js +1 -503
  66. package/lib/module/blocks/DataBlocks.js +1 -674
  67. package/lib/module/blocks/ExtraBlocks.js +1 -1827
  68. package/lib/module/blocks/MediaBlocks.js +1 -135
  69. package/lib/module/blocks/ReceiptBlocks.js +1 -574
  70. package/lib/module/blocks/blockText.js +1 -0
  71. package/lib/module/blocks/blockText.test.js +1 -0
  72. package/lib/module/blocks/context.js +1 -35
  73. package/lib/module/blocks/icons.js +1 -91
  74. package/lib/module/blocks/index.js +1 -8
  75. package/lib/module/blocks/listRow.test.js +1 -56
  76. package/lib/module/blocks/pageState.js +1 -30
  77. package/lib/module/blocks/pageState.test.js +1 -56
  78. package/lib/module/blocks/primitives.js +1 -389
  79. package/lib/module/blocks/primitivesIndex.js +1 -5
  80. package/lib/module/components/ApprovalCard.js +1 -135
  81. package/lib/module/components/AskBuoyHeader.js +1 -161
  82. package/lib/module/components/AskBuoyIcon.js +1 -8
  83. package/lib/module/components/AskBuoyModal.js +1 -348
  84. package/lib/module/components/AskBuoySettings.js +1 -64
  85. package/lib/module/components/ChangesBar.js +1 -206
  86. package/lib/module/components/Composer.js +1 -170
  87. package/lib/module/components/EmptyState.js +1 -149
  88. package/lib/module/components/KeyboardPad.js +1 -0
  89. package/lib/module/components/Markdown.js +1 -246
  90. package/lib/module/components/MessageList.js +1 -677
  91. package/lib/module/components/QueuedMessages.js +1 -0
  92. package/lib/module/components/ThinkingStrip.js +1 -218
  93. package/lib/module/components/TypingDots.js +1 -58
  94. package/lib/module/components/markdownParse.js +1 -0
  95. package/lib/module/components/markdownParse.test.js +1 -0
  96. package/lib/module/components/useCopyAction.js +1 -46
  97. package/lib/module/index.js +1 -34
  98. package/lib/module/preset.js +1 -73
  99. package/lib/module/store/activityGroups.js +1 -0
  100. package/lib/module/store/activityGroups.test.js +1 -0
  101. package/lib/module/store/askBuoySettings.js +1 -62
  102. package/lib/module/store/askBuoyStore.js +1 -361
  103. package/lib/module/store/blockPlacement.js +1 -0
  104. package/lib/module/store/blockPlacement.test.js +1 -0
  105. package/lib/module/store/queue.test.js +1 -0
  106. package/lib/module/store/resetConversation.js +1 -0
  107. package/lib/module/store/restorePending.test.js +1 -0
  108. package/lib/module/store/restoredIds.test.js +1 -46
  109. package/lib/module/store/suggestions.js +1 -0
  110. package/lib/module/store/suggestions.test.js +1 -0
  111. package/lib/module/store/systemLine.test.js +1 -0
  112. package/lib/module/store/ticketPrompt.js +1 -0
  113. package/lib/module/store/traceText.js +1 -75
  114. package/lib/module/store/traceText.test.js +1 -111
  115. package/lib/module/store/transcriptPersistence.js +1 -198
  116. package/lib/module/store/transcriptPersistence.test.js +1 -184
  117. package/lib/module/store/turnRendering.test.js +1 -0
  118. package/lib/module/store/useAskBuoy.js +1 -394
  119. package/lib/module/store/useAskBuoySettings.js +1 -9
  120. package/lib/module/sync/askBuoySyncAdapter.js +1 -114
  121. package/lib/module/sync/askBuoySyncAdapter.test.js +1 -140
  122. package/lib/module/sync/wire.js +1 -47
  123. package/lib/module/types.js +1 -4
  124. package/lib/typescript/blocks/DataBlocks.d.ts +11 -0
  125. package/lib/typescript/blocks/ExtraBlocks.d.ts +18 -2
  126. package/lib/typescript/blocks/blockText.d.ts +14 -0
  127. package/lib/typescript/blocks/blockText.test.d.ts +2 -0
  128. package/lib/typescript/blocks/primitives.d.ts +16 -1
  129. package/lib/typescript/components/ApprovalCard.d.ts +9 -1
  130. package/lib/typescript/components/AskBuoyHeader.d.ts +31 -1
  131. package/lib/typescript/components/Composer.d.ts +16 -1
  132. package/lib/typescript/components/EmptyState.d.ts +5 -1
  133. package/lib/typescript/components/KeyboardPad.d.ts +33 -0
  134. package/lib/typescript/components/Markdown.d.ts +0 -10
  135. package/lib/typescript/components/MessageList.d.ts +7 -2
  136. package/lib/typescript/components/QueuedMessages.d.ts +10 -0
  137. package/lib/typescript/components/markdownParse.d.ts +49 -0
  138. package/lib/typescript/components/markdownParse.test.d.ts +2 -0
  139. package/lib/typescript/preset.d.ts +4 -2
  140. package/lib/typescript/store/activityGroups.d.ts +29 -0
  141. package/lib/typescript/store/activityGroups.test.d.ts +2 -0
  142. package/lib/typescript/store/askBuoySettings.d.ts +22 -0
  143. package/lib/typescript/store/askBuoyStore.d.ts +174 -9
  144. package/lib/typescript/store/blockPlacement.d.ts +30 -0
  145. package/lib/typescript/store/blockPlacement.test.d.ts +2 -0
  146. package/lib/typescript/store/queue.test.d.ts +2 -0
  147. package/lib/typescript/store/resetConversation.d.ts +38 -0
  148. package/lib/typescript/store/restorePending.test.d.ts +2 -0
  149. package/lib/typescript/store/suggestions.d.ts +32 -0
  150. package/lib/typescript/store/suggestions.test.d.ts +2 -0
  151. package/lib/typescript/store/systemLine.test.d.ts +2 -0
  152. package/lib/typescript/store/ticketPrompt.d.ts +11 -0
  153. package/lib/typescript/store/transcriptPersistence.d.ts +41 -2
  154. package/lib/typescript/store/turnRendering.test.d.ts +2 -0
  155. package/lib/typescript/store/useAskBuoy.d.ts +26 -3
  156. package/lib/typescript/sync/askBuoySyncAdapter.d.ts +29 -6
  157. package/package.json +10 -10
  158. package/lib/commonjs/blocks/AskBlocks.js.map +0 -1
  159. package/lib/commonjs/blocks/BlockRenderer.js.map +0 -1
  160. package/lib/commonjs/blocks/ChromePrototypes.js.map +0 -1
  161. package/lib/commonjs/blocks/DataBlocks.js.map +0 -1
  162. package/lib/commonjs/blocks/ExtraBlocks.js.map +0 -1
  163. package/lib/commonjs/blocks/MediaBlocks.js.map +0 -1
  164. package/lib/commonjs/blocks/ReceiptBlocks.js.map +0 -1
  165. package/lib/commonjs/blocks/context.js.map +0 -1
  166. package/lib/commonjs/blocks/icons.js.map +0 -1
  167. package/lib/commonjs/blocks/index.js.map +0 -1
  168. package/lib/commonjs/blocks/listRow.test.js.map +0 -1
  169. package/lib/commonjs/blocks/pageState.js.map +0 -1
  170. package/lib/commonjs/blocks/pageState.test.js.map +0 -1
  171. package/lib/commonjs/blocks/primitives.js.map +0 -1
  172. package/lib/commonjs/blocks/primitivesIndex.js.map +0 -1
  173. package/lib/commonjs/components/ApprovalCard.js.map +0 -1
  174. package/lib/commonjs/components/AskBuoyHeader.js.map +0 -1
  175. package/lib/commonjs/components/AskBuoyIcon.js.map +0 -1
  176. package/lib/commonjs/components/AskBuoyModal.js.map +0 -1
  177. package/lib/commonjs/components/AskBuoySettings.js.map +0 -1
  178. package/lib/commonjs/components/ChangesBar.js.map +0 -1
  179. package/lib/commonjs/components/Composer.js.map +0 -1
  180. package/lib/commonjs/components/EmptyState.js.map +0 -1
  181. package/lib/commonjs/components/Markdown.js.map +0 -1
  182. package/lib/commonjs/components/MessageList.js.map +0 -1
  183. package/lib/commonjs/components/ThinkingStrip.js.map +0 -1
  184. package/lib/commonjs/components/TypingDots.js.map +0 -1
  185. package/lib/commonjs/components/useCopyAction.js.map +0 -1
  186. package/lib/commonjs/index.js.map +0 -1
  187. package/lib/commonjs/preset.js.map +0 -1
  188. package/lib/commonjs/store/askBuoySettings.js.map +0 -1
  189. package/lib/commonjs/store/askBuoyStore.js.map +0 -1
  190. package/lib/commonjs/store/restoredIds.test.js.map +0 -1
  191. package/lib/commonjs/store/traceText.js.map +0 -1
  192. package/lib/commonjs/store/traceText.test.js.map +0 -1
  193. package/lib/commonjs/store/transcriptPersistence.js.map +0 -1
  194. package/lib/commonjs/store/transcriptPersistence.test.js.map +0 -1
  195. package/lib/commonjs/store/useAskBuoy.js.map +0 -1
  196. package/lib/commonjs/store/useAskBuoySettings.js.map +0 -1
  197. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +0 -1
  198. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +0 -1
  199. package/lib/commonjs/sync/wire.js.map +0 -1
  200. package/lib/commonjs/types.js.map +0 -1
  201. package/lib/module/blocks/AskBlocks.js.map +0 -1
  202. package/lib/module/blocks/BlockRenderer.js.map +0 -1
  203. package/lib/module/blocks/ChromePrototypes.js.map +0 -1
  204. package/lib/module/blocks/DataBlocks.js.map +0 -1
  205. package/lib/module/blocks/ExtraBlocks.js.map +0 -1
  206. package/lib/module/blocks/MediaBlocks.js.map +0 -1
  207. package/lib/module/blocks/ReceiptBlocks.js.map +0 -1
  208. package/lib/module/blocks/context.js.map +0 -1
  209. package/lib/module/blocks/icons.js.map +0 -1
  210. package/lib/module/blocks/index.js.map +0 -1
  211. package/lib/module/blocks/listRow.test.js.map +0 -1
  212. package/lib/module/blocks/pageState.js.map +0 -1
  213. package/lib/module/blocks/pageState.test.js.map +0 -1
  214. package/lib/module/blocks/primitives.js.map +0 -1
  215. package/lib/module/blocks/primitivesIndex.js.map +0 -1
  216. package/lib/module/components/ApprovalCard.js.map +0 -1
  217. package/lib/module/components/AskBuoyHeader.js.map +0 -1
  218. package/lib/module/components/AskBuoyIcon.js.map +0 -1
  219. package/lib/module/components/AskBuoyModal.js.map +0 -1
  220. package/lib/module/components/AskBuoySettings.js.map +0 -1
  221. package/lib/module/components/ChangesBar.js.map +0 -1
  222. package/lib/module/components/Composer.js.map +0 -1
  223. package/lib/module/components/EmptyState.js.map +0 -1
  224. package/lib/module/components/Markdown.js.map +0 -1
  225. package/lib/module/components/MessageList.js.map +0 -1
  226. package/lib/module/components/ThinkingStrip.js.map +0 -1
  227. package/lib/module/components/TypingDots.js.map +0 -1
  228. package/lib/module/components/useCopyAction.js.map +0 -1
  229. package/lib/module/index.js.map +0 -1
  230. package/lib/module/preset.js.map +0 -1
  231. package/lib/module/store/askBuoySettings.js.map +0 -1
  232. package/lib/module/store/askBuoyStore.js.map +0 -1
  233. package/lib/module/store/restoredIds.test.js.map +0 -1
  234. package/lib/module/store/traceText.js.map +0 -1
  235. package/lib/module/store/traceText.test.js.map +0 -1
  236. package/lib/module/store/transcriptPersistence.js.map +0 -1
  237. package/lib/module/store/transcriptPersistence.test.js.map +0 -1
  238. package/lib/module/store/useAskBuoy.js.map +0 -1
  239. package/lib/module/store/useAskBuoySettings.js.map +0 -1
  240. package/lib/module/sync/askBuoySyncAdapter.js.map +0 -1
  241. package/lib/module/sync/askBuoySyncAdapter.test.js.map +0 -1
  242. package/lib/module/sync/wire.js.map +0 -1
  243. package/lib/module/types.js.map +0 -1
  244. package/lib/typescript/blocks/AskBlocks.d.ts.map +0 -1
  245. package/lib/typescript/blocks/BlockRenderer.d.ts.map +0 -1
  246. package/lib/typescript/blocks/ChromePrototypes.d.ts.map +0 -1
  247. package/lib/typescript/blocks/DataBlocks.d.ts.map +0 -1
  248. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +0 -1
  249. package/lib/typescript/blocks/MediaBlocks.d.ts.map +0 -1
  250. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +0 -1
  251. package/lib/typescript/blocks/context.d.ts.map +0 -1
  252. package/lib/typescript/blocks/icons.d.ts.map +0 -1
  253. package/lib/typescript/blocks/index.d.ts.map +0 -1
  254. package/lib/typescript/blocks/listRow.test.d.ts.map +0 -1
  255. package/lib/typescript/blocks/pageState.d.ts.map +0 -1
  256. package/lib/typescript/blocks/pageState.test.d.ts.map +0 -1
  257. package/lib/typescript/blocks/primitives.d.ts.map +0 -1
  258. package/lib/typescript/blocks/primitivesIndex.d.ts.map +0 -1
  259. package/lib/typescript/components/ApprovalCard.d.ts.map +0 -1
  260. package/lib/typescript/components/AskBuoyHeader.d.ts.map +0 -1
  261. package/lib/typescript/components/AskBuoyIcon.d.ts.map +0 -1
  262. package/lib/typescript/components/AskBuoyModal.d.ts.map +0 -1
  263. package/lib/typescript/components/AskBuoySettings.d.ts.map +0 -1
  264. package/lib/typescript/components/ChangesBar.d.ts.map +0 -1
  265. package/lib/typescript/components/Composer.d.ts.map +0 -1
  266. package/lib/typescript/components/EmptyState.d.ts.map +0 -1
  267. package/lib/typescript/components/Markdown.d.ts.map +0 -1
  268. package/lib/typescript/components/MessageList.d.ts.map +0 -1
  269. package/lib/typescript/components/ThinkingStrip.d.ts.map +0 -1
  270. package/lib/typescript/components/TypingDots.d.ts.map +0 -1
  271. package/lib/typescript/components/useCopyAction.d.ts.map +0 -1
  272. package/lib/typescript/index.d.ts.map +0 -1
  273. package/lib/typescript/preset.d.ts.map +0 -1
  274. package/lib/typescript/store/askBuoySettings.d.ts.map +0 -1
  275. package/lib/typescript/store/askBuoyStore.d.ts.map +0 -1
  276. package/lib/typescript/store/restoredIds.test.d.ts.map +0 -1
  277. package/lib/typescript/store/traceText.d.ts.map +0 -1
  278. package/lib/typescript/store/traceText.test.d.ts.map +0 -1
  279. package/lib/typescript/store/transcriptPersistence.d.ts.map +0 -1
  280. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +0 -1
  281. package/lib/typescript/store/useAskBuoy.d.ts.map +0 -1
  282. package/lib/typescript/store/useAskBuoySettings.d.ts.map +0 -1
  283. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +0 -1
  284. package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +0 -1
  285. package/lib/typescript/sync/wire.d.ts.map +0 -1
  286. package/lib/typescript/types.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.QueuedMessages=QueuedMessages;var _reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_jsxRuntime=require("react/jsx-runtime");const MAX_LIST_HEIGHT=132;function QueuedMessages({items:e,paused:t,onEdit:s,onRemove:i}){return 0===e.length?null:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-queued",children:[(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:styles.list,contentContainerStyle:styles.listContent,keyboardShouldPersistTaps:"handled",children:e.map((e,r)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.row,null!==t&&styles.rowPaused],children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:`buoy-ask-buoy-queue-item-${r}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${e.text}`,onPress:()=>s(e.id),style:({pressed:e})=>[styles.rowBody,e&&styles.pressed],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.ordinal,children:0===r?"NEXT":"THEN"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.text,numberOfLines:3,children:e.text})]}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:`buoy-ask-buoy-queue-remove-${r}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>i(e.id),hitSlop:8,style:({pressed:e})=>[styles.remove,e&&styles.pressed],children:(0,_jsxRuntime.jsx)(_sharedUi.X,{size:11,color:_sharedUi.night.color.textTertiary})})]},e.id))}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.hint,null!==t&&styles.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes · tap to edit"})]})}const styles=_reactNative.StyleSheet.create({wrap:{paddingHorizontal:_sharedUi.night.gutter,paddingTop:8,gap:6,backgroundColor:_sharedUi.night.color.bg},list:{maxHeight:132},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:_sharedUi.night.radius.row,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.surface},rowPaused:{borderColor:_sharedUi.night.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:_sharedUi.night.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},hintPaused:{color:_sharedUi.night.color.warning}});
@@ -1,223 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ThinkingStrip = ThinkingStrip;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _traceText = require("../store/traceText");
11
- var _jsxRuntime = require("react/jsx-runtime");
12
- /**
13
- * The agent's own working, under an answer, collapsed by default.
14
- *
15
- * Collapsed is the whole design constraint. A multi-step turn's reasoning is
16
- * longer than the answer it produced, and rendered open it pushes the answer —
17
- * the thing the user came for — off the screen. So the strip is one line until
18
- * someone wants it, and the summary on that line ("3 steps · 2 thoughts") is
19
- * enough to tell whether opening it is worth it.
20
- *
21
- * Every step is expandable on its own too, because the parameters are the
22
- * useful part when hunting a bug and the tool name alone is not.
23
- */
24
-
25
- function StepRow({
26
- n,
27
- call
28
- }) {
29
- const [open, setOpen] = (0, _react.useState)(false);
30
- const failed = call.status === "failed" || call.status === "refused";
31
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
32
- onPress: () => setOpen(v => !v),
33
- accessibilityRole: "button",
34
- accessibilityState: {
35
- expanded: open
36
- },
37
- style: styles.step,
38
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
39
- style: styles.stepLine,
40
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
41
- style: styles.stepN,
42
- children: n
43
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
44
- style: [styles.stepName, failed && styles.stepFailed],
45
- numberOfLines: 1,
46
- children: [call.toolId, ".", call.action]
47
- }), call.durationMs !== undefined ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
48
- style: styles.stepMs,
49
- children: [call.durationMs, "ms"]
50
- }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
51
- style: [styles.stepStatus, failed && styles.stepFailed],
52
- numberOfLines: 1,
53
- children: call.status === "ok" ? call.summary || "done" : call.status
54
- })]
55
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
56
- style: styles.detail,
57
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
58
- style: styles.detailLabel,
59
- children: "SENT"
60
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
61
- style: styles.code,
62
- selectable: true,
63
- children: call.params ?? "no parameters"
64
- }), call.result ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
65
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
66
- style: styles.detailLabel,
67
- children: "RETURNED"
68
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
69
- style: styles.code,
70
- selectable: true,
71
- children: call.result
72
- })]
73
- }) : null]
74
- }) : null]
75
- });
76
- }
77
- function ThinkingStrip({
78
- message
79
- }) {
80
- const [open, setOpen] = (0, _react.useState)(false);
81
- if (!(0, _traceText.hasTrace)(message)) return null;
82
- const entries = (0, _traceText.traceEntries)(message);
83
- const steps = entries.filter(e => e.kind === "step").length;
84
- const thoughts = entries.length - steps;
85
- const wall = message.startedAt !== undefined && message.endedAt !== undefined ? `${((message.endedAt - message.startedAt) / 1000).toFixed(1)}s` : null;
86
- const summary = [steps ? `${steps} step${steps === 1 ? "" : "s"}` : null, thoughts ? `${thoughts} thought${thoughts === 1 ? "" : "s"}` : null, wall, message.usage ? `${message.usage.input + message.usage.output} tokens` : null].filter(Boolean).join(" · ");
87
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
88
- style: styles.wrap,
89
- testID: "buoy-ask-buoy-thinking",
90
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
91
- testID: "buoy-ask-buoy-thinking-toggle",
92
- onPress: () => setOpen(v => !v),
93
- accessibilityRole: "button",
94
- accessibilityLabel: open ? "Hide agent thinking" : "Show agent thinking",
95
- accessibilityState: {
96
- expanded: open
97
- },
98
- style: styles.head,
99
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Activity, {
100
- size: 12,
101
- color: _sharedUi.night.color.textTertiary
102
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
103
- style: styles.headText,
104
- children: summary
105
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
106
- size: 12,
107
- color: _sharedUi.night.color.textTertiary
108
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
109
- size: 12,
110
- color: _sharedUi.night.color.textTertiary
111
- })]
112
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
113
- style: styles.body,
114
- children: [entries.map((entry, i) => entry.kind === "thought" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
115
- style: styles.thought,
116
- selectable: true,
117
- children: entry.text.trim()
118
- }, `t${i}`) : /*#__PURE__*/(0, _jsxRuntime.jsx)(StepRow, {
119
- n: entry.n,
120
- call: entry.call
121
- }, entry.call.id)), thoughts === 0 ?
122
- /*#__PURE__*/
123
- // Said plainly, because an empty reasoning section reads as broken.
124
- // Most models report none: Claude thinks by default, gpt-4.1 never.
125
- (0, _jsxRuntime.jsx)(_reactNative.Text, {
126
- style: styles.none,
127
- children: "This model reports no reasoning \u2014 the steps above are the whole trace."
128
- }) : null]
129
- }) : null]
130
- });
131
- }
132
- const styles = _reactNative.StyleSheet.create({
133
- wrap: {
134
- marginTop: 8,
135
- borderRadius: _sharedUi.night.radius.badge,
136
- borderWidth: _reactNative.StyleSheet.hairlineWidth,
137
- borderColor: _sharedUi.night.color.separator,
138
- backgroundColor: _sharedUi.night.color.fill,
139
- overflow: "hidden"
140
- },
141
- head: {
142
- flexDirection: "row",
143
- alignItems: "center",
144
- gap: 6,
145
- paddingHorizontal: 10,
146
- paddingVertical: 7
147
- },
148
- headText: {
149
- flex: 1,
150
- color: _sharedUi.night.color.textTertiary,
151
- fontSize: _sharedUi.night.font.micro,
152
- fontWeight: "600"
153
- },
154
- body: {
155
- borderTopWidth: _reactNative.StyleSheet.hairlineWidth,
156
- borderTopColor: _sharedUi.night.color.separator
157
- },
158
- thought: {
159
- color: _sharedUi.night.color.textSecondary,
160
- fontSize: _sharedUi.night.font.micro,
161
- lineHeight: 17,
162
- fontStyle: "italic",
163
- paddingHorizontal: 10,
164
- paddingVertical: 8
165
- },
166
- step: {
167
- paddingHorizontal: 10,
168
- paddingVertical: 7
169
- },
170
- stepLine: {
171
- flexDirection: "row",
172
- alignItems: "center",
173
- gap: 8
174
- },
175
- stepN: {
176
- color: _sharedUi.night.color.textTertiary,
177
- fontSize: _sharedUi.night.font.micro,
178
- width: 14
179
- },
180
- stepName: {
181
- flex: 1,
182
- color: _sharedUi.night.color.textSecondary,
183
- fontSize: _sharedUi.night.font.micro,
184
- fontWeight: "600"
185
- },
186
- stepMs: {
187
- color: _sharedUi.night.color.textTertiary,
188
- fontSize: _sharedUi.night.font.micro
189
- },
190
- stepStatus: {
191
- color: _sharedUi.night.color.textTertiary,
192
- fontSize: _sharedUi.night.font.micro,
193
- maxWidth: 110
194
- },
195
- stepFailed: {
196
- color: _sharedUi.night.color.danger
197
- },
198
- detail: {
199
- marginTop: 6,
200
- marginLeft: 22,
201
- gap: 3
202
- },
203
- detailLabel: {
204
- color: _sharedUi.night.color.textTertiary,
205
- fontSize: 9,
206
- fontWeight: "700",
207
- letterSpacing: 0.5
208
- },
209
- code: {
210
- color: _sharedUi.night.color.textSecondary,
211
- fontSize: _sharedUi.night.font.micro,
212
- lineHeight: 16,
213
- marginBottom: 3
214
- },
215
- none: {
216
- color: _sharedUi.night.color.textTertiary,
217
- fontSize: _sharedUi.night.font.micro,
218
- fontStyle: "italic",
219
- paddingHorizontal: 10,
220
- paddingVertical: 8
221
- }
222
- });
223
- //# sourceMappingURL=ThinkingStrip.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ThinkingStrip=ThinkingStrip;var _react=require("react"),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_traceText=require("../store/traceText"),_jsxRuntime=require("react/jsx-runtime");function StepRow({n:e,call:t}){const[i,s]=(0,_react.useState)(!1),r="failed"===t.status||"refused"===t.status;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>s(e=>!e),accessibilityRole:"button",accessibilityState:{expanded:i},style:styles.step,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.stepLine,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.stepN,children:e}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[styles.stepName,r&&styles.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),void 0!==t.durationMs?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.stepMs,children:[t.durationMs,"ms"]}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.stepStatus,r&&styles.stepFailed],numberOfLines:1,children:"ok"===t.status?t.summary||"done":t.status})]}),i?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.detail,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.detailLabel,children:"SENT"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:!0,children:t.params??"no parameters"}),t.result?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.detailLabel,children:"RETURNED"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:!0,children:t.result})]}):null]}):null]})}function ThinkingStrip({message:e}){const[t,i]=(0,_react.useState)(!1);if(!(0,_traceText.hasTrace)(e))return null;const s=(0,_traceText.traceEntries)(e),r=s.filter(e=>"step"===e.kind).length,a=s.length-r,n=[r?`${r} step${1===r?"":"s"}`:null,a?`${a} thought${1===a?"":"s"}`:null,void 0!==e.startedAt&&void 0!==e.endedAt?`${((e.endedAt-e.startedAt)/1e3).toFixed(1)}s`:null,e.usage?`${e.usage.input+e.usage.output} tokens`:null].filter(Boolean).join(" · ");return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-thinking",children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>i(e=>!e),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:styles.head,children:[(0,_jsxRuntime.jsx)(_sharedUi.Activity,{size:12,color:_sharedUi.night.color.textTertiary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.headText,children:n}),t?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:12,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRight,{size:12,color:_sharedUi.night.color.textTertiary})]}),t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.body,children:[s.map((e,t)=>"thought"===e.kind?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.thought,selectable:!0,children:e.text.trim()},`t${t}`):(0,_jsxRuntime.jsx)(StepRow,{n:e.n,call:e.call},e.call.id)),0===a?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.none,children:"This model reports no reasoning — the steps above are the whole trace."}):null]}):null]})}const styles=_reactNative.StyleSheet.create({wrap:{marginTop:8,borderRadius:_sharedUi.night.radius.badge,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.separator,backgroundColor:_sharedUi.night.color.fill,overflow:"hidden"},head:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:7},headText:{flex:1,color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,fontWeight:"600"},body:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.separator},thought:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,lineHeight:17,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8},step:{paddingHorizontal:10,paddingVertical:7},stepLine:{flexDirection:"row",alignItems:"center",gap:8},stepN:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,width:14},stepName:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontWeight:"600"},stepMs:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},stepStatus:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,maxWidth:110},stepFailed:{color:_sharedUi.night.color.danger},detail:{marginTop:6,marginLeft:22,gap:3},detailLabel:{color:_sharedUi.night.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.5},code:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,lineHeight:16,marginBottom:3},none:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8}});
@@ -1,63 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TypingDots = TypingDots;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- /**
12
- * Three pulsing dots — the "it heard you" signal between sending a message
13
- * and the first streamed token. A static "…" glyph read as a finished (and
14
- * confusing) answer.
15
- *
16
- * Native-driver opacity only, so it costs the JS thread nothing while the
17
- * stream that replaces it is being parsed.
18
- */
19
-
20
- function TypingDots() {
21
- const dots = (0, _react.useRef)([0, 1, 2].map(() => new _reactNative.Animated.Value(0.25))).current;
22
- (0, _react.useEffect)(() => {
23
- const loops = dots.map((v, i) => _reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(i * 140), _reactNative.Animated.timing(v, {
24
- toValue: 1,
25
- duration: 320,
26
- easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
27
- useNativeDriver: true
28
- }), _reactNative.Animated.timing(v, {
29
- toValue: 0.25,
30
- duration: 320,
31
- easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
32
- useNativeDriver: true
33
- }), _reactNative.Animated.delay((2 - i) * 140)])));
34
- loops.forEach(l => l.start());
35
- return () => loops.forEach(l => l.stop());
36
- }, [dots]);
37
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
38
- style: styles.wrap,
39
- testID: "buoy-ask-buoy-typing",
40
- accessibilityLabel: "Thinking",
41
- children: dots.map((v, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
42
- style: [styles.dot, {
43
- opacity: v
44
- }]
45
- }, i))
46
- });
47
- }
48
- const styles = _reactNative.StyleSheet.create({
49
- wrap: {
50
- flexDirection: "row",
51
- alignItems: "center",
52
- gap: 5,
53
- paddingVertical: 8,
54
- paddingHorizontal: 2
55
- },
56
- dot: {
57
- width: 7,
58
- height: 7,
59
- borderRadius: 4,
60
- backgroundColor: _sharedUi.night.color.textSecondary
61
- }
62
- });
63
- //# sourceMappingURL=TypingDots.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TypingDots=TypingDots;var _react=require("react"),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_jsxRuntime=require("react/jsx-runtime");function TypingDots(){const e=(0,_react.useRef)([0,1,2].map(()=>new _reactNative.Animated.Value(.25))).current;return(0,_react.useEffect)(()=>{const t=e.map((e,t)=>_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(140*t),_reactNative.Animated.timing(e,{toValue:1,duration:320,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:!0}),_reactNative.Animated.timing(e,{toValue:.25,duration:320,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:!0}),_reactNative.Animated.delay(140*(2-t))])));return t.forEach(e=>e.start()),()=>t.forEach(e=>e.stop())},[e]),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:e.map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.dot,{opacity:e}]},t))})}const styles=_reactNative.StyleSheet.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:_sharedUi.night.color.textSecondary}});
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TABLE_PREVIEW_ROWS=exports.TABLE_PREVIEW_COLS=void 0,exports.parseBlocks=parseBlocks,exports.tableTruncation=tableTruncation;const isTableRow=t=>/^\s*\|.*\|\s*$/.test(t),isTableRule=t=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(t),splitRow=t=>t.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim()),FENCE=/^\s*```\s*([\w+-]*)\s*$/;function parseBlocks(t){const e=[];let s=[];const n=()=>{s.length&&e.push({kind:"p",text:s.join(" ")}),s=[]},o=t.split("\n");for(let t=0;t<o.length;t++){const l=o[t].replace(/\s+$/,""),i=FENCE.exec(l);if(i){n();const s=[];let l=t+1,r=!1;for(;l<o.length;){if(/^\s*```\s*$/.test(o[l])){r=!0;break}s.push(o[l]),l++}e.push({kind:"code",lang:i[1]??"",text:s.join("\n"),closed:r}),t=r?l:o.length;continue}if(!l.trim()){n();continue}if(isTableRow(l)&&o[t+1]&&isTableRule(o[t+1])){n();const s=splitRow(l),i=[];let r=t+2;for(;r<o.length&&isTableRow(o[r]);)i.push(splitRow(o[r])),r++;e.push({kind:"table",header:s,rows:i}),t=r-1;continue}const r=/^#{1,6}\s+(.*)$/.exec(l);if(r){n(),e.push({kind:"h",text:r[1]});continue}const c=/^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(l);if(c){n();const t=Math.min(2,Math.floor(c[1].length/2)),s=/^\d/.test(c[2])?c[2].replace(")","."):"•";e.push({kind:"li",text:c[3],marker:s,depth:t});continue}s.push(l.trim())}return n(),e}const TABLE_PREVIEW_ROWS=exports.TABLE_PREVIEW_ROWS=12,TABLE_PREVIEW_COLS=exports.TABLE_PREVIEW_COLS=4;function tableTruncation(t,e){const s=[];return e.length>TABLE_PREVIEW_ROWS&&s.push(`${TABLE_PREVIEW_ROWS} of ${e.length} rows`),t.length>TABLE_PREVIEW_COLS&&s.push(`${TABLE_PREVIEW_COLS} of ${t.length} columns`),s.length?`Showing ${s.join(" · ")}`:null}
@@ -0,0 +1 @@
1
+ "use strict";var _vitest=require("vitest"),_markdownParse=require("./markdownParse");(0,_vitest.describe)("fenced code",()=>{(0,_vitest.it)("keeps newlines and indentation",()=>{const e=(0,_markdownParse.parseBlocks)('Here:\n```json\n{\n "qty": 14\n}\n```\n— the qty changed.');(0,_vitest.expect)(e.map(e=>e.kind)).toEqual(["p","code","p"]);const t=e[1];(0,_vitest.expect)("code"===t.kind&&t.text).toBe('{\n "qty": 14\n}'),(0,_vitest.expect)("code"===t.kind&&t.lang).toBe("json"),(0,_vitest.expect)("code"===t.kind&&t.closed).toBe(!0)}),(0,_vitest.it)("renders an unclosed fence as code while the stream is still inside it",()=>{const e=(0,_markdownParse.parseBlocks)("```\nline one\nline two");(0,_vitest.expect)(e).toHaveLength(1);const t=e[0];(0,_vitest.expect)(t.kind).toBe("code"),(0,_vitest.expect)("code"===t.kind&&t.closed).toBe(!1),(0,_vitest.expect)("code"===t.kind&&t.text).toBe("line one\nline two")}),(0,_vitest.it)("does not treat fence contents as lists or tables",()=>{const e=(0,_markdownParse.parseBlocks)("```\n- not a bullet\n| a | b |\n|---|---|\n```");(0,_vitest.expect)(e).toHaveLength(1),(0,_vitest.expect)(e[0].kind).toBe("code")})}),(0,_vitest.describe)("tables",()=>{const e=(e,t)=>{const s=Array.from({length:t},(e,t)=>`c${t}`),n=Array.from({length:e},(e,t)=>s.map((e,s)=>`r${t}c${s}`));return{header:s,rows:n}};(0,_vitest.it)("says nothing about a table that fits",()=>{const t=e(12,4);(0,_vitest.expect)((0,_markdownParse.tableTruncation)(t.header,t.rows)).toBeNull()}),(0,_vitest.it)("names the rows it cut",()=>{const t=e(30,4);(0,_vitest.expect)((0,_markdownParse.tableTruncation)(t.header,t.rows)).toBe("Showing 12 of 30 rows")}),(0,_vitest.it)("names the columns it cut",()=>{const t=e(3,6);(0,_vitest.expect)((0,_markdownParse.tableTruncation)(t.header,t.rows)).toBe("Showing 4 of 6 columns")}),(0,_vitest.it)("names both when both are cut",()=>{const t=e(30,6);(0,_vitest.expect)((0,_markdownParse.tableTruncation)(t.header,t.rows)).toBe("Showing 12 of 30 rows · 4 of 6 columns")}),(0,_vitest.it)("still parses a pipe table from text",()=>{const e=(0,_markdownParse.parseBlocks)("| Item | Qty |\n|---|---|\n| Charizard | 14 |\n| Blastoise | 2 |");(0,_vitest.expect)(e).toHaveLength(1);const t=e[0];(0,_vitest.expect)("table"===t.kind&&t.header).toEqual(["Item","Qty"]),(0,_vitest.expect)("table"===t.kind&&t.rows).toEqual([["Charizard","14"],["Blastoise","2"]])})}),(0,_vitest.describe)("everything else still works",()=>{(0,_vitest.it)("paragraphs, headings and lists",()=>{const e=(0,_markdownParse.parseBlocks)("# Title\n\nSome prose\ncontinues.\n\n- one\n - nested\n1. first");(0,_vitest.expect)(e).toEqual([{kind:"h",text:"Title"},{kind:"p",text:"Some prose continues."},{kind:"li",text:"one",marker:"•",depth:0},{kind:"li",text:"nested",marker:"•",depth:1},{kind:"li",text:"first",marker:"1.",depth:0}])})});
@@ -1,50 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCopyAction = useCopyAction;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- /**
11
- * Copy that reports what happened.
12
- *
13
- * Both clipboard libraries are OPTIONAL peers, so `copyToClipboard` resolves
14
- * false in an app that installed neither — a copy button that silently does
15
- * nothing is worse than no copy button, so that case falls through to the OS
16
- * share sheet (which also offers Copy) instead of failing quietly.
17
- *
18
- * `getText` is read on PRESS, not on render: the whole-transcript callers
19
- * would otherwise rebuild the transcript on every frame of a streaming answer
20
- * just to have a string ready for a button nobody tapped.
21
- */
22
-
23
- /** Long enough to notice out of the corner of an eye, short enough not to linger. */
24
- const COPIED_MS = 1500;
25
- function useCopyAction(getText) {
26
- const [copied, setCopied] = (0, _react.useState)(false);
27
- const timer = (0, _react.useRef)(null);
28
- (0, _react.useEffect)(() => () => {
29
- if (timer.current) clearTimeout(timer.current);
30
- }, []);
31
- const copy = (0, _react.useCallback)(() => {
32
- const text = getText();
33
- void (0, _sharedUi.copyToClipboard)(text).then(ok => {
34
- if (!ok) {
35
- void _reactNative.Share.share({
36
- message: text
37
- }).catch(() => {});
38
- return;
39
- }
40
- setCopied(true);
41
- if (timer.current) clearTimeout(timer.current);
42
- timer.current = setTimeout(() => setCopied(false), COPIED_MS);
43
- }).catch(() => {});
44
- }, [getText]);
45
- return {
46
- copied,
47
- copy
48
- };
49
- }
50
- //# sourceMappingURL=useCopyAction.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useCopyAction=useCopyAction;var _react=require("react"),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui");const COPIED_MS=1500;function useCopyAction(e){const[r,t]=(0,_react.useState)(!1),c=(0,_react.useRef)(null);return(0,_react.useEffect)(()=>()=>{c.current&&clearTimeout(c.current)},[]),{copied:r,copy:(0,_react.useCallback)(()=>{const r=e();(0,_sharedUi.copyToClipboard)(r).then(e=>{e?(t(!0),c.current&&clearTimeout(c.current),c.current=setTimeout(()=>t(!1),COPIED_MS)):_reactNative.Share.share({message:r}).catch(()=>{})}).catch(()=>{})},[e])}}
@@ -1,252 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "ASK_BUOY_ADAPTER_VERSION", {
7
- enumerable: true,
8
- get: function () {
9
- return _askBuoySyncAdapter.ASK_BUOY_ADAPTER_VERSION;
10
- }
11
- });
12
- Object.defineProperty(exports, "ASK_BUOY_ICON_COLOR", {
13
- enumerable: true,
14
- get: function () {
15
- return _preset.ASK_BUOY_ICON_COLOR;
16
- }
17
- });
18
- Object.defineProperty(exports, "ApprovalCard", {
19
- enumerable: true,
20
- get: function () {
21
- return _ApprovalCard.ApprovalCard;
22
- }
23
- });
24
- Object.defineProperty(exports, "AskBuoyHeader", {
25
- enumerable: true,
26
- get: function () {
27
- return _AskBuoyHeader.AskBuoyHeader;
28
- }
29
- });
30
- Object.defineProperty(exports, "AskBuoyIcon", {
31
- enumerable: true,
32
- get: function () {
33
- return _preset.AskBuoyIcon;
34
- }
35
- });
36
- Object.defineProperty(exports, "AskBuoyModal", {
37
- enumerable: true,
38
- get: function () {
39
- return _AskBuoyModal.AskBuoyModal;
40
- }
41
- });
42
- Object.defineProperty(exports, "AskBuoySettings", {
43
- enumerable: true,
44
- get: function () {
45
- return _AskBuoySettings.AskBuoySettings;
46
- }
47
- });
48
- Object.defineProperty(exports, "BlockActionRow", {
49
- enumerable: true,
50
- get: function () {
51
- return _blocks.ActionRow;
52
- }
53
- });
54
- Object.defineProperty(exports, "BlockCard", {
55
- enumerable: true,
56
- get: function () {
57
- return _blocks.Card;
58
- }
59
- });
60
- Object.defineProperty(exports, "BlockHandlersProvider", {
61
- enumerable: true,
62
- get: function () {
63
- return _blocks.BlockHandlersProvider;
64
- }
65
- });
66
- Object.defineProperty(exports, "BlockRenderer", {
67
- enumerable: true,
68
- get: function () {
69
- return _blocks.BlockRenderer;
70
- }
71
- });
72
- Object.defineProperty(exports, "ChangesBar", {
73
- enumerable: true,
74
- get: function () {
75
- return _ChangesBar.ChangesBar;
76
- }
77
- });
78
- Object.defineProperty(exports, "Composer", {
79
- enumerable: true,
80
- get: function () {
81
- return _Composer.Composer;
82
- }
83
- });
84
- Object.defineProperty(exports, "EditableUserBubble", {
85
- enumerable: true,
86
- get: function () {
87
- return _blocks.EditableUserBubble;
88
- }
89
- });
90
- Object.defineProperty(exports, "ElapsedRow", {
91
- enumerable: true,
92
- get: function () {
93
- return _blocks.ElapsedRow;
94
- }
95
- });
96
- Object.defineProperty(exports, "LivePill", {
97
- enumerable: true,
98
- get: function () {
99
- return _blocks.LivePill;
100
- }
101
- });
102
- Object.defineProperty(exports, "Markdown", {
103
- enumerable: true,
104
- get: function () {
105
- return _Markdown.Markdown;
106
- }
107
- });
108
- Object.defineProperty(exports, "MessageActions", {
109
- enumerable: true,
110
- get: function () {
111
- return _blocks.MessageActions;
112
- }
113
- });
114
- Object.defineProperty(exports, "MessageList", {
115
- enumerable: true,
116
- get: function () {
117
- return _MessageList.MessageList;
118
- }
119
- });
120
- Object.defineProperty(exports, "ProvenanceBadge", {
121
- enumerable: true,
122
- get: function () {
123
- return _blocks.ProvenanceBadge;
124
- }
125
- });
126
- Object.defineProperty(exports, "QueuedComposer", {
127
- enumerable: true,
128
- get: function () {
129
- return _blocks.QueuedComposer;
130
- }
131
- });
132
- Object.defineProperty(exports, "ReasoningStrip", {
133
- enumerable: true,
134
- get: function () {
135
- return _blocks.ReasoningStrip;
136
- }
137
- });
138
- Object.defineProperty(exports, "ReloadDivider", {
139
- enumerable: true,
140
- get: function () {
141
- return _blocks.ReloadDivider;
142
- }
143
- });
144
- Object.defineProperty(exports, "ThinkingStrip", {
145
- enumerable: true,
146
- get: function () {
147
- return _ThinkingStrip.ThinkingStrip;
148
- }
149
- });
150
- Object.defineProperty(exports, "Timestamp", {
151
- enumerable: true,
152
- get: function () {
153
- return _blocks.Timestamp;
154
- }
155
- });
156
- Object.defineProperty(exports, "askBuoySettings", {
157
- enumerable: true,
158
- get: function () {
159
- return _askBuoySettings.askBuoySettings;
160
- }
161
- });
162
- Object.defineProperty(exports, "askBuoyStore", {
163
- enumerable: true,
164
- get: function () {
165
- return _askBuoyStore.askBuoyStore;
166
- }
167
- });
168
- Object.defineProperty(exports, "askBuoySyncAdapter", {
169
- enumerable: true,
170
- get: function () {
171
- return _askBuoySyncAdapter.askBuoySyncAdapter;
172
- }
173
- });
174
- Object.defineProperty(exports, "askBuoyToolPreset", {
175
- enumerable: true,
176
- get: function () {
177
- return _preset.askBuoyToolPreset;
178
- }
179
- });
180
- Object.defineProperty(exports, "createAskBuoyTool", {
181
- enumerable: true,
182
- get: function () {
183
- return _preset.createAskBuoyTool;
184
- }
185
- });
186
- Object.defineProperty(exports, "hasTrace", {
187
- enumerable: true,
188
- get: function () {
189
- return _traceText.hasTrace;
190
- }
191
- });
192
- Object.defineProperty(exports, "redactForWire", {
193
- enumerable: true,
194
- get: function () {
195
- return _wire.redactForWire;
196
- }
197
- });
198
- Object.defineProperty(exports, "traceEntries", {
199
- enumerable: true,
200
- get: function () {
201
- return _traceText.traceEntries;
202
- }
203
- });
204
- Object.defineProperty(exports, "traceToText", {
205
- enumerable: true,
206
- get: function () {
207
- return _traceText.traceToText;
208
- }
209
- });
210
- Object.defineProperty(exports, "useAskBuoy", {
211
- enumerable: true,
212
- get: function () {
213
- return _useAskBuoy.useAskBuoy;
214
- }
215
- });
216
- Object.defineProperty(exports, "useAskBuoySettings", {
217
- enumerable: true,
218
- get: function () {
219
- return _useAskBuoySettings.useAskBuoySettings;
220
- }
221
- });
222
- Object.defineProperty(exports, "useAskBuoyState", {
223
- enumerable: true,
224
- get: function () {
225
- return _useAskBuoy.useAskBuoyState;
226
- }
227
- });
228
- Object.defineProperty(exports, "useBlockHandlers", {
229
- enumerable: true,
230
- get: function () {
231
- return _blocks.useBlockHandlers;
232
- }
233
- });
234
- var _AskBuoyModal = require("./components/AskBuoyModal");
235
- var _preset = require("./preset");
236
- var _askBuoySyncAdapter = require("./sync/askBuoySyncAdapter");
237
- var _askBuoyStore = require("./store/askBuoyStore");
238
- var _useAskBuoy = require("./store/useAskBuoy");
239
- var _wire = require("./sync/wire");
240
- var _blocks = require("./blocks");
241
- var _Markdown = require("./components/Markdown");
242
- var _MessageList = require("./components/MessageList");
243
- var _AskBuoyHeader = require("./components/AskBuoyHeader");
244
- var _AskBuoySettings = require("./components/AskBuoySettings");
245
- var _ThinkingStrip = require("./components/ThinkingStrip");
246
- var _askBuoySettings = require("./store/askBuoySettings");
247
- var _useAskBuoySettings = require("./store/useAskBuoySettings");
248
- var _traceText = require("./store/traceText");
249
- var _Composer = require("./components/Composer");
250
- var _ChangesBar = require("./components/ChangesBar");
251
- var _ApprovalCard = require("./components/ApprovalCard");
252
- //# sourceMappingURL=index.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ASK_BUOY_ADAPTER_VERSION",{enumerable:!0,get:function(){return _askBuoySyncAdapter.ASK_BUOY_ADAPTER_VERSION}}),Object.defineProperty(exports,"ASK_BUOY_ICON_COLOR",{enumerable:!0,get:function(){return _preset.ASK_BUOY_ICON_COLOR}}),Object.defineProperty(exports,"ApprovalCard",{enumerable:!0,get:function(){return _ApprovalCard.ApprovalCard}}),Object.defineProperty(exports,"AskBuoyHeader",{enumerable:!0,get:function(){return _AskBuoyHeader.AskBuoyHeader}}),Object.defineProperty(exports,"AskBuoyIcon",{enumerable:!0,get:function(){return _preset.AskBuoyIcon}}),Object.defineProperty(exports,"AskBuoyModal",{enumerable:!0,get:function(){return _AskBuoyModal.AskBuoyModal}}),Object.defineProperty(exports,"AskBuoySettings",{enumerable:!0,get:function(){return _AskBuoySettings.AskBuoySettings}}),Object.defineProperty(exports,"BlockActionRow",{enumerable:!0,get:function(){return _blocks.ActionRow}}),Object.defineProperty(exports,"BlockCard",{enumerable:!0,get:function(){return _blocks.Card}}),Object.defineProperty(exports,"BlockHandlersProvider",{enumerable:!0,get:function(){return _blocks.BlockHandlersProvider}}),Object.defineProperty(exports,"BlockRenderer",{enumerable:!0,get:function(){return _blocks.BlockRenderer}}),Object.defineProperty(exports,"ChangesBar",{enumerable:!0,get:function(){return _ChangesBar.ChangesBar}}),Object.defineProperty(exports,"Composer",{enumerable:!0,get:function(){return _Composer.Composer}}),Object.defineProperty(exports,"EditableUserBubble",{enumerable:!0,get:function(){return _blocks.EditableUserBubble}}),Object.defineProperty(exports,"ElapsedRow",{enumerable:!0,get:function(){return _blocks.ElapsedRow}}),Object.defineProperty(exports,"LivePill",{enumerable:!0,get:function(){return _blocks.LivePill}}),Object.defineProperty(exports,"Markdown",{enumerable:!0,get:function(){return _Markdown.Markdown}}),Object.defineProperty(exports,"MessageActions",{enumerable:!0,get:function(){return _blocks.MessageActions}}),Object.defineProperty(exports,"MessageList",{enumerable:!0,get:function(){return _MessageList.MessageList}}),Object.defineProperty(exports,"ProvenanceBadge",{enumerable:!0,get:function(){return _blocks.ProvenanceBadge}}),Object.defineProperty(exports,"QueuedComposer",{enumerable:!0,get:function(){return _blocks.QueuedComposer}}),Object.defineProperty(exports,"ReasoningStrip",{enumerable:!0,get:function(){return _blocks.ReasoningStrip}}),Object.defineProperty(exports,"ReloadDivider",{enumerable:!0,get:function(){return _blocks.ReloadDivider}}),Object.defineProperty(exports,"ThinkingStrip",{enumerable:!0,get:function(){return _ThinkingStrip.ThinkingStrip}}),Object.defineProperty(exports,"Timestamp",{enumerable:!0,get:function(){return _blocks.Timestamp}}),Object.defineProperty(exports,"askBuoySettings",{enumerable:!0,get:function(){return _askBuoySettings.askBuoySettings}}),Object.defineProperty(exports,"askBuoyStore",{enumerable:!0,get:function(){return _askBuoyStore.askBuoyStore}}),Object.defineProperty(exports,"askBuoySyncAdapter",{enumerable:!0,get:function(){return _askBuoySyncAdapter.askBuoySyncAdapter}}),Object.defineProperty(exports,"askBuoyToolPreset",{enumerable:!0,get:function(){return _preset.askBuoyToolPreset}}),Object.defineProperty(exports,"createAskBuoyTool",{enumerable:!0,get:function(){return _preset.createAskBuoyTool}}),Object.defineProperty(exports,"hasTrace",{enumerable:!0,get:function(){return _traceText.hasTrace}}),Object.defineProperty(exports,"redactForWire",{enumerable:!0,get:function(){return _wire.redactForWire}}),Object.defineProperty(exports,"traceEntries",{enumerable:!0,get:function(){return _traceText.traceEntries}}),Object.defineProperty(exports,"traceToText",{enumerable:!0,get:function(){return _traceText.traceToText}}),Object.defineProperty(exports,"useAskBuoy",{enumerable:!0,get:function(){return _useAskBuoy.useAskBuoy}}),Object.defineProperty(exports,"useAskBuoySettings",{enumerable:!0,get:function(){return _useAskBuoySettings.useAskBuoySettings}}),Object.defineProperty(exports,"useAskBuoyState",{enumerable:!0,get:function(){return _useAskBuoy.useAskBuoyState}}),Object.defineProperty(exports,"useBlockHandlers",{enumerable:!0,get:function(){return _blocks.useBlockHandlers}});var _AskBuoyModal=require("./components/AskBuoyModal"),_preset=require("./preset"),_askBuoySyncAdapter=require("./sync/askBuoySyncAdapter"),_askBuoyStore=require("./store/askBuoyStore"),_useAskBuoy=require("./store/useAskBuoy"),_wire=require("./sync/wire"),_blocks=require("./blocks"),_Markdown=require("./components/Markdown"),_MessageList=require("./components/MessageList"),_AskBuoyHeader=require("./components/AskBuoyHeader"),_AskBuoySettings=require("./components/AskBuoySettings"),_ThinkingStrip=require("./components/ThinkingStrip"),_askBuoySettings=require("./store/askBuoySettings"),_useAskBuoySettings=require("./store/useAskBuoySettings"),_traceText=require("./store/traceText"),_Composer=require("./components/Composer"),_ChangesBar=require("./components/ChangesBar"),_ApprovalCard=require("./components/ApprovalCard");