@buoy-gg/ask-buoy 7.0.38 → 7.0.40

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 (306) hide show
  1. package/lib/commonjs/blocks/AskBlocks.js +338 -1
  2. package/lib/commonjs/blocks/AskBlocks.js.map +1 -0
  3. package/lib/commonjs/blocks/BlockRenderer.js +262 -1
  4. package/lib/commonjs/blocks/BlockRenderer.js.map +1 -0
  5. package/lib/commonjs/blocks/ChromePrototypes.js +514 -1
  6. package/lib/commonjs/blocks/ChromePrototypes.js.map +1 -0
  7. package/lib/commonjs/blocks/DataBlocks.js +781 -1
  8. package/lib/commonjs/blocks/DataBlocks.js.map +1 -0
  9. package/lib/commonjs/blocks/ExtraBlocks.js +1860 -1
  10. package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -0
  11. package/lib/commonjs/blocks/MediaBlocks.js +156 -1
  12. package/lib/commonjs/blocks/MediaBlocks.js.map +1 -0
  13. package/lib/commonjs/blocks/ReceiptBlocks.js +586 -1
  14. package/lib/commonjs/blocks/ReceiptBlocks.js.map +1 -0
  15. package/lib/commonjs/blocks/blockText.js +60 -1
  16. package/lib/commonjs/blocks/blockText.js.map +1 -0
  17. package/lib/commonjs/blocks/blockText.test.js +53 -1
  18. package/lib/commonjs/blocks/blockText.test.js.map +1 -0
  19. package/lib/commonjs/blocks/context.js +42 -1
  20. package/lib/commonjs/blocks/context.js.map +1 -0
  21. package/lib/commonjs/blocks/icons.js +96 -1
  22. package/lib/commonjs/blocks/icons.js.map +1 -0
  23. package/lib/commonjs/blocks/index.js +95 -1
  24. package/lib/commonjs/blocks/index.js.map +1 -0
  25. package/lib/commonjs/blocks/listRow.test.js +55 -1
  26. package/lib/commonjs/blocks/listRow.test.js.map +1 -0
  27. package/lib/commonjs/blocks/pageState.js +34 -1
  28. package/lib/commonjs/blocks/pageState.js.map +1 -0
  29. package/lib/commonjs/blocks/pageState.test.js +57 -1
  30. package/lib/commonjs/blocks/pageState.test.js.map +1 -0
  31. package/lib/commonjs/blocks/primitives.js +457 -1
  32. package/lib/commonjs/blocks/primitives.js.map +1 -0
  33. package/lib/commonjs/blocks/primitivesIndex.js +62 -1
  34. package/lib/commonjs/blocks/primitivesIndex.js.map +1 -0
  35. package/lib/commonjs/components/ApprovalCard.js +297 -1
  36. package/lib/commonjs/components/ApprovalCard.js.map +1 -0
  37. package/lib/commonjs/components/AskBuoyHeader.js +196 -1
  38. package/lib/commonjs/components/AskBuoyHeader.js.map +1 -0
  39. package/lib/commonjs/components/AskBuoyIcon.js +19 -1
  40. package/lib/commonjs/components/AskBuoyIcon.js.map +1 -0
  41. package/lib/commonjs/components/AskBuoyModal.js +479 -1
  42. package/lib/commonjs/components/AskBuoyModal.js.map +1 -0
  43. package/lib/commonjs/components/AskBuoySettings.js +181 -1
  44. package/lib/commonjs/components/AskBuoySettings.js.map +1 -0
  45. package/lib/commonjs/components/ChangesBar.js +211 -1
  46. package/lib/commonjs/components/ChangesBar.js.map +1 -0
  47. package/lib/commonjs/components/Composer.js +255 -1
  48. package/lib/commonjs/components/Composer.js.map +1 -0
  49. package/lib/commonjs/components/EmptyState.js +161 -1
  50. package/lib/commonjs/components/EmptyState.js.map +1 -0
  51. package/lib/commonjs/components/KeyboardPad.js +80 -1
  52. package/lib/commonjs/components/KeyboardPad.js.map +1 -0
  53. package/lib/commonjs/components/Markdown.js +310 -1
  54. package/lib/commonjs/components/Markdown.js.map +1 -0
  55. package/lib/commonjs/components/MessageList.js +970 -1
  56. package/lib/commonjs/components/MessageList.js.map +1 -0
  57. package/lib/commonjs/components/QueuedMessages.js +145 -1
  58. package/lib/commonjs/components/QueuedMessages.js.map +1 -0
  59. package/lib/commonjs/components/ThinkingStrip.js +223 -1
  60. package/lib/commonjs/components/ThinkingStrip.js.map +1 -0
  61. package/lib/commonjs/components/TypingDots.js +63 -1
  62. package/lib/commonjs/components/TypingDots.js.map +1 -0
  63. package/lib/commonjs/components/markdownParse.js +131 -1
  64. package/lib/commonjs/components/markdownParse.js.map +1 -0
  65. package/lib/commonjs/components/markdownParse.test.js +99 -1
  66. package/lib/commonjs/components/markdownParse.test.js.map +1 -0
  67. package/lib/commonjs/components/useCopyAction.js +50 -1
  68. package/lib/commonjs/components/useCopyAction.js.map +1 -0
  69. package/lib/commonjs/index.js +252 -1
  70. package/lib/commonjs/index.js.map +1 -0
  71. package/lib/commonjs/preset.js +91 -1
  72. package/lib/commonjs/preset.js.map +1 -0
  73. package/lib/commonjs/store/activityGroups.js +110 -1
  74. package/lib/commonjs/store/activityGroups.js.map +1 -0
  75. package/lib/commonjs/store/activityGroups.test.js +78 -1
  76. package/lib/commonjs/store/activityGroups.test.js.map +1 -0
  77. package/lib/commonjs/store/askBuoySettings.js +72 -1
  78. package/lib/commonjs/store/askBuoySettings.js.map +1 -0
  79. package/lib/commonjs/store/askBuoyStore.js +589 -1
  80. package/lib/commonjs/store/askBuoyStore.js.map +1 -0
  81. package/lib/commonjs/store/blockPlacement.js +64 -1
  82. package/lib/commonjs/store/blockPlacement.js.map +1 -0
  83. package/lib/commonjs/store/blockPlacement.test.js +123 -1
  84. package/lib/commonjs/store/blockPlacement.test.js.map +1 -0
  85. package/lib/commonjs/store/queue.test.js +150 -1
  86. package/lib/commonjs/store/queue.test.js.map +1 -0
  87. package/lib/commonjs/store/resetConversation.js +77 -1
  88. package/lib/commonjs/store/resetConversation.js.map +1 -0
  89. package/lib/commonjs/store/restorePending.test.js +63 -1
  90. package/lib/commonjs/store/restorePending.test.js.map +1 -0
  91. package/lib/commonjs/store/restoredIds.test.js +47 -1
  92. package/lib/commonjs/store/restoredIds.test.js.map +1 -0
  93. package/lib/commonjs/store/suggestions.js +54 -1
  94. package/lib/commonjs/store/suggestions.js.map +1 -0
  95. package/lib/commonjs/store/suggestions.test.js +58 -1
  96. package/lib/commonjs/store/suggestions.test.js.map +1 -0
  97. package/lib/commonjs/store/systemLine.test.js +77 -1
  98. package/lib/commonjs/store/systemLine.test.js.map +1 -0
  99. package/lib/commonjs/store/ticketPrompt.js +17 -1
  100. package/lib/commonjs/store/ticketPrompt.js.map +1 -0
  101. package/lib/commonjs/store/traceText.js +81 -1
  102. package/lib/commonjs/store/traceText.js.map +1 -0
  103. package/lib/commonjs/store/traceText.test.js +112 -1
  104. package/lib/commonjs/store/traceText.test.js.map +1 -0
  105. package/lib/commonjs/store/transcriptPersistence.js +297 -1
  106. package/lib/commonjs/store/transcriptPersistence.js.map +1 -0
  107. package/lib/commonjs/store/transcriptPersistence.test.js +333 -1
  108. package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -0
  109. package/lib/commonjs/store/turnRendering.test.js +151 -1
  110. package/lib/commonjs/store/turnRendering.test.js.map +1 -0
  111. package/lib/commonjs/store/useAskBuoy.js +651 -1
  112. package/lib/commonjs/store/useAskBuoy.js.map +1 -0
  113. package/lib/commonjs/store/useAskBuoySettings.js +14 -1
  114. package/lib/commonjs/store/useAskBuoySettings.js.map +1 -0
  115. package/lib/commonjs/sync/askBuoySyncAdapter.js +153 -1
  116. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +1 -0
  117. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +141 -1
  118. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +1 -0
  119. package/lib/commonjs/sync/wire.js +58 -1
  120. package/lib/commonjs/sync/wire.js.map +1 -0
  121. package/lib/commonjs/types.js +6 -1
  122. package/lib/commonjs/types.js.map +1 -0
  123. package/lib/module/blocks/AskBlocks.js +331 -1
  124. package/lib/module/blocks/AskBlocks.js.map +1 -0
  125. package/lib/module/blocks/BlockRenderer.js +257 -1
  126. package/lib/module/blocks/BlockRenderer.js.map +1 -0
  127. package/lib/module/blocks/ChromePrototypes.js +503 -1
  128. package/lib/module/blocks/ChromePrototypes.js.map +1 -0
  129. package/lib/module/blocks/DataBlocks.js +767 -1
  130. package/lib/module/blocks/DataBlocks.js.map +1 -0
  131. package/lib/module/blocks/ExtraBlocks.js +1833 -1
  132. package/lib/module/blocks/ExtraBlocks.js.map +1 -0
  133. package/lib/module/blocks/MediaBlocks.js +151 -1
  134. package/lib/module/blocks/MediaBlocks.js.map +1 -0
  135. package/lib/module/blocks/ReceiptBlocks.js +574 -1
  136. package/lib/module/blocks/ReceiptBlocks.js.map +1 -0
  137. package/lib/module/blocks/blockText.js +55 -1
  138. package/lib/module/blocks/blockText.js.map +1 -0
  139. package/lib/module/blocks/blockText.test.js +53 -1
  140. package/lib/module/blocks/blockText.test.js.map +1 -0
  141. package/lib/module/blocks/context.js +35 -1
  142. package/lib/module/blocks/context.js.map +1 -0
  143. package/lib/module/blocks/icons.js +91 -1
  144. package/lib/module/blocks/icons.js.map +1 -0
  145. package/lib/module/blocks/index.js +8 -1
  146. package/lib/module/blocks/index.js.map +1 -0
  147. package/lib/module/blocks/listRow.test.js +56 -1
  148. package/lib/module/blocks/listRow.test.js.map +1 -0
  149. package/lib/module/blocks/pageState.js +30 -1
  150. package/lib/module/blocks/pageState.js.map +1 -0
  151. package/lib/module/blocks/pageState.test.js +56 -1
  152. package/lib/module/blocks/pageState.test.js.map +1 -0
  153. package/lib/module/blocks/primitives.js +445 -1
  154. package/lib/module/blocks/primitives.js.map +1 -0
  155. package/lib/module/blocks/primitivesIndex.js +5 -1
  156. package/lib/module/blocks/primitivesIndex.js.map +1 -0
  157. package/lib/module/components/ApprovalCard.js +292 -1
  158. package/lib/module/components/ApprovalCard.js.map +1 -0
  159. package/lib/module/components/AskBuoyHeader.js +193 -1
  160. package/lib/module/components/AskBuoyHeader.js.map +1 -0
  161. package/lib/module/components/AskBuoyIcon.js +8 -1
  162. package/lib/module/components/AskBuoyIcon.js.map +1 -0
  163. package/lib/module/components/AskBuoyModal.js +474 -1
  164. package/lib/module/components/AskBuoyModal.js.map +1 -0
  165. package/lib/module/components/AskBuoySettings.js +176 -1
  166. package/lib/module/components/AskBuoySettings.js.map +1 -0
  167. package/lib/module/components/ChangesBar.js +206 -1
  168. package/lib/module/components/ChangesBar.js.map +1 -0
  169. package/lib/module/components/Composer.js +250 -1
  170. package/lib/module/components/Composer.js.map +1 -0
  171. package/lib/module/components/EmptyState.js +156 -1
  172. package/lib/module/components/EmptyState.js.map +1 -0
  173. package/lib/module/components/KeyboardPad.js +75 -1
  174. package/lib/module/components/KeyboardPad.js.map +1 -0
  175. package/lib/module/components/Markdown.js +305 -1
  176. package/lib/module/components/Markdown.js.map +1 -0
  177. package/lib/module/components/MessageList.js +964 -1
  178. package/lib/module/components/MessageList.js.map +1 -0
  179. package/lib/module/components/QueuedMessages.js +140 -1
  180. package/lib/module/components/QueuedMessages.js.map +1 -0
  181. package/lib/module/components/ThinkingStrip.js +218 -1
  182. package/lib/module/components/ThinkingStrip.js.map +1 -0
  183. package/lib/module/components/TypingDots.js +58 -1
  184. package/lib/module/components/TypingDots.js.map +1 -0
  185. package/lib/module/components/markdownParse.js +125 -1
  186. package/lib/module/components/markdownParse.js.map +1 -0
  187. package/lib/module/components/markdownParse.test.js +98 -1
  188. package/lib/module/components/markdownParse.test.js.map +1 -0
  189. package/lib/module/components/useCopyAction.js +46 -1
  190. package/lib/module/components/useCopyAction.js.map +1 -0
  191. package/lib/module/index.js +34 -1
  192. package/lib/module/index.js.map +1 -0
  193. package/lib/module/preset.js +74 -1
  194. package/lib/module/preset.js.map +1 -0
  195. package/lib/module/store/activityGroups.js +103 -1
  196. package/lib/module/store/activityGroups.js.map +1 -0
  197. package/lib/module/store/activityGroups.test.js +77 -1
  198. package/lib/module/store/activityGroups.test.js.map +1 -0
  199. package/lib/module/store/askBuoySettings.js +67 -1
  200. package/lib/module/store/askBuoySettings.js.map +1 -0
  201. package/lib/module/store/askBuoyStore.js +583 -1
  202. package/lib/module/store/askBuoyStore.js.map +1 -0
  203. package/lib/module/store/blockPlacement.js +59 -1
  204. package/lib/module/store/blockPlacement.js.map +1 -0
  205. package/lib/module/store/blockPlacement.test.js +122 -1
  206. package/lib/module/store/blockPlacement.test.js.map +1 -0
  207. package/lib/module/store/queue.test.js +149 -1
  208. package/lib/module/store/queue.test.js.map +1 -0
  209. package/lib/module/store/resetConversation.js +72 -1
  210. package/lib/module/store/resetConversation.js.map +1 -0
  211. package/lib/module/store/restorePending.test.js +62 -1
  212. package/lib/module/store/restorePending.test.js.map +1 -0
  213. package/lib/module/store/restoredIds.test.js +46 -1
  214. package/lib/module/store/restoredIds.test.js.map +1 -0
  215. package/lib/module/store/suggestions.js +49 -1
  216. package/lib/module/store/suggestions.js.map +1 -0
  217. package/lib/module/store/suggestions.test.js +57 -1
  218. package/lib/module/store/suggestions.test.js.map +1 -0
  219. package/lib/module/store/systemLine.test.js +76 -1
  220. package/lib/module/store/systemLine.test.js.map +1 -0
  221. package/lib/module/store/ticketPrompt.js +13 -1
  222. package/lib/module/store/ticketPrompt.js.map +1 -0
  223. package/lib/module/store/traceText.js +75 -1
  224. package/lib/module/store/traceText.js.map +1 -0
  225. package/lib/module/store/traceText.test.js +111 -1
  226. package/lib/module/store/traceText.test.js.map +1 -0
  227. package/lib/module/store/transcriptPersistence.js +287 -1
  228. package/lib/module/store/transcriptPersistence.js.map +1 -0
  229. package/lib/module/store/transcriptPersistence.test.js +332 -1
  230. package/lib/module/store/transcriptPersistence.test.js.map +1 -0
  231. package/lib/module/store/turnRendering.test.js +150 -1
  232. package/lib/module/store/turnRendering.test.js.map +1 -0
  233. package/lib/module/store/useAskBuoy.js +646 -1
  234. package/lib/module/store/useAskBuoy.js.map +1 -0
  235. package/lib/module/store/useAskBuoySettings.js +9 -1
  236. package/lib/module/store/useAskBuoySettings.js.map +1 -0
  237. package/lib/module/sync/askBuoySyncAdapter.js +148 -1
  238. package/lib/module/sync/askBuoySyncAdapter.js.map +1 -0
  239. package/lib/module/sync/askBuoySyncAdapter.test.js +140 -1
  240. package/lib/module/sync/askBuoySyncAdapter.test.js.map +1 -0
  241. package/lib/module/sync/wire.js +47 -1
  242. package/lib/module/sync/wire.js.map +1 -0
  243. package/lib/module/types.js +4 -1
  244. package/lib/module/types.js.map +1 -0
  245. package/lib/typescript/blocks/AskBlocks.d.ts.map +1 -0
  246. package/lib/typescript/blocks/BlockRenderer.d.ts.map +1 -0
  247. package/lib/typescript/blocks/ChromePrototypes.d.ts.map +1 -0
  248. package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -0
  249. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -0
  250. package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -0
  251. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +1 -0
  252. package/lib/typescript/blocks/blockText.d.ts.map +1 -0
  253. package/lib/typescript/blocks/blockText.test.d.ts.map +1 -0
  254. package/lib/typescript/blocks/context.d.ts.map +1 -0
  255. package/lib/typescript/blocks/icons.d.ts.map +1 -0
  256. package/lib/typescript/blocks/index.d.ts.map +1 -0
  257. package/lib/typescript/blocks/listRow.test.d.ts.map +1 -0
  258. package/lib/typescript/blocks/pageState.d.ts.map +1 -0
  259. package/lib/typescript/blocks/pageState.test.d.ts.map +1 -0
  260. package/lib/typescript/blocks/primitives.d.ts.map +1 -0
  261. package/lib/typescript/blocks/primitivesIndex.d.ts.map +1 -0
  262. package/lib/typescript/components/ApprovalCard.d.ts.map +1 -0
  263. package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -0
  264. package/lib/typescript/components/AskBuoyIcon.d.ts.map +1 -0
  265. package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -0
  266. package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -0
  267. package/lib/typescript/components/ChangesBar.d.ts.map +1 -0
  268. package/lib/typescript/components/Composer.d.ts.map +1 -0
  269. package/lib/typescript/components/EmptyState.d.ts.map +1 -0
  270. package/lib/typescript/components/KeyboardPad.d.ts.map +1 -0
  271. package/lib/typescript/components/Markdown.d.ts.map +1 -0
  272. package/lib/typescript/components/MessageList.d.ts.map +1 -0
  273. package/lib/typescript/components/QueuedMessages.d.ts.map +1 -0
  274. package/lib/typescript/components/ThinkingStrip.d.ts.map +1 -0
  275. package/lib/typescript/components/TypingDots.d.ts.map +1 -0
  276. package/lib/typescript/components/markdownParse.d.ts.map +1 -0
  277. package/lib/typescript/components/markdownParse.test.d.ts.map +1 -0
  278. package/lib/typescript/components/useCopyAction.d.ts.map +1 -0
  279. package/lib/typescript/index.d.ts.map +1 -0
  280. package/lib/typescript/preset.d.ts.map +1 -0
  281. package/lib/typescript/store/activityGroups.d.ts.map +1 -0
  282. package/lib/typescript/store/activityGroups.test.d.ts.map +1 -0
  283. package/lib/typescript/store/askBuoySettings.d.ts.map +1 -0
  284. package/lib/typescript/store/askBuoyStore.d.ts.map +1 -0
  285. package/lib/typescript/store/blockPlacement.d.ts.map +1 -0
  286. package/lib/typescript/store/blockPlacement.test.d.ts.map +1 -0
  287. package/lib/typescript/store/queue.test.d.ts.map +1 -0
  288. package/lib/typescript/store/resetConversation.d.ts.map +1 -0
  289. package/lib/typescript/store/restorePending.test.d.ts.map +1 -0
  290. package/lib/typescript/store/restoredIds.test.d.ts.map +1 -0
  291. package/lib/typescript/store/suggestions.d.ts.map +1 -0
  292. package/lib/typescript/store/suggestions.test.d.ts.map +1 -0
  293. package/lib/typescript/store/systemLine.test.d.ts.map +1 -0
  294. package/lib/typescript/store/ticketPrompt.d.ts.map +1 -0
  295. package/lib/typescript/store/traceText.d.ts.map +1 -0
  296. package/lib/typescript/store/traceText.test.d.ts.map +1 -0
  297. package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -0
  298. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +1 -0
  299. package/lib/typescript/store/turnRendering.test.d.ts.map +1 -0
  300. package/lib/typescript/store/useAskBuoy.d.ts.map +1 -0
  301. package/lib/typescript/store/useAskBuoySettings.d.ts.map +1 -0
  302. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +1 -0
  303. package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +1 -0
  304. package/lib/typescript/sync/wire.d.ts.map +1 -0
  305. package/lib/typescript/types.d.ts.map +1 -0
  306. package/package.json +8 -8
@@ -1 +1,91 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ASK_BUOY_ICON_COLOR",{enumerable:!0,get:function(){return _AskBuoyIcon.ASK_BUOY_ICON_COLOR}}),Object.defineProperty(exports,"AskBuoyIcon",{enumerable:!0,get:function(){return _AskBuoyIcon.AskBuoyIcon}}),exports.askBuoyToolPreset=void 0,exports.createAskBuoyTool=createAskBuoyTool;var _AskBuoyIcon=require("./components/AskBuoyIcon"),_AskBuoyModal=require("./components/AskBuoyModal"),_jsxRuntime=require("react/jsx-runtime");const askBuoyToolPreset=exports.askBuoyToolPreset={id:"ask-buoy",name:"ASK BUOY",description:"Ask about this app in plain English",slot:"both",color:_AskBuoyIcon.ASK_BUOY_ICON_COLOR,icon:({size:o,slot:e})=>(0,_jsxRuntime.jsx)(_AskBuoyIcon.AskBuoyIcon,{size:"dial"===e?1.5*o:o}),component:_AskBuoyModal.AskBuoyModal};function createAskBuoyTool(o){const{name:e,description:s,...t}=o,n=t;return{...askBuoyToolPreset,name:e??askBuoyToolPreset.name,description:s??askBuoyToolPreset.description,component:o=>(0,_jsxRuntime.jsx)(_AskBuoyModal.AskBuoyModal,{...o,config:n})}}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ASK_BUOY_ICON_COLOR", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _AskBuoyIcon.ASK_BUOY_ICON_COLOR;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "AskBuoyIcon", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _AskBuoyIcon.AskBuoyIcon;
16
+ }
17
+ });
18
+ exports.askBuoyToolPreset = void 0;
19
+ exports.createAskBuoyTool = createAskBuoyTool;
20
+ var _AskBuoyIcon = require("./components/AskBuoyIcon");
21
+ var _AskBuoyModal = require("./components/AskBuoyModal");
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ /**
24
+ * The Ask Buoy tool preset.
25
+ *
26
+ * Manual chrome (`component` renders its own JsModal) rather than the
27
+ * declarative `modal` config, because ToolModalShell forwards neither a footer
28
+ * slot nor `initialHeight` — and a chat needs a sticky composer and more than
29
+ * the default 400pt of sheet.
30
+ *
31
+ * The config is closed over at creation time rather than read from a store, so
32
+ * the endpoint and headers come from the app's own code on every render and
33
+ * there is never a copy of them sitting anywhere Buoy persists.
34
+ */
35
+
36
+ const askBuoyToolPreset = exports.askBuoyToolPreset = {
37
+ id: "ask-buoy",
38
+ name: "ASK BUOY",
39
+ description: "Ask about this app in plain English",
40
+ slot: "both",
41
+ // Set here rather than in floating-tools-core's `toolColors` map: that map
42
+ // is already missing half the shipped tools, so the web twin falls back to a
43
+ // generic accent for them. A color on the preset is the one place both
44
+ // native and web read.
45
+ color: _AskBuoyIcon.ASK_BUOY_ICON_COLOR,
46
+ // The approved composition uses a 48pt optical size in the 32pt dial slot.
47
+ // Compact row/header uses keep their requested size.
48
+ icon: ({
49
+ size,
50
+ slot
51
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_AskBuoyIcon.AskBuoyIcon, {
52
+ size: slot === 'dial' ? size * 1.5 : size
53
+ }),
54
+ component: _AskBuoyModal.AskBuoyModal
55
+ };
56
+
57
+ /**
58
+ * `endpoint` and `model` are REQUIRED at the type level. This used to extend
59
+ * Partial<AskBuoyConfig> with a cast, so a missing endpoint type-checked and
60
+ * only surfaced as a runtime "not set up yet" — the wrong moment to learn it.
61
+ */
62
+
63
+ /**
64
+ * Wire Ask Buoy to your team's AI endpoint.
65
+ *
66
+ * @example
67
+ * createAskBuoyTool({
68
+ * endpoint: "https://ai.acme.com/v1/messages",
69
+ * model: "claude-opus-5",
70
+ * headers: async () => ({ Authorization: `Bearer ${await auth.getToken()}` }),
71
+ * context: { notes: ["user.rewards.points = loyalty points"] },
72
+ * })
73
+ */
74
+ function createAskBuoyTool(config) {
75
+ const {
76
+ name,
77
+ description,
78
+ ...rest
79
+ } = config;
80
+ const resolved = rest;
81
+ return {
82
+ ...askBuoyToolPreset,
83
+ name: name ?? askBuoyToolPreset.name,
84
+ description: description ?? askBuoyToolPreset.description,
85
+ component: props => /*#__PURE__*/(0, _jsxRuntime.jsx)(_AskBuoyModal.AskBuoyModal, {
86
+ ...props,
87
+ config: resolved
88
+ })
89
+ };
90
+ }
91
+ //# sourceMappingURL=preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_AskBuoyIcon","require","_AskBuoyModal","_jsxRuntime","askBuoyToolPreset","exports","id","name","description","slot","color","ASK_BUOY_ICON_COLOR","icon","size","jsx","AskBuoyIcon","component","AskBuoyModal","createAskBuoyTool","config","rest","resolved","props"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;AAYA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAiF,IAAAE,WAAA,GAAAF,OAAA;AAbjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,MAAMG,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG;EAC/BE,EAAE,EAAE,UAAU;EACdC,IAAI,EAAE,UAAU;EAChBC,WAAW,EAAE,qCAAqC;EAClDC,IAAI,EAAE,MAAe;EACrB;EACA;EACA;EACA;EACAC,KAAK,EAAEC,gCAAmB;EAC1B;EACA;EACAC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEJ;EAAsD,CAAC,kBACpE,IAAAN,WAAA,CAAAW,GAAA,EAACd,YAAA,CAAAe,WAAW;IAACF,IAAI,EAAEJ,IAAI,KAAK,MAAM,GAAGI,IAAI,GAAG,GAAG,GAAGA;EAAK,CAAE,CAC1D;EACDG,SAAS,EAAEC;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAACC,MAAyB,EAAE;EAC3D,MAAM;IAAEZ,IAAI;IAAEC,WAAW;IAAE,GAAGY;EAAK,CAAC,GAAGD,MAAM;EAC7C,MAAME,QAAuB,GAAGD,IAAI;EACpC,OAAO;IACL,GAAGhB,iBAAiB;IACpBG,IAAI,EAAEA,IAAI,IAAIH,iBAAiB,CAACG,IAAI;IACpCC,WAAW,EAAEA,WAAW,IAAIJ,iBAAiB,CAACI,WAAW;IACzDQ,SAAS,EAAGM,KAAwB,iBAClC,IAAAnB,WAAA,CAAAW,GAAA,EAACZ,aAAA,CAAAe,YAAY;MAAA,GAAKK,KAAK;MAAEH,MAAM,EAAEE;IAAS,CAAE;EAEhD,CAAC;AACH","ignoreList":[]}
@@ -1 +1,110 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatElapsed=formatElapsed,exports.groupCalls=groupCalls,exports.turnFooter=turnFooter;var _agentCore=require("@buoy-gg/agent-core");const foldable=t=>"read"===t.effect&&"ok"===t.status;function groupCalls(t){const e=[];let o=[];const n=()=>{if(0!==o.length){if(1===o.length)e.push({kind:"call",call:o[0]});else{const t=[...new Set(o.map(t=>(0,_agentCore.toolTitle)(t.toolId)))];e.push({kind:"reads",id:o.map(t=>t.id).join("+"),calls:o,label:`Looked at ${joinNatural(t)}`,count:o.length})}o=[]}};for(const l of t)foldable(l)?o.push(l):(n(),e.push({kind:"call",call:l}));return n(),e}function joinNatural(t){return t.length<=1?t[0]??"":2===t.length?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")} and ${t[t.length-1]}`}function turnFooter(t){const e=[];void 0!==t.startedAt&&void 0!==t.endedAt&&t.endedAt>=t.startedAt&&e.push(formatElapsed(t.endedAt-t.startedAt));const o=t.toolCalls.length;if(o>0){e.push(`${o} action${1===o?"":"s"}`);const n=e=>t.toolCalls.filter(t=>t.status===e).length,l=n("failed"),r=n("refused"),a=n("declined"),s=n("stopped");l&&e.push(`${l} failed`),r&&e.push(`${r} refused`),a&&e.push(`${a} declined`),s&&e.push(`${s} not run`)}return e.length?e.join(" · "):null}function formatElapsed(t){const e=Math.max(0,Math.floor(t/1e3));if(e<60)return`${e}s`;const o=Math.floor(e/60);return o<60?`${o}m ${String(e%60).padStart(2,"0")}s`:`${Math.floor(o/60)}h ${String(o%60).padStart(2,"0")}m`}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatElapsed = formatElapsed;
7
+ exports.groupCalls = groupCalls;
8
+ exports.turnFooter = turnFooter;
9
+ var _agentCore = require("@buoy-gg/agent-core");
10
+ /**
11
+ * How tool rows fold in the activity card.
12
+ *
13
+ * Consecutive SUCCESSFUL READS fold into one row — "Looked at Network, Storage
14
+ * · 3 reads" — and nothing else ever folds. The previous rule folded by count:
15
+ * past four steps the card became "Did 7 things · 1 failed" with every row but
16
+ * the failures hidden, including the one successful write, which is the row
17
+ * the user most needs to see. Codex's exec cell does the same thing for file
18
+ * reads ("Explored — Read a, b, c") and keeps every run visible.
19
+ *
20
+ * A group never crosses a write: a read after a mutation is a different
21
+ * observation from a read before it, and merging them would misreport order.
22
+ * Uses the engine's `effect` classification, never the action's name.
23
+ */
24
+
25
+ const foldable = c => c.effect === "read" && c.status === "ok";
26
+ function groupCalls(calls) {
27
+ const out = [];
28
+ let run = [];
29
+ const flush = () => {
30
+ if (run.length === 0) return;
31
+ if (run.length === 1) {
32
+ out.push({
33
+ kind: "call",
34
+ call: run[0]
35
+ });
36
+ } else {
37
+ const titles = [...new Set(run.map(c => (0, _agentCore.toolTitle)(c.toolId)))];
38
+ out.push({
39
+ kind: "reads",
40
+ id: run.map(c => c.id).join("+"),
41
+ calls: run,
42
+ label: `Looked at ${joinNatural(titles)}`,
43
+ count: run.length
44
+ });
45
+ }
46
+ run = [];
47
+ };
48
+ for (const call of calls) {
49
+ if (foldable(call)) {
50
+ run.push(call);
51
+ continue;
52
+ }
53
+ flush();
54
+ out.push({
55
+ kind: "call",
56
+ call
57
+ });
58
+ }
59
+ flush();
60
+ return out;
61
+ }
62
+
63
+ /** "Network", "Network and Storage", "Network, Storage and Screen". */
64
+ function joinNatural(items) {
65
+ if (items.length <= 1) return items[0] ?? "";
66
+ if (items.length === 2) return `${items[0]} and ${items[1]}`;
67
+ return `${items.slice(0, -1).join(", ")} and ${items[items.length - 1]}`;
68
+ }
69
+
70
+ /**
71
+ * "48s · 6 actions · 1 declined" — the line under a finished answer.
72
+ *
73
+ * "Actions" is tool calls, not provider rounds: rounds are an implementation
74
+ * detail nobody outside the engine can count. Failed, refused, declined and
75
+ * stopped are listed separately because they are different outcomes — a
76
+ * failed exploratory read the agent recovered from is not a failed task. No
77
+ * duration is invented when the message has no start time (a restored note).
78
+ */
79
+ function turnFooter(message) {
80
+ const parts = [];
81
+ if (message.startedAt !== undefined && message.endedAt !== undefined && message.endedAt >= message.startedAt) {
82
+ parts.push(formatElapsed(message.endedAt - message.startedAt));
83
+ }
84
+ const n = message.toolCalls.length;
85
+ if (n > 0) {
86
+ parts.push(`${n} action${n === 1 ? "" : "s"}`);
87
+ const count = s => message.toolCalls.filter(c => c.status === s).length;
88
+ const failed = count("failed");
89
+ const refused = count("refused");
90
+ const declined = count("declined");
91
+ const stopped = count("stopped");
92
+ if (failed) parts.push(`${failed} failed`);
93
+ if (refused) parts.push(`${refused} refused`);
94
+ if (declined) parts.push(`${declined} declined`);
95
+ if (stopped) parts.push(`${stopped} not run`);
96
+ }
97
+ return parts.length ? parts.join(" · ") : null;
98
+ }
99
+
100
+ /** "4s", "1m 04s", "1h 02m". Compact, for a subtitle or a footer. */
101
+ function formatElapsed(ms) {
102
+ const total = Math.max(0, Math.floor(ms / 1000));
103
+ if (total < 60) return `${total}s`;
104
+ const m = Math.floor(total / 60);
105
+ const s = total % 60;
106
+ if (m < 60) return `${m}m ${String(s).padStart(2, "0")}s`;
107
+ const h = Math.floor(m / 60);
108
+ return `${h}h ${String(m % 60).padStart(2, "0")}m`;
109
+ }
110
+ //# sourceMappingURL=activityGroups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_agentCore","require","foldable","c","effect","status","groupCalls","calls","out","run","flush","length","push","kind","call","titles","Set","map","toolTitle","toolId","id","join","label","joinNatural","count","items","slice","turnFooter","message","parts","startedAt","undefined","endedAt","formatElapsed","n","toolCalls","s","filter","failed","refused","declined","stopped","ms","total","Math","max","floor","m","String","padStart","h"],"sourceRoot":"../../../src","sources":["store/activityGroups.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1,78 @@
1
- "use strict";var _vitest=require("vitest"),_activityGroups=require("./activityGroups");const call=(t,e,a,s="ok")=>({id:t,toolId:e,action:"x",label:`${e} ${t}`,status:s,effect:a});(0,_vitest.describe)("groupCalls",()=>{(0,_vitest.it)("leaves a single read as an ordinary row",()=>{const t=(0,_activityGroups.groupCalls)([call("a","console","read")]);(0,_vitest.expect)(t).toEqual([{kind:"call",call:_vitest.expect.objectContaining({id:"a"})}])}),(0,_vitest.it)("folds consecutive successful reads and names the tools once each",()=>{const t=(0,_activityGroups.groupCalls)([call("a","network","read"),call("b","storage","read"),call("c","storage","read")]);(0,_vitest.expect)(t).toHaveLength(1);const e=t[0];(0,_vitest.expect)(e.kind).toBe("reads"),(0,_vitest.expect)("reads"===e.kind&&e.count).toBe(3),(0,_vitest.expect)("reads"===e.kind&&e.label).toBe("Looked at Network and Storage")}),(0,_vitest.it)("never folds a write, and never folds reads across one",()=>{const t=(0,_activityGroups.groupCalls)([call("a","network","read"),call("b","storage","read"),call("w","zustand","write"),call("c","storage","read"),call("d","console","read")]);(0,_vitest.expect)(t.map(t=>"reads"===t.kind?`reads:${t.count}`:`call:${t.call.id}`)).toEqual(["reads:2","call:w","reads:2"])}),(0,_vitest.it)("keeps failed, refused, declined, stopped and running reads as their own rows",()=>{const t=(0,_activityGroups.groupCalls)([call("a","network","read"),call("f","storage","read","failed"),call("b","storage","read"),call("r","storage","read","running")]);(0,_vitest.expect)(t.map(t=>t.kind)).toEqual(["call","call","call","call"])})}),(0,_vitest.describe)("turnFooter",()=>{(0,_vitest.it)("reports duration and action count",()=>{(0,_vitest.expect)((0,_activityGroups.turnFooter)({startedAt:1e3,endedAt:13e3,toolCalls:[call("a","network","read"),call("b","zustand","write")]})).toBe("12s · 2 actions")}),(0,_vitest.it)("separates the outcomes that were not plain successes",()=>{(0,_vitest.expect)((0,_activityGroups.turnFooter)({startedAt:0,endedAt:48e3,toolCalls:[call("a","network","read"),call("b","storage","write","failed"),call("c","storage","destructive","declined"),call("d","storage","write","stopped")]})).toBe("48s · 4 actions · 1 failed · 1 declined · 1 not run")}),(0,_vitest.it)("invents no duration for a note with no start time",()=>{(0,_vitest.expect)((0,_activityGroups.turnFooter)({endedAt:5e3,toolCalls:[]})).toBeNull(),(0,_vitest.expect)((0,_activityGroups.turnFooter)({endedAt:5e3,toolCalls:[call("a","network","read")]})).toBe("1 action")})}),(0,_vitest.describe)("formatElapsed",()=>{(0,_vitest.it)("is compact",()=>{(0,_vitest.expect)((0,_activityGroups.formatElapsed)(4200)).toBe("4s"),(0,_vitest.expect)((0,_activityGroups.formatElapsed)(64e3)).toBe("1m 04s"),(0,_vitest.expect)((0,_activityGroups.formatElapsed)(372e4)).toBe("1h 02m")})});
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _activityGroups = require("./activityGroups");
5
+ /**
6
+ * The fold rule: consecutive successful reads fold, nothing else ever does,
7
+ * and a group never crosses a write.
8
+ */
9
+
10
+ const call = (id, toolId, effect, status = "ok") => ({
11
+ id,
12
+ toolId,
13
+ action: "x",
14
+ label: `${toolId} ${id}`,
15
+ status,
16
+ effect
17
+ });
18
+ (0, _vitest.describe)("groupCalls", () => {
19
+ (0, _vitest.it)("leaves a single read as an ordinary row", () => {
20
+ const items = (0, _activityGroups.groupCalls)([call("a", "console", "read")]);
21
+ (0, _vitest.expect)(items).toEqual([{
22
+ kind: "call",
23
+ call: _vitest.expect.objectContaining({
24
+ id: "a"
25
+ })
26
+ }]);
27
+ });
28
+ (0, _vitest.it)("folds consecutive successful reads and names the tools once each", () => {
29
+ const items = (0, _activityGroups.groupCalls)([call("a", "network", "read"), call("b", "storage", "read"), call("c", "storage", "read")]);
30
+ (0, _vitest.expect)(items).toHaveLength(1);
31
+ const g = items[0];
32
+ (0, _vitest.expect)(g.kind).toBe("reads");
33
+ (0, _vitest.expect)(g.kind === "reads" && g.count).toBe(3);
34
+ (0, _vitest.expect)(g.kind === "reads" && g.label).toBe("Looked at Network and Storage");
35
+ });
36
+ (0, _vitest.it)("never folds a write, and never folds reads across one", () => {
37
+ const items = (0, _activityGroups.groupCalls)([call("a", "network", "read"), call("b", "storage", "read"), call("w", "zustand", "write"), call("c", "storage", "read"), call("d", "console", "read")]);
38
+ (0, _vitest.expect)(items.map(i => i.kind === "reads" ? `reads:${i.count}` : `call:${i.call.id}`)).toEqual(["reads:2", "call:w", "reads:2"]);
39
+ });
40
+ (0, _vitest.it)("keeps failed, refused, declined, stopped and running reads as their own rows", () => {
41
+ const items = (0, _activityGroups.groupCalls)([call("a", "network", "read"), call("f", "storage", "read", "failed"), call("b", "storage", "read"), call("r", "storage", "read", "running")]);
42
+ (0, _vitest.expect)(items.map(i => i.kind)).toEqual(["call", "call", "call", "call"]);
43
+ });
44
+ });
45
+ (0, _vitest.describe)("turnFooter", () => {
46
+ (0, _vitest.it)("reports duration and action count", () => {
47
+ (0, _vitest.expect)((0, _activityGroups.turnFooter)({
48
+ startedAt: 1_000,
49
+ endedAt: 13_000,
50
+ toolCalls: [call("a", "network", "read"), call("b", "zustand", "write")]
51
+ })).toBe("12s · 2 actions");
52
+ });
53
+ (0, _vitest.it)("separates the outcomes that were not plain successes", () => {
54
+ (0, _vitest.expect)((0, _activityGroups.turnFooter)({
55
+ startedAt: 0,
56
+ endedAt: 48_000,
57
+ toolCalls: [call("a", "network", "read"), call("b", "storage", "write", "failed"), call("c", "storage", "destructive", "declined"), call("d", "storage", "write", "stopped")]
58
+ })).toBe("48s · 4 actions · 1 failed · 1 declined · 1 not run");
59
+ });
60
+ (0, _vitest.it)("invents no duration for a note with no start time", () => {
61
+ (0, _vitest.expect)((0, _activityGroups.turnFooter)({
62
+ endedAt: 5_000,
63
+ toolCalls: []
64
+ })).toBeNull();
65
+ (0, _vitest.expect)((0, _activityGroups.turnFooter)({
66
+ endedAt: 5_000,
67
+ toolCalls: [call("a", "network", "read")]
68
+ })).toBe("1 action");
69
+ });
70
+ });
71
+ (0, _vitest.describe)("formatElapsed", () => {
72
+ (0, _vitest.it)("is compact", () => {
73
+ (0, _vitest.expect)((0, _activityGroups.formatElapsed)(4_200)).toBe("4s");
74
+ (0, _vitest.expect)((0, _activityGroups.formatElapsed)(64_000)).toBe("1m 04s");
75
+ (0, _vitest.expect)((0, _activityGroups.formatElapsed)(3_720_000)).toBe("1h 02m");
76
+ });
77
+ });
78
+ //# sourceMappingURL=activityGroups.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_vitest","require","_activityGroups","call","id","toolId","effect","status","action","label","describe","it","items","groupCalls","expect","toEqual","kind","objectContaining","toHaveLength","g","toBe","count","map","i","turnFooter","startedAt","endedAt","toolCalls","toBeNull","formatElapsed"],"sourceRoot":"../../../src","sources":["store/activityGroups.test.ts"],"mappings":";;AAIA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AANA;AACA;AACA;AACA;;AAMA,MAAME,IAAI,GAAGA,CACXC,EAAU,EACVC,MAAc,EACdC,MAA8B,EAC9BC,MAA8B,GAAG,IAAI,MACnB;EAAEH,EAAE;EAAEC,MAAM;EAAEG,MAAM,EAAE,GAAG;EAAEC,KAAK,EAAE,GAAGJ,MAAM,IAAID,EAAE,EAAE;EAAEG,MAAM;EAAED;AAAO,CAAC,CAAC;AAE1F,IAAAI,gBAAQ,EAAC,YAAY,EAAE,MAAM;EAC3B,IAAAC,UAAE,EAAC,yCAAyC,EAAE,MAAM;IAClD,MAAMC,KAAK,GAAG,IAAAC,0BAAU,EAAC,CAACV,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,IAAAW,cAAM,EAACF,KAAK,CAAC,CAACG,OAAO,CAAC,CAAC;MAAEC,IAAI,EAAE,MAAM;MAAEb,IAAI,EAAEW,cAAM,CAACG,gBAAgB,CAAC;QAAEb,EAAE,EAAE;MAAI,CAAC;IAAE,CAAC,CAAC,CAAC;EACvF,CAAC,CAAC;EAEF,IAAAO,UAAE,EAAC,kEAAkE,EAAE,MAAM;IAC3E,MAAMC,KAAK,GAAG,IAAAC,0BAAU,EAAC,CACvBV,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAC7B,CAAC;IACF,IAAAW,cAAM,EAACF,KAAK,CAAC,CAACM,YAAY,CAAC,CAAC,CAAC;IAC7B,MAAMC,CAAC,GAAGP,KAAK,CAAC,CAAC,CAAE;IACnB,IAAAE,cAAM,EAACK,CAAC,CAACH,IAAI,CAAC,CAACI,IAAI,CAAC,OAAO,CAAC;IAC5B,IAAAN,cAAM,EAACK,CAAC,CAACH,IAAI,KAAK,OAAO,IAAIG,CAAC,CAACE,KAAK,CAAC,CAACD,IAAI,CAAC,CAAC,CAAC;IAC7C,IAAAN,cAAM,EAACK,CAAC,CAACH,IAAI,KAAK,OAAO,IAAIG,CAAC,CAACV,KAAK,CAAC,CAACW,IAAI,CAAC,+BAA+B,CAAC;EAC7E,CAAC,CAAC;EAEF,IAAAT,UAAE,EAAC,uDAAuD,EAAE,MAAM;IAChE,MAAMC,KAAK,GAAG,IAAAC,0BAAU,EAAC,CACvBV,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAC7BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAC7B,CAAC;IACF,IAAAW,cAAM,EAACF,KAAK,CAACU,GAAG,CAAEC,CAAC,IAAMA,CAAC,CAACP,IAAI,KAAK,OAAO,GAAG,SAASO,CAAC,CAACF,KAAK,EAAE,GAAG,QAAQE,CAAC,CAACpB,IAAI,CAACC,EAAE,EAAG,CAAC,CAAC,CAACW,OAAO,CAAC,CAChG,SAAS,EACT,QAAQ,EACR,SAAS,CACV,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAJ,UAAE,EAAC,8EAA8E,EAAE,MAAM;IACvF,MAAMC,KAAK,GAAG,IAAAC,0BAAU,EAAC,CACvBV,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtCA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CACxC,CAAC;IACF,IAAAW,cAAM,EAACF,KAAK,CAACU,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACP,IAAI,CAAC,CAAC,CAACD,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EAC5E,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAAL,gBAAQ,EAAC,YAAY,EAAE,MAAM;EAC3B,IAAAC,UAAE,EAAC,mCAAmC,EAAE,MAAM;IAC5C,IAAAG,cAAM,EACJ,IAAAU,0BAAU,EAAC;MAAEC,SAAS,EAAE,KAAK;MAAEC,OAAO,EAAE,MAAM;MAAEC,SAAS,EAAE,CAACxB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAEA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC;IAAE,CAAC,CAC5H,CAAC,CAACiB,IAAI,CAAC,iBAAiB,CAAC;EAC3B,CAAC,CAAC;EAEF,IAAAT,UAAE,EAAC,sDAAsD,EAAE,MAAM;IAC/D,IAAAG,cAAM,EACJ,IAAAU,0BAAU,EAAC;MACTC,SAAS,EAAE,CAAC;MACZC,OAAO,EAAE,MAAM;MACfC,SAAS,EAAE,CACTxB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5BA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EACvCA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,EAC/CA,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;IAE5C,CAAC,CACH,CAAC,CAACiB,IAAI,CAAC,qDAAqD,CAAC;EAC/D,CAAC,CAAC;EAEF,IAAAT,UAAE,EAAC,mDAAmD,EAAE,MAAM;IAC5D,IAAAG,cAAM,EAAC,IAAAU,0BAAU,EAAC;MAAEE,OAAO,EAAE,KAAK;MAAEC,SAAS,EAAE;IAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;IAChE,IAAAd,cAAM,EAAC,IAAAU,0BAAU,EAAC;MAAEE,OAAO,EAAE,KAAK;MAAEC,SAAS,EAAE,CAACxB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC;IAAE,CAAC,CAAC,CAAC,CAACiB,IAAI,CAAC,UAAU,CAAC;EACpG,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAAV,gBAAQ,EAAC,eAAe,EAAE,MAAM;EAC9B,IAAAC,UAAE,EAAC,YAAY,EAAE,MAAM;IACrB,IAAAG,cAAM,EAAC,IAAAe,6BAAa,EAAC,KAAK,CAAC,CAAC,CAACT,IAAI,CAAC,IAAI,CAAC;IACvC,IAAAN,cAAM,EAAC,IAAAe,6BAAa,EAAC,MAAM,CAAC,CAAC,CAACT,IAAI,CAAC,QAAQ,CAAC;IAC5C,IAAAN,cAAM,EAAC,IAAAe,6BAAa,EAAC,SAAS,CAAC,CAAC,CAACT,IAAI,CAAC,QAAQ,CAAC;EACjD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1 +1,72 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.askBuoySettings=exports.DEFAULT_SETTINGS=void 0;var _sharedUi=require("@buoy-gg/shared-ui");const DEFAULT_SETTINGS=exports.DEFAULT_SETTINGS={showThinking:!1,bypassApprovals:!1,readOnly:!1},store=(0,_sharedUi.definePersistedSetting)(`${_sharedUi.devToolsStorageKeys.base}_ask_buoy_settings`,DEFAULT_SETTINGS,{sanitize:e=>({showThinking:!0===e.showThinking,bypassApprovals:!0===e.bypassApprovals,readOnly:!0===e.readOnly})});let current=DEFAULT_SETTINGS,loaded=!1;const listeners=new Set;function emit(){for(const e of listeners)try{e()}catch{}}const askBuoySettings=exports.askBuoySettings={get:()=>current,subscribe:e=>(listeners.add(e),loaded||(loaded=!0,store.load().then(e=>{current=e,emit()})),()=>listeners.delete(e)),set(e,s){current[e]!==s&&(current={...current,[e]:s},emit(),store.save(current))},reset(){current=DEFAULT_SETTINGS,loaded=!1,store.clear()}};
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.askBuoySettings = exports.DEFAULT_SETTINGS = void 0;
7
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
+ /**
9
+ * Ask Buoy's own preferences — the things a tester sets on the sheet, not the
10
+ * things a developer sets in `askBuoy={{ … }}`.
11
+ *
12
+ * Module-level and subscribable for the same reason the transcript is: the
13
+ * sheet unmounts whenever the tool is closed or minimised, and a preference
14
+ * that reset on every close would not be a preference.
15
+ */
16
+
17
+ const DEFAULT_SETTINGS = exports.DEFAULT_SETTINGS = {
18
+ showThinking: false,
19
+ bypassApprovals: false,
20
+ readOnly: false
21
+ };
22
+ const store = (0, _sharedUi.definePersistedSetting)(`${_sharedUi.devToolsStorageKeys.base}_ask_buoy_settings`, DEFAULT_SETTINGS, {
23
+ sanitize: merged => ({
24
+ showThinking: merged.showThinking === true,
25
+ // Fails closed: anything but a literal `true` on disk means "ask me".
26
+ bypassApprovals: merged.bypassApprovals === true,
27
+ readOnly: merged.readOnly === true
28
+ })
29
+ });
30
+ let current = DEFAULT_SETTINGS;
31
+ let loaded = false;
32
+ const listeners = new Set();
33
+ function emit() {
34
+ for (const fn of listeners) {
35
+ try {
36
+ fn();
37
+ } catch {
38
+ // A throwing subscriber must not take the sheet down.
39
+ }
40
+ }
41
+ }
42
+ const askBuoySettings = exports.askBuoySettings = {
43
+ get: () => current,
44
+ subscribe(fn) {
45
+ listeners.add(fn);
46
+ // First subscriber pays for the read; everyone after gets the cached value.
47
+ if (!loaded) {
48
+ loaded = true;
49
+ void store.load().then(value => {
50
+ current = value;
51
+ emit();
52
+ });
53
+ }
54
+ return () => listeners.delete(fn);
55
+ },
56
+ set(key, value) {
57
+ if (current[key] === value) return;
58
+ current = {
59
+ ...current,
60
+ [key]: value
61
+ };
62
+ emit();
63
+ void store.save(current);
64
+ },
65
+ /** Tests only — the module cache would otherwise leak between them. */
66
+ reset() {
67
+ current = DEFAULT_SETTINGS;
68
+ loaded = false;
69
+ void store.clear();
70
+ }
71
+ };
72
+ //# sourceMappingURL=askBuoySettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sharedUi","require","DEFAULT_SETTINGS","exports","showThinking","bypassApprovals","readOnly","store","definePersistedSetting","devToolsStorageKeys","base","sanitize","merged","current","loaded","listeners","Set","emit","fn","askBuoySettings","get","subscribe","add","load","then","value","delete","set","key","save","reset","clear"],"sourceRoot":"../../../src","sources":["store/askBuoySettings.ts"],"mappings":";;;;;;AAQA,IAAAA,SAAA,GAAAC,OAAA;AARA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAyCO,MAAMC,gBAAiC,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EAC/CE,YAAY,EAAE,KAAK;EACnBC,eAAe,EAAE,KAAK;EACtBC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,KAAK,GAAG,IAAAC,gCAAsB,EAClC,GAAGC,6BAAmB,CAACC,IAAI,oBAAoB,EAC/CR,gBAAgB,EAChB;EACES,QAAQ,EAAGC,MAAM,KAAM;IACrBR,YAAY,EAAEQ,MAAM,CAACR,YAAY,KAAK,IAAI;IAC1C;IACAC,eAAe,EAAEO,MAAM,CAACP,eAAe,KAAK,IAAI;IAChDC,QAAQ,EAAEM,MAAM,CAACN,QAAQ,KAAK;EAChC,CAAC;AACH,CACF,CAAC;AAED,IAAIO,OAAwB,GAAGX,gBAAgB;AAC/C,IAAIY,MAAM,GAAG,KAAK;AAClB,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;AAEvC,SAASC,IAAIA,CAAA,EAAS;EACpB,KAAK,MAAMC,EAAE,IAAIH,SAAS,EAAE;IAC1B,IAAI;MACFG,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF;AAEO,MAAMC,eAAe,GAAAhB,OAAA,CAAAgB,eAAA,GAAG;EAC7BC,GAAG,EAAEA,CAAA,KAAuBP,OAAO;EAEnCQ,SAASA,CAACH,EAAc,EAAc;IACpCH,SAAS,CAACO,GAAG,CAACJ,EAAE,CAAC;IACjB;IACA,IAAI,CAACJ,MAAM,EAAE;MACXA,MAAM,GAAG,IAAI;MACb,KAAKP,KAAK,CAACgB,IAAI,CAAC,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAK;QAChCZ,OAAO,GAAGY,KAAK;QACfR,IAAI,CAAC,CAAC;MACR,CAAC,CAAC;IACJ;IACA,OAAO,MAAMF,SAAS,CAACW,MAAM,CAACR,EAAE,CAAC;EACnC,CAAC;EAEDS,GAAGA,CAAkCC,GAAM,EAAEH,KAAyB,EAAQ;IAC5E,IAAIZ,OAAO,CAACe,GAAG,CAAC,KAAKH,KAAK,EAAE;IAC5BZ,OAAO,GAAG;MAAE,GAAGA,OAAO;MAAE,CAACe,GAAG,GAAGH;IAAM,CAAC;IACtCR,IAAI,CAAC,CAAC;IACN,KAAKV,KAAK,CAACsB,IAAI,CAAChB,OAAO,CAAC;EAC1B,CAAC;EAED;EACAiB,KAAKA,CAAA,EAAS;IACZjB,OAAO,GAAGX,gBAAgB;IAC1BY,MAAM,GAAG,KAAK;IACd,KAAKP,KAAK,CAACwB,KAAK,CAAC,CAAC;EACpB;AACF,CAAC","ignoreList":[]}