@buoy-gg/ask-buoy 7.0.41 → 7.0.42
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.
- package/README.md +13 -98
- package/lib/commonjs/blocks/AskBlocks.js +1 -338
- package/lib/commonjs/blocks/BlockRenderer.js +1 -262
- package/lib/commonjs/blocks/ChromePrototypes.js +1 -514
- package/lib/commonjs/blocks/DataBlocks.js +1 -783
- package/lib/commonjs/blocks/ExtraBlocks.js +1 -1862
- package/lib/commonjs/blocks/MediaBlocks.js +1 -158
- package/lib/commonjs/blocks/ReceiptBlocks.js +2 -592
- package/lib/commonjs/blocks/blockText.js +1 -60
- package/lib/commonjs/blocks/blockText.test.js +1 -53
- package/lib/commonjs/blocks/context.js +1 -42
- package/lib/commonjs/blocks/icons.js +1 -96
- package/lib/commonjs/blocks/index.js +1 -95
- package/lib/commonjs/blocks/listRow.test.js +1 -55
- package/lib/commonjs/blocks/pageState.js +1 -34
- package/lib/commonjs/blocks/pageState.test.js +1 -57
- package/lib/commonjs/blocks/primitives.js +1 -457
- package/lib/commonjs/blocks/primitivesIndex.js +1 -62
- package/lib/commonjs/blocks/ruleStates.js +1 -39
- package/lib/commonjs/components/ApprovalCard.js +1 -297
- package/lib/commonjs/components/AskBuoyHeader.js +1 -196
- package/lib/commonjs/components/AskBuoyIcon.js +1 -19
- package/lib/commonjs/components/AskBuoyModal.js +2 -482
- package/lib/commonjs/components/AskBuoySettings.js +1 -181
- package/lib/commonjs/components/ChangesBar.js +1 -212
- package/lib/commonjs/components/Composer.js +1 -255
- package/lib/commonjs/components/EmptyState.js +1 -161
- package/lib/commonjs/components/KeyboardPad.js +1 -80
- package/lib/commonjs/components/Markdown.js +1 -310
- package/lib/commonjs/components/MessageList.js +1 -970
- package/lib/commonjs/components/QueuedMessages.js +1 -145
- package/lib/commonjs/components/ThinkingStrip.js +1 -223
- package/lib/commonjs/components/TypingDots.js +1 -63
- package/lib/commonjs/components/markdownParse.js +1 -131
- package/lib/commonjs/components/markdownParse.test.js +1 -99
- package/lib/commonjs/components/useCopyAction.js +1 -50
- package/lib/commonjs/index.js +1 -252
- package/lib/commonjs/preset.js +1 -91
- package/lib/commonjs/store/activityGroups.js +1 -110
- package/lib/commonjs/store/activityGroups.test.js +1 -78
- package/lib/commonjs/store/askBuoySettings.js +1 -72
- package/lib/commonjs/store/askBuoyStore.js +2 -588
- package/lib/commonjs/store/blockPlacement.js +1 -64
- package/lib/commonjs/store/blockPlacement.test.js +1 -123
- package/lib/commonjs/store/queue.test.js +1 -150
- package/lib/commonjs/store/resetConversation.js +1 -77
- package/lib/commonjs/store/restorePending.test.js +1 -63
- package/lib/commonjs/store/restoredIds.test.js +1 -47
- package/lib/commonjs/store/suggestions.js +1 -54
- package/lib/commonjs/store/suggestions.test.js +1 -58
- package/lib/commonjs/store/systemLine.test.js +1 -77
- package/lib/commonjs/store/ticketPrompt.js +1 -17
- package/lib/commonjs/store/traceText.js +1 -81
- package/lib/commonjs/store/traceText.test.js +1 -112
- package/lib/commonjs/store/transcriptPersistence.js +1 -297
- package/lib/commonjs/store/transcriptPersistence.test.js +1 -333
- package/lib/commonjs/store/turnRendering.test.js +1 -151
- package/lib/commonjs/store/useAskBuoy.js +1 -651
- package/lib/commonjs/store/useAskBuoySettings.js +1 -14
- package/lib/commonjs/sync/askBuoySyncAdapter.js +1 -153
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js +1 -141
- package/lib/commonjs/sync/wire.js +1 -58
- package/lib/commonjs/types.js +1 -6
- package/lib/module/blocks/AskBlocks.js +1 -331
- package/lib/module/blocks/BlockRenderer.js +1 -257
- package/lib/module/blocks/ChromePrototypes.js +1 -503
- package/lib/module/blocks/DataBlocks.js +1 -769
- package/lib/module/blocks/ExtraBlocks.js +1 -1835
- package/lib/module/blocks/MediaBlocks.js +1 -153
- package/lib/module/blocks/ReceiptBlocks.js +2 -580
- package/lib/module/blocks/blockText.js +1 -55
- package/lib/module/blocks/blockText.test.js +1 -53
- package/lib/module/blocks/context.js +1 -35
- package/lib/module/blocks/icons.js +1 -91
- package/lib/module/blocks/index.js +1 -8
- package/lib/module/blocks/listRow.test.js +1 -56
- package/lib/module/blocks/pageState.js +1 -30
- package/lib/module/blocks/pageState.test.js +1 -56
- package/lib/module/blocks/primitives.js +1 -445
- package/lib/module/blocks/primitivesIndex.js +1 -5
- package/lib/module/blocks/ruleStates.js +1 -35
- package/lib/module/components/ApprovalCard.js +1 -292
- package/lib/module/components/AskBuoyHeader.js +1 -193
- package/lib/module/components/AskBuoyIcon.js +1 -8
- package/lib/module/components/AskBuoyModal.js +2 -477
- package/lib/module/components/AskBuoySettings.js +1 -176
- package/lib/module/components/ChangesBar.js +1 -206
- package/lib/module/components/Composer.js +1 -250
- package/lib/module/components/EmptyState.js +1 -156
- package/lib/module/components/KeyboardPad.js +1 -75
- package/lib/module/components/Markdown.js +1 -305
- package/lib/module/components/MessageList.js +1 -964
- package/lib/module/components/QueuedMessages.js +1 -140
- package/lib/module/components/ThinkingStrip.js +1 -218
- package/lib/module/components/TypingDots.js +1 -58
- package/lib/module/components/markdownParse.js +1 -125
- package/lib/module/components/markdownParse.test.js +1 -98
- package/lib/module/components/useCopyAction.js +1 -46
- package/lib/module/index.js +1 -34
- package/lib/module/preset.js +1 -74
- package/lib/module/store/activityGroups.js +1 -103
- package/lib/module/store/activityGroups.test.js +1 -77
- package/lib/module/store/askBuoySettings.js +1 -67
- package/lib/module/store/askBuoyStore.js +2 -582
- package/lib/module/store/blockPlacement.js +1 -59
- package/lib/module/store/blockPlacement.test.js +1 -122
- package/lib/module/store/queue.test.js +1 -149
- package/lib/module/store/resetConversation.js +1 -72
- package/lib/module/store/restorePending.test.js +1 -62
- package/lib/module/store/restoredIds.test.js +1 -46
- package/lib/module/store/suggestions.js +1 -49
- package/lib/module/store/suggestions.test.js +1 -57
- package/lib/module/store/systemLine.test.js +1 -76
- package/lib/module/store/ticketPrompt.js +1 -13
- package/lib/module/store/traceText.js +1 -75
- package/lib/module/store/traceText.test.js +1 -111
- package/lib/module/store/transcriptPersistence.js +1 -287
- package/lib/module/store/transcriptPersistence.test.js +1 -332
- package/lib/module/store/turnRendering.test.js +1 -150
- package/lib/module/store/useAskBuoy.js +1 -646
- package/lib/module/store/useAskBuoySettings.js +1 -9
- package/lib/module/sync/askBuoySyncAdapter.js +1 -148
- package/lib/module/sync/askBuoySyncAdapter.test.js +1 -140
- package/lib/module/sync/wire.js +1 -47
- package/lib/module/types.js +1 -4
- package/lib/web/index.mjs +11 -12
- package/package.json +8 -8
- package/lib/commonjs/blocks/AskBlocks.js.map +0 -1
- package/lib/commonjs/blocks/BlockRenderer.js.map +0 -1
- package/lib/commonjs/blocks/ChromePrototypes.js.map +0 -1
- package/lib/commonjs/blocks/DataBlocks.js.map +0 -1
- package/lib/commonjs/blocks/ExtraBlocks.js.map +0 -1
- package/lib/commonjs/blocks/MediaBlocks.js.map +0 -1
- package/lib/commonjs/blocks/ReceiptBlocks.js.map +0 -1
- package/lib/commonjs/blocks/blockText.js.map +0 -1
- package/lib/commonjs/blocks/blockText.test.js.map +0 -1
- package/lib/commonjs/blocks/context.js.map +0 -1
- package/lib/commonjs/blocks/icons.js.map +0 -1
- package/lib/commonjs/blocks/index.js.map +0 -1
- package/lib/commonjs/blocks/listRow.test.js.map +0 -1
- package/lib/commonjs/blocks/pageState.js.map +0 -1
- package/lib/commonjs/blocks/pageState.test.js.map +0 -1
- package/lib/commonjs/blocks/primitives.js.map +0 -1
- package/lib/commonjs/blocks/primitivesIndex.js.map +0 -1
- package/lib/commonjs/blocks/ruleStates.js.map +0 -1
- package/lib/commonjs/components/ApprovalCard.js.map +0 -1
- package/lib/commonjs/components/AskBuoyHeader.js.map +0 -1
- package/lib/commonjs/components/AskBuoyIcon.js.map +0 -1
- package/lib/commonjs/components/AskBuoyModal.js.map +0 -1
- package/lib/commonjs/components/AskBuoySettings.js.map +0 -1
- package/lib/commonjs/components/ChangesBar.js.map +0 -1
- package/lib/commonjs/components/Composer.js.map +0 -1
- package/lib/commonjs/components/EmptyState.js.map +0 -1
- package/lib/commonjs/components/KeyboardPad.js.map +0 -1
- package/lib/commonjs/components/Markdown.js.map +0 -1
- package/lib/commonjs/components/MessageList.js.map +0 -1
- package/lib/commonjs/components/QueuedMessages.js.map +0 -1
- package/lib/commonjs/components/ThinkingStrip.js.map +0 -1
- package/lib/commonjs/components/TypingDots.js.map +0 -1
- package/lib/commonjs/components/markdownParse.js.map +0 -1
- package/lib/commonjs/components/markdownParse.test.js.map +0 -1
- package/lib/commonjs/components/useCopyAction.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/preset.js.map +0 -1
- package/lib/commonjs/store/activityGroups.js.map +0 -1
- package/lib/commonjs/store/activityGroups.test.js.map +0 -1
- package/lib/commonjs/store/askBuoySettings.js.map +0 -1
- package/lib/commonjs/store/askBuoyStore.js.map +0 -1
- package/lib/commonjs/store/blockPlacement.js.map +0 -1
- package/lib/commonjs/store/blockPlacement.test.js.map +0 -1
- package/lib/commonjs/store/queue.test.js.map +0 -1
- package/lib/commonjs/store/resetConversation.js.map +0 -1
- package/lib/commonjs/store/restorePending.test.js.map +0 -1
- package/lib/commonjs/store/restoredIds.test.js.map +0 -1
- package/lib/commonjs/store/suggestions.js.map +0 -1
- package/lib/commonjs/store/suggestions.test.js.map +0 -1
- package/lib/commonjs/store/systemLine.test.js.map +0 -1
- package/lib/commonjs/store/ticketPrompt.js.map +0 -1
- package/lib/commonjs/store/traceText.js.map +0 -1
- package/lib/commonjs/store/traceText.test.js.map +0 -1
- package/lib/commonjs/store/transcriptPersistence.js.map +0 -1
- package/lib/commonjs/store/transcriptPersistence.test.js.map +0 -1
- package/lib/commonjs/store/turnRendering.test.js.map +0 -1
- package/lib/commonjs/store/useAskBuoy.js.map +0 -1
- package/lib/commonjs/store/useAskBuoySettings.js.map +0 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.js.map +0 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +0 -1
- package/lib/commonjs/sync/wire.js.map +0 -1
- package/lib/commonjs/types.js.map +0 -1
- package/lib/module/blocks/AskBlocks.js.map +0 -1
- package/lib/module/blocks/BlockRenderer.js.map +0 -1
- package/lib/module/blocks/ChromePrototypes.js.map +0 -1
- package/lib/module/blocks/DataBlocks.js.map +0 -1
- package/lib/module/blocks/ExtraBlocks.js.map +0 -1
- package/lib/module/blocks/MediaBlocks.js.map +0 -1
- package/lib/module/blocks/ReceiptBlocks.js.map +0 -1
- package/lib/module/blocks/blockText.js.map +0 -1
- package/lib/module/blocks/blockText.test.js.map +0 -1
- package/lib/module/blocks/context.js.map +0 -1
- package/lib/module/blocks/icons.js.map +0 -1
- package/lib/module/blocks/index.js.map +0 -1
- package/lib/module/blocks/listRow.test.js.map +0 -1
- package/lib/module/blocks/pageState.js.map +0 -1
- package/lib/module/blocks/pageState.test.js.map +0 -1
- package/lib/module/blocks/primitives.js.map +0 -1
- package/lib/module/blocks/primitivesIndex.js.map +0 -1
- package/lib/module/blocks/ruleStates.js.map +0 -1
- package/lib/module/components/ApprovalCard.js.map +0 -1
- package/lib/module/components/AskBuoyHeader.js.map +0 -1
- package/lib/module/components/AskBuoyIcon.js.map +0 -1
- package/lib/module/components/AskBuoyModal.js.map +0 -1
- package/lib/module/components/AskBuoySettings.js.map +0 -1
- package/lib/module/components/ChangesBar.js.map +0 -1
- package/lib/module/components/Composer.js.map +0 -1
- package/lib/module/components/EmptyState.js.map +0 -1
- package/lib/module/components/KeyboardPad.js.map +0 -1
- package/lib/module/components/Markdown.js.map +0 -1
- package/lib/module/components/MessageList.js.map +0 -1
- package/lib/module/components/QueuedMessages.js.map +0 -1
- package/lib/module/components/ThinkingStrip.js.map +0 -1
- package/lib/module/components/TypingDots.js.map +0 -1
- package/lib/module/components/markdownParse.js.map +0 -1
- package/lib/module/components/markdownParse.test.js.map +0 -1
- package/lib/module/components/useCopyAction.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/preset.js.map +0 -1
- package/lib/module/store/activityGroups.js.map +0 -1
- package/lib/module/store/activityGroups.test.js.map +0 -1
- package/lib/module/store/askBuoySettings.js.map +0 -1
- package/lib/module/store/askBuoyStore.js.map +0 -1
- package/lib/module/store/blockPlacement.js.map +0 -1
- package/lib/module/store/blockPlacement.test.js.map +0 -1
- package/lib/module/store/queue.test.js.map +0 -1
- package/lib/module/store/resetConversation.js.map +0 -1
- package/lib/module/store/restorePending.test.js.map +0 -1
- package/lib/module/store/restoredIds.test.js.map +0 -1
- package/lib/module/store/suggestions.js.map +0 -1
- package/lib/module/store/suggestions.test.js.map +0 -1
- package/lib/module/store/systemLine.test.js.map +0 -1
- package/lib/module/store/ticketPrompt.js.map +0 -1
- package/lib/module/store/traceText.js.map +0 -1
- package/lib/module/store/traceText.test.js.map +0 -1
- package/lib/module/store/transcriptPersistence.js.map +0 -1
- package/lib/module/store/transcriptPersistence.test.js.map +0 -1
- package/lib/module/store/turnRendering.test.js.map +0 -1
- package/lib/module/store/useAskBuoy.js.map +0 -1
- package/lib/module/store/useAskBuoySettings.js.map +0 -1
- package/lib/module/sync/askBuoySyncAdapter.js.map +0 -1
- package/lib/module/sync/askBuoySyncAdapter.test.js.map +0 -1
- package/lib/module/sync/wire.js.map +0 -1
- package/lib/module/types.js.map +0 -1
- package/lib/typescript/blocks/AskBlocks.d.ts.map +0 -1
- package/lib/typescript/blocks/BlockRenderer.d.ts.map +0 -1
- package/lib/typescript/blocks/ChromePrototypes.d.ts.map +0 -1
- package/lib/typescript/blocks/DataBlocks.d.ts.map +0 -1
- package/lib/typescript/blocks/ExtraBlocks.d.ts.map +0 -1
- package/lib/typescript/blocks/MediaBlocks.d.ts.map +0 -1
- package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +0 -1
- package/lib/typescript/blocks/blockText.d.ts.map +0 -1
- package/lib/typescript/blocks/blockText.test.d.ts.map +0 -1
- package/lib/typescript/blocks/context.d.ts.map +0 -1
- package/lib/typescript/blocks/icons.d.ts.map +0 -1
- package/lib/typescript/blocks/index.d.ts.map +0 -1
- package/lib/typescript/blocks/listRow.test.d.ts.map +0 -1
- package/lib/typescript/blocks/pageState.d.ts.map +0 -1
- package/lib/typescript/blocks/pageState.test.d.ts.map +0 -1
- package/lib/typescript/blocks/primitives.d.ts.map +0 -1
- package/lib/typescript/blocks/primitivesIndex.d.ts.map +0 -1
- package/lib/typescript/blocks/ruleStates.d.ts.map +0 -1
- package/lib/typescript/components/ApprovalCard.d.ts.map +0 -1
- package/lib/typescript/components/AskBuoyHeader.d.ts.map +0 -1
- package/lib/typescript/components/AskBuoyIcon.d.ts.map +0 -1
- package/lib/typescript/components/AskBuoyModal.d.ts.map +0 -1
- package/lib/typescript/components/AskBuoySettings.d.ts.map +0 -1
- package/lib/typescript/components/ChangesBar.d.ts.map +0 -1
- package/lib/typescript/components/Composer.d.ts.map +0 -1
- package/lib/typescript/components/EmptyState.d.ts.map +0 -1
- package/lib/typescript/components/KeyboardPad.d.ts.map +0 -1
- package/lib/typescript/components/Markdown.d.ts.map +0 -1
- package/lib/typescript/components/MessageList.d.ts.map +0 -1
- package/lib/typescript/components/QueuedMessages.d.ts.map +0 -1
- package/lib/typescript/components/ThinkingStrip.d.ts.map +0 -1
- package/lib/typescript/components/TypingDots.d.ts.map +0 -1
- package/lib/typescript/components/markdownParse.d.ts.map +0 -1
- package/lib/typescript/components/markdownParse.test.d.ts.map +0 -1
- package/lib/typescript/components/useCopyAction.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/preset.d.ts.map +0 -1
- package/lib/typescript/store/activityGroups.d.ts.map +0 -1
- package/lib/typescript/store/activityGroups.test.d.ts.map +0 -1
- package/lib/typescript/store/askBuoySettings.d.ts.map +0 -1
- package/lib/typescript/store/askBuoyStore.d.ts.map +0 -1
- package/lib/typescript/store/blockPlacement.d.ts.map +0 -1
- package/lib/typescript/store/blockPlacement.test.d.ts.map +0 -1
- package/lib/typescript/store/queue.test.d.ts.map +0 -1
- package/lib/typescript/store/resetConversation.d.ts.map +0 -1
- package/lib/typescript/store/restorePending.test.d.ts.map +0 -1
- package/lib/typescript/store/restoredIds.test.d.ts.map +0 -1
- package/lib/typescript/store/suggestions.d.ts.map +0 -1
- package/lib/typescript/store/suggestions.test.d.ts.map +0 -1
- package/lib/typescript/store/systemLine.test.d.ts.map +0 -1
- package/lib/typescript/store/ticketPrompt.d.ts.map +0 -1
- package/lib/typescript/store/traceText.d.ts.map +0 -1
- package/lib/typescript/store/traceText.test.d.ts.map +0 -1
- package/lib/typescript/store/transcriptPersistence.d.ts.map +0 -1
- package/lib/typescript/store/transcriptPersistence.test.d.ts.map +0 -1
- package/lib/typescript/store/turnRendering.test.d.ts.map +0 -1
- package/lib/typescript/store/useAskBuoy.d.ts.map +0 -1
- package/lib/typescript/store/useAskBuoySettings.d.ts.map +0 -1
- package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +0 -1
- package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +0 -1
- package/lib/typescript/sync/wire.d.ts.map +0 -1
- package/lib/typescript/types.d.ts.map +0 -1
package/lib/web/index.mjs
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
var vr=Object.defineProperty;var ts=Object.getOwnPropertyDescriptor;var os=Object.getOwnPropertyNames;var rs=Object.prototype.hasOwnProperty;var ns=(e,t)=>{for(var o in t)vr(e,o,{get:t[o],enumerable:!0})},Cr=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of os(t))!rs.call(e,n)&&n!==o&&vr(e,n,{get:()=>t[n],enumerable:!(r=ts(t,n))||r.enumerable});return e},ue=(e,t,o)=>(Cr(e,t,"default"),o&&Cr(o,t,"default"));var R=process.env.NODE_ENV!=="production";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useCallback as ot,useEffect as jt,useMemo as ho,useRef as Qt,useState as dr}from"react";var z={};ns(z,{AccessibilityInfo:()=>fs,ActivityIndicator:()=>yt,Alert:()=>Xt,Animated:()=>ee,AppRegistry:()=>bs,AppState:()=>hs,Appearance:()=>ys,BackHandler:()=>ms,Button:()=>ds,CheckBox:()=>Ps,Clipboard:()=>xs,DeviceEventEmitter:()=>_s,Dimensions:()=>ws,Easing:()=>bt,FlatList:()=>Ao,I18nManager:()=>Ts,Image:()=>Ye,ImageBackground:()=>Ds,InteractionManager:()=>ks,Keyboard:()=>Zt,KeyboardAvoidingView:()=>zs,LayoutAnimation:()=>Ss,Linking:()=>Cs,LogBox:()=>Fs,Modal:()=>cs,NativeEventEmitter:()=>vs,NativeModules:()=>gs,PanResponder:()=>Bs,Picker:()=>Vs,PixelRatio:()=>As,Platform:()=>ht,Pressable:()=>b,ProgressBar:()=>Ls,RefreshControl:()=>Hs,SafeAreaView:()=>$s,ScrollView:()=>ke,SectionList:()=>Os,Share:()=>Bo,StatusBar:()=>Es,StyleSheet:()=>y,Switch:()=>vo,Text:()=>i,TextInput:()=>ze,Touchable:()=>Ws,TouchableHighlight:()=>as,TouchableNativeFeedback:()=>Ms,TouchableOpacity:()=>Vt,TouchableWithoutFeedback:()=>ls,UIManager:()=>Is,Vibration:()=>Rs,View:()=>l,VirtualizedList:()=>Ns,YellowBox:()=>qs,findNodeHandle:()=>us,unstable_createElement:()=>ps,useColorScheme:()=>Us,useLocaleContext:()=>Ks,useWindowDimensions:()=>Io});ue(z,rd);import*as rd from"react-native-web";import{unstable_createElement as ps,NativeModules as gs,AccessibilityInfo as fs,Animated as ee,Appearance as ys,AppRegistry as bs,AppState as hs,BackHandler as ms,Clipboard as xs,Dimensions as ws,Easing as bt,I18nManager as Ts,Keyboard as Zt,InteractionManager as ks,LayoutAnimation as Ss,Linking as Cs,NativeEventEmitter as vs,PanResponder as Bs,PixelRatio as As,Platform as ht,Share as Bo,StyleSheet as y,UIManager as Is,Vibration as Rs,CheckBox as Ps,FlatList as Ao,Image as Ye,ImageBackground as Ds,KeyboardAvoidingView as zs,Picker as Vs,ProgressBar as Ls,RefreshControl as Hs,SafeAreaView as $s,SectionList as Os,StatusBar as Es,Touchable as Ws,TouchableNativeFeedback as Ms,VirtualizedList as Ns,YellowBox as qs,LogBox as Fs,DeviceEventEmitter as _s,useColorScheme as Us,useLocaleContext as Ks,useWindowDimensions as Io}from"react-native-web";import*as X from"react-native-web";import{createElement as is,forwardRef as ss}from"react";function Ue(e){let t=ss((r,n)=>{let{accessibilityState:s,accessibilityValue:a,...g}=r;for(let u of["busy","checked","disabled","expanded","selected"])s?.[u]!==void 0&&g[`aria-${u}`]===void 0&&(g[`aria-${u}`]=s[u]);for(let[u,f]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))a?.[u]!==void 0&&g[`aria-${f}`]===void 0&&(g[`aria-${f}`]=a[u]);return is(e,{...g,ref:n})}),o=e.State;return o&&Object.assign(t,{State:o}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=Ue(X.View),i=Ue(X.Text),ze=Ue(X.TextInput),Vt=Ue(X.TouchableOpacity),as=Ue(X.TouchableHighlight),ls=Ue(X.TouchableWithoutFeedback),b=Ue(X.Pressable),ke=Ue(X.ScrollView),cs=Ue(X.Modal),vo=Ue(X.Switch),yt=Ue(X.ActivityIndicator),ds=Ue(X.Button),us=X.findNodeHandle,Xt={alert(e,t,o,r){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let s=document.createElement("h2");if(s.textContent=e,s.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(s),t){let f=document.createElement("p");f.textContent=t,f.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(f)}let a=document.createElement("div");a.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let g=o?.length?o:[{text:"OK"}],u=()=>{n.close?.(),n.remove()};for(let f of g){let m=document.createElement("button");m.type="button",m.textContent=f.text??"OK",m.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${f.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,m.onclick=()=>{u(),f.onPress?.()},a.appendChild(m)}n.addEventListener("cancel",f=>{f.preventDefault(),r?.cancelable!==!1&&(u(),r?.onDismiss?.())}),n.appendChild(a),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};import{isReversible as _c}from"@buoy-gg/agent-core/web";import{dispatchToolAction as Uc,FeatureGate as Kc,Info as jc,JsModal as Qc,ModalHeader as ur,night as Gt,setToolAttention as Et,useSafeAreaInsets as Gc}from"@buoy-gg/shared-ui/web";import{Component as Za}from"react";import{night as Un}from"@buoy-gg/shared-ui/web";import{useState as ua}from"react";import{Check as pa,ChevronRight as ga,night as _}from"@buoy-gg/shared-ui/web";import{createContext as js,useContext as Qs}from"react";import{jsx as Js}from"react/jsx-runtime";var Gs={answer:()=>{},runAction:()=>{},answered:{},supports:{}},Br=js(Gs);function eo({value:e,children:t}){return Js(Br.Provider,{value:e,children:t})}function K(){return Qs(Br)}function Ar(e,t){return`${e}:${t.label}`}import{AlertTriangle as Ys,Check as Xs,Clock as Zs,Database as ea,Eye as ta,Globe as oa,Image as ra,Info as na,Layers as Ir,Navigation as ia,night as Mt,User as sa}from"@buoy-gg/shared-ui/web";import{jsx as Oe}from"react/jsx-runtime";function to({name:e,size:t=14}){let o=Mt.color.textSecondary,r=(()=>{switch(e){case"network":return Oe(oa,{size:t,color:o});case"storage":return Oe(ea,{size:t,color:o});case"route":return Oe(ia,{size:t,color:o});case"screen":return Oe(ta,{size:t,color:o});case"user":return Oe(sa,{size:t,color:o});case"image":return Oe(ra,{size:t,color:o});case"check":return Oe(Xs,{size:t,color:Mt.color.accent});case"warn":return Oe(Ys,{size:t,color:Mt.color.warning});case"info":return Oe(na,{size:t,color:Mt.color.info});case"store":return Oe(Ir,{size:t,color:o});case"query":return Oe(Ir,{size:t,color:o});case"clock":return Oe(Zs,{size:t,color:o})}})();return Oe(l,{style:aa.wrap,children:r})}var aa=y.create({wrap:{width:24,height:24,borderRadius:6,backgroundColor:Mt.color.fill,alignItems:"center",justifyContent:"center"}});import{useState as Pr}from"react";import{Check as la,ChevronDown as Dr,ChevronUp as zr,night as B,X as ca}from"@buoy-gg/shared-ui/web";function Rr(e,t,o,r){let n=Math.min(o,e),s=Math.max(0,e-n),a=o>t&&e>t;return{hidden:s,next:Math.min(s,r),expanded:a,canExpand:s>0,canCollapse:a}}import{jsx as Se,jsxs as lt}from"react/jsx-runtime";function Xe(e){switch(e){case"accent":return B.color.accent;case"warning":return B.color.warning;case"danger":return B.color.danger;case"info":return B.color.info;case"muted":return B.color.textTertiary;default:return B.color.text}}function oo({source:e}){if(!e||e==="live")return null;let t=e==="changed"?"CHANGED BY ASK BUOY":e==="mocked"?"MOCKED":"FROM THE MODEL",o=e==="changed"?B.color.warning:e==="mocked"?B.color.danger:B.color.textTertiary;return Se(l,{style:[j.badge,{borderColor:o}],children:Se(i,{style:[j.badgeText,{color:o}],children:t})})}function H({title:e,source:t,children:o,testID:r,tone:n,collapsible:s,summary:a}){let[g,u]=Pr(!1),f=!!s&&!g;return lt(l,{style:[j.card,n==="warning"&&j.cardWarning,n==="danger"&&j.cardDanger,n==="info"&&j.cardInfo],testID:r,children:[(e||t&&t!=="live")&<(l,{style:j.titleRow,children:[e?Se(i,{style:j.title,numberOfLines:2,children:e}):Se(l,{style:j.flex}),Se(oo,{source:t})]}),s?lt(b,{testID:r?`${r}-toggle`:void 0,onPress:()=>u(m=>!m),accessibilityRole:"button",accessibilityState:{expanded:g},accessibilityLabel:`${a??"Details"}, ${g?"hide":"show"}`,style:({pressed:m})=>[j.disclosure,!f&&j.disclosureOpen,m&&j.pressed],children:[Se(i,{style:j.disclosureText,numberOfLines:1,children:a??"Details"}),f?Se(Dr,{size:12,color:B.color.textTertiary}):Se(zr,{size:12,color:B.color.textTertiary})]}):null,f?null:o]})}var da=5;function Ee(e,t,o=da){let[r,n]=Pr(t),{hidden:s,next:a,expanded:g,canExpand:u,canCollapse:f}=Rr(e.length,t,r,o);return{visible:e.slice(0,r),hidden:s,next:a,expanded:g,showMore:u?()=>n(m=>m+o):void 0,showLess:f?()=>n(t):void 0}}function We({paged:e}){let{next:t,showMore:o,showLess:r}=e;return!o&&!r?null:lt(l,{style:j.moreRow,children:[o?lt(b,{testID:"buoy-block-show-more",onPress:o,style:[j.more,j.moreCell],accessibilityRole:"button",children:[lt(i,{style:j.moreText,children:["Show ",t," more"]}),Se(Dr,{size:12,color:B.color.textTertiary})]}):null,r?lt(b,{testID:"buoy-block-show-fewer",onPress:r,style:[j.more,j.moreCell],accessibilityRole:"button",children:[Se(i,{style:j.moreText,children:"Show fewer"}),Se(zr,{size:12,color:B.color.textTertiary})]}):null]})}function Ro({shown:e,total:t}){return!t||t<=e?null:Se(l,{style:j.more,children:lt(i,{style:j.moreNote,children:[e," of ",t," shown"]})})}function he({actions:e,blockId:t,align:o="left"}){let r=K();if(!e?.length)return null;let n=e.filter(s=>s.openTool?r.supports?.openTool!==!1:s.minimize?r.supports?.minimize!==!1:s.dispatch?r.supports?.dispatch!==!1:!0);return n.length===0?null:Se(l,{style:[j.actions,o==="right"&&j.actionsRight],children:n.slice(0,2).map(s=>{let a=r.actionState?.[Ar(t,s)],g=!!r.busy||a==="running"||a==="done";return lt(b,{accessibilityRole:"button",accessibilityLabel:s.label,testID:`buoy-block-action-${s.label.toLowerCase().replace(/\s+/g,"-")}`,disabled:g,onPress:()=>void r.runAction(s,t),style:({pressed:u})=>[j.button,s.primary?j.buttonPrimary:j.buttonPlate,g&&j.buttonDisabled,u&&!g&&j.pressed],children:[a==="running"?Se(yt,{size:"small",color:s.primary?B.color.onAccent:B.color.text}):a==="done"?Se(la,{size:12,color:s.primary?B.color.onAccent:B.color.accent}):a==="failed"?Se(ca,{size:12,color:B.color.danger}):null,Se(i,{style:[j.buttonText,s.primary?j.buttonTextPrimary:j.buttonTextPlate],children:s.label})]},s.label)})})}var v=y.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},rowDivider:{borderTopWidth:y.hairlineWidth,borderTopColor:B.color.separator},rowTitle:{flex:1,color:B.color.text,fontSize:B.font.body,lineHeight:19},rowSub:{color:B.color.textSecondary,fontSize:B.font.caption,lineHeight:17},rowTrailing:{color:B.color.textTertiary,fontSize:B.font.caption,maxWidth:120,textAlign:"right"},mono:{fontFamily:"Menlo",fontSize:12,color:B.color.text},pill:{paddingHorizontal:7,paddingVertical:2,borderRadius:B.radius.badge,backgroundColor:B.color.fill},pillText:{fontSize:B.font.micro,fontWeight:"700",letterSpacing:.4,color:B.color.textSecondary}}),j=y.create({card:{borderRadius:B.radius.card,borderWidth:y.hairlineWidth,borderColor:B.color.border,backgroundColor:B.color.surface,overflow:"hidden"},cardWarning:{borderColor:B.color.warning,backgroundColor:B.color.warningSoft},cardDanger:{borderColor:B.color.danger,backgroundColor:B.color.dangerSoft},cardInfo:{borderColor:B.color.accentBorderStrong,backgroundColor:B.color.accentSoft},titleRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:6},flex:{flex:1},title:{flex:1,color:B.color.text,fontSize:B.font.caption,fontWeight:"600"},disclosure:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:9},disclosureOpen:{borderBottomWidth:y.hairlineWidth,borderBottomColor:B.color.separator},disclosureText:{flex:1,color:B.color.textSecondary,fontSize:B.font.caption},badge:{borderWidth:y.hairlineWidth,borderRadius:B.radius.badge,paddingHorizontal:6,paddingVertical:2},badgeText:{fontSize:9,fontWeight:"700",letterSpacing:.6},moreRow:{flexDirection:"row"},more:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,paddingVertical:9,paddingHorizontal:8,borderTopWidth:y.hairlineWidth,borderTopColor:B.color.separator},moreCell:{flex:1},moreText:{color:B.color.textSecondary,fontSize:B.font.caption,fontWeight:"600"},moreNote:{color:B.color.textTertiary,fontSize:B.font.caption},actions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:10,flexWrap:"wrap"},actionsRight:{justifyContent:"flex-end"},button:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:14,paddingVertical:9,borderRadius:B.radius.row},buttonPrimary:{backgroundColor:B.color.accent},buttonPlate:{backgroundColor:B.color.button},buttonDisabled:{opacity:.55},buttonText:{fontSize:B.font.caption,fontWeight:"600"},buttonTextPrimary:{color:B.color.onAccent},buttonTextPlate:{color:B.color.text},pressed:{opacity:.7}});import{Fragment as fa,jsx as le,jsxs as vt}from"react/jsx-runtime";function Vr({block:e}){let t=K(),o=t.answered[e.id],r=o?.kind==="choice"?o.optionId:null,n=!!o;return vt(H,{testID:`buoy-block-choice-${e.id}`,tone:n?void 0:"info",children:[le(i,{style:U.question,children:e.question}),le(l,{style:U.options,children:e.options.slice(0,5).map((s,a)=>{let g=r===s.id;return vt(b,{testID:`buoy-block-option-${s.id}`,accessibilityRole:"button",accessibilityState:{selected:g,disabled:n},disabled:n,onPress:()=>t.answer({blockId:e.id,kind:"choice",optionId:s.id,label:s.label}),style:({pressed:u})=>[U.option,a>0&&U.optionDivider,g&&U.optionChosen,n&&!g&&U.optionDimmed,u&&!n&&U.pressed],children:[s.icon?le(to,{name:s.icon}):null,vt(l,{style:U.optionText,children:[le(i,{style:[U.optionLabel,g&&U.optionLabelChosen],children:s.label}),s.detail?le(i,{style:U.optionDetail,children:s.detail}):null]}),g?le(pa,{size:14,color:_.color.accent}):n?null:le(ga,{size:14,color:_.color.textTertiary})]},s.id)})}),!n&&e.allowFreeText!==!1?le(i,{style:U.hint,children:"Or just type your answer below."}):null]})}function Lr({block:e}){let t=K(),o=t.answered[e.id],r=!!o,n=o?.kind==="confirm"?o.approved:null;return vt(H,{testID:`buoy-block-confirm-${e.id}`,tone:r?void 0:"warning",children:[le(i,{style:U.confirmTitle,children:e.title}),le(i,{style:U.confirmChange,children:e.change}),e.consequence?le(i,{style:U.confirmConsequence,children:e.consequence}):null,le(l,{style:U.confirmActions,children:r?le(i,{style:U.decided,children:n?`\u2713 ${e.approveLabel??"Done"}`:`\u2715 ${e.declineLabel??"Not now"}`}):vt(fa,{children:[le(b,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:!0}),style:({pressed:s})=>[U.button,U.buttonPrimary,s&&U.pressed],children:le(i,{style:U.buttonTextPrimary,children:e.approveLabel??"Do it"})}),le(b,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:!1}),style:({pressed:s})=>[U.button,U.buttonPlate,s&&U.pressed],children:le(i,{style:U.buttonTextPlate,children:e.declineLabel??"Not now"})})]})})]})}function Hr({block:e}){let t=K(),o=t.answered[e.id],r=!!o,[n,s]=ua(""),a=e.type==="secret",g=()=>{let u=n.trim();u&&t.answer({blockId:e.id,kind:"input",value:u})};return vt(H,{testID:`buoy-block-input-${e.id}`,tone:r?void 0:"info",children:[le(i,{style:U.question,children:e.label}),r?le(i,{style:U.decided,children:o.kind==="input"?a?"\u2022\u2022\u2022\u2022\u2022\u2022":o.value:"(skipped)"}):vt(l,{style:U.inputRow,children:[le(ze,{testID:"buoy-block-input-field",style:U.input,value:n,onChangeText:s,placeholder:e.placeholder??"",placeholderTextColor:_.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:a,autoCapitalize:"none",autoCorrect:!1,returnKeyType:"send",onSubmitEditing:g}),le(b,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!n.trim(),onPress:g,style:({pressed:u})=>[U.button,U.buttonPrimary,!n.trim()&&U.buttonDisabled,u&&U.pressed],children:le(i,{style:U.buttonTextPrimary,children:e.submitLabel??"Send"})})]})]})}var U=y.create({question:{color:_.color.text,fontSize:_.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:_.radius.row,backgroundColor:_.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:y.hairlineWidth,borderTopColor:_.color.separator},optionChosen:{backgroundColor:_.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:_.color.text,fontSize:_.font.body,fontWeight:"500"},optionLabelChosen:{color:_.color.accent},optionDetail:{color:_.color.textSecondary,fontSize:_.font.caption,lineHeight:17},hint:{color:_.color.textTertiary,fontSize:_.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:_.color.text,fontSize:_.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:_.color.text,fontSize:_.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:_.color.warning,fontSize:_.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:_.color.textSecondary,fontSize:_.font.caption,fontWeight:"600",paddingHorizontal:12,paddingVertical:10},inputRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingBottom:12},input:{flex:1,height:38,paddingHorizontal:12,borderRadius:_.radius.row,backgroundColor:_.color.surfaceElevated,color:_.color.text,fontSize:_.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:_.radius.row},buttonPrimary:{backgroundColor:_.color.accent},buttonPlate:{backgroundColor:_.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:_.color.onAccent,fontSize:_.font.caption,fontWeight:"600"},buttonTextPlate:{color:_.color.text,fontSize:_.font.caption,fontWeight:"600"},pressed:{opacity:.7}});import{useState as qr}from"react";import{AlertTriangle as Aa,Check as Ia,Info as Ra,night as V,X as Pa}from"@buoy-gg/shared-ui/web";import{DataViewer as Da,TreeDiffViewer as za}from"@buoy-gg/shared-ui/web/dataViewer";import{CAPS as Nt}from"@buoy-gg/agent-core/web";import{useState as ha}from"react";import{night as ce}from"@buoy-gg/shared-ui/web";var $r=e=>/^\s*\|.*\|\s*$/.test(e),ya=e=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(e),Or=e=>e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim()),ba=/^\s*```\s*([\w+-]*)\s*$/;function Er(e){let t=[],o=[],r=()=>{o.length&&t.push({kind:"p",text:o.join(" ")}),o=[]},n=e.split(`
|
|
3
|
-
`);
|
|
4
|
-
`),closed:L}),s=L?$:n.length;continue}if(!g.trim()){r();continue}if($r(g)&&n[s+1]&&ya(n[s+1])){r();let O=Or(g),$=[],L=s+2;for(;L<n.length&&$r(n[L]);)$.push(Or(n[L])),L++;t.push({kind:"table",header:O,rows:$}),s=L-1;continue}let f=/^#{1,6}\s+(.*)$/.exec(g);if(f){r(),t.push({kind:"h",text:f[1]});continue}let m=/^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(g);if(m){r();let O=Math.min(2,Math.floor(m[1].length/2)),$=/^\d/.test(m[2])?m[2].replace(")","."):"\u2022";t.push({kind:"li",text:m[3],marker:$,depth:O});continue}o.push(g.trim())}return r(),t}var ro=12,no=4;function Wr(e,t){let o=[];return t.length>ro&&o.push(`${ro} of ${t.length} rows`),e.length>no&&o.push(`${no} of ${e.length} columns`),o.length?`Showing ${o.join(" \xB7 ")}`:null}import{jsx as me,jsxs as io}from"react/jsx-runtime";function Bt(e,t){let o=e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1"),r=[],n=/(\*\*[^*]+\*\*|`[^`]+`|\*[^*\s][^*]*\*|_[^_\s][^_]*_)/g,s=0,a,g=0;for(;a=n.exec(o);){a.index>s&&r.push(o.slice(s,a.index));let u=a[0];u.startsWith("**")?r.push(me(i,{style:[t,G.bold],children:u.slice(2,-2)},g++)):u.startsWith("`")?r.push(me(i,{style:[t,G.code],children:u.slice(1,-1)},g++)):r.push(me(i,{style:[t,G.italic],children:u.slice(1,-1)},g++)),s=a.index+u.length}return s<o.length&&r.push(o.slice(s)),r}var ma=e=>e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1");function xa({header:e,rows:t}){let[o,r]=ha(!1),n=Wr(e,t),s=o?e:e.slice(0,no),a=o?t:t.slice(0,ro),g=io(l,{style:o&&G.tableWide,children:[me(l,{style:G.tableHead,children:s.map((u,f)=>me(i,{style:[G.th,f===0&&G.firstCol,o&&G.colFixed],numberOfLines:1,children:u.replace(/\*\*/g,"")},f))}),a.map((u,f)=>me(l,{style:[G.tr,f>0&&G.trDivider],children:s.map((m,O)=>me(i,{style:[G.td,O===0&&G.firstCol,O===0&&G.tdFirst,o&&G.colFixed],numberOfLines:o?3:2,children:Bt(ma(u[O]??""),G.td)},O))},f))]});return io(l,{style:G.table,testID:"buoy-ask-buoy-md-table",children:[o?me(ke,{style:G.tableScrollV,nestedScrollEnabled:!0,children:me(ke,{horizontal:!0,showsHorizontalScrollIndicator:!0,children:g})}):g,n?io(b,{testID:"buoy-ask-buoy-md-table-toggle",accessibilityRole:"button",accessibilityLabel:o?"Show fewer rows":"Show all rows and columns",onPress:()=>r(u=>!u),style:({pressed:u})=>[G.tfoot,u&&G.pressed],children:[me(i,{style:G.tfootText,children:o?`All ${t.length} rows \xB7 ${e.length} columns`:n}),me(i,{style:G.tfootAction,children:o?"Show fewer":"Show all"})]}):null]})}function Po({text:e,style:t}){let o=Er(e);return me(l,{style:G.wrap,children:o.map((r,n)=>r.kind==="table"?me(xa,{header:r.header,rows:r.rows},n):r.kind==="code"?me(ke,{horizontal:!0,style:G.codeBlock,contentContainerStyle:G.codeBlockContent,testID:"buoy-ask-buoy-md-code",children:me(i,{style:G.codeText,selectable:!0,children:r.text})},n):r.kind==="li"?io(l,{style:[G.li,{paddingLeft:4+r.depth*14}],children:[me(i,{style:[t,G.marker],children:r.marker}),me(i,{style:[t,G.liText],selectable:!0,children:Bt(r.text,t)})]},n):me(i,{style:[t,r.kind==="h"&&G.bold],selectable:!0,children:Bt(r.text,t)},n))})}var G=y.create({wrap:{gap:8},bold:{fontWeight:"600"},italic:{fontStyle:"italic"},code:{fontFamily:"Menlo",fontSize:13,color:ce.color.accent,backgroundColor:ce.color.fill},codeBlock:{borderRadius:ce.radius.row,borderWidth:y.hairlineWidth,borderColor:ce.color.border,backgroundColor:ce.color.surface},codeBlockContent:{paddingHorizontal:12,paddingVertical:10},codeText:{fontFamily:"Menlo",fontSize:12,lineHeight:18,color:ce.color.text},li:{flexDirection:"row",gap:8},table:{borderRadius:ce.radius.row,borderWidth:y.hairlineWidth,borderColor:ce.color.border,backgroundColor:ce.color.surface,overflow:"hidden"},tableWide:{minWidth:"100%"},tableScrollV:{maxHeight:320},tableHead:{flexDirection:"row",paddingHorizontal:10,paddingVertical:6,gap:8,backgroundColor:ce.color.fill},th:{flex:1,color:ce.color.textTertiary,fontSize:ce.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},tr:{flexDirection:"row",paddingHorizontal:10,paddingVertical:7,gap:8},trDivider:{borderTopWidth:y.hairlineWidth,borderTopColor:ce.color.separator},td:{flex:1,color:ce.color.textSecondary,fontSize:ce.font.caption,lineHeight:17},tdFirst:{color:ce.color.text,fontWeight:"500"},firstCol:{flex:1.3},colFixed:{flex:0,width:110},tfoot:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:10,paddingVertical:8,borderTopWidth:y.hairlineWidth,borderTopColor:ce.color.border},tfootText:{color:ce.color.textSecondary,fontSize:ce.font.micro},tfootAction:{color:ce.color.accent,fontSize:ce.font.micro,fontWeight:"600"},pressed:{opacity:.7},marker:{color:ce.color.textSecondary,minWidth:14,textAlign:"right"},liText:{flex:1}});import{useCallback as wa,useEffect as Ta,useRef as ka,useState as Sa}from"react";import{copyToClipboard as Ca}from"@buoy-gg/shared-ui/web";var va=1500;function Lt(e){let[t,o]=Sa(!1),r=ka(null);Ta(()=>()=>{r.current&&clearTimeout(r.current)},[]);let n=wa(()=>{let s=e();Ca(s).then(a=>{if(!a){Bo.share({message:s}).catch(()=>{});return}o(!0),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>o(!1),va)}).catch(()=>{})},[e]);return{copied:t,copy:n}}var Ba=e=>typeof e=="string"?e:e.text;function Do(e){switch(e.kind){case"finding":return[e.title,...e.evidence.map(t=>`${t.label}: ${t.value}`)].join(`
|
|
1
|
+
"use client";var _o=Object.defineProperty;var Vn=Object.getOwnPropertyDescriptor;var En=Object.getOwnPropertyNames;var Nn=Object.prototype.hasOwnProperty;var jn=(e,t)=>{for(var o in t)_o(e,o,{get:t[o],enumerable:true})},Ko=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of En(t))!Nn.call(e,n)&&n!==o&&_o(e,n,{get:()=>t[n],enumerable:!(r=Vn(t,n))||r.enumerable});return e},Mn=(e,t,o)=>(Ko(e,t,"default"),o&&Ko(o,t,"default"));var Qt=process.env.NODE_ENV!=="production";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useCallback as qe,useEffect as $t,useMemo as Jt,useRef as At,useState as co}from"react";var Qo={};jn(Qo,{AccessibilityInfo:()=>_n,ActivityIndicator:()=>Lt,Alert:()=>po,Animated:()=>se,AppRegistry:()=>Qn,AppState:()=>Jn,Appearance:()=>Kn,BackHandler:()=>Gn,Button:()=>$i,CheckBox:()=>si,Clipboard:()=>Yn,DeviceEventEmitter:()=>vi,Dimensions:()=>Xn,Easing:()=>Tt,FlatList:()=>Go,I18nManager:()=>Zn,Image:()=>gt,ImageBackground:()=>ci,InteractionManager:()=>ei,Keyboard:()=>uo,KeyboardAvoidingView:()=>di,LayoutAnimation:()=>ti,Linking:()=>oi,LogBox:()=>wi,Modal:()=>Ri,NativeEventEmitter:()=>ri,NativeModules:()=>Un,PanResponder:()=>ni,Picker:()=>ui,PixelRatio:()=>ii,Platform:()=>Bt,Pressable:()=>f,ProgressBar:()=>pi,RefreshControl:()=>hi,SafeAreaView:()=>gi,ScrollView:()=>Fe,SectionList:()=>bi,Share:()=>Jo,StatusBar:()=>fi,StyleSheet:()=>x,Switch:()=>Xo,Text:()=>l,TextInput:()=>Xe,Touchable:()=>yi,TouchableHighlight:()=>Ii,TouchableNativeFeedback:()=>mi,TouchableOpacity:()=>Ht,TouchableWithoutFeedback:()=>Di,UIManager:()=>li,Vibration:()=>ai,View:()=>s,VirtualizedList:()=>xi,YellowBox:()=>ki,findNodeHandle:()=>Ai,unstable_createElement:()=>Fn,useColorScheme:()=>Si,useLocaleContext:()=>Ti,useWindowDimensions:()=>Yo});Mn(Qo,qn);import*as qn from"react-native-web";import{unstable_createElement as Fn,NativeModules as Un,AccessibilityInfo as _n,Animated as se,Appearance as Kn,AppRegistry as Qn,AppState as Jn,BackHandler as Gn,Clipboard as Yn,Dimensions as Xn,Easing as Tt,I18nManager as Zn,Keyboard as uo,InteractionManager as ei,LayoutAnimation as ti,Linking as oi,NativeEventEmitter as ri,PanResponder as ni,PixelRatio as ii,Platform as Bt,Share as Jo,StyleSheet as x,UIManager as li,Vibration as ai,CheckBox as si,FlatList as Go,Image as gt,ImageBackground as ci,KeyboardAvoidingView as di,Picker as ui,ProgressBar as pi,RefreshControl as hi,SafeAreaView as gi,SectionList as bi,StatusBar as fi,Touchable as yi,TouchableNativeFeedback as mi,VirtualizedList as xi,YellowBox as ki,LogBox as wi,DeviceEventEmitter as vi,useColorScheme as Si,useLocaleContext as Ti,useWindowDimensions as Yo}from"react-native-web";import*as $e from"react-native-web";import{createElement as Ci,forwardRef as zi}from"react";function Oe(e){let t=zi((r,n)=>{let{accessibilityState:i,accessibilityValue:a,...h}=r;for(let u of["busy","checked","disabled","expanded","selected"])i?.[u]!==void 0&&h[`aria-${u}`]===void 0&&(h[`aria-${u}`]=i[u]);for(let[u,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))a?.[u]!==void 0&&h[`aria-${g}`]===void 0&&(h[`aria-${g}`]=a[u]);return Ci(e,{...h,ref:n})}),o=e.State;return o&&Object.assign(t,{State:o}),t.displayName=e.displayName??e.name??"NativeWebView",t}var s=Oe($e.View),l=Oe($e.Text),Xe=Oe($e.TextInput),Ht=Oe($e.TouchableOpacity),Ii=Oe($e.TouchableHighlight),Di=Oe($e.TouchableWithoutFeedback),f=Oe($e.Pressable),Fe=Oe($e.ScrollView),Ri=Oe($e.Modal),Xo=Oe($e.Switch),Lt=Oe($e.ActivityIndicator),$i=Oe($e.Button),Ai=$e.findNodeHandle,po={alert(e,t,o,r){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let i=document.createElement("h2");if(i.textContent=e,i.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(i),t){let g=document.createElement("p");g.textContent=t,g.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(g)}let a=document.createElement("div");a.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let h=o?.length?o:[{text:"OK"}],u=()=>{n.close?.(),n.remove()};for(let g of h){let y=document.createElement("button");y.type="button",y.textContent=g.text??"OK",y.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${g.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,y.onclick=()=>{u(),g.onPress?.()},a.appendChild(y)}n.addEventListener("cancel",g=>{g.preventDefault(),r?.cancelable!==false&&(u(),r?.onDismiss?.())}),n.appendChild(a),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};import{isReversible as Bi}from"@buoy-gg/agent-core/web";import{dispatchToolAction as Hi,FeatureGate as Li,Info as Wi,JsModal as Oi,ModalHeader as ho,night as Wt,setToolAttention as Ct,useSafeAreaInsets as Pi}from"@buoy-gg/shared-ui/web";import{Component as Vi}from"react";import{night as Zo}from"@buoy-gg/shared-ui/web";import{useState as Ei}from"react";import{Check as Ni,ChevronRight as ji,night as N}from"@buoy-gg/shared-ui/web";import{createContext as Mi,useContext as qi}from"react";import{jsx as Fi}from"react/jsx-runtime";var Ui={answer:()=>{},runAction:()=>{},answered:{},supports:{}},er=Mi(Ui);function tr({value:e,children:t}){return Fi(er.Provider,{value:e,children:t})}function Z(){return qi(er)}function _i(e,t){return`${e}:${t.label}`}import{AlertTriangle as Ki,Check as Qi,Clock as Ji,Database as Gi,Eye as Yi,Globe as Xi,Image as Zi,Info as el,Layers as or,Navigation as tl,night as Ot,User as ol}from"@buoy-gg/shared-ui/web";import{jsx as Ae}from"react/jsx-runtime";function rr({name:e,size:t=14}){let o=Ot.color.textSecondary,r=(()=>{switch(e){case"network":return Ae(Xi,{size:t,color:o});case"storage":return Ae(Gi,{size:t,color:o});case"route":return Ae(tl,{size:t,color:o});case"screen":return Ae(Yi,{size:t,color:o});case"user":return Ae(ol,{size:t,color:o});case"image":return Ae(Zi,{size:t,color:o});case"check":return Ae(Qi,{size:t,color:Ot.color.accent});case"warn":return Ae(Ki,{size:t,color:Ot.color.warning});case"info":return Ae(el,{size:t,color:Ot.color.info});case"store":return Ae(or,{size:t,color:o});case"query":return Ae(or,{size:t,color:o});case"clock":return Ae(Ji,{size:t,color:o})}})();return Ae(s,{style:rl.wrap,children:r})}var rl=x.create({wrap:{width:24,height:24,borderRadius:6,backgroundColor:Ot.color.fill,alignItems:"center",justifyContent:"center"}});import{useState as nr}from"react";import{Check as nl,ChevronDown as ir,ChevronUp as lr,night as z,X as il}from"@buoy-gg/shared-ui/web";function ll(e,t,o,r){let n=Math.min(o,e),i=Math.max(0,e-n),a=o>t&&e>t;return{hidden:i,next:Math.min(i,r),expanded:a,canExpand:i>0,canCollapse:a}}import{jsx as ye,jsxs as Ze}from"react/jsx-runtime";function bt(e){switch(e){case"accent":return z.color.accent;case"warning":return z.color.warning;case"danger":return z.color.danger;case"info":return z.color.info;case"muted":return z.color.textTertiary;default:return z.color.text}}function ar({source:e}){if(!e||e==="live")return null;let t=e==="changed"?"CHANGED BY ASK BUOY":e==="mocked"?"MOCKED":"FROM THE MODEL",o=e==="changed"?z.color.warning:e==="mocked"?z.color.danger:z.color.textTertiary;return ye(s,{style:[F.badge,{borderColor:o}],children:ye(l,{style:[F.badgeText,{color:o}],children:t})})}function O({title:e,source:t,children:o,testID:r,tone:n,collapsible:i,summary:a}){let[h,u]=nr(false),g=!!i&&!h;return Ze(s,{style:[F.card,n==="warning"&&F.cardWarning,n==="danger"&&F.cardDanger,n==="info"&&F.cardInfo],testID:r,children:[(e||t&&t!=="live")&&Ze(s,{style:F.titleRow,children:[e?ye(l,{style:F.title,numberOfLines:2,children:e}):ye(s,{style:F.flex}),ye(ar,{source:t})]}),i?Ze(f,{testID:r?`${r}-toggle`:void 0,onPress:()=>u(y=>!y),accessibilityRole:"button",accessibilityState:{expanded:h},accessibilityLabel:`${a??"Details"}, ${h?"hide":"show"}`,style:({pressed:y})=>[F.disclosure,!g&&F.disclosureOpen,y&&F.pressed],children:[ye(l,{style:F.disclosureText,numberOfLines:1,children:a??"Details"}),g?ye(ir,{size:12,color:z.color.textTertiary}):ye(lr,{size:12,color:z.color.textTertiary})]}):null,g?null:o]})}var al=5;function et(e,t,o=al){let[r,n]=nr(t),{hidden:i,next:a,expanded:h,canExpand:u,canCollapse:g}=ll(e.length,t,r,o);return{visible:e.slice(0,r),hidden:i,next:a,expanded:h,showMore:u?()=>n(y=>y+o):void 0,showLess:g?()=>n(t):void 0}}function tt({paged:e}){let{next:t,showMore:o,showLess:r}=e;return!o&&!r?null:Ze(s,{style:F.moreRow,children:[o?Ze(f,{testID:"buoy-block-show-more",onPress:o,style:[F.more,F.moreCell],accessibilityRole:"button",children:[Ze(l,{style:F.moreText,children:["Show ",t," more"]}),ye(ir,{size:12,color:z.color.textTertiary})]}):null,r?Ze(f,{testID:"buoy-block-show-fewer",onPress:r,style:[F.more,F.moreCell],accessibilityRole:"button",children:[ye(l,{style:F.moreText,children:"Show fewer"}),ye(lr,{size:12,color:z.color.textTertiary})]}):null]})}function sl({shown:e,total:t}){return!t||t<=e?null:ye(s,{style:F.more,children:Ze(l,{style:F.moreNote,children:[e," of ",t," shown"]})})}function Pe({actions:e,blockId:t,align:o="left"}){let r=Z();if(!e?.length)return null;let n=e.filter(i=>i.openTool?r.supports?.openTool!==false:i.minimize?r.supports?.minimize!==false:i.dispatch?r.supports?.dispatch!==false:true);return n.length===0?null:ye(s,{style:[F.actions,o==="right"&&F.actionsRight],children:n.slice(0,2).map(i=>{let a=r.actionState?.[_i(t,i)],h=!!r.busy||a==="running"||a==="done";return Ze(f,{accessibilityRole:"button",accessibilityLabel:i.label,testID:`buoy-block-action-${i.label.toLowerCase().replace(/\s+/g,"-")}`,disabled:h,onPress:()=>void r.runAction(i,t),style:({pressed:u})=>[F.button,i.primary?F.buttonPrimary:F.buttonPlate,h&&F.buttonDisabled,u&&!h&&F.pressed],children:[a==="running"?ye(Lt,{size:"small",color:i.primary?z.color.onAccent:z.color.text}):a==="done"?ye(nl,{size:12,color:i.primary?z.color.onAccent:z.color.accent}):a==="failed"?ye(il,{size:12,color:z.color.danger}):null,ye(l,{style:[F.buttonText,i.primary?F.buttonTextPrimary:F.buttonTextPlate],children:i.label})]},i.label)})})}var D=x.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},rowDivider:{borderTopWidth:x.hairlineWidth,borderTopColor:z.color.separator},rowTitle:{flex:1,color:z.color.text,fontSize:z.font.body,lineHeight:19},rowSub:{color:z.color.textSecondary,fontSize:z.font.caption,lineHeight:17},rowTrailing:{color:z.color.textTertiary,fontSize:z.font.caption,maxWidth:120,textAlign:"right"},mono:{fontFamily:"Menlo",fontSize:12,color:z.color.text},pill:{paddingHorizontal:7,paddingVertical:2,borderRadius:z.radius.badge,backgroundColor:z.color.fill},pillText:{fontSize:z.font.micro,fontWeight:"700",letterSpacing:.4,color:z.color.textSecondary}}),F=x.create({card:{borderRadius:z.radius.card,borderWidth:x.hairlineWidth,borderColor:z.color.border,backgroundColor:z.color.surface,overflow:"hidden"},cardWarning:{borderColor:z.color.warning,backgroundColor:z.color.warningSoft},cardDanger:{borderColor:z.color.danger,backgroundColor:z.color.dangerSoft},cardInfo:{borderColor:z.color.accentBorderStrong,backgroundColor:z.color.accentSoft},titleRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:6},flex:{flex:1},title:{flex:1,color:z.color.text,fontSize:z.font.caption,fontWeight:"600"},disclosure:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:9},disclosureOpen:{borderBottomWidth:x.hairlineWidth,borderBottomColor:z.color.separator},disclosureText:{flex:1,color:z.color.textSecondary,fontSize:z.font.caption},badge:{borderWidth:x.hairlineWidth,borderRadius:z.radius.badge,paddingHorizontal:6,paddingVertical:2},badgeText:{fontSize:9,fontWeight:"700",letterSpacing:.6},moreRow:{flexDirection:"row"},more:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,paddingVertical:9,paddingHorizontal:8,borderTopWidth:x.hairlineWidth,borderTopColor:z.color.separator},moreCell:{flex:1},moreText:{color:z.color.textSecondary,fontSize:z.font.caption,fontWeight:"600"},moreNote:{color:z.color.textTertiary,fontSize:z.font.caption},actions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:10,flexWrap:"wrap"},actionsRight:{justifyContent:"flex-end"},button:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:14,paddingVertical:9,borderRadius:z.radius.row},buttonPrimary:{backgroundColor:z.color.accent},buttonPlate:{backgroundColor:z.color.button},buttonDisabled:{opacity:.55},buttonText:{fontSize:z.font.caption,fontWeight:"600"},buttonTextPrimary:{color:z.color.onAccent},buttonTextPlate:{color:z.color.text},pressed:{opacity:.7}});import{Fragment as cl,jsx as ie,jsxs as ft}from"react/jsx-runtime";function dl({block:e}){let t=Z(),o=t.answered[e.id],r=o?.kind==="choice"?o.optionId:null,n=!!o;return ft(O,{testID:`buoy-block-choice-${e.id}`,tone:n?void 0:"info",children:[ie(l,{style:M.question,children:e.question}),ie(s,{style:M.options,children:e.options.slice(0,5).map((i,a)=>{let h=r===i.id;return ft(f,{testID:`buoy-block-option-${i.id}`,accessibilityRole:"button",accessibilityState:{selected:h,disabled:n},disabled:n,onPress:()=>t.answer({blockId:e.id,kind:"choice",optionId:i.id,label:i.label}),style:({pressed:u})=>[M.option,a>0&&M.optionDivider,h&&M.optionChosen,n&&!h&&M.optionDimmed,u&&!n&&M.pressed],children:[i.icon?ie(rr,{name:i.icon}):null,ft(s,{style:M.optionText,children:[ie(l,{style:[M.optionLabel,h&&M.optionLabelChosen],children:i.label}),i.detail?ie(l,{style:M.optionDetail,children:i.detail}):null]}),h?ie(Ni,{size:14,color:N.color.accent}):n?null:ie(ji,{size:14,color:N.color.textTertiary})]},i.id)})}),!n&&e.allowFreeText!==false?ie(l,{style:M.hint,children:"Or just type your answer below."}):null]})}function ul({block:e}){let t=Z(),o=t.answered[e.id],r=!!o,n=o?.kind==="confirm"?o.approved:null;return ft(O,{testID:`buoy-block-confirm-${e.id}`,tone:r?void 0:"warning",children:[ie(l,{style:M.confirmTitle,children:e.title}),ie(l,{style:M.confirmChange,children:e.change}),e.consequence?ie(l,{style:M.confirmConsequence,children:e.consequence}):null,ie(s,{style:M.confirmActions,children:r?ie(l,{style:M.decided,children:n?`\u2713 ${e.approveLabel??"Done"}`:`\u2715 ${e.declineLabel??"Not now"}`}):ft(cl,{children:[ie(f,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:true}),style:({pressed:i})=>[M.button,M.buttonPrimary,i&&M.pressed],children:ie(l,{style:M.buttonTextPrimary,children:e.approveLabel??"Do it"})}),ie(f,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:false}),style:({pressed:i})=>[M.button,M.buttonPlate,i&&M.pressed],children:ie(l,{style:M.buttonTextPlate,children:e.declineLabel??"Not now"})})]})})]})}function pl({block:e}){let t=Z(),o=t.answered[e.id],r=!!o,[n,i]=Ei(""),a=e.type==="secret",h=()=>{let u=n.trim();u&&t.answer({blockId:e.id,kind:"input",value:u})};return ft(O,{testID:`buoy-block-input-${e.id}`,tone:r?void 0:"info",children:[ie(l,{style:M.question,children:e.label}),r?ie(l,{style:M.decided,children:o.kind==="input"?a?"\u2022\u2022\u2022\u2022\u2022\u2022":o.value:"(skipped)"}):ft(s,{style:M.inputRow,children:[ie(Xe,{testID:"buoy-block-input-field",style:M.input,value:n,onChangeText:i,placeholder:e.placeholder??"",placeholderTextColor:N.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:a,autoCapitalize:"none",autoCorrect:false,returnKeyType:"send",onSubmitEditing:h}),ie(f,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!n.trim(),onPress:h,style:({pressed:u})=>[M.button,M.buttonPrimary,!n.trim()&&M.buttonDisabled,u&&M.pressed],children:ie(l,{style:M.buttonTextPrimary,children:e.submitLabel??"Send"})})]})]})}var M=x.create({question:{color:N.color.text,fontSize:N.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:N.radius.row,backgroundColor:N.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:x.hairlineWidth,borderTopColor:N.color.separator},optionChosen:{backgroundColor:N.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:N.color.text,fontSize:N.font.body,fontWeight:"500"},optionLabelChosen:{color:N.color.accent},optionDetail:{color:N.color.textSecondary,fontSize:N.font.caption,lineHeight:17},hint:{color:N.color.textTertiary,fontSize:N.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:N.color.text,fontSize:N.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:N.color.text,fontSize:N.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:N.color.warning,fontSize:N.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:N.color.textSecondary,fontSize:N.font.caption,fontWeight:"600",paddingHorizontal:12,paddingVertical:10},inputRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingBottom:12},input:{flex:1,height:38,paddingHorizontal:12,borderRadius:N.radius.row,backgroundColor:N.color.surfaceElevated,color:N.color.text,fontSize:N.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:N.radius.row},buttonPrimary:{backgroundColor:N.color.accent},buttonPlate:{backgroundColor:N.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:N.color.onAccent,fontSize:N.font.caption,fontWeight:"600"},buttonTextPlate:{color:N.color.text,fontSize:N.font.caption,fontWeight:"600"},pressed:{opacity:.7}});import{useState as sr}from"react";import{AlertTriangle as hl,Check as gl,Info as bl,night as B,X as fl}from"@buoy-gg/shared-ui/web";import{DataViewer as yl,TreeDiffViewer as ml}from"@buoy-gg/shared-ui/web/dataViewer";import{CAPS as Pt}from"@buoy-gg/agent-core/web";import{useState as xl}from"react";import{night as le}from"@buoy-gg/shared-ui/web";var cr=e=>/^\s*\|.*\|\s*$/.test(e),kl=e=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(e),dr=e=>e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim()),wl=/^\s*```\s*([\w+-]*)\s*$/;function vl(e){let t=[],o=[],r=()=>{o.length&&t.push({kind:"p",text:o.join(" ")}),o=[]},n=e.split(`
|
|
2
|
+
`);for(let i=0;i<n.length;i++){let a=n[i].replace(/\s+$/,""),h=wl.exec(a);if(h){r();let y=[],C=i+1,j=false;for(;C<n.length;){if(/^\s*```\s*$/.test(n[C])){j=true;break}y.push(n[C]),C++}t.push({kind:"code",lang:h[1]??"",text:y.join(`
|
|
3
|
+
`),closed:j}),i=j?C:n.length;continue}if(!a.trim()){r();continue}if(cr(a)&&n[i+1]&&kl(n[i+1])){r();let y=dr(a),C=[],j=i+2;for(;j<n.length&&cr(n[j]);)C.push(dr(n[j])),j++;t.push({kind:"table",header:y,rows:C}),i=j-1;continue}let u=/^#{1,6}\s+(.*)$/.exec(a);if(u){r(),t.push({kind:"h",text:u[1]});continue}let g=/^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(a);if(g){r();let y=Math.min(2,Math.floor(g[1].length/2)),C=/^\d/.test(g[2])?g[2].replace(")","."):"\u2022";t.push({kind:"li",text:g[3],marker:C,depth:y});continue}o.push(a.trim())}return r(),t}var go=12,bo=4;function Sl(e,t){let o=[];return t.length>go&&o.push(`${go} of ${t.length} rows`),e.length>bo&&o.push(`${bo} of ${e.length} columns`),o.length?`Showing ${o.join(" \xB7 ")}`:null}import{jsx as he,jsxs as Gt}from"react/jsx-runtime";function zt(e,t){let o=e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1"),r=[],n=/(\*\*[^*]+\*\*|`[^`]+`|\*[^*\s][^*]*\*|_[^_\s][^_]*_)/g,i=0,a,h=0;for(;a=n.exec(o);){a.index>i&&r.push(o.slice(i,a.index));let u=a[0];u.startsWith("**")?r.push(he(l,{style:[t,_.bold],children:u.slice(2,-2)},h++)):u.startsWith("`")?r.push(he(l,{style:[t,_.code],children:u.slice(1,-1)},h++)):r.push(he(l,{style:[t,_.italic],children:u.slice(1,-1)},h++)),i=a.index+u.length}return i<o.length&&r.push(o.slice(i)),r}var Tl=e=>e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1");function Cl({header:e,rows:t}){let[o,r]=xl(false),n=Sl(e,t),i=o?e:e.slice(0,bo),a=o?t:t.slice(0,go),h=Gt(s,{style:o&&_.tableWide,children:[he(s,{style:_.tableHead,children:i.map((u,g)=>he(l,{style:[_.th,g===0&&_.firstCol,o&&_.colFixed],numberOfLines:1,children:u.replace(/\*\*/g,"")},g))}),a.map((u,g)=>he(s,{style:[_.tr,g>0&&_.trDivider],children:i.map((y,C)=>he(l,{style:[_.td,C===0&&_.firstCol,C===0&&_.tdFirst,o&&_.colFixed],numberOfLines:o?3:2,children:zt(Tl(u[C]??""),_.td)},C))},g))]});return Gt(s,{style:_.table,testID:"buoy-ask-buoy-md-table",children:[o?he(Fe,{style:_.tableScrollV,nestedScrollEnabled:true,children:he(Fe,{horizontal:true,showsHorizontalScrollIndicator:true,children:h})}):h,n?Gt(f,{testID:"buoy-ask-buoy-md-table-toggle",accessibilityRole:"button",accessibilityLabel:o?"Show fewer rows":"Show all rows and columns",onPress:()=>r(u=>!u),style:({pressed:u})=>[_.tfoot,u&&_.pressed],children:[he(l,{style:_.tfootText,children:o?`All ${t.length} rows \xB7 ${e.length} columns`:n}),he(l,{style:_.tfootAction,children:o?"Show fewer":"Show all"})]}):null]})}function ur({text:e,style:t}){let o=vl(e);return he(s,{style:_.wrap,children:o.map((r,n)=>r.kind==="table"?he(Cl,{header:r.header,rows:r.rows},n):r.kind==="code"?he(Fe,{horizontal:true,style:_.codeBlock,contentContainerStyle:_.codeBlockContent,testID:"buoy-ask-buoy-md-code",children:he(l,{style:_.codeText,selectable:true,children:r.text})},n):r.kind==="li"?Gt(s,{style:[_.li,{paddingLeft:4+r.depth*14}],children:[he(l,{style:[t,_.marker],children:r.marker}),he(l,{style:[t,_.liText],selectable:true,children:zt(r.text,t)})]},n):he(l,{style:[t,r.kind==="h"&&_.bold],selectable:true,children:zt(r.text,t)},n))})}var _=x.create({wrap:{gap:8},bold:{fontWeight:"600"},italic:{fontStyle:"italic"},code:{fontFamily:"Menlo",fontSize:13,color:le.color.accent,backgroundColor:le.color.fill},codeBlock:{borderRadius:le.radius.row,borderWidth:x.hairlineWidth,borderColor:le.color.border,backgroundColor:le.color.surface},codeBlockContent:{paddingHorizontal:12,paddingVertical:10},codeText:{fontFamily:"Menlo",fontSize:12,lineHeight:18,color:le.color.text},li:{flexDirection:"row",gap:8},table:{borderRadius:le.radius.row,borderWidth:x.hairlineWidth,borderColor:le.color.border,backgroundColor:le.color.surface,overflow:"hidden"},tableWide:{minWidth:"100%"},tableScrollV:{maxHeight:320},tableHead:{flexDirection:"row",paddingHorizontal:10,paddingVertical:6,gap:8,backgroundColor:le.color.fill},th:{flex:1,color:le.color.textTertiary,fontSize:le.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},tr:{flexDirection:"row",paddingHorizontal:10,paddingVertical:7,gap:8},trDivider:{borderTopWidth:x.hairlineWidth,borderTopColor:le.color.separator},td:{flex:1,color:le.color.textSecondary,fontSize:le.font.caption,lineHeight:17},tdFirst:{color:le.color.text,fontWeight:"500"},firstCol:{flex:1.3},colFixed:{flex:0,width:110},tfoot:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:10,paddingVertical:8,borderTopWidth:x.hairlineWidth,borderTopColor:le.color.border},tfootText:{color:le.color.textSecondary,fontSize:le.font.micro},tfootAction:{color:le.color.accent,fontSize:le.font.micro,fontWeight:"600"},pressed:{opacity:.7},marker:{color:le.color.textSecondary,minWidth:14,textAlign:"right"},liText:{flex:1}});import{useCallback as zl,useEffect as Il,useRef as Dl,useState as Rl}from"react";import{copyToClipboard as $l}from"@buoy-gg/shared-ui/web";var Al=1500;function fo(e){let[t,o]=Rl(false),r=Dl(null);Il(()=>()=>{r.current&&clearTimeout(r.current)},[]);let n=zl(()=>{let i=e();$l(i).then(a=>{if(!a){Jo.share({message:i}).catch(()=>{});return}o(true),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>o(false),Al)}).catch(()=>{})},[e]);return{copied:t,copy:n}}var Bl=e=>typeof e=="string"?e:e.text;function pr(e){switch(e.kind){case"finding":return[e.title,...e.evidence.map(t=>`${t.label}: ${t.value}`)].join(`
|
|
5
4
|
`);case"keyValue":return[e.title,...e.pairs.map(t=>`${t.key}: ${typeof t.value=="string"?t.value:JSON.stringify(t.value)}`)].filter(Boolean).join(`
|
|
6
|
-
`);case"table":{let t=e.columns.join(" | "),o=e.rows.map(n=>n.map(
|
|
5
|
+
`);case"table":{let t=e.columns.join(" | "),o=e.rows.map(n=>n.map(Bl).join(" | ")),r=e.total&&e.total>e.rows.length?`\u2026 ${e.total-e.rows.length} more rows`:null;return[e.title,t,...o,r].filter(Boolean).join(`
|
|
7
6
|
`)}case"list":{let t=e.items.map(r=>`- ${r.title}${r.subtitle?` \u2014 ${r.subtitle}`:""}${r.trailing?` (${r.trailing})`:""}`),o=e.total&&e.total>e.items.length?`\u2026 ${e.total-e.items.length} more`:null;return[e.title,...t,o].filter(Boolean).join(`
|
|
8
|
-
`)}case"notice":return e.text;case"claim":return e.text;case"diff":case"chart":case"imageGrid":case"requestList":case"requestCard":case"logList":case"crash":case"screenElements":return`[${e.kind} card${"title"in e&&typeof e.title=="string"?`: ${e.title}`:""}]`;default:return null}}function Mr(e){return e.map(Do).filter(t=>!!t)}import{Fragment as Ea,jsx as A,jsxs as ge}from"react/jsx-runtime";function zo(e){if(e===void 0)return"\u2014";if(e===null)return"null";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return String(e);try{let t=JSON.stringify(e);return t.length>120?`${t.slice(0,117)}\u2026`:t}catch{return String(e)}}function Fr({block:e}){let t=Ee(e.rows,Nt.tableRows),{visible:o}=t,r=e.columns.slice(0,4);return ge(H,{title:e.title,source:e.source,testID:`buoy-block-table-${e.id}`,children:[A(l,{style:P.tableHead,children:r.map((n,s)=>A(i,{style:[P.th,s===0&&P.firstCol],numberOfLines:1,children:n},n))}),o.map((n,s)=>A(l,{style:[P.tr,s>0&&v.rowDivider],children:r.map((a,g)=>{let u=n[g],f=typeof u=="string"?u:u?.text??"",m=typeof u=="string"?void 0:u?.tone;return A(i,{style:[P.td,g===0&&P.firstCol,g===0&&P.tdFirst,m&&{color:Xe(m)}],numberOfLines:2,children:Bt(f,P.td)},g)})},s)),A(We,{paged:t})]})}function _r({block:e}){let t=Ee(e.pairs,Nt.keyValuePairs),{visible:o}=t,[r,n]=qr(null);return ge(H,{title:e.title,source:e.source,testID:`buoy-block-keyvalue-${e.id}`,children:[o.map((s,a)=>{let g=typeof s.value=="object"&&s.value!==null,u=r===s.key;return ge(b,{onPress:g?()=>n(u?null:s.key):void 0,style:[P.kvRow,a>0&&v.rowDivider],children:[A(i,{style:P.kvKey,numberOfLines:1,children:s.key}),A(i,{style:[P.kvValue,u&&v.mono],numberOfLines:u?void 0:2,selectable:!0,children:u?JSON.stringify(s.value,null,2):zo(s.value)})]},s.key)}),A(We,{paged:t})]})}function Va(e){let t=!!e.image;return{canExpand:t,rowRunsAction:!!e.action&&!t,actionIsOwnControl:!!e.action&&t}}function Ur({block:e}){let t=K(),o=Ee(e.items,Nt.listItems),{visible:r}=o,[n,s]=qr(null);return ge(H,{title:e.title,source:e.source,testID:`buoy-block-list-${e.id}`,children:[r.map((a,g)=>{let u=`${a.id??a.title}-${g}`,f=n===u,{canExpand:m,rowRunsAction:O,actionIsOwnControl:$}=Va(a),L=m||O?b:l,oe=m?{onPress:()=>s(f?null:u),accessibilityRole:"button",accessibilityState:{expanded:f},accessibilityLabel:`${a.title}, ${f?"hide":"show"} picture`,testID:`buoy-block-list-row-${u}`}:O?{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button"}:{};return ge(l,{style:g>0?v.rowDivider:void 0,children:[f&&a.image?A(b,{onPress:()=>s(null),accessibilityRole:"button",accessibilityLabel:`Hide ${a.title}`,testID:`buoy-block-list-hero-${u}`,style:P.listHero,children:A(Ye,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:P.listHeroImage,resizeMode:"contain",accessibilityLabel:a.title})}):null,ge(L,{...oe,style:v.row,children:[a.image&&!f?A(Ye,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:P.thumb,resizeMode:"contain",accessibilityLabel:a.title}):a.icon?A(to,{name:a.icon}):null,ge(l,{style:P.flex,children:[A(i,{style:[v.rowTitle,a.tone&&{color:Xe(a.tone)}],numberOfLines:f?void 0:2,children:Bt(a.title,v.rowTitle)}),a.subtitle?A(i,{style:v.rowSub,numberOfLines:f?void 0:2,children:Bt(a.subtitle,v.rowSub)}):null]}),a.trailing?A(i,{style:[v.rowTrailing,a.tone&&{color:Xe(a.tone)}],numberOfLines:1,children:a.trailing}):null,a.action?$?A(b,{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button",accessibilityLabel:a.action.label,hitSlop:8,children:A(i,{style:P.rowAction,children:a.action.label})}):A(i,{style:P.rowAction,children:a.action.label}):null]})]},u)}),A(We,{paged:o})]})}function Nr(e){return e!==null&&typeof e=="object"}function La(e){let t=e.map(s=>s.path),o=t.slice(0,3).join(", "),r=t.length-3;return`${t.length===1?"1 field":`${t.length} fields`} \xB7 ${o}${r>0?`, +${r}`:""}`}function Kr({block:e}){let t=Ee(e.changes,Nt.keyValuePairs);return ge(H,{title:e.title??"What changed",source:e.source,testID:`buoy-block-diff-${e.id}`,collapsible:!0,summary:La(e.changes),children:[t.visible.map((o,r)=>{let n=o.before===void 0&&o.after!==void 0,s=o.after===void 0&&o.before!==void 0;return ge(l,{style:[P.diffRow,r>0&&v.rowDivider],children:[A(i,{style:P.diffPath,numberOfLines:1,children:o.path}),Nr(o.before)||Nr(o.after)?A(l,{style:P.diffTree,children:A(za,{oldValue:o.before,newValue:o.after,showUnchanged:!1,scrollEnabled:!1})}):ge(Ea,{children:[n?null:ge(l,{style:P.diffLine,children:[A(i,{style:[P.diffMark,{color:V.color.danger}],children:"\u2212"}),A(i,{style:[P.diffValue,{color:V.color.danger}],numberOfLines:3,selectable:!0,children:zo(o.before)})]}),s?null:ge(l,{style:P.diffLine,children:[A(i,{style:[P.diffMark,{color:V.color.accent}],children:"+"}),A(i,{style:[P.diffValue,{color:V.color.accent}],numberOfLines:3,selectable:!0,children:zo(o.after)})]})]})]},`${o.path}-${r}`)}),A(We,{paged:t})]})}function jr({block:e}){let t=e.bars.slice(0,Nt.chartBars),o=e.max??Math.max(1,...t.map(r=>r.value));return A(H,{title:e.title,source:e.source,testID:`buoy-block-chart-${e.id}`,children:A(l,{style:P.chart,children:t.map((r,n)=>ge(l,{style:P.barRow,children:[A(i,{style:P.barLabel,numberOfLines:1,children:r.label}),A(l,{style:P.barTrack,children:A(l,{style:[P.bar,{width:`${Math.max(2,Math.round(r.value/o*100))}%`,backgroundColor:Xe(r.tone??"accent")}]})}),ge(i,{style:P.barValue,numberOfLines:1,children:[r.value,r.unit?` ${r.unit}`:""]})]},`${r.label}-${n}`))})})}function Qr({block:e}){return A(H,{title:e.title,testID:`buoy-block-steps-${e.id}`,children:e.steps.map((t,o)=>ge(l,{style:[P.step,o>0&&v.rowDivider],children:[A(l,{style:[P.stepMark,t.state==="done"&&P.stepDone,t.state==="failed"&&P.stepFailed],children:t.state==="done"?A(Ia,{size:10,color:V.color.onAccent}):t.state==="failed"?A(Pa,{size:10,color:V.color.text}):A(i,{style:P.stepNum,children:o+1})}),A(i,{style:[v.rowTitle,t.state==="done"&&P.stepTextDone],children:t.text})]},o))})}function Ha(e){try{let t=JSON.parse(e);return t!==null&&typeof t=="object"?t:void 0}catch{return}}function $a({block:e,value:t}){return A(H,{title:e.title,testID:`buoy-block-code-${e.id}`,children:A(l,{style:P.viewer,children:A(Da,{title:e.title??"Payload",data:t,initialExpanded:!0,showTypeFilter:!1,testIDPrefix:`buoy-block-code-${e.id}`})})})}function Oa({block:e}){return A(H,{title:e.title,testID:`buoy-block-code-${e.id}`,children:A(i,{style:[v.mono,P.code],selectable:!0,children:e.text})})}function Gr({block:e}){let t=Ha(e.text);return t===void 0?A(Oa,{block:e}):A($a,{block:e,value:t})}function Jr({block:e}){let t=e.tone==="danger"?V.color.danger:e.tone==="warning"?V.color.warning:V.color.info,o=e.tone==="info"?Ra:Aa;return ge(H,{tone:e.tone,testID:`buoy-block-notice-${e.id}`,children:[ge(l,{style:P.noticeRow,children:[A(o,{size:14,color:t}),A(i,{style:P.noticeText,children:e.text})]}),A(he,{actions:e.actions,blockId:e.id})]})}function Yr({block:e}){let{copied:t,copy:o}=Lt(()=>Do(e)??e.title);return ge(H,{title:e.title,source:e.source,testID:`buoy-block-finding-${e.id}`,tone:"warning",children:[e.evidence.map((r,n)=>ge(l,{style:[P.kvRow,n>0&&v.rowDivider],children:[A(i,{style:P.kvKey,numberOfLines:1,children:r.label}),A(i,{style:[P.kvValue,r.tone&&{color:Xe(r.tone)}],selectable:!0,children:r.value})]},`${r.label}-${n}`)),A(l,{style:P.findingFoot,children:A(b,{testID:`buoy-block-finding-copy-${e.id}`,accessibilityRole:"button",accessibilityLabel:t?"Copied":"Copy this finding",onPress:o,style:({pressed:r})=>[P.findingCopy,r&&{opacity:.7}],children:A(i,{style:[P.findingCopyText,t&&{color:V.color.accent}],children:t?"Copied":"Copy finding"})})}),A(he,{actions:e.actions,blockId:e.id})]})}var P=y.create({flex:{flex:1},tableHead:{flexDirection:"row",paddingHorizontal:12,paddingVertical:6,gap:8,backgroundColor:V.color.fill},th:{flex:1,color:V.color.textTertiary,fontSize:V.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},tr:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,gap:8,alignItems:"center"},td:{flex:1,color:V.color.textSecondary,fontSize:V.font.caption,lineHeight:17},tdFirst:{color:V.color.text,fontWeight:"500"},firstCol:{flex:1.4},kvRow:{flexDirection:"row",gap:12,paddingHorizontal:12,paddingVertical:8,alignItems:"flex-start"},kvKey:{width:110,color:V.color.textSecondary,fontSize:V.font.caption,paddingTop:1},kvValue:{flex:1,color:V.color.text,fontSize:V.font.caption,lineHeight:17},findingFoot:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,borderTopWidth:y.hairlineWidth,borderTopColor:V.color.separator},findingCopy:{paddingHorizontal:10,paddingVertical:5,borderRadius:V.radius.badge,backgroundColor:V.color.fill},findingCopyText:{color:V.color.textSecondary,fontSize:V.font.micro,fontWeight:"600"},thumb:{width:40,height:40,borderRadius:8,backgroundColor:V.color.fill},listHero:{paddingHorizontal:12,paddingTop:12},listHeroImage:{width:"100%",height:240,borderRadius:V.radius.row,backgroundColor:V.color.fill},rowAction:{color:V.color.accent,fontSize:V.font.caption,fontWeight:"600"},diffRow:{paddingHorizontal:12,paddingVertical:8,gap:3},diffPath:{color:V.color.textSecondary,fontSize:V.font.micro,fontWeight:"600",letterSpacing:.3},diffLine:{flexDirection:"row",gap:8,alignItems:"flex-start"},diffMark:{fontFamily:"Menlo",fontSize:12,width:10},diffValue:{flex:1,fontFamily:"Menlo",fontSize:12,lineHeight:16},diffTree:{borderRadius:V.radius.row,overflow:"hidden"},chart:{paddingHorizontal:12,paddingVertical:10,gap:8},barRow:{flexDirection:"row",alignItems:"center",gap:8},barLabel:{width:96,color:V.color.textSecondary,fontSize:V.font.caption},barTrack:{flex:1,height:10,borderRadius:5,backgroundColor:V.color.fill,overflow:"hidden"},bar:{height:10,borderRadius:5},barValue:{width:72,textAlign:"right",color:V.color.text,fontSize:V.font.caption,fontWeight:"600"},step:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},stepMark:{width:20,height:20,borderRadius:10,backgroundColor:V.color.fillTertiary,alignItems:"center",justifyContent:"center"},stepDone:{backgroundColor:V.color.accent},stepFailed:{backgroundColor:V.color.danger},stepNum:{color:V.color.text,fontSize:V.font.micro,fontWeight:"700"},stepTextDone:{color:V.color.textSecondary},viewer:{paddingHorizontal:4,paddingBottom:8},code:{paddingHorizontal:12,paddingVertical:10,lineHeight:17},noticeRow:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:4},noticeText:{flex:1,color:V.color.text,fontSize:V.font.caption,lineHeight:18}});import{useState as Wa}from"react";import{night as Ke}from"@buoy-gg/shared-ui/web";import{CAPS as Xr}from"@buoy-gg/agent-core/web";import{jsx as Qe,jsxs as Vo}from"react/jsx-runtime";function Zr({block:e}){let[t,o]=Wa(null),{width:r}=Io(),n=e.images.slice(0,Xr.gridMax),s=n.length>Xr.gridImages,a=Math.min(150,Math.floor((r-2*Ke.gutter-24-8)/2)),g=({img:u,i:f})=>Vo(b,{testID:`buoy-block-image-${f}`,accessibilityRole:"imagebutton",accessibilityLabel:u.alt,onPress:()=>o(t===f?null:f),style:[je.tile,{width:a},s&&je.tileCarousel],children:[Qe(Ye,{testID:"buoy-internal-chat-image",source:{uri:u.url},style:[je.image,{width:a,height:a}],resizeMode:"contain",accessibilityLabel:u.alt}),Qe(i,{style:je.name,numberOfLines:1,children:u.alt}),u.caption?Qe(i,{style:je.caption,numberOfLines:1,children:u.caption}):null]},`${u.url}-${f}`);return Vo(H,{title:e.title,source:e.source,testID:`buoy-block-imagegrid-${e.id}`,children:[t!==null&&n[t]?Vo(b,{onPress:()=>o(null),style:je.hero,accessibilityRole:"button",accessibilityLabel:`Close ${n[t].alt}`,children:[Qe(Ye,{testID:"buoy-internal-chat-image",source:{uri:n[t].url},style:je.heroImage,resizeMode:"contain",accessibilityLabel:n[t].alt}),Qe(i,{style:je.heroCaption,children:n[t].alt}),n[t].caption?Qe(i,{style:je.caption,children:n[t].caption}):null]}):null,s?Qe(ke,{horizontal:!0,showsHorizontalScrollIndicator:!1,snapToInterval:a+8,decelerationRate:"fast",contentContainerStyle:je.carousel,children:n.map((u,f)=>Qe(g,{img:u,i:f},f))}):Qe(l,{style:je.grid,children:n.map((u,f)=>Qe(g,{img:u,i:f},f))}),Qe(Ro,{shown:n.length,total:e.total})]})}var je=y.create({grid:{flexDirection:"row",flexWrap:"wrap",gap:8,padding:12},carousel:{gap:8,paddingHorizontal:12,paddingVertical:12},tile:{gap:4},tileCarousel:{},image:{borderRadius:Ke.radius.row,backgroundColor:Ke.color.fill},name:{color:Ke.color.text,fontSize:Ke.font.micro,fontWeight:"600"},caption:{color:Ke.color.textSecondary,fontSize:Ke.font.micro},hero:{alignItems:"center",padding:12,gap:6,borderBottomWidth:y.hairlineWidth,borderBottomColor:Ke.color.separator},heroImage:{width:"100%",height:240,borderRadius:Ke.radius.row,backgroundColor:Ke.color.fill},heroCaption:{color:Ke.color.text,fontSize:Ke.font.caption}});import{useState as Ma}from"react";import{AlertTriangle as Na,ChevronRight as qa,Eye as on,night as I,NightSegmented as Fa}from"@buoy-gg/shared-ui/web";import{CAPS as so}from"@buoy-gg/agent-core/web";import{jsx as M,jsxs as de}from"react/jsx-runtime";function en(e){return e===void 0?I.color.textTertiary:e>=500?I.color.danger:e>=400?I.color.warning:e>=300?I.color.info:I.color.accent}function rn(e){try{let t=new URL(e);return t.pathname+(t.search?"?\u2026":"")}catch{return e}}function nn({status:e}){return M(l,{style:[v.pill,{backgroundColor:`${en(e)}22`}],children:M(i,{style:[v.pillText,{color:en(e)}],children:e??"\u2026"})})}function sn({block:e}){let t=K(),o=t.supports?.openTool!==!1,r=Ee(e.requests,so.listItems),{visible:n}=r;return de(H,{title:e.title??"Network requests",source:e.source,testID:`buoy-block-requests-${e.id}`,children:[n.map((s,a)=>de(b,{disabled:!o,onPress:()=>void t.runAction({label:"Open in Network",openTool:{toolId:"network",select:s.id}},e.id),style:[v.row,a>0&&v.rowDivider],accessibilityRole:o?"button":void 0,children:[M(i,{style:J.method,children:s.method}),M(i,{style:v.rowTitle,numberOfLines:1,children:rn(s.url)}),s.mocked?M(i,{style:J.mockedChip,children:"MOCKED"}):null,s.durationMs!==void 0?de(i,{style:v.rowTrailing,children:[s.durationMs," ms"]}):null,M(nn,{status:s.status}),o?M(qa,{size:12,color:I.color.textTertiary}):null]},`${s.id}-${a}`)),M(We,{paged:r})]})}var _a=[{key:"response",label:"Response"},{key:"request",label:"Request"}];function an({block:e}){let[t,o]=Ma("response"),r=t==="response"?e.responseBody:e.requestBody,n=r===void 0?"(none)":typeof r=="string"?r:JSON.stringify(r,null,2),s=K();return de(H,{source:e.source,testID:`buoy-block-request-${e.id}`,children:[de(l,{style:[v.row,J.reqHead],children:[M(i,{style:J.method,children:e.request.method}),M(i,{style:v.rowTitle,numberOfLines:2,children:rn(e.request.url)}),e.request.mocked?M(i,{style:J.mockedChip,children:"MOCKED"}):null,M(nn,{status:e.request.status})]}),M(l,{style:J.tabs,children:M(Fa,{tabs:_a,activeKey:t,onChange:a=>o(a),size:"sm"})}),M(i,{style:[v.mono,J.body],numberOfLines:14,selectable:!0,children:n.length>1600?`${n.slice(0,1600)}
|
|
9
|
-
\u2026`:n}),M(he,{blockId:e.id,actions:[{label:"Open in Network",openTool:{toolId:"network",select:e.request.id}}]}),(s.supports?.openTool===!1,null)]})}function ln({block:e}){let o=K().rules?.[e.rule.id],r=o?.deleted===!0,n={...e.rule,enabled:r?!1:o?.enabled??e.rule.enabled},s=n.kind==="fail"?"fails (no network)":n.kind==="delay"?`delayed ${n.delayMs??0} ms`:`returns ${n.status??200}`;return de(H,{title:n.name??"Network override",source:e.source,testID:`buoy-block-rule-${e.id}`,tone:n.enabled?"warning":void 0,children:[de(l,{style:J.ruleBody,children:[de(i,{style:J.ruleLine,children:[de(i,{style:J.ruleKey,children:[n.methods?.length?n.methods.join("/"):"ANY"," "]}),M(i,{style:v.mono,children:n.urlPattern})]}),de(i,{style:J.ruleLine,children:[M(i,{style:J.ruleKey,children:"\u2192 "}),s,n.times?` \xB7 ${n.times===1?"once":`${n.times} times`}`:" \xB7 every time",n.hits!==void 0?` \xB7 ${n.hits} hit${n.hits===1?"":"s"}`:""]}),M(l,{style:[v.pill,n.enabled?J.on:J.off],children:M(i,{style:[v.pillText,{color:n.enabled?I.color.onAccent:I.color.textSecondary}],children:r?"DELETED":n.enabled?"ON":"OFF"})})]}),r?null:M(he,{blockId:e.id,actions:[n.enabled?{label:"Turn off",dispatch:{toolId:"network",action:"setOverrideRuleEnabled",params:{id:n.id,enabled:!1}}}:{label:"Turn on",primary:!0,dispatch:{toolId:"network",action:"setOverrideRuleEnabled",params:{id:n.id,enabled:!0}}},{label:"Delete",dispatch:{toolId:"network",action:"deleteOverrideRule",params:{id:n.id}}}]})]})}function cn({block:e}){let t=K(),o=Ee(e.elements,so.chips),{visible:r}=o;return de(H,{title:e.title??"On screen right now",source:e.source,testID:`buoy-block-screen-${e.id}`,children:[r.map((n,s)=>de(b,{onPress:()=>void t.runAction({label:"Highlight",dispatch:{toolId:"highlight-updates",action:"setSpotlight",params:{nativeTag:n.nativeTag}}},e.id),disabled:t.supports?.dispatch===!1,style:[v.row,s>0&&v.rowDivider],accessibilityRole:"button",children:[M(on,{size:12,color:I.color.textTertiary}),M(i,{style:v.rowTitle,numberOfLines:1,children:n.label??n.testID??n.name}),M(i,{style:v.rowTrailing,numberOfLines:1,children:n.name})]},`${n.nativeTag}-${s}`)),M(We,{paged:o})]})}function dn({block:e}){let t=K(),o=Ee(e.routes,so.chips),r=o.visible;return de(H,{title:e.current?`Routes \xB7 you're on ${e.current}`:"Routes",source:e.source,testID:`buoy-block-routes-${e.id}`,children:[M(l,{style:J.chips,children:r.map((n,s)=>M(b,{disabled:t.supports?.dispatch===!1,onPress:()=>n.dynamic?t.answer({blockId:e.id,kind:"input",value:`Open ${n.path} \u2014 which id?`}):void t.runAction({label:`Open ${n.path}`,dispatch:{toolId:"route-events",action:"navigate",params:{path:n.path}}},e.id),style:[J.chip,n.path===e.current&&J.chipCurrent],accessibilityRole:"button",children:M(i,{style:[J.chipText,n.dynamic&&J.chipDynamic],children:n.path})},`${n.path}-${s}`))}),M(We,{paged:o})]})}var tn={error:I.color.danger,warn:I.color.warning,warning:I.color.warning,info:I.color.info};function un({block:e}){let t=Ee(e.entries,so.listItems),{visible:o}=t;return de(H,{title:"Console",source:e.source,testID:`buoy-block-logs-${e.id}`,children:[o.map((r,n)=>de(l,{style:[v.row,n>0&&v.rowDivider,J.logRow],children:[M(l,{style:[v.pill,{backgroundColor:`${tn[r.level]??I.color.textTertiary}22`}],children:M(i,{style:[v.pillText,{color:tn[r.level]??I.color.textSecondary}],children:r.level.toUpperCase()})}),M(i,{style:[v.rowTitle,v.mono],numberOfLines:3,children:r.message}),r.count>1?de(i,{style:v.rowTrailing,children:["\xD7",r.count]}):null]},`${r.level}-${r.message}-${n}`)),M(We,{paged:t})]})}function pn({block:e}){return de(H,{tone:"danger",testID:`buoy-block-crash-${e.id}`,children:[de(l,{style:J.crashHead,children:[M(Na,{size:14,color:I.color.danger}),de(i,{style:J.crashTitle,children:["The app crashed",e.route?` on ${e.route}`:""]})]}),M(i,{style:[v.mono,J.crashMsg],numberOfLines:4,selectable:!0,children:e.message}),e.suspect?de(i,{style:J.suspect,children:["Most likely cause: ",e.suspect.label]}):null,M(he,{blockId:e.id,actions:[...e.suspect?.action?[{...e.suspect.action,primary:!0}]:[],...e.actions??[]].slice(0,2)})]})}function gn({block:e}){let t=K(),o=t.supports?.minimize!==!1;return de(b,{testID:`buoy-block-peek-${e.id}`,disabled:!o,onPress:()=>void t.runAction({label:"Look",minimize:!0},e.id),style:({pressed:r})=>[J.peek,r&&{opacity:.7}],accessibilityRole:"button",accessibilityLabel:`${e.label}. Look at the app`,children:[M(i,{style:J.peekText,children:e.label}),o?de(l,{style:J.peekLook,children:[M(on,{size:12,color:I.color.accent}),M(i,{style:J.peekLookText,children:"Look"})]}):null]})}var J=y.create({method:{color:I.color.textSecondary,fontSize:I.font.micro,fontWeight:"700",letterSpacing:.4,width:44},mockedChip:{color:I.color.warning,backgroundColor:I.color.warningSoft,fontSize:9,fontWeight:"700",letterSpacing:.6,paddingHorizontal:5,paddingVertical:1,borderRadius:I.radius.badge,overflow:"hidden"},reqHead:{paddingTop:12},tabs:{paddingHorizontal:12,paddingTop:4,paddingBottom:8},tab:{paddingHorizontal:10,paddingVertical:5,borderRadius:I.radius.badge,backgroundColor:I.color.fill},tabOn:{backgroundColor:I.color.accentSoft},tabText:{color:I.color.textSecondary,fontSize:I.font.micro,fontWeight:"600"},tabTextOn:{color:I.color.accent},body:{paddingHorizontal:12,paddingBottom:4,lineHeight:16,color:I.color.textSecondary},ruleBody:{paddingHorizontal:12,paddingTop:4,paddingBottom:4,gap:4},ruleLine:{color:I.color.text,fontSize:I.font.caption,lineHeight:18},ruleKey:{color:I.color.textSecondary,fontWeight:"700"},on:{alignSelf:"flex-start",backgroundColor:I.color.accent,marginTop:4},off:{alignSelf:"flex-start",backgroundColor:I.color.fillTertiary,marginTop:4},chips:{flexDirection:"row",flexWrap:"wrap",gap:6,padding:12},chip:{paddingHorizontal:10,paddingVertical:6,borderRadius:I.radius.chip,backgroundColor:I.color.fill,borderWidth:y.hairlineWidth,borderColor:I.color.border},chipCurrent:{backgroundColor:I.color.accentSoft,borderColor:I.color.accentBorderStrong},chipText:{color:I.color.text,fontSize:I.font.caption,fontFamily:"Menlo"},chipDynamic:{color:I.color.textSecondary},logRow:{alignItems:"flex-start"},crashHead:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:12},crashTitle:{color:I.color.danger,fontSize:I.font.row,fontWeight:"600"},crashMsg:{paddingHorizontal:12,paddingTop:6,color:I.color.text},suspect:{color:I.color.textSecondary,fontSize:I.font.caption,paddingHorizontal:12,paddingTop:6},peek:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:10,paddingLeft:12,paddingRight:10,paddingVertical:7,borderRadius:I.radius.chip,backgroundColor:I.color.fill},peekText:{color:I.color.textSecondary,fontSize:I.font.caption},peekLook:{flexDirection:"row",alignItems:"center",gap:4},peekLookText:{color:I.color.accent,fontSize:I.font.caption,fontWeight:"600"}});import{useEffect as Ua,useRef as yn,useState as Ze}from"react";import{AlertTriangle as Ka,Check as bn,ChevronDown as hn,ChevronRight as mn,night as d,NightSegmented as ja,RefreshCw as Qa,Search as Ga,X as Ja}from"@buoy-gg/shared-ui/web";import{Fragment as ao,jsx as p,jsxs as k}from"react/jsx-runtime";var fn=e=>typeof e=="string"?e:e===void 0?"\u2014":JSON.stringify(e);function xn({block:e}){let t=K();return p(l,{style:c.chips,testID:`buoy-block-suggestions-${e.id}`,children:e.chips.slice(0,4).map(o=>p(b,{disabled:!!t.busy,onPress:()=>void t.runAction({label:o.label,send:o.send??o.label},e.id),style:({pressed:r})=>[c.chip,r&&c.pressed],accessibilityRole:"button",children:p(i,{style:c.chipText,children:o.label})},o.label))})}function wn({block:e}){let t=K(),o=t.answered[e.id],r=!!o,[n,s]=Ze([]),a=o?.kind==="multi"?o.optionIds:n,g=f=>s(m=>m.includes(f)?m.filter(O=>O!==f):[...m,f]),u=n.length>=(e.min??1)&&(!e.max||n.length<=e.max);return k(H,{testID:`buoy-block-multi-${e.id}`,tone:r?void 0:"info",children:[p(i,{style:c.question,children:e.question}),p(l,{style:c.optionsBox,children:e.options.map((f,m)=>{let O=a.includes(f.id);return k(b,{disabled:r,onPress:()=>g(f.id),style:[c.option,m>0&&v.rowDivider,r&&!O&&c.dim],accessibilityRole:"checkbox",accessibilityState:{checked:O},children:[p(l,{style:[c.checkbox,O&&c.checkboxOn],children:O?p(bn,{size:11,color:d.color.onAccent}):null}),k(l,{style:c.flex,children:[p(i,{style:c.optionLabel,children:f.label}),f.detail?p(i,{style:c.optionDetail,children:f.detail}):null]})]},f.id)})}),r?null:p(l,{style:c.rowEnd,children:p(b,{testID:"buoy-block-multi-submit",disabled:!u,onPress:()=>t.answer({blockId:e.id,kind:"multi",optionIds:n,labels:e.options.filter(f=>n.includes(f.id)).map(f=>f.label)}),style:[c.button,c.buttonPrimary,!u&&c.disabled],children:p(i,{style:c.buttonTextPrimary,children:e.submitLabel??`Use ${n.length||""}`.trim()})})})]})}var Ya=8;function Tn({block:e}){let t=K(),o=t.answered[e.id],[r,n]=Ze(""),[s,a]=Ze(!1),g=o?.kind==="select"?o.label:null,u=e.options.filter(m=>!r||m.label.toLowerCase().includes(r.toLowerCase())).slice(0,8),f=e.searchable!==!1&&e.options.length>=Ya;return k(H,{testID:`buoy-block-select-${e.id}`,tone:o?void 0:"info",children:[p(i,{style:c.question,children:e.label}),g?p(i,{style:c.decided,children:g}):k(l,{style:c.selectBox,children:[k(b,{onPress:()=>a(m=>!m),style:c.selectField,accessibilityRole:"button",children:[p(i,{style:c.selectPlaceholder,children:s?"Choose\u2026":`${e.options.length} options`}),p(hn,{size:14,color:d.color.textSecondary})]}),s&&k(ao,{children:[f&&k(l,{style:c.search,children:[p(Ga,{size:12,color:d.color.textSecondary}),p(ze,{style:c.searchInput,value:r,onChangeText:n,placeholder:"Search",placeholderTextColor:d.color.placeholder,autoCapitalize:"none",autoCorrect:!1})]}),u.map((m,O)=>k(b,{onPress:()=>t.answer({blockId:e.id,kind:"select",optionId:m.id,label:m.label}),style:[c.option,O>0&&v.rowDivider],accessibilityRole:"button",children:[k(l,{style:c.flex,children:[p(i,{style:c.optionLabel,children:m.label}),m.detail?p(i,{style:c.optionDetail,children:m.detail}):null]}),p(mn,{size:12,color:d.color.textTertiary})]},m.id)),e.options.length>u.length?k(i,{style:c.hint,children:[e.options.length-u.length," more \u2014 keep typing"]}):null]})]})]})}function kn({min:e,max:t,step:o=1,value:r,unit:n,onChange:s,disabled:a}){let g=yn(0),u=t>e?(r-e)/(t-e)*100:0,f=L=>Math.min(t,Math.max(e,+(Math.round((L-e)/o)*o+e).toFixed(6))),m=L=>!a&&s(f(r+L*o)),O=L=>{if(a||g.current<=0)return;let oe=Math.min(1,Math.max(0,L.nativeEvent.locationX/g.current));s(f(e+oe*(t-e)))},$=L=>{g.current=L.nativeEvent.layout.width};return k(l,{style:c.sliderRow,children:[p(b,{disabled:a,onPress:()=>m(-1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Decrease",children:p(i,{style:c.stepText,children:"\u2212"})}),p(b,{style:c.trackHit,onLayout:$,onPress:O,disabled:a,accessibilityRole:"adjustable",accessibilityValue:{min:e,max:t,now:r},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:L=>m(L.nativeEvent.actionName==="increment"?1:-1),children:k(l,{style:c.track,pointerEvents:"none",children:[p(l,{style:[c.fill,{width:`${u}%`}]}),p(l,{style:[c.thumb,{left:`${u}%`}]})]})}),p(b,{disabled:a,onPress:()=>m(1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Increase",children:p(i,{style:c.stepText,children:"+"})}),k(i,{style:c.sliderValue,children:[r,n?` ${n}`:""]})]})}function Sn({block:e}){let t=K(),o=t.answered[e.id],[r,n]=Ze(e.value??e.min);return k(H,{testID:`buoy-block-slider-${e.id}`,tone:o?void 0:"info",children:[p(i,{style:c.question,children:e.label}),p(l,{style:c.pad,children:p(kn,{min:e.min,max:e.max,step:e.step,value:o?.kind==="slider"?o.value:r,unit:e.unit,onChange:n,disabled:!!o})}),o?null:p(l,{style:c.rowEnd,children:p(b,{onPress:()=>t.answer({blockId:e.id,kind:"slider",value:r,unit:e.unit}),style:[c.button,c.buttonPrimary],children:k(i,{style:c.buttonTextPrimary,children:["Use ",r,e.unit?` ${e.unit}`:""]})})})]})}function Cn({block:e}){let t=K(),o=t.answered[e.id],[r,n]=Ze(""),s=e.presets??[{label:"Now",value:new Date().toISOString()},{label:"Tomorrow",value:new Date(Date.now()+864e5).toISOString()},{label:"+7 days",value:new Date(Date.now()+7*864e5).toISOString()},{label:"+30 days",value:new Date(Date.now()+30*864e5).toISOString()}];return k(H,{testID:`buoy-block-datetime-${e.id}`,tone:o?void 0:"info",children:[p(i,{style:c.question,children:e.label}),o?p(i,{style:c.decided,children:o.kind==="dateTime"?o.label??o.value:"(skipped)"}):k(ao,{children:[p(l,{style:[c.chips,c.pad],children:s.map(a=>p(b,{onPress:()=>t.answer({blockId:e.id,kind:"dateTime",value:a.value,label:a.label}),style:c.chip,children:p(i,{style:c.chipText,children:a.label})},a.label))}),k(l,{style:[c.inputRow,c.pad],children:[p(ze,{style:c.input,value:r,onChangeText:n,placeholder:e.mode==="time"?"14:30":"2026-09-15",placeholderTextColor:d.color.placeholder,keyboardType:"numbers-and-punctuation"}),p(b,{disabled:!r.trim(),onPress:()=>t.answer({blockId:e.id,kind:"dateTime",value:r.trim()}),style:[c.button,c.buttonPrimary,!r.trim()&&c.disabled],children:p(i,{style:c.buttonTextPrimary,children:"Use"})})]})]})]})}function vn({f:e,value:t,onChange:o,disabled:r}){return e.type==="toggle"?k(l,{style:c.fieldRow,children:[p(i,{style:c.fieldLabel,children:e.label}),p(vo,{value:!!t,onValueChange:o,disabled:r,trackColor:{true:d.color.accent,false:d.color.fillTertiary},thumbColor:d.color.knob})]}):e.type==="select"?k(l,{style:c.fieldCol,children:[p(i,{style:c.fieldLabel,children:e.label}),p(l,{style:c.chips,children:e.options.map(n=>p(b,{disabled:r,onPress:()=>o(n.id),style:[c.chip,t===n.id&&c.chipOn],children:p(i,{style:[c.chipText,t===n.id&&c.chipTextOn],children:n.label})},n.id))})]}):e.type==="slider"?k(l,{style:c.fieldCol,children:[p(i,{style:c.fieldLabel,children:e.label}),p(kn,{min:e.min,max:e.max,step:e.step,unit:e.unit,value:typeof t=="number"?t:e.min,onChange:o,disabled:r})]}):k(l,{style:c.fieldRow,children:[p(i,{style:c.fieldLabel,children:e.label}),p(ze,{style:c.fieldInput,value:t==null?"":String(t),onChangeText:o,editable:!r,placeholder:e.placeholder??"",placeholderTextColor:d.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:e.type==="secret",autoCapitalize:"none",autoCorrect:!1})]})}function Bn(e){let[t,o]=Ze(()=>Object.fromEntries(e.map(r=>[r.key,r.value])));return{values:t,set:(r,n)=>o(s=>({...s,[r]:n}))}}function An({block:e}){let t=K(),o=t.answered[e.id],{values:r,set:n}=Bn(e.fields);return k(H,{title:e.title,testID:`buoy-block-form-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.pad,children:e.fields.map(s=>p(vn,{f:s,value:r[s.key],onChange:a=>n(s.key,a),disabled:!!o},s.key))}),o?p(i,{style:c.decided,children:"Sent"}):p(l,{style:c.rowEnd,children:p(b,{onPress:()=>t.answer({blockId:e.id,kind:"form",values:r}),style:[c.button,c.buttonPrimary],children:p(i,{style:c.buttonTextPrimary,children:e.submitLabel??"Send"})})})]})}function In({block:e}){let t=K(),o=t.answered[e.id],{values:r,set:n}=Bn(e.fields),s=o?.kind==="proposal"?o.approved:null;return k(H,{testID:`buoy-block-proposal-${e.id}`,tone:o?void 0:"warning",children:[p(i,{style:c.confirmTitle,children:e.title}),p(i,{style:c.confirmChange,children:e.change}),p(l,{style:c.pad,children:e.fields.map(a=>p(vn,{f:a,value:r[a.key],onChange:g=>n(a.key,g),disabled:!!o},a.key))}),e.consequence?p(i,{style:c.consequence,children:e.consequence}):null,p(l,{style:c.actionsRow,children:o?p(i,{style:c.decided,children:s?"\u2713 Applied with these values":"\u2715 Not applied"}):k(ao,{children:[p(b,{onPress:()=>t.answer({blockId:e.id,kind:"proposal",approved:!0,values:r}),style:[c.button,c.buttonPrimary],children:p(i,{style:c.buttonTextPrimary,children:e.approveLabel??"Apply"})}),p(b,{onPress:()=>t.answer({blockId:e.id,kind:"proposal",approved:!1}),style:[c.button,c.buttonPlate],children:p(i,{style:c.buttonTextPlate,children:"Not now"})})]})})]})}function Rn({block:e}){let t=K(),[o,r]=Ze(null),n=t.actionState?.[`${e.id}:${e.verify?.label??"Verify"}`],s=e.verified||n==="done";return k(l,{style:c.claim,testID:`buoy-block-claim-${e.id}`,children:[k(i,{style:c.claimText,children:[e.text,e.sources.map((a,g)=>k(i,{onPress:()=>r(o===g?null:g),style:c.cite,children:[" [",g+1,"]"]},g)),s?p(i,{style:c.verified,children:" \u2713 verified"}):null]}),o!==null&&e.sources[o]?k(l,{style:c.citeBox,children:[k(i,{style:c.citeLabel,children:["[",o+1,"] ",e.sources[o].label]}),e.sources[o].detail?p(i,{style:c.citeDetail,children:e.sources[o].detail}):null]}):null,e.verify&&!s?k(b,{onPress:()=>void t.runAction(e.verify,e.id),style:c.verifyBtn,accessibilityRole:"button",children:[p(Qa,{size:11,color:d.color.accent}),p(i,{style:c.verifyText,children:n==="running"?"Checking\u2026":e.verify.label})]}):null]})}function Pn({block:e}){let[t,o]=Ze(!!e.open);return k(H,{testID:`buoy-block-details-${e.id}`,children:[k(b,{onPress:()=>o(r=>!r),style:v.row,accessibilityRole:"button",accessibilityState:{expanded:t},children:[p(i,{style:v.rowTitle,children:e.summary}),t?p(hn,{size:12,color:d.color.textTertiary}):p(mn,{size:12,color:d.color.textTertiary})]}),t?p(i,{style:c.detailsBody,selectable:!0,children:e.body}):null]})}function Dn({block:e,renderNested:t}){let[o,r]=Ze(0),n=e.tabs.map((a,g)=>({key:String(g),label:a.label})),s=e.tabs[o];return k(l,{style:c.tabsWrap,testID:`buoy-block-tabs-${e.id}`,children:[p(ja,{tabs:n,activeKey:String(o),onChange:a=>r(Number(a)),size:"sm"}),s&&t?t(s.block):null]})}var Xa=10;function zn({block:e}){let t=Ee(e.events,Xa);return k(H,{title:e.title??"What happened",source:e.source,testID:`buoy-block-timeline-${e.id}`,children:[t.visible.map((o,r)=>k(l,{style:c.tlRow,children:[p(i,{style:c.tlAt,children:o.at}),k(l,{style:c.tlLine,children:[p(l,{style:[c.tlDot,{backgroundColor:Xe(o.tone??"muted")}]}),r<t.visible.length-1?p(l,{style:c.tlStem}):null]}),k(l,{style:c.flex,children:[p(i,{style:c.tlSource,children:o.source.toUpperCase()}),p(i,{style:v.rowTitle,numberOfLines:2,children:o.label})]})]},r)),p(We,{paged:t})]})}function Vn({block:e}){let t=e.series.slice(-60),o=Math.max(1,...t),r=Math.min(...t,0),n=44;return k(H,{title:e.title,source:e.source,testID:`buoy-block-sparkline-${e.id}`,children:[k(l,{style:c.sparkHead,children:[k(i,{style:c.sparkCurrent,children:[e.current??t[t.length-1],e.unit?k(i,{style:c.sparkUnit,children:[" ",e.unit]}):null]}),e.live?p(Lo,{}):null]}),p(l,{style:[c.spark,{height:n}],children:t.map((s,a)=>p(l,{style:[c.sparkBar,{height:Math.max(2,(s-r)/(o-r||1)*n),backgroundColor:a===t.length-1?d.color.accent:d.color.accentBorderStrong}]},a))}),e.label?p(i,{style:c.hint,children:e.label}):null]})}function Lo(){let e=yn(new ee.Value(1)).current;return Ua(()=>{let t=ee.loop(ee.sequence([ee.timing(e,{toValue:.3,duration:700,useNativeDriver:!0}),ee.timing(e,{toValue:1,duration:700,useNativeDriver:!0})]));return t.start(),()=>t.stop()},[e]),k(l,{style:c.live,children:[p(ee.View,{style:[c.liveDot,{opacity:e}]}),p(i,{style:c.liveText,children:"LIVE"})]})}function Ln({block:e}){let t=[...new Set([...e.left.pairs.map(n=>n.key),...e.right.pairs.map(n=>n.key)])],o=Object.fromEntries(e.left.pairs.map(n=>[n.key,n.value])),r=Object.fromEntries(e.right.pairs.map(n=>[n.key,n.value]));return k(H,{title:e.title,source:e.source,testID:`buoy-block-compare-${e.id}`,children:[k(l,{style:c.cmpHead,children:[p(i,{style:c.cmpKey}),p(i,{style:c.cmpCol,children:e.left.title}),p(i,{style:c.cmpCol,children:e.right.title})]}),t.map((n,s)=>{let a=JSON.stringify(o[n])!==JSON.stringify(r[n]);return k(l,{style:[c.cmpRow,s>0&&v.rowDivider,a&&c.cmpDiff],children:[p(i,{style:c.cmpKey,numberOfLines:1,children:n}),p(i,{style:[c.cmpVal,a&&{color:d.color.danger}],numberOfLines:2,children:fn(o[n])}),p(i,{style:[c.cmpVal,a&&{color:d.color.accent}],numberOfLines:2,children:fn(r[n])})]},n)})]})}function Hn({c:e,id:t}){return k(ao,{children:[e.image?p(Ye,{testID:"buoy-internal-chat-image",source:{uri:e.image},style:c.cardImage,resizeMode:"contain",accessibilityLabel:e.title}):null,k(l,{style:c.cardText,children:[p(i,{style:c.cardTitle,numberOfLines:2,children:e.title}),e.subtitle?p(i,{style:v.rowSub,numberOfLines:2,children:e.subtitle}):null,e.facts?.slice(0,4).map(o=>k(l,{style:c.fact,children:[p(i,{style:c.factLabel,children:o.label}),p(i,{style:[c.factValue,o.tone&&{color:Xe(o.tone)}],children:o.value})]},o.label))]}),p(he,{actions:e.actions,blockId:t})]})}function $n({block:e}){return p(H,{source:e.source,testID:`buoy-block-card-${e.id}`,children:p(Hn,{c:e,id:e.id})})}function On({block:e}){return k(l,{testID:`buoy-block-cardcarousel-${e.id}`,children:[e.title?p(i,{style:c.carouselTitle,children:e.title}):null,p(ke,{horizontal:!0,showsHorizontalScrollIndicator:!1,snapToInterval:232,decelerationRate:"fast",contentContainerStyle:c.carousel,children:e.cards.slice(0,8).map((t,o)=>p(l,{style:c.carouselCard,children:p(Hn,{c:t,id:`${e.id}-${o}`})},`${t.title}-${o}`))})]})}function En({block:e}){let[t,o]=Ze(!1);return k(H,{title:e.route?`Screen \xB7 ${e.route}`:"Screen",source:e.source,testID:`buoy-block-screenshot-${e.id}`,children:[p(b,{onPress:()=>o(r=>!r),accessibilityRole:"imagebutton",accessibilityLabel:e.caption??"Screenshot",children:p(Ye,{testID:"buoy-internal-chat-image",source:{uri:e.url},style:[c.shot,t&&c.shotBig],resizeMode:"contain"})}),e.caption?p(i,{style:c.hint,children:e.caption}):null]})}function Wn({block:e}){let t=e.steps.filter(o=>o.state==="done").length;return k(H,{title:e.title,testID:`buoy-block-plan-${e.id}`,tone:e.pending?"info":void 0,children:[p(l,{style:c.progress,children:p(l,{style:[c.progressFill,{width:`${t/Math.max(1,e.steps.length)*100}%`}]})}),e.steps.map((o,r)=>k(l,{style:[c.step,r>0&&v.rowDivider],children:[p(l,{style:[c.stepMark,o.state==="done"&&c.stepDone,o.state==="failed"&&c.stepFailed,o.state==="running"&&c.stepRunning],children:o.state==="done"?p(bn,{size:10,color:d.color.onAccent}):o.state==="failed"?p(Ja,{size:10,color:d.color.text}):p(i,{style:c.stepNum,children:r+1})}),k(i,{style:[v.rowTitle,o.state==="done"&&c.muted],children:[o.text,o.state==="running"?"\u2026":""]})]},r)),p(he,{actions:e.actions??(e.pending?[{label:"Go",primary:!0,send:"Go ahead with the plan."},{label:"Change it",send:"Let me change the plan first."}]:void 0),blockId:e.id})]})}function Mn({block:e}){let t=K();return k(b,{testID:`buoy-block-checkpoint-${e.id}`,disabled:!e.restore,onPress:()=>e.restore&&void t.runAction(e.restore,e.id),style:c.checkpoint,accessibilityRole:"button",children:[p(l,{style:c.cpFlag}),k(i,{style:c.cpText,children:[e.label,e.at?` \xB7 ${e.at}`:""]}),e.restore?p(i,{style:c.cpRestore,children:e.restore.label}):null]})}function Nn({block:e}){let t=e.status==="failed"?d.color.danger:e.status==="done"?d.color.accent:d.color.info;return k(H,{testID:`buoy-block-task-${e.id}`,children:[k(l,{style:c.taskHead,children:[p(i,{style:c.cardTitle,children:e.title}),p(l,{style:[v.pill,{backgroundColor:`${t}22`}],children:p(i,{style:[v.pillText,{color:t}],children:e.status.toUpperCase()})})]}),e.progress!==void 0?p(l,{style:[c.progress,c.pad],children:p(l,{style:[c.progressFill,{width:`${Math.round(e.progress*100)}%`,backgroundColor:t}]})}):null,e.detail?p(i,{style:c.hint,children:e.detail}):null,p(he,{actions:e.actions,blockId:e.id})]})}function qn({block:e}){let t=e.tone==="danger"?d.color.danger:e.tone==="warning"?d.color.warning:d.color.info;return k(l,{style:[c.banner,{borderColor:t,backgroundColor:`${t}1A`}],testID:`buoy-block-banner-${e.id}`,children:[p(Ka,{size:13,color:t}),p(i,{style:[c.bannerText,{color:t}],numberOfLines:2,children:e.text}),e.actions?.[0]?p(he,{actions:e.actions.slice(0,1),blockId:e.id,align:"right"}):null]})}function Fn({block:e}){return k(H,{testID:`buoy-block-file-${e.id}`,children:[k(l,{style:v.row,children:[p(l,{style:c.fileIcon,children:p(i,{style:c.fileExt,children:(e.type??e.name.split(".").pop()??"file").toUpperCase().slice(0,4)})}),k(l,{style:c.flex,children:[p(i,{style:v.rowTitle,numberOfLines:1,children:e.name}),e.size?p(i,{style:v.rowSub,children:e.size}):null]})]}),p(he,{actions:e.actions,blockId:e.id})]})}function _n({block:e}){let t=K(),o=t.answered[e.id];return k(H,{testID:`buoy-block-upload-${e.id}`,tone:o?void 0:"info",children:[p(i,{style:c.question,children:e.label}),o?p(i,{style:c.decided,children:o.kind==="upload"?`Attached ${o.name}`:"(skipped)"}):p(l,{style:[c.rowEnd,{justifyContent:"flex-start"}],children:p(b,{onPress:()=>t.answer({blockId:e.id,kind:"upload",name:"screenshot.png"}),style:[c.button,c.buttonPlate],children:p(i,{style:c.buttonTextPlate,children:e.accept==="image"?"Choose a screenshot":"Choose a file"})})})]})}var c=y.create({flex:{flex:1},pad:{paddingHorizontal:12,paddingBottom:8},muted:{color:d.color.textSecondary},dim:{opacity:.45},disabled:{opacity:.5},pressed:{opacity:.7},question:{color:d.color.text,fontSize:d.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},hint:{color:d.color.textTertiary,fontSize:d.font.micro,paddingHorizontal:12,paddingBottom:10},decided:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"600",paddingHorizontal:12,paddingVertical:10},rowEnd:{flexDirection:"row",justifyContent:"flex-end",paddingHorizontal:12,paddingBottom:12,gap:8},actionsRow:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:d.radius.row},buttonPrimary:{backgroundColor:d.color.accent},buttonPlate:{backgroundColor:d.color.button},buttonTextPrimary:{color:d.color.onAccent,fontSize:d.font.caption,fontWeight:"600"},buttonTextPlate:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},chips:{flexDirection:"row",flexWrap:"wrap",gap:6},chip:{paddingHorizontal:12,paddingVertical:7,borderRadius:d.radius.chip,backgroundColor:d.color.fill,borderWidth:y.hairlineWidth,borderColor:d.color.border},chipOn:{backgroundColor:d.color.accentSoft,borderColor:d.color.accentBorderStrong},chipText:{color:d.color.text,fontSize:d.font.caption},chipTextOn:{color:d.color.accent,fontWeight:"600"},optionsBox:{marginHorizontal:8,marginBottom:8,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:10},optionLabel:{color:d.color.text,fontSize:d.font.body,fontWeight:"500"},optionDetail:{color:d.color.textSecondary,fontSize:d.font.caption},checkbox:{width:20,height:20,borderRadius:6,borderWidth:1.5,borderColor:d.color.textTertiary,alignItems:"center",justifyContent:"center"},checkboxOn:{backgroundColor:d.color.accent,borderColor:d.color.accent},selectBox:{marginHorizontal:12,marginBottom:12,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,overflow:"hidden"},selectField:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:11},selectPlaceholder:{color:d.color.textSecondary,fontSize:d.font.body},search:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:6,borderTopWidth:y.hairlineWidth,borderTopColor:d.color.separator},searchInput:{flex:1,color:d.color.text,fontSize:d.font.caption,paddingVertical:4},sliderRow:{flexDirection:"row",alignItems:"center",gap:8},stepBtn:{width:28,height:28,borderRadius:14,backgroundColor:d.color.fill,alignItems:"center",justifyContent:"center"},stepText:{color:d.color.text,fontSize:16,fontWeight:"600"},trackHit:{flex:1,height:36,justifyContent:"center"},track:{height:6,borderRadius:3,backgroundColor:d.color.fillTertiary,justifyContent:"center"},fill:{height:6,borderRadius:3,backgroundColor:d.color.accent},thumb:{position:"absolute",width:20,height:20,borderRadius:10,backgroundColor:d.color.knob,marginLeft:-10,shadowColor:"#000",shadowOpacity:.35,shadowRadius:3,shadowOffset:{width:0,height:1}},sliderValue:{width:64,textAlign:"right",color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},inputRow:{flexDirection:"row",alignItems:"center",gap:8,paddingBottom:12},input:{flex:1,height:38,paddingHorizontal:12,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,color:d.color.text,fontSize:d.font.body},fieldRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:10,paddingVertical:6},fieldCol:{paddingVertical:6,gap:6},fieldLabel:{color:d.color.textSecondary,fontSize:d.font.caption,width:110},fieldInput:{flex:1,height:34,paddingHorizontal:10,borderRadius:d.radius.segment,backgroundColor:d.color.surfaceElevated,color:d.color.text,fontSize:d.font.caption},confirmTitle:{color:d.color.text,fontSize:d.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:d.color.text,fontSize:d.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6,paddingBottom:6},consequence:{color:d.color.warning,fontSize:d.font.caption,paddingHorizontal:12},claim:{gap:6,paddingHorizontal:2},claimText:{color:d.color.text,fontSize:d.font.row,lineHeight:22},cite:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"700"},verified:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"600"},citeBox:{padding:10,borderRadius:d.radius.row,backgroundColor:d.color.surface,borderWidth:y.hairlineWidth,borderColor:d.color.border,gap:2},citeLabel:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},citeDetail:{color:d.color.textSecondary,fontSize:d.font.caption,fontFamily:"Menlo"},verifyBtn:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:d.radius.chip,backgroundColor:d.color.accentSoft},verifyText:{color:d.color.accent,fontSize:d.font.micro,fontWeight:"700"},detailsBody:{color:d.color.textSecondary,fontSize:d.font.caption,lineHeight:18,paddingHorizontal:12,paddingBottom:12},tabsWrap:{gap:8},tabBar:{flexDirection:"row",gap:6},tab:{paddingHorizontal:12,paddingVertical:6,borderRadius:d.radius.badge,backgroundColor:d.color.fill},tabOn:{backgroundColor:d.color.accentSoft},tabText:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"600"},tabTextOn:{color:d.color.accent},tlRow:{flexDirection:"row",gap:10,paddingHorizontal:12,paddingVertical:4,alignItems:"flex-start"},tlAt:{width:46,color:d.color.textTertiary,fontSize:d.font.micro,fontFamily:"Menlo",paddingTop:3},tlLine:{width:12,alignItems:"center"},tlDot:{width:8,height:8,borderRadius:4,marginTop:5},tlStem:{width:1,flex:1,minHeight:18,backgroundColor:d.color.separator,marginTop:2},tlSource:{color:d.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6},sparkHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingTop:8},sparkCurrent:{color:d.color.text,fontSize:22,fontWeight:"700"},sparkUnit:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"500"},spark:{flexDirection:"row",alignItems:"flex-end",gap:2,paddingHorizontal:12,paddingTop:6,paddingBottom:6},sparkBar:{flex:1,borderRadius:1},live:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:8,paddingVertical:3,borderRadius:d.radius.badge,backgroundColor:d.color.dangerSoft},liveDot:{width:6,height:6,borderRadius:3,backgroundColor:d.color.danger},liveText:{color:d.color.danger,fontSize:9,fontWeight:"800",letterSpacing:.8},cmpHead:{flexDirection:"row",paddingHorizontal:12,paddingVertical:6,backgroundColor:d.color.fill,gap:8},cmpCol:{flex:1,color:d.color.textTertiary,fontSize:d.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},cmpRow:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,gap:8,alignItems:"flex-start"},cmpDiff:{backgroundColor:d.color.fill},cmpKey:{width:90,color:d.color.textSecondary,fontSize:d.font.caption},cmpVal:{flex:1,color:d.color.text,fontSize:d.font.caption,fontFamily:"Menlo"},cardImage:{width:"100%",height:140,backgroundColor:d.color.fill},cardText:{paddingHorizontal:12,paddingTop:10,paddingBottom:4,gap:4},cardTitle:{color:d.color.text,fontSize:d.font.row,fontWeight:"600"},fact:{flexDirection:"row",justifyContent:"space-between",gap:8},factLabel:{color:d.color.textSecondary,fontSize:d.font.caption},factValue:{color:d.color.text,fontSize:d.font.caption,fontWeight:"500"},carouselTitle:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600",paddingBottom:8},carousel:{gap:8,paddingRight:8},carouselCard:{width:224,borderRadius:d.radius.card,borderWidth:y.hairlineWidth,borderColor:d.color.border,backgroundColor:d.color.surface,overflow:"hidden"},shot:{width:"100%",height:220,backgroundColor:d.color.fill},shotBig:{height:520},progress:{height:4,backgroundColor:d.color.fill,marginHorizontal:12,marginTop:6,marginBottom:8,borderRadius:2,overflow:"hidden"},progressFill:{height:4,backgroundColor:d.color.accent},step:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},stepMark:{width:20,height:20,borderRadius:10,backgroundColor:d.color.fillTertiary,alignItems:"center",justifyContent:"center"},stepDone:{backgroundColor:d.color.accent},stepFailed:{backgroundColor:d.color.danger},stepRunning:{backgroundColor:d.color.info},stepNum:{color:d.color.text,fontSize:d.font.micro,fontWeight:"700"},checkpoint:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:7,borderRadius:d.radius.chip,backgroundColor:d.color.fill},cpFlag:{width:8,height:8,borderRadius:2,backgroundColor:d.color.info},cpText:{color:d.color.textSecondary,fontSize:d.font.caption},cpRestore:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"600"},taskHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingTop:12},banner:{flexDirection:"row",alignItems:"center",gap:8,paddingLeft:12,paddingRight:4,paddingVertical:4,borderRadius:d.radius.row,borderWidth:y.hairlineWidth},bannerText:{flex:1,fontSize:d.font.caption,fontWeight:"600"},fileIcon:{width:40,height:40,borderRadius:8,backgroundColor:d.color.fill,alignItems:"center",justifyContent:"center"},fileExt:{color:d.color.textSecondary,fontSize:10,fontWeight:"800"}});import{jsx as D}from"react/jsx-runtime";var Ho=class extends Za{constructor(){super(...arguments);this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?D(i,{style:el.fallback,testID:"buoy-block-render-failed",children:"This card couldn't be drawn \u2014 the data behind it is still in the conversation."}):this.props.children}},el=y.create({fallback:{color:Un.color.textTertiary,fontSize:Un.font.micro,fontStyle:"italic",paddingVertical:6}}),tl=e=>D(Ht,{block:e});function Ht({block:e}){return D(Ho,{children:D(ol,{block:e})})}function ol({block:e}){switch(e.kind){case"choice":return D(Vr,{block:e});case"confirm":return D(Lr,{block:e});case"input":return D(Hr,{block:e});case"table":return D(Fr,{block:e});case"keyValue":return D(_r,{block:e});case"list":return D(Ur,{block:e});case"imageGrid":return D(Zr,{block:e});case"diff":return D(Kr,{block:e});case"chart":return D(jr,{block:e});case"steps":return D(Qr,{block:e});case"code":return D(Gr,{block:e});case"actions":return D(he,{actions:e.actions,blockId:e.id});case"notice":return D(Jr,{block:e});case"finding":return D(Yr,{block:e});case"requestList":return D(sn,{block:e});case"requestCard":return D(an,{block:e});case"ruleCard":return D(ln,{block:e});case"screenElements":return D(cn,{block:e});case"routeChips":return D(dn,{block:e});case"logList":return D(un,{block:e});case"crash":return D(pn,{block:e});case"peek":return D(gn,{block:e});case"suggestions":return D(xn,{block:e});case"multiSelect":return D(wn,{block:e});case"select":return D(Tn,{block:e});case"slider":return D(Sn,{block:e});case"dateTime":return D(Cn,{block:e});case"form":return D(An,{block:e});case"proposal":return D(In,{block:e});case"claim":return D(Rn,{block:e});case"details":return D(Pn,{block:e});case"tabs":return D(Dn,{block:e,renderNested:tl});case"timeline":return D(zn,{block:e});case"sparkline":return D(Vn,{block:e});case"compare":return D(Ln,{block:e});case"card":return D($n,{block:e});case"cardCarousel":return D(On,{block:e});case"screenshot":return D(En,{block:e});case"plan":return D(Wn,{block:e});case"checkpoint":return D(Mn,{block:e});case"task":return D(Nn,{block:e});case"banner":return D(qn,{block:e});case"file":return D(Fn,{block:e});case"upload":return D(_n,{block:e});default:return null}}import{useEffect as rl,useState as At}from"react";import{ChevronDown as nl,ChevronRight as il,Copy as sl,night as C,RefreshCw as al}from"@buoy-gg/shared-ui/web";import{jsx as q,jsxs as Ve}from"react/jsx-runtime";function qt({label:e,onPress:t,children:o}){return q(b,{onPress:t,accessibilityRole:"button",accessibilityLabel:e,style:({pressed:r})=>[E.iconBtn,r&&E.pressed],children:o})}function Kn({id:e="chrome-actions"}){let t=K(),[o,r]=At(null),n=s=>void t.runAction({label:s,send:`__chrome__:${s}`},e);return Ve(l,{style:E.actions,testID:"chrome-message-actions",children:[q(qt,{label:"Copy",onPress:()=>n("copy"),children:q(sl,{size:13,color:C.color.textSecondary})}),q(qt,{label:"Retry",onPress:()=>n("retry"),children:q(al,{size:13,color:C.color.textSecondary})}),q(qt,{label:"Good answer",onPress:()=>{r("up"),n("thumbs up")},children:q(i,{style:[E.glyph,o==="up"&&E.glyphOn],children:"\u{1F44D}"})}),q(qt,{label:"Bad answer",onPress:()=>{r("down"),n("thumbs down")},children:q(i,{style:[E.glyph,o==="down"&&E.glyphOn],children:"\u{1F44E}"})}),q(qt,{label:"Export",onPress:()=>n("export transcript"),children:q(i,{style:E.textBtn,children:"Export"})})]})}function jn({text:e,live:t}){let[o,r]=At(!1);return Ve(l,{style:E.reasoning,testID:"chrome-reasoning",children:[Ve(b,{onPress:()=>r(n=>!n),style:E.reasoningHead,accessibilityRole:"button",accessibilityState:{expanded:o},children:[t?q(yt,{size:"small",color:C.color.textTertiary}):null,q(i,{style:E.reasoningTitle,children:t?"Working it out\u2026":"How I got here"}),o?q(nl,{size:12,color:C.color.textTertiary}):q(il,{size:12,color:C.color.textTertiary})]}),o?q(i,{style:E.reasoningBody,children:e}):null]})}function Qn({label:e}){let[t,o]=At(0);return rl(()=>{let r=setInterval(()=>o(n=>n+250),250);return()=>clearInterval(r)},[]),Ve(l,{style:E.elapsed,testID:"chrome-elapsed",children:[q(yt,{size:"small",color:C.color.textSecondary}),q(i,{style:E.elapsedLabel,children:e}),Ve(i,{style:E.elapsedMs,children:[(t/1e3).toFixed(1),"s"]})]})}function Gn(){let[e,t]=At(""),[o,r]=At(null);return Ve(l,{style:E.composerWrap,testID:"chrome-queue",children:[o?Ve(l,{style:E.queuedRow,children:[Ve(i,{style:E.queuedText,numberOfLines:1,children:['Queued: "',o,'"']}),q(b,{onPress:()=>r(null),children:q(i,{style:E.queuedCancel,children:"Cancel"})})]}):null,Ve(l,{style:E.composer,children:[q(ze,{style:E.composerInput,value:e,onChangeText:t,placeholder:"Agent is busy \u2014 type and it sends next",placeholderTextColor:C.color.placeholder}),q(b,{disabled:!e.trim(),onPress:()=>{r(e.trim()),t("")},style:[E.queueBtn,!e.trim()&&{opacity:.5}],children:q(i,{style:E.queueBtnText,children:"Queue"})})]})]})}function Jn({at:e}){return Ve(l,{style:E.divider,testID:"chrome-divider",children:[q(l,{style:E.dividerLine}),Ve(i,{style:E.dividerText,children:["App reloaded \xB7 ",e]}),q(l,{style:E.dividerLine})]})}function Yn({at:e}){return q(i,{style:E.timestamp,children:e})}function Xn({text:e}){let t=K(),[o,r]=At(!1),[n,s]=At(e);return q(l,{style:E.userWrap,testID:"chrome-edit-bubble",children:o?Ve(l,{style:E.editBox,children:[q(ze,{style:E.editInput,value:n,onChangeText:s,multiline:!0}),Ve(l,{style:E.editActions,children:[q(b,{onPress:()=>{r(!1),t.runAction({label:"re-run edited",send:`__chrome__:re-run "${n}"`},"chrome-edit")},style:E.editPrimary,children:q(i,{style:E.editPrimaryText,children:"Re-run from here"})}),q(b,{onPress:()=>{r(!1),t.runAction({label:"branch",send:`__chrome__:branch "${n}"`},"chrome-edit")},style:E.editPlate,children:q(i,{style:E.editPlateText,children:"Branch"})}),q(b,{onPress:()=>r(!1),style:E.editPlate,children:q(i,{style:E.editPlateText,children:"Cancel"})})]})]}):Ve(b,{onLongPress:()=>r(!0),onPress:()=>r(!0),style:E.bubble,accessibilityRole:"button",accessibilityLabel:"Edit message",children:[q(i,{style:E.bubbleText,children:n}),q(i,{style:E.bubbleHint,children:"tap to edit \xB7 2 branches"})]})})}var E=y.create({actions:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:2},iconBtn:{paddingHorizontal:8,paddingVertical:6,borderRadius:C.radius.badge},pressed:{backgroundColor:C.color.fill},glyph:{fontSize:13,opacity:.6},glyphOn:{opacity:1},textBtn:{color:C.color.textSecondary,fontSize:C.font.micro,fontWeight:"600"},reasoning:{borderRadius:C.radius.row,backgroundColor:C.color.fill,overflow:"hidden"},reasoningHead:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:8},reasoningTitle:{flex:1,color:C.color.textSecondary,fontSize:C.font.caption,fontStyle:"italic"},reasoningBody:{color:C.color.textSecondary,fontSize:C.font.caption,lineHeight:18,paddingHorizontal:12,paddingBottom:10},elapsed:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:10,borderRadius:C.radius.card,borderWidth:y.hairlineWidth,borderColor:C.color.border,backgroundColor:C.color.surface},elapsedLabel:{flex:1,color:C.color.text,fontSize:C.font.body},elapsedMs:{color:C.color.textTertiary,fontSize:C.font.caption,fontFamily:"Menlo"},composerWrap:{gap:6},queuedRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:6,borderRadius:C.radius.row,backgroundColor:C.color.infoSoft},queuedText:{flex:1,color:C.color.text,fontSize:C.font.caption},queuedCancel:{color:C.color.info,fontSize:C.font.caption,fontWeight:"600"},composer:{flexDirection:"row",alignItems:"center",gap:8},composerInput:{flex:1,height:40,paddingHorizontal:16,borderRadius:20,borderWidth:y.hairlineWidth,borderColor:C.color.border,backgroundColor:C.color.surfaceElevated,color:C.color.text,fontSize:C.font.body},queueBtn:{paddingHorizontal:14,height:40,borderRadius:20,backgroundColor:C.color.button,alignItems:"center",justifyContent:"center"},queueBtnText:{color:C.color.text,fontSize:C.font.caption,fontWeight:"600"},divider:{flexDirection:"row",alignItems:"center",gap:10,paddingVertical:4},dividerLine:{flex:1,height:y.hairlineWidth,backgroundColor:C.color.border},dividerText:{color:C.color.textTertiary,fontSize:C.font.micro},timestamp:{alignSelf:"center",color:C.color.textTertiary,fontSize:C.font.micro},userWrap:{alignItems:"flex-end"},bubble:{maxWidth:"84%",paddingHorizontal:14,paddingVertical:9,borderRadius:18,borderBottomRightRadius:6,backgroundColor:C.color.accentFill,borderWidth:y.hairlineWidth,borderColor:C.color.accentBorder,gap:4},bubbleText:{color:C.color.text,fontSize:C.font.row,lineHeight:21},bubbleHint:{color:C.color.textTertiary,fontSize:10,textAlign:"right"},editBox:{width:"100%",gap:8},editInput:{minHeight:60,padding:12,borderRadius:C.radius.row,backgroundColor:C.color.surfaceElevated,color:C.color.text,fontSize:C.font.row,borderWidth:y.hairlineWidth,borderColor:C.color.accentBorderStrong},editActions:{flexDirection:"row",gap:8,justifyContent:"flex-end",flexWrap:"wrap"},editPrimary:{paddingHorizontal:12,paddingVertical:8,borderRadius:C.radius.row,backgroundColor:C.color.accent},editPrimaryText:{color:C.color.onAccent,fontSize:C.font.caption,fontWeight:"600"},editPlate:{paddingHorizontal:12,paddingVertical:8,borderRadius:C.radius.row,backgroundColor:C.color.button},editPlateText:{color:C.color.text,fontSize:C.font.caption,fontWeight:"600"}});import{useState as Zn}from"react";import{AlertTriangle as ll,ChevronDown as cl,night as N}from"@buoy-gg/shared-ui/web";import{jsx as xe,jsxs as Ft}from"react/jsx-runtime";function $o({pending:e,onAnswer:t}){let[o,r]=Zn("");return Ft(l,{style:Y.card,testID:"buoy-ask-buoy-approval",children:[Ft(l,{style:Y.titleRow,children:[xe(ll,{size:14,color:N.color.warning}),xe(i,{style:Y.title,children:"Allow this change?"})]}),e.restored?xe(i,{style:Y.restored,testID:"buoy-ask-buoy-approval-restored",children:"Asked before the app restarted \u2014 check it still applies."}):null,xe(i,{style:Y.label,children:e.label}),xe(i,{style:Y.reason,children:e.reason}),e.description?xe(dl,{text:e.description}):null,xe(ze,{testID:"buoy-ask-buoy-approval-note",value:o,onChangeText:r,placeholder:"Add a note for the agent (optional)",placeholderTextColor:N.color.textTertiary,style:Y.note,returnKeyType:"done",blurOnSubmit:!0}),Ft(l,{style:Y.actions,children:[xe(b,{testID:"buoy-ask-buoy-approve",accessibilityRole:"button",onPress:()=>t({approved:!0,reason:o}),style:({pressed:n})=>[Y.button,Y.approve,n&&Y.pressed],children:xe(i,{style:Y.approveText,children:"Allow"})}),e.restored?null:xe(b,{testID:"buoy-ask-buoy-approve-trust",accessibilityRole:"button",onPress:()=>t({approved:!0,reason:o,trust:!0}),style:({pressed:n})=>[Y.button,Y.trust,n&&Y.pressed],children:xe(i,{style:Y.trustText,children:"Allow for this chat"})}),xe(b,{testID:"buoy-ask-buoy-reject",accessibilityRole:"button",onPress:()=>t({approved:!1,reason:o}),style:({pressed:n})=>[Y.button,Y.reject,n&&Y.pressed],children:xe(i,{style:Y.rejectText,children:"Not now"})})]})]})}function dl({text:e}){let[t,o]=Zn(!1);return Ft(l,{children:[Ft(b,{testID:"buoy-ask-buoy-approval-details",accessibilityRole:"button",accessibilityState:{expanded:t},onPress:()=>o(r=>!r),style:({pressed:r})=>[Y.disclosure,r&&Y.pressed],hitSlop:6,children:[xe(l,{style:t?Y.chevronOpen:Y.chevronClosed,children:xe(cl,{size:12,color:N.color.textTertiary})}),xe(i,{style:Y.disclosureText,children:t?"Hide details":"Details"})]}),t?xe(ke,{style:Y.detail,contentContainerStyle:Y.detailContent,nestedScrollEnabled:!0,children:xe(i,{style:Y.description,children:e})}):null]})}var Y=y.create({card:{marginHorizontal:N.gutter,marginBottom:10,padding:N.cardPad,borderRadius:N.radius.card,borderWidth:y.hairlineWidth,borderColor:N.color.accentBorderStrong,backgroundColor:N.color.surface,gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6},title:{color:N.color.text,fontSize:N.font.caption,fontWeight:"600"},label:{color:N.color.text,fontSize:N.font.row,fontWeight:"600",lineHeight:20},description:{color:N.color.textSecondary,fontSize:N.font.caption,lineHeight:18},reason:{color:N.color.warning,fontSize:N.font.caption,lineHeight:18},restored:{color:N.color.info,backgroundColor:N.color.infoSoft,fontSize:N.font.micro,lineHeight:16,paddingHorizontal:8,paddingVertical:5,borderRadius:8},disclosure:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:4},disclosureText:{color:N.color.textTertiary,fontSize:N.font.micro,fontWeight:"600"},chevronOpen:{transform:[{rotate:"0deg"}]},chevronClosed:{transform:[{rotate:"-90deg"}]},detail:{maxHeight:150,marginTop:2},detailContent:{paddingBottom:2},note:{color:N.color.text,fontSize:N.font.caption,paddingHorizontal:10,paddingVertical:7,borderRadius:N.radius.row,borderWidth:y.hairlineWidth,borderColor:N.color.border,backgroundColor:N.color.button,marginTop:2},actions:{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:6},button:{paddingHorizontal:16,paddingVertical:9,borderRadius:N.radius.row},approve:{backgroundColor:N.color.accent},approveText:{color:N.color.onAccent,fontWeight:"600",fontSize:N.font.caption},trust:{backgroundColor:N.color.button,borderWidth:y.hairlineWidth,borderColor:N.color.accentBorderStrong},trustText:{color:N.color.accent,fontWeight:"600",fontSize:N.font.caption},reject:{backgroundColor:N.color.button},rejectText:{color:N.color.text,fontSize:N.font.caption},pressed:{opacity:.7}});import{useSyncExternalStore as ul}from"react";import{ChevronDown as pl,ChevronRight as gl,night as ie}from"@buoy-gg/shared-ui/web";import{isReversible as ei}from"@buoy-gg/agent-core/web";import{jsx as ct,jsxs as mt}from"react/jsx-runtime";var ti=[];function Oo(e){return ul(t=>e?.subscribe(t)??(()=>{}),()=>e?.list()??ti,()=>e?.list()??ti)}function Eo({ledger:e,onUndoAll:t,expanded:o,onToggle:r}){let s=Oo(e).filter($=>!$.undoneAt),a=s.filter($=>$.effect.kind!=="transient");if(a.length===0)return null;let g=a.filter($=>ei($.effect)),u=a.length-g.length,f=s.length-a.length,m=o?pl:gl,O=[g.length>0?`${g.length} undoable`:null,u>0?`${u} permanent`:null].filter(Boolean).join(" \xB7 ");return mt(l,{style:fe.wrap,children:[mt(b,{testID:"buoy-ask-buoy-changes-bar",accessibilityRole:"button",accessibilityState:{expanded:o},onPress:r,style:fe.bar,children:[ct(l,{style:fe.dot}),ct(i,{style:fe.summary,numberOfLines:1,children:"Changed this app"}),ct(i,{style:fe.counts,numberOfLines:1,children:O}),ct(m,{size:12,color:ie.color.textSecondary})]}),o&&mt(l,{style:fe.panel,children:[mt(ke,{style:fe.panelScroll,testID:"buoy-ask-buoy-changes-scroll",keyboardShouldPersistTaps:"handled",children:[a.map($=>{let L=!ei($.effect);return mt(l,{style:fe.row,children:[ct(i,{style:fe.rowLabel,children:$.effect.label}),ct(i,{style:[fe.rowTag,L&&fe.rowTagMuted],children:L?"Permanent":"Undoable"})]},$.id)}),f>0&&ct(l,{style:fe.row,children:mt(i,{style:[fe.rowLabel,fe.rowLabelMuted],children:["Also did ",f," one-shot action",f===1?"":"s"," (navigation, taps) \u2014 nothing to undo."]})})]}),mt(l,{style:fe.footer,children:[g.length>0&&ct(b,{testID:"buoy-ask-buoy-undo-all",accessibilityRole:"button",onPress:t,style:({pressed:$})=>[fe.undo,$&&fe.pressed],children:mt(i,{style:fe.undoText,children:["Undo ",g.length," change",g.length===1?"":"s"]})}),u>0&&ct(i,{style:fe.footnote,children:"Permanent changes can't be undone from here."})]})]})]})}var fe=y.create({wrap:{borderBottomWidth:y.hairlineWidth,borderBottomColor:ie.color.border,backgroundColor:ie.color.warningSoft},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:ie.gutter,paddingVertical:10},dot:{width:7,height:7,borderRadius:4,backgroundColor:ie.color.warning},summary:{color:ie.color.text,fontSize:ie.font.caption,fontWeight:"600"},counts:{flex:1,color:ie.color.textSecondary,fontSize:ie.font.caption},panel:{paddingHorizontal:ie.gutter,paddingBottom:12,gap:10},panelScroll:{maxHeight:180},row:{flexDirection:"row",alignItems:"flex-start",gap:10,paddingVertical:8,borderTopWidth:y.hairlineWidth,borderTopColor:ie.color.separator},rowLabel:{flex:1,color:ie.color.text,fontSize:ie.font.caption,lineHeight:18},rowTag:{color:ie.color.accent,fontSize:ie.font.micro,fontWeight:"600",letterSpacing:.6,textTransform:"uppercase",paddingTop:2},rowTagMuted:{color:ie.color.textTertiary},rowLabelMuted:{color:ie.color.textTertiary},footer:{flexDirection:"row",alignItems:"center",gap:12,flexWrap:"wrap"},undo:{paddingHorizontal:14,paddingVertical:8,borderRadius:ie.radius.row,backgroundColor:ie.color.button},undoText:{color:ie.color.accent,fontSize:ie.font.caption,fontWeight:"600"},footnote:{flex:1,color:ie.color.textTertiary,fontSize:ie.font.micro},pressed:{opacity:.7}});function oi(e){let t={};for(let o of e){let r=o.effect;if(r.kind==="network-override")t[r.ruleId]=o.undoneAt?{deleted:!0}:{enabled:!0};else if(r.kind==="inverse-call"&&r.toolId==="network"&&r.action==="setOverrideRuleEnabled"&&typeof r.params.id=="string"){let n=r.params.enabled===!0;if(t[r.params.id]?.deleted)continue;t[r.params.id]={enabled:o.undoneAt?n:!n}}}return t}import{useCallback as fl,useEffect as ri,useRef as yl,useState as bl}from"react";import{night as Be}from"@buoy-gg/shared-ui/web";import{jsx as xt,jsxs as xl}from"react/jsx-runtime";var ni=40,hl=120,ii=ht.OS==="ios"?10:6,ml=16;function Wo({onSend:e,onStop:t,busy:o,draft:r,onDraftTaken:n,disabled:s,placeholder:a,focusKey:g,canFocus:u=!0}){let[f,m]=bl(""),O=yl(null);ri(()=>{!g||!u||s||O.current?.focus()},[g,u,s]),ri(()=>{r&&(m(re=>re?`${re} ${r}`:r),n?.())},[r,n]);let $=fl(()=>{let re=f.trim();re&&(m(""),e(re))},[f,e]),L=f.trim().length>0&&!o&&!s,oe=f.trim().length>0&&o&&!s;return xl(l,{style:we.wrap,children:[xt(l,{style:[we.field,s&&we.fieldDisabled],children:xt(ze,{ref:O,testID:"buoy-ask-buoy-input",style:[we.input,f.length===0&&we.inputEmpty],value:f,onChangeText:m,placeholder:a??(s?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:Be.color.placeholder,multiline:!0,editable:!s,keyboardType:"ascii-capable",autoCorrect:!0,autoCapitalize:"sentences",blurOnSubmit:!1,onSubmitEditing:$,returnKeyType:"send",maxLength:4e3})}),oe&&xt(b,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:$,style:({pressed:re})=>[we.button,we.queue,re&&we.pressed],children:xt(i,{style:[we.sendGlyph,{color:Be.color.accent}],children:"\u2191"})}),o?xt(b,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:t,style:({pressed:re})=>[we.button,we.stop,re&&we.pressed],children:xt(l,{style:we.stopGlyph})}):xt(b,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!L,onPress:$,style:({pressed:re})=>[we.button,L?we.sendOn:we.sendOff,re&&L&&we.pressed],children:xt(i,{style:[we.sendGlyph,{color:L?Be.color.onAccent:Be.color.textTertiary}],children:"\u2191"})})]})}var we=y.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:Be.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:y.hairlineWidth,borderTopColor:Be.color.border,backgroundColor:Be.color.bg},field:{flex:1,minHeight:ni,justifyContent:"center",borderRadius:20,borderWidth:y.hairlineWidth,borderColor:Be.color.border,backgroundColor:Be.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:hl,paddingHorizontal:ml,paddingTop:ii,paddingBottom:ii,color:Be.color.text,fontSize:Be.font.row},inputEmpty:{height:ni},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:Be.color.accent},sendOff:{backgroundColor:Be.color.fill},stop:{backgroundColor:Be.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:y.hairlineWidth,borderColor:Be.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:Be.color.text},pressed:{opacity:.7}});import{useEffect as wl,useRef as si}from"react";import{jsx as kl}from"react/jsx-runtime";function ai({children:e}){let t=si(null),o=si(new ee.Value(0)).current;return wl(()=>{if(ht.OS!=="ios")return;let r=(g,u)=>{ee.timing(o,{toValue:g,duration:u.duration||250,easing:bt.bezier(.17,.59,.4,.77),useNativeDriver:!1}).start()},n=g=>{let u=t.current;u&&u.measureInWindow((f,m,O,$)=>{let L=m+$-g.endCoordinates.screenY;r(Math.max(0,L),g)})},s=g=>r(0,g),a=[Zt.addListener("keyboardWillChangeFrame",n),Zt.addListener("keyboardWillHide",s)];return()=>a.forEach(g=>g.remove())},[o]),kl(ee.View,{ref:t,style:[Tl.flex,{paddingBottom:o}],children:e})}var Tl=y.create({flex:{flex:1}});import{useEffect as di,useState as ui}from"react";import{Check as Bl,Copy as Al,FileText as Il,ModalHeader as lo,night as et,Otto as Rl,Plus as Pl,SettingsSolid as Dl}from"@buoy-gg/shared-ui/web";import{toolTitle as Sl}from"@buoy-gg/agent-core/web";var Cl=e=>e.effect==="read"&&e.status==="ok";function li(e){let t=[],o=[],r=()=>{if(o.length!==0){if(o.length===1)t.push({kind:"call",call:o[0]});else{let n=[...new Set(o.map(s=>Sl(s.toolId)))];t.push({kind:"reads",id:o.map(s=>s.id).join("+"),calls:o,label:`Looked at ${vl(n)}`,count:o.length})}o=[]}};for(let n of e){if(Cl(n)){o.push(n);continue}r(),t.push({kind:"call",call:n})}return r(),t}function vl(e){return e.length<=1?e[0]??"":e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`}function ci(e){let t=[];e.startedAt!==void 0&&e.endedAt!==void 0&&e.endedAt>=e.startedAt&&t.push(Mo(e.endedAt-e.startedAt));let o=e.toolCalls.length;if(o>0){t.push(`${o} action${o===1?"":"s"}`);let r=u=>e.toolCalls.filter(f=>f.status===u).length,n=r("failed"),s=r("refused"),a=r("declined"),g=r("stopped");n&&t.push(`${n} failed`),s&&t.push(`${s} refused`),a&&t.push(`${a} declined`),g&&t.push(`${g} not run`)}return t.length?t.join(" \xB7 "):null}function Mo(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let o=Math.floor(t/60),r=t%60;return o<60?`${o}m ${String(r).padStart(2,"0")}s`:`${Math.floor(o/60)}h ${String(o%60).padStart(2,"0")}m`}import{jsx as Me,jsxs as pi}from"react/jsx-runtime";var zl=200,Vl=()=>"";function No({configured:e,busy:t,failed:o=!1,activeLabel:r,awaitingApproval:n=!1,startedAt:s=null,stopping:a=!1,readOnly:g=!1,toolCount:u,hasMessages:f,onBack:m,onReset:O,getTranscript:$,onOpenSettings:L,onTicket:oe}){let{copied:re,copy:Te}=Lt($??Vl),[rt,$e]=ui(!1);di(()=>{t?r&&$e(!0):$e(!1)},[t,r]);let nt=t&&!n&&s!==null,[it,kt]=ui(()=>Date.now());di(()=>{if(!nt)return;kt(Date.now());let ft=setInterval(()=>kt(Date.now()),1e3);return()=>clearInterval(ft)},[nt]);let St=nt&&s!==null?Mo(it-s):null,Dt=e?o?"error":t?r||rt?"robot":"thinking":"idle":"confused",Je=a?"Stopping":r??"Thinking",gt=e?n?"Waiting for you":t?St?`${Je} \xB7 ${St}`:`${Je}\u2026`:g?`Read only${u>0?` \xB7 ${u} tool${u===1?"":"s"}`:""}`:u>0?`Ready \xB7 ${u} tool${u===1?"":"s"} available`:"Ready":"Not set up in this app";return pi(lo,{children:[m?Me(lo.Navigation,{onBack:m}):null,Me(l,{style:wt.otto,testID:"buoy-ask-buoy-otto",children:Me(Rl,{state:Dt,pixelSize:2,tickMs:zl,water:!1})}),Me(lo.Content,{title:"Ask Buoy",subtitle:gt,testID:"buoy-ask-buoy-title"}),pi(lo.Actions,{children:[oe?Me(Vt,{testID:"buoy-ask-buoy-ticket",accessibilityRole:"button",accessibilityLabel:"Summarize for a ticket",disabled:!f||t,onPress:oe,style:[wt.actionBtn,(!f||t)&&wt.actionBtnDisabled],children:Me(Il,{size:14,color:f&&!t?et.color.textSecondary:et.color.textTertiary})}):null,$?Me(Vt,{testID:"buoy-ask-buoy-copy-chat",accessibilityRole:"button",accessibilityLabel:re?"Conversation copied":"Copy conversation",disabled:!f,onPress:Te,style:[wt.actionBtn,!f&&wt.actionBtnDisabled],children:re?Me(Bl,{size:14,color:et.color.accent}):Me(Al,{size:14,color:f?et.color.textSecondary:et.color.textTertiary})}):null,L?Me(Vt,{testID:"buoy-ask-buoy-settings",accessibilityRole:"button",accessibilityLabel:"Settings",onPress:L,style:wt.actionBtn,children:Me(Dl,{size:14,color:et.color.textSecondary})}):null,Me(Vt,{testID:"buoy-ask-buoy-reset",accessibilityRole:"button",accessibilityLabel:"New conversation",disabled:!f,onPress:O,style:[wt.actionBtn,!f&&wt.actionBtnDisabled],children:Me(Pl,{size:14,color:f?et.color.textSecondary:et.color.textTertiary})})]})]})}var wt=y.create({otto:{marginRight:8,justifyContent:"center"},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:et.color.buttonSurface,borderWidth:1,borderColor:et.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{AlertTriangle as lc,night as pe,ToggleRow as tr}from"@buoy-gg/shared-ui/web";import{useSyncExternalStore as $l}from"react";import{definePersistedSetting as Ll,devToolsStorageKeys as Hl}from"@buoy-gg/shared-ui/web";var Uo={showThinking:!1,bypassApprovals:!1,readOnly:!1},qo=Ll(`${Hl.base}_ask_buoy_settings`,Uo,{sanitize:e=>({showThinking:e.showThinking===!0,bypassApprovals:e.bypassApprovals===!0,readOnly:e.readOnly===!0})}),It=Uo,Fo=!1,_o=new Set;function gi(){for(let e of _o)try{e()}catch{}}var dt={get:()=>It,subscribe(e){return _o.add(e),Fo||(Fo=!0,qo.load().then(t=>{It=t,gi()})),()=>_o.delete(e)},set(e,t){It[e]!==t&&(It={...It,[e]:t},gi(),qo.save(It))},reset(){It=Uo,Fo=!1,qo.clear()}};function tt(){return $l(dt.subscribe,dt.get,dt.get)}import{idFactory as bi}from"@buoy-gg/agent-core/web";var co=bi("m"),fi=400;function Ol(e){if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e);return t.length>fi?`${t.slice(0,fi)}\u2026`:t}catch{return}}var El=bi("q"),W={messages:[],busy:!1,stopping:!1,pending:null,trusted:[],notice:null,configured:!1,answers:{},awaitingBlockId:null,actionState:{},queued:[],draft:null,usage:{input:0,output:0,requests:0},meta:{}},jo=new Set,yi=null,Ko=null;function Z(e){W={...W,...e};for(let t of jo)try{t()}catch{}}var h={getState:()=>W,subscribe(e){return jo.add(e),()=>jo.delete(e)},setLedger(e){yi=e},getLedger(){return yi},holdSession(e,t){Ko={session:e,signature:t}},getHeldSession(){return Ko},setNotice(e){Z({notice:e})},setConfigured(e){e!==W.configured&&Z({configured:e})},setMeta(e){Object.keys(e).every(o=>W.meta[o]===e[o])||Z({meta:{...W.meta,...e}})},addUser(e){Z({messages:[...W.messages,{id:co(),role:"user",text:e,toolCalls:[],blocks:[]}],busy:!0})},beginTurn(){Z({busy:!0})},enqueue(e){let t={id:El(),text:e};return Z({queued:[...W.queued,t]}),t},removeQueued(e){W.queued.some(t=>t.id===e)&&Z({queued:W.queued.filter(t=>t.id!==e)})},shiftQueued(){let[e,...t]=W.queued;if(e)return Z({queued:t}),e},takeQueuedToDraft(e){let t=W.queued.find(o=>o.id===e);t&&Z({queued:W.queued.filter(o=>o.id!==e),draft:t.text})},requestStop(){!W.busy||W.stopping||Z({stopping:!0})},clearDraft(){W.draft!==null&&Z({draft:null})},removeMessage(e){Z({messages:W.messages.filter(t=>t.id!==e)})},recordAnswer(e){Z({answers:{...W.answers,[e.blockId]:e},awaitingBlockId:W.awaitingBlockId===e.blockId?null:W.awaitingBlockId})},setActionState(e,t){let o={...W.actionState};t===null?delete o[e]:o[e]=t,Z({actionState:o})},startAssistant(){let e=co();return Z({messages:[...W.messages,{id:e,role:"assistant",text:"",toolCalls:[],blocks:[],streaming:!0,startedAt:Date.now()}]}),e},applyEvent(e,t){if(t.type==="history-trimmed"){let r=W.messages.findIndex(a=>a.id===e),n={id:co(),role:"assistant",system:!0,text:`Older messages were trimmed from the agent's memory (${t.droppedRounds} exchange${t.droppedRounds===1?"":"s"}).`+(t.droppedPinned?` ${t.droppedPinned===1?"One of them made a change that is":`${t.droppedPinned} of them made changes that are`} still applied \u2014 the changes bar still lists ${t.droppedPinned===1?"it":"them"}, but the agent no longer remembers making ${t.droppedPinned===1?"it":"them"}.`:" It may not recall setup from earlier in this chat \u2014 the changes bar still lists what is applied."),toolCalls:[],blocks:[],endedAt:Date.now()},s=[...W.messages];s.splice(r<0?s.length:r,0,n),Z({messages:s});return}let o=W.messages.map(r=>{if(r.id!==e)return r;switch(t.type){case"retrying":{let n=Math.max(1,Math.round(t.inMs/1e3));return{...r,waiting:t.reason==="throttled"?`Endpoint busy \u2014 retrying in ${n}s (${t.attempt} of ${t.maxAttempts})`:"Request too large \u2014 trimming older messages and retrying"}}case"text":return{...r,waiting:void 0,text:(r.breakBeforeNextText||t.breakBefore)&&r.text?`${r.text.trimEnd()}
|
|
7
|
+
`)}case"notice":return e.text;case"claim":return e.text;case"diff":case"chart":case"imageGrid":case"requestList":case"requestCard":case"logList":case"crash":case"screenElements":return`[${e.kind} card${"title"in e&&typeof e.title=="string"?`: ${e.title}`:""}]`;default:return null}}function Hl(e){return e.map(pr).filter(t=>!!t)}import{Fragment as Ll,jsx as I,jsxs as de}from"react/jsx-runtime";function yo(e){if(e===void 0)return"\u2014";if(e===null)return"null";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return String(e);try{let t=JSON.stringify(e);return t.length>120?`${t.slice(0,117)}\u2026`:t}catch{return String(e)}}function Wl({block:e}){let t=et(e.rows,Pt.tableRows),{visible:o}=t,r=e.columns.slice(0,4);return de(O,{title:e.title,source:e.source,testID:`buoy-block-table-${e.id}`,children:[I(s,{style:$.tableHead,children:r.map((n,i)=>I(l,{style:[$.th,i===0&&$.firstCol],numberOfLines:1,children:n},n))}),o.map((n,i)=>I(s,{style:[$.tr,i>0&&D.rowDivider],children:r.map((a,h)=>{let u=n[h],g=typeof u=="string"?u:u?.text??"",y=typeof u=="string"?void 0:u?.tone;return I(l,{style:[$.td,h===0&&$.firstCol,h===0&&$.tdFirst,y&&{color:bt(y)}],numberOfLines:2,children:zt(g,$.td)},h)})},i)),I(tt,{paged:t})]})}function Ol({block:e}){let t=et(e.pairs,Pt.keyValuePairs),{visible:o}=t,[r,n]=sr(null);return de(O,{title:e.title,source:e.source,testID:`buoy-block-keyvalue-${e.id}`,children:[o.map((i,a)=>{let h=typeof i.value=="object"&&i.value!==null,u=r===i.key;return de(f,{onPress:h?()=>n(u?null:i.key):void 0,style:[$.kvRow,a>0&&D.rowDivider],children:[I(l,{style:$.kvKey,numberOfLines:1,children:i.key}),I(l,{style:[$.kvValue,u&&D.mono],numberOfLines:u?void 0:2,selectable:true,children:u?JSON.stringify(i.value,null,2):yo(i.value)})]},i.key)}),I(tt,{paged:t})]})}function Pl(e){let t=!!e.image;return{canExpand:t,rowRunsAction:!!e.action&&!t,actionIsOwnControl:!!e.action&&t}}function Vl({block:e}){let t=Z(),o=et(e.items,Pt.listItems),{visible:r}=o,[n,i]=sr(null);return de(O,{title:e.title,source:e.source,testID:`buoy-block-list-${e.id}`,children:[r.map((a,h)=>{let u=`${a.id??a.title}-${h}`,g=n===u,{canExpand:y,rowRunsAction:C,actionIsOwnControl:j}=Pl(a),q=y||C?f:s,X=y?{onPress:()=>i(g?null:u),accessibilityRole:"button",accessibilityState:{expanded:g},accessibilityLabel:`${a.title}, ${g?"hide":"show"} picture`,testID:`buoy-block-list-row-${u}`}:C?{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button"}:{};return de(s,{style:h>0?D.rowDivider:void 0,children:[g&&a.image?I(f,{onPress:()=>i(null),accessibilityRole:"button",accessibilityLabel:`Hide ${a.title}`,testID:`buoy-block-list-hero-${u}`,style:$.listHero,children:I(gt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.listHeroImage,resizeMode:"contain",accessibilityLabel:a.title})}):null,de(q,{...X,style:D.row,children:[a.image&&!g?I(gt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.thumb,resizeMode:"contain",accessibilityLabel:a.title}):a.icon?I(rr,{name:a.icon}):null,de(s,{style:$.flex,children:[I(l,{style:[D.rowTitle,a.tone&&{color:bt(a.tone)}],numberOfLines:g?void 0:2,children:zt(a.title,D.rowTitle)}),a.subtitle?I(l,{style:D.rowSub,numberOfLines:g?void 0:2,children:zt(a.subtitle,D.rowSub)}):null]}),a.trailing?I(l,{style:[D.rowTrailing,a.tone&&{color:bt(a.tone)}],numberOfLines:1,children:a.trailing}):null,a.action?j?I(f,{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button",accessibilityLabel:a.action.label,hitSlop:8,children:I(l,{style:$.rowAction,children:a.action.label})}):I(l,{style:$.rowAction,children:a.action.label}):null]})]},u)}),I(tt,{paged:o})]})}function hr(e){return e!==null&&typeof e=="object"}function El(e){let t=e.map(n=>n.path),o=t.slice(0,3).join(", "),r=t.length-3;return`${t.length===1?"1 field":`${t.length} fields`} \xB7 ${o}${r>0?`, +${r}`:""}`}function Nl({block:e}){let t=et(e.changes,Pt.keyValuePairs);return de(O,{title:e.title??"What changed",source:e.source,testID:`buoy-block-diff-${e.id}`,collapsible:true,summary:El(e.changes),children:[t.visible.map((o,r)=>{let n=o.before===void 0&&o.after!==void 0,i=o.after===void 0&&o.before!==void 0;return de(s,{style:[$.diffRow,r>0&&D.rowDivider],children:[I(l,{style:$.diffPath,numberOfLines:1,children:o.path}),hr(o.before)||hr(o.after)?I(s,{style:$.diffTree,children:I(ml,{oldValue:o.before,newValue:o.after,showUnchanged:false,scrollEnabled:false})}):de(Ll,{children:[n?null:de(s,{style:$.diffLine,children:[I(l,{style:[$.diffMark,{color:B.color.danger}],children:"\u2212"}),I(l,{style:[$.diffValue,{color:B.color.danger}],numberOfLines:3,selectable:true,children:yo(o.before)})]}),i?null:de(s,{style:$.diffLine,children:[I(l,{style:[$.diffMark,{color:B.color.accent}],children:"+"}),I(l,{style:[$.diffValue,{color:B.color.accent}],numberOfLines:3,selectable:true,children:yo(o.after)})]})]})]},`${o.path}-${r}`)}),I(tt,{paged:t})]})}function jl({block:e}){let t=e.bars.slice(0,Pt.chartBars),o=e.max??Math.max(1,...t.map(r=>r.value));return I(O,{title:e.title,source:e.source,testID:`buoy-block-chart-${e.id}`,children:I(s,{style:$.chart,children:t.map((r,n)=>de(s,{style:$.barRow,children:[I(l,{style:$.barLabel,numberOfLines:1,children:r.label}),I(s,{style:$.barTrack,children:I(s,{style:[$.bar,{width:`${Math.max(2,Math.round(r.value/o*100))}%`,backgroundColor:bt(r.tone??"accent")}]})}),de(l,{style:$.barValue,numberOfLines:1,children:[r.value,r.unit?` ${r.unit}`:""]})]},`${r.label}-${n}`))})})}function Ml({block:e}){return I(O,{title:e.title,testID:`buoy-block-steps-${e.id}`,children:e.steps.map((t,o)=>de(s,{style:[$.step,o>0&&D.rowDivider],children:[I(s,{style:[$.stepMark,t.state==="done"&&$.stepDone,t.state==="failed"&&$.stepFailed],children:t.state==="done"?I(gl,{size:10,color:B.color.onAccent}):t.state==="failed"?I(fl,{size:10,color:B.color.text}):I(l,{style:$.stepNum,children:o+1})}),I(l,{style:[D.rowTitle,t.state==="done"&&$.stepTextDone],children:t.text})]},o))})}function ql(e){try{let t=JSON.parse(e);return t!==null&&typeof t=="object"?t:void 0}catch{return}}function Fl({block:e,value:t}){return I(O,{title:e.title,testID:`buoy-block-code-${e.id}`,children:I(s,{style:$.viewer,children:I(yl,{title:e.title??"Payload",data:t,initialExpanded:true,showTypeFilter:false,testIDPrefix:`buoy-block-code-${e.id}`})})})}function Ul({block:e}){return I(O,{title:e.title,testID:`buoy-block-code-${e.id}`,children:I(l,{style:[D.mono,$.code],selectable:true,children:e.text})})}function _l({block:e}){let t=ql(e.text);return t===void 0?I(Ul,{block:e}):I(Fl,{block:e,value:t})}function Kl({block:e}){let t=e.tone==="danger"?B.color.danger:e.tone==="warning"?B.color.warning:B.color.info,o=e.tone==="info"?bl:hl;return de(O,{tone:e.tone,testID:`buoy-block-notice-${e.id}`,children:[de(s,{style:$.noticeRow,children:[I(o,{size:14,color:t}),I(l,{style:$.noticeText,children:e.text})]}),I(Pe,{actions:e.actions,blockId:e.id})]})}function Ql({block:e}){let{copied:t,copy:o}=fo(()=>pr(e)??e.title);return de(O,{title:e.title,source:e.source,testID:`buoy-block-finding-${e.id}`,tone:"warning",children:[e.evidence.map((r,n)=>de(s,{style:[$.kvRow,n>0&&D.rowDivider],children:[I(l,{style:$.kvKey,numberOfLines:1,children:r.label}),I(l,{style:[$.kvValue,r.tone&&{color:bt(r.tone)}],selectable:true,children:r.value})]},`${r.label}-${n}`)),I(s,{style:$.findingFoot,children:I(f,{testID:`buoy-block-finding-copy-${e.id}`,accessibilityRole:"button",accessibilityLabel:t?"Copied":"Copy this finding",onPress:o,style:({pressed:r})=>[$.findingCopy,r&&{opacity:.7}],children:I(l,{style:[$.findingCopyText,t&&{color:B.color.accent}],children:t?"Copied":"Copy finding"})})}),I(Pe,{actions:e.actions,blockId:e.id})]})}var $=x.create({flex:{flex:1},tableHead:{flexDirection:"row",paddingHorizontal:12,paddingVertical:6,gap:8,backgroundColor:B.color.fill},th:{flex:1,color:B.color.textTertiary,fontSize:B.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},tr:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,gap:8,alignItems:"center"},td:{flex:1,color:B.color.textSecondary,fontSize:B.font.caption,lineHeight:17},tdFirst:{color:B.color.text,fontWeight:"500"},firstCol:{flex:1.4},kvRow:{flexDirection:"row",gap:12,paddingHorizontal:12,paddingVertical:8,alignItems:"flex-start"},kvKey:{width:110,color:B.color.textSecondary,fontSize:B.font.caption,paddingTop:1},kvValue:{flex:1,color:B.color.text,fontSize:B.font.caption,lineHeight:17},findingFoot:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,borderTopWidth:x.hairlineWidth,borderTopColor:B.color.separator},findingCopy:{paddingHorizontal:10,paddingVertical:5,borderRadius:B.radius.badge,backgroundColor:B.color.fill},findingCopyText:{color:B.color.textSecondary,fontSize:B.font.micro,fontWeight:"600"},thumb:{width:40,height:40,borderRadius:8,backgroundColor:B.color.fill},listHero:{paddingHorizontal:12,paddingTop:12},listHeroImage:{width:"100%",height:240,borderRadius:B.radius.row,backgroundColor:B.color.fill},rowAction:{color:B.color.accent,fontSize:B.font.caption,fontWeight:"600"},diffRow:{paddingHorizontal:12,paddingVertical:8,gap:3},diffPath:{color:B.color.textSecondary,fontSize:B.font.micro,fontWeight:"600",letterSpacing:.3},diffLine:{flexDirection:"row",gap:8,alignItems:"flex-start"},diffMark:{fontFamily:"Menlo",fontSize:12,width:10},diffValue:{flex:1,fontFamily:"Menlo",fontSize:12,lineHeight:16},diffTree:{borderRadius:B.radius.row,overflow:"hidden"},chart:{paddingHorizontal:12,paddingVertical:10,gap:8},barRow:{flexDirection:"row",alignItems:"center",gap:8},barLabel:{width:96,color:B.color.textSecondary,fontSize:B.font.caption},barTrack:{flex:1,height:10,borderRadius:5,backgroundColor:B.color.fill,overflow:"hidden"},bar:{height:10,borderRadius:5},barValue:{width:72,textAlign:"right",color:B.color.text,fontSize:B.font.caption,fontWeight:"600"},step:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},stepMark:{width:20,height:20,borderRadius:10,backgroundColor:B.color.fillTertiary,alignItems:"center",justifyContent:"center"},stepDone:{backgroundColor:B.color.accent},stepFailed:{backgroundColor:B.color.danger},stepNum:{color:B.color.text,fontSize:B.font.micro,fontWeight:"700"},stepTextDone:{color:B.color.textSecondary},viewer:{paddingHorizontal:4,paddingBottom:8},code:{paddingHorizontal:12,paddingVertical:10,lineHeight:17},noticeRow:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:4},noticeText:{flex:1,color:B.color.text,fontSize:B.font.caption,lineHeight:18}});import{useState as Jl}from"react";import{night as Ve}from"@buoy-gg/shared-ui/web";import{CAPS as gr}from"@buoy-gg/agent-core/web";import{jsx as Ee,jsxs as mo}from"react/jsx-runtime";function Gl({block:e}){let[t,o]=Jl(null),{width:r}=Yo(),n=e.images.slice(0,gr.gridMax),i=n.length>gr.gridImages,a=Math.min(150,Math.floor((r-2*Ve.gutter-24-8)/2)),h=({img:u,i:g})=>mo(f,{testID:`buoy-block-image-${g}`,accessibilityRole:"imagebutton",accessibilityLabel:u.alt,onPress:()=>o(t===g?null:g),style:[Ne.tile,{width:a},i&&Ne.tileCarousel],children:[Ee(gt,{testID:"buoy-internal-chat-image",source:{uri:u.url},style:[Ne.image,{width:a,height:a}],resizeMode:"contain",accessibilityLabel:u.alt}),Ee(l,{style:Ne.name,numberOfLines:1,children:u.alt}),u.caption?Ee(l,{style:Ne.caption,numberOfLines:1,children:u.caption}):null]},`${u.url}-${g}`);return mo(O,{title:e.title,source:e.source,testID:`buoy-block-imagegrid-${e.id}`,children:[t!==null&&n[t]?mo(f,{onPress:()=>o(null),style:Ne.hero,accessibilityRole:"button",accessibilityLabel:`Close ${n[t].alt}`,children:[Ee(gt,{testID:"buoy-internal-chat-image",source:{uri:n[t].url},style:Ne.heroImage,resizeMode:"contain",accessibilityLabel:n[t].alt}),Ee(l,{style:Ne.heroCaption,children:n[t].alt}),n[t].caption?Ee(l,{style:Ne.caption,children:n[t].caption}):null]}):null,i?Ee(Fe,{horizontal:true,showsHorizontalScrollIndicator:false,snapToInterval:a+8,decelerationRate:"fast",contentContainerStyle:Ne.carousel,children:n.map((u,g)=>Ee(h,{img:u,i:g},g))}):Ee(s,{style:Ne.grid,children:n.map((u,g)=>Ee(h,{img:u,i:g},g))}),Ee(sl,{shown:n.length,total:e.total})]})}var Ne=x.create({grid:{flexDirection:"row",flexWrap:"wrap",gap:8,padding:12},carousel:{gap:8,paddingHorizontal:12,paddingVertical:12},tile:{gap:4},tileCarousel:{},image:{borderRadius:Ve.radius.row,backgroundColor:Ve.color.fill},name:{color:Ve.color.text,fontSize:Ve.font.micro,fontWeight:"600"},caption:{color:Ve.color.textSecondary,fontSize:Ve.font.micro},hero:{alignItems:"center",padding:12,gap:6,borderBottomWidth:x.hairlineWidth,borderBottomColor:Ve.color.separator},heroImage:{width:"100%",height:240,borderRadius:Ve.radius.row,backgroundColor:Ve.color.fill},heroCaption:{color:Ve.color.text,fontSize:Ve.font.caption}});import{useState as Yl}from"react";import{AlertTriangle as Xl,ChevronRight as Zl,Eye as br,night as R,NightSegmented as ea}from"@buoy-gg/shared-ui/web";import{CAPS as Yt}from"@buoy-gg/agent-core/web";import{jsx as W,jsxs as ae}from"react/jsx-runtime";function fr(e){return e===void 0?R.color.textTertiary:e>=500?R.color.danger:e>=400?R.color.warning:e>=300?R.color.info:R.color.accent}function yr(e){try{let t=new URL(e);return t.pathname+(t.search?"?\u2026":"")}catch{return e}}function mr({status:e}){return W(s,{style:[D.pill,{backgroundColor:`${fr(e)}22`}],children:W(l,{style:[D.pillText,{color:fr(e)}],children:e??"\u2026"})})}function ta({block:e}){let t=Z(),o=t.supports?.openTool!==false,r=et(e.requests,Yt.listItems),{visible:n}=r;return ae(O,{title:e.title??"Network requests",source:e.source,testID:`buoy-block-requests-${e.id}`,children:[n.map((i,a)=>ae(f,{disabled:!o,onPress:()=>void t.runAction({label:"Open in Network",openTool:{toolId:"network",select:i.id}},e.id),style:[D.row,a>0&&D.rowDivider],accessibilityRole:o?"button":void 0,children:[W(l,{style:K.method,children:i.method}),W(l,{style:D.rowTitle,numberOfLines:1,children:yr(i.url)}),i.mocked?W(l,{style:K.mockedChip,children:"MOCKED"}):null,i.durationMs!==void 0?ae(l,{style:D.rowTrailing,children:[i.durationMs," ms"]}):null,W(mr,{status:i.status}),o?W(Zl,{size:12,color:R.color.textTertiary}):null]},`${i.id}-${a}`)),W(tt,{paged:r})]})}var oa=[{key:"response",label:"Response"},{key:"request",label:"Request"}];function ra({block:e}){let[t,o]=Yl("response"),r=t==="response"?e.responseBody:e.requestBody,n=r===void 0?"(none)":typeof r=="string"?r:JSON.stringify(r,null,2),i=Z();return ae(O,{source:e.source,testID:`buoy-block-request-${e.id}`,children:[ae(s,{style:[D.row,K.reqHead],children:[W(l,{style:K.method,children:e.request.method}),W(l,{style:D.rowTitle,numberOfLines:2,children:yr(e.request.url)}),e.request.mocked?W(l,{style:K.mockedChip,children:"MOCKED"}):null,W(mr,{status:e.request.status})]}),W(s,{style:K.tabs,children:W(ea,{tabs:oa,activeKey:t,onChange:a=>o(a),size:"sm"})}),W(l,{style:[D.mono,K.body],numberOfLines:14,selectable:true,children:n.length>1600?`${n.slice(0,1600)}
|
|
8
|
+
\u2026`:n}),W(Pe,{blockId:e.id,actions:[{label:"Open in Network",openTool:{toolId:"network",select:e.request.id}}]}),(i.supports?.openTool===false,null)]})}function na({block:e}){let t=Z().rules?.[e.rule.id],o=t?.deleted===true,r={...e.rule,enabled:o?false:t?.enabled??e.rule.enabled},n=r.kind==="fail"?"fails (no network)":r.kind==="delay"?`delayed ${r.delayMs??0} ms`:`returns ${r.status??200}`;return ae(O,{title:r.name??"Network override",source:e.source,testID:`buoy-block-rule-${e.id}`,tone:r.enabled?"warning":void 0,children:[ae(s,{style:K.ruleBody,children:[ae(l,{style:K.ruleLine,children:[ae(l,{style:K.ruleKey,children:[r.methods?.length?r.methods.join("/"):"ANY"," "]}),W(l,{style:D.mono,children:r.urlPattern})]}),ae(l,{style:K.ruleLine,children:[W(l,{style:K.ruleKey,children:"\u2192 "}),n,r.times?` \xB7 ${r.times===1?"once":`${r.times} times`}`:" \xB7 every time",r.hits!==void 0?` \xB7 ${r.hits} hit${r.hits===1?"":"s"}`:""]}),W(s,{style:[D.pill,r.enabled?K.on:K.off],children:W(l,{style:[D.pillText,{color:r.enabled?R.color.onAccent:R.color.textSecondary}],children:o?"DELETED":r.enabled?"ON":"OFF"})})]}),o?null:W(Pe,{blockId:e.id,actions:[r.enabled?{label:"Turn off",dispatch:{toolId:"network",action:"setOverrideRuleEnabled",params:{id:r.id,enabled:false}}}:{label:"Turn on",primary:true,dispatch:{toolId:"network",action:"setOverrideRuleEnabled",params:{id:r.id,enabled:true}}},{label:"Delete",dispatch:{toolId:"network",action:"deleteOverrideRule",params:{id:r.id}}}]})]})}function ia({block:e}){let t=Z(),o=et(e.elements,Yt.chips),{visible:r}=o;return ae(O,{title:e.title??"On screen right now",source:e.source,testID:`buoy-block-screen-${e.id}`,children:[r.map((n,i)=>ae(f,{onPress:()=>void t.runAction({label:"Highlight",dispatch:{toolId:"highlight-updates",action:"setSpotlight",params:{nativeTag:n.nativeTag}}},e.id),disabled:t.supports?.dispatch===false,style:[D.row,i>0&&D.rowDivider],accessibilityRole:"button",children:[W(br,{size:12,color:R.color.textTertiary}),W(l,{style:D.rowTitle,numberOfLines:1,children:n.label??n.testID??n.name}),W(l,{style:D.rowTrailing,numberOfLines:1,children:n.name})]},`${n.nativeTag}-${i}`)),W(tt,{paged:o})]})}function la({block:e}){let t=Z(),o=et(e.routes,Yt.chips),r=o.visible;return ae(O,{title:e.current?`Routes \xB7 you're on ${e.current}`:"Routes",source:e.source,testID:`buoy-block-routes-${e.id}`,children:[W(s,{style:K.chips,children:r.map((n,i)=>W(f,{disabled:t.supports?.dispatch===false,onPress:()=>n.dynamic?t.answer({blockId:e.id,kind:"input",value:`Open ${n.path} \u2014 which id?`}):void t.runAction({label:`Open ${n.path}`,dispatch:{toolId:"route-events",action:"navigate",params:{path:n.path}}},e.id),style:[K.chip,n.path===e.current&&K.chipCurrent],accessibilityRole:"button",children:W(l,{style:[K.chipText,n.dynamic&&K.chipDynamic],children:n.path})},`${n.path}-${i}`))}),W(tt,{paged:o})]})}var xr={error:R.color.danger,warn:R.color.warning,warning:R.color.warning,info:R.color.info};function aa({block:e}){let t=et(e.entries,Yt.listItems),{visible:o}=t;return ae(O,{title:"Console",source:e.source,testID:`buoy-block-logs-${e.id}`,children:[o.map((r,n)=>ae(s,{style:[D.row,n>0&&D.rowDivider,K.logRow],children:[W(s,{style:[D.pill,{backgroundColor:`${xr[r.level]??R.color.textTertiary}22`}],children:W(l,{style:[D.pillText,{color:xr[r.level]??R.color.textSecondary}],children:r.level.toUpperCase()})}),W(l,{style:[D.rowTitle,D.mono],numberOfLines:3,children:r.message}),r.count>1?ae(l,{style:D.rowTrailing,children:["\xD7",r.count]}):null]},`${r.level}-${r.message}-${n}`)),W(tt,{paged:t})]})}function sa({block:e}){return ae(O,{tone:"danger",testID:`buoy-block-crash-${e.id}`,children:[ae(s,{style:K.crashHead,children:[W(Xl,{size:14,color:R.color.danger}),ae(l,{style:K.crashTitle,children:["The app crashed",e.route?` on ${e.route}`:""]})]}),W(l,{style:[D.mono,K.crashMsg],numberOfLines:4,selectable:true,children:e.message}),e.suspect?ae(l,{style:K.suspect,children:["Most likely cause: ",e.suspect.label]}):null,W(Pe,{blockId:e.id,actions:[...e.suspect?.action?[{...e.suspect.action,primary:true}]:[],...e.actions??[]].slice(0,2)})]})}function ca({block:e}){let t=Z(),o=t.supports?.minimize!==false;return ae(f,{testID:`buoy-block-peek-${e.id}`,disabled:!o,onPress:()=>void t.runAction({label:"Look",minimize:true},e.id),style:({pressed:r})=>[K.peek,r&&{opacity:.7}],accessibilityRole:"button",accessibilityLabel:`${e.label}. Look at the app`,children:[W(l,{style:K.peekText,children:e.label}),o?ae(s,{style:K.peekLook,children:[W(br,{size:12,color:R.color.accent}),W(l,{style:K.peekLookText,children:"Look"})]}):null]})}var K=x.create({method:{color:R.color.textSecondary,fontSize:R.font.micro,fontWeight:"700",letterSpacing:.4,width:44},mockedChip:{color:R.color.warning,backgroundColor:R.color.warningSoft,fontSize:9,fontWeight:"700",letterSpacing:.6,paddingHorizontal:5,paddingVertical:1,borderRadius:R.radius.badge,overflow:"hidden"},reqHead:{paddingTop:12},tabs:{paddingHorizontal:12,paddingTop:4,paddingBottom:8},tab:{paddingHorizontal:10,paddingVertical:5,borderRadius:R.radius.badge,backgroundColor:R.color.fill},tabOn:{backgroundColor:R.color.accentSoft},tabText:{color:R.color.textSecondary,fontSize:R.font.micro,fontWeight:"600"},tabTextOn:{color:R.color.accent},body:{paddingHorizontal:12,paddingBottom:4,lineHeight:16,color:R.color.textSecondary},ruleBody:{paddingHorizontal:12,paddingTop:4,paddingBottom:4,gap:4},ruleLine:{color:R.color.text,fontSize:R.font.caption,lineHeight:18},ruleKey:{color:R.color.textSecondary,fontWeight:"700"},on:{alignSelf:"flex-start",backgroundColor:R.color.accent,marginTop:4},off:{alignSelf:"flex-start",backgroundColor:R.color.fillTertiary,marginTop:4},chips:{flexDirection:"row",flexWrap:"wrap",gap:6,padding:12},chip:{paddingHorizontal:10,paddingVertical:6,borderRadius:R.radius.chip,backgroundColor:R.color.fill,borderWidth:x.hairlineWidth,borderColor:R.color.border},chipCurrent:{backgroundColor:R.color.accentSoft,borderColor:R.color.accentBorderStrong},chipText:{color:R.color.text,fontSize:R.font.caption,fontFamily:"Menlo"},chipDynamic:{color:R.color.textSecondary},logRow:{alignItems:"flex-start"},crashHead:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:12},crashTitle:{color:R.color.danger,fontSize:R.font.row,fontWeight:"600"},crashMsg:{paddingHorizontal:12,paddingTop:6,color:R.color.text},suspect:{color:R.color.textSecondary,fontSize:R.font.caption,paddingHorizontal:12,paddingTop:6},peek:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:10,paddingLeft:12,paddingRight:10,paddingVertical:7,borderRadius:R.radius.chip,backgroundColor:R.color.fill},peekText:{color:R.color.textSecondary,fontSize:R.font.caption},peekLook:{flexDirection:"row",alignItems:"center",gap:4},peekLookText:{color:R.color.accent,fontSize:R.font.caption,fontWeight:"600"}});import{useEffect as da,useRef as kr,useState as Ue}from"react";import{AlertTriangle as ua,Check as wr,ChevronDown as vr,ChevronRight as Sr,night as d,NightSegmented as pa,RefreshCw as ha,Search as ga,X as ba}from"@buoy-gg/shared-ui/web";import{Fragment as Xt,jsx as p,jsxs as v}from"react/jsx-runtime";var Tr=e=>typeof e=="string"?e:e===void 0?"\u2014":JSON.stringify(e);function fa({block:e}){let t=Z();return p(s,{style:c.chips,testID:`buoy-block-suggestions-${e.id}`,children:e.chips.slice(0,4).map(o=>p(f,{disabled:!!t.busy,onPress:()=>void t.runAction({label:o.label,send:o.send??o.label},e.id),style:({pressed:r})=>[c.chip,r&&c.pressed],accessibilityRole:"button",children:p(l,{style:c.chipText,children:o.label})},o.label))})}function ya({block:e}){let t=Z(),o=t.answered[e.id],r=!!o,[n,i]=Ue([]),a=o?.kind==="multi"?o.optionIds:n,h=g=>i(y=>y.includes(g)?y.filter(C=>C!==g):[...y,g]),u=n.length>=(e.min??1)&&(!e.max||n.length<=e.max);return v(O,{testID:`buoy-block-multi-${e.id}`,tone:r?void 0:"info",children:[p(l,{style:c.question,children:e.question}),p(s,{style:c.optionsBox,children:e.options.map((g,y)=>{let C=a.includes(g.id);return v(f,{disabled:r,onPress:()=>h(g.id),style:[c.option,y>0&&D.rowDivider,r&&!C&&c.dim],accessibilityRole:"checkbox",accessibilityState:{checked:C},children:[p(s,{style:[c.checkbox,C&&c.checkboxOn],children:C?p(wr,{size:11,color:d.color.onAccent}):null}),v(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:g.label}),g.detail?p(l,{style:c.optionDetail,children:g.detail}):null]})]},g.id)})}),r?null:p(s,{style:c.rowEnd,children:p(f,{testID:"buoy-block-multi-submit",disabled:!u,onPress:()=>t.answer({blockId:e.id,kind:"multi",optionIds:n,labels:e.options.filter(g=>n.includes(g.id)).map(g=>g.label)}),style:[c.button,c.buttonPrimary,!u&&c.disabled],children:p(l,{style:c.buttonTextPrimary,children:e.submitLabel??`Use ${n.length||""}`.trim()})})})]})}var ma=8;function xa({block:e}){let t=Z(),o=t.answered[e.id],[r,n]=Ue(""),[i,a]=Ue(false),h=o?.kind==="select"?o.label:null,u=e.options.filter(y=>!r||y.label.toLowerCase().includes(r.toLowerCase())).slice(0,8),g=e.searchable!==false&&e.options.length>=ma;return v(O,{testID:`buoy-block-select-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),h?p(l,{style:c.decided,children:h}):v(s,{style:c.selectBox,children:[v(f,{onPress:()=>a(y=>!y),style:c.selectField,accessibilityRole:"button",children:[p(l,{style:c.selectPlaceholder,children:i?"Choose\u2026":`${e.options.length} options`}),p(vr,{size:14,color:d.color.textSecondary})]}),i&&v(Xt,{children:[g&&v(s,{style:c.search,children:[p(ga,{size:12,color:d.color.textSecondary}),p(Xe,{style:c.searchInput,value:r,onChangeText:n,placeholder:"Search",placeholderTextColor:d.color.placeholder,autoCapitalize:"none",autoCorrect:false})]}),u.map((y,C)=>v(f,{onPress:()=>t.answer({blockId:e.id,kind:"select",optionId:y.id,label:y.label}),style:[c.option,C>0&&D.rowDivider],accessibilityRole:"button",children:[v(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:y.label}),y.detail?p(l,{style:c.optionDetail,children:y.detail}):null]}),p(Sr,{size:12,color:d.color.textTertiary})]},y.id)),e.options.length>u.length?v(l,{style:c.hint,children:[e.options.length-u.length," more \u2014 keep typing"]}):null]})]})]})}function Cr({min:e,max:t,step:o=1,value:r,unit:n,onChange:i,disabled:a}){let h=kr(0),u=t>e?(r-e)/(t-e)*100:0,g=q=>Math.min(t,Math.max(e,+(Math.round((q-e)/o)*o+e).toFixed(6))),y=q=>!a&&i(g(r+q*o)),C=q=>{if(a||h.current<=0)return;let X=Math.min(1,Math.max(0,q.nativeEvent.locationX/h.current));i(g(e+X*(t-e)))},j=q=>{h.current=q.nativeEvent.layout.width};return v(s,{style:c.sliderRow,children:[p(f,{disabled:a,onPress:()=>y(-1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Decrease",children:p(l,{style:c.stepText,children:"\u2212"})}),p(f,{style:c.trackHit,onLayout:j,onPress:C,disabled:a,accessibilityRole:"adjustable",accessibilityValue:{min:e,max:t,now:r},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:q=>y(q.nativeEvent.actionName==="increment"?1:-1),children:v(s,{style:c.track,pointerEvents:"none",children:[p(s,{style:[c.fill,{width:`${u}%`}]}),p(s,{style:[c.thumb,{left:`${u}%`}]})]})}),p(f,{disabled:a,onPress:()=>y(1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Increase",children:p(l,{style:c.stepText,children:"+"})}),v(l,{style:c.sliderValue,children:[r,n?` ${n}`:""]})]})}function ka({block:e}){let t=Z(),o=t.answered[e.id],[r,n]=Ue(e.value??e.min);return v(O,{testID:`buoy-block-slider-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),p(s,{style:c.pad,children:p(Cr,{min:e.min,max:e.max,step:e.step,value:o?.kind==="slider"?o.value:r,unit:e.unit,onChange:n,disabled:!!o})}),o?null:p(s,{style:c.rowEnd,children:p(f,{onPress:()=>t.answer({blockId:e.id,kind:"slider",value:r,unit:e.unit}),style:[c.button,c.buttonPrimary],children:v(l,{style:c.buttonTextPrimary,children:["Use ",r,e.unit?` ${e.unit}`:""]})})})]})}function wa({block:e}){let t=Z(),o=t.answered[e.id],[r,n]=Ue(""),i=e.presets??[{label:"Now",value:new Date().toISOString()},{label:"Tomorrow",value:new Date(Date.now()+864e5).toISOString()},{label:"+7 days",value:new Date(Date.now()+7*864e5).toISOString()},{label:"+30 days",value:new Date(Date.now()+30*864e5).toISOString()}];return v(O,{testID:`buoy-block-datetime-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),o?p(l,{style:c.decided,children:o.kind==="dateTime"?o.label??o.value:"(skipped)"}):v(Xt,{children:[p(s,{style:[c.chips,c.pad],children:i.map(a=>p(f,{onPress:()=>t.answer({blockId:e.id,kind:"dateTime",value:a.value,label:a.label}),style:c.chip,children:p(l,{style:c.chipText,children:a.label})},a.label))}),v(s,{style:[c.inputRow,c.pad],children:[p(Xe,{style:c.input,value:r,onChangeText:n,placeholder:e.mode==="time"?"14:30":"2026-09-15",placeholderTextColor:d.color.placeholder,keyboardType:"numbers-and-punctuation"}),p(f,{disabled:!r.trim(),onPress:()=>t.answer({blockId:e.id,kind:"dateTime",value:r.trim()}),style:[c.button,c.buttonPrimary,!r.trim()&&c.disabled],children:p(l,{style:c.buttonTextPrimary,children:"Use"})})]})]})]})}function zr({f:e,value:t,onChange:o,disabled:r}){return e.type==="toggle"?v(s,{style:c.fieldRow,children:[p(l,{style:c.fieldLabel,children:e.label}),p(Xo,{value:!!t,onValueChange:o,disabled:r,trackColor:{true:d.color.accent,false:d.color.fillTertiary},thumbColor:d.color.knob})]}):e.type==="select"?v(s,{style:c.fieldCol,children:[p(l,{style:c.fieldLabel,children:e.label}),p(s,{style:c.chips,children:e.options.map(n=>p(f,{disabled:r,onPress:()=>o(n.id),style:[c.chip,t===n.id&&c.chipOn],children:p(l,{style:[c.chipText,t===n.id&&c.chipTextOn],children:n.label})},n.id))})]}):e.type==="slider"?v(s,{style:c.fieldCol,children:[p(l,{style:c.fieldLabel,children:e.label}),p(Cr,{min:e.min,max:e.max,step:e.step,unit:e.unit,value:typeof t=="number"?t:e.min,onChange:o,disabled:r})]}):v(s,{style:c.fieldRow,children:[p(l,{style:c.fieldLabel,children:e.label}),p(Xe,{style:c.fieldInput,value:t==null?"":String(t),onChangeText:o,editable:!r,placeholder:e.placeholder??"",placeholderTextColor:d.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:e.type==="secret",autoCapitalize:"none",autoCorrect:false})]})}function Ir(e){let[t,o]=Ue(()=>Object.fromEntries(e.map(r=>[r.key,r.value])));return{values:t,set:(r,n)=>o(i=>({...i,[r]:n}))}}function va({block:e}){let t=Z(),o=t.answered[e.id],{values:r,set:n}=Ir(e.fields);return v(O,{title:e.title,testID:`buoy-block-form-${e.id}`,tone:o?void 0:"info",children:[p(s,{style:c.pad,children:e.fields.map(i=>p(zr,{f:i,value:r[i.key],onChange:a=>n(i.key,a),disabled:!!o},i.key))}),o?p(l,{style:c.decided,children:"Sent"}):p(s,{style:c.rowEnd,children:p(f,{onPress:()=>t.answer({blockId:e.id,kind:"form",values:r}),style:[c.button,c.buttonPrimary],children:p(l,{style:c.buttonTextPrimary,children:e.submitLabel??"Send"})})})]})}function Sa({block:e}){let t=Z(),o=t.answered[e.id],{values:r,set:n}=Ir(e.fields),i=o?.kind==="proposal"?o.approved:null;return v(O,{testID:`buoy-block-proposal-${e.id}`,tone:o?void 0:"warning",children:[p(l,{style:c.confirmTitle,children:e.title}),p(l,{style:c.confirmChange,children:e.change}),p(s,{style:c.pad,children:e.fields.map(a=>p(zr,{f:a,value:r[a.key],onChange:h=>n(a.key,h),disabled:!!o},a.key))}),e.consequence?p(l,{style:c.consequence,children:e.consequence}):null,p(s,{style:c.actionsRow,children:o?p(l,{style:c.decided,children:i?"\u2713 Applied with these values":"\u2715 Not applied"}):v(Xt,{children:[p(f,{onPress:()=>t.answer({blockId:e.id,kind:"proposal",approved:true,values:r}),style:[c.button,c.buttonPrimary],children:p(l,{style:c.buttonTextPrimary,children:e.approveLabel??"Apply"})}),p(f,{onPress:()=>t.answer({blockId:e.id,kind:"proposal",approved:false}),style:[c.button,c.buttonPlate],children:p(l,{style:c.buttonTextPlate,children:"Not now"})})]})})]})}function Ta({block:e}){let t=Z(),[o,r]=Ue(null),n=t.actionState?.[`${e.id}:${e.verify?.label??"Verify"}`],i=e.verified||n==="done";return v(s,{style:c.claim,testID:`buoy-block-claim-${e.id}`,children:[v(l,{style:c.claimText,children:[e.text,e.sources.map((a,h)=>v(l,{onPress:()=>r(o===h?null:h),style:c.cite,children:[" [",h+1,"]"]},h)),i?p(l,{style:c.verified,children:" \u2713 verified"}):null]}),o!==null&&e.sources[o]?v(s,{style:c.citeBox,children:[v(l,{style:c.citeLabel,children:["[",o+1,"] ",e.sources[o].label]}),e.sources[o].detail?p(l,{style:c.citeDetail,children:e.sources[o].detail}):null]}):null,e.verify&&!i?v(f,{onPress:()=>void t.runAction(e.verify,e.id),style:c.verifyBtn,accessibilityRole:"button",children:[p(ha,{size:11,color:d.color.accent}),p(l,{style:c.verifyText,children:n==="running"?"Checking\u2026":e.verify.label})]}):null]})}function Ca({block:e}){let[t,o]=Ue(!!e.open);return v(O,{testID:`buoy-block-details-${e.id}`,children:[v(f,{onPress:()=>o(r=>!r),style:D.row,accessibilityRole:"button",accessibilityState:{expanded:t},children:[p(l,{style:D.rowTitle,children:e.summary}),t?p(vr,{size:12,color:d.color.textTertiary}):p(Sr,{size:12,color:d.color.textTertiary})]}),t?p(l,{style:c.detailsBody,selectable:true,children:e.body}):null]})}function za({block:e,renderNested:t}){let[o,r]=Ue(0),n=e.tabs.map((a,h)=>({key:String(h),label:a.label})),i=e.tabs[o];return v(s,{style:c.tabsWrap,testID:`buoy-block-tabs-${e.id}`,children:[p(pa,{tabs:n,activeKey:String(o),onChange:a=>r(Number(a)),size:"sm"}),i&&t?t(i.block):null]})}var Ia=10;function Da({block:e}){let t=et(e.events,Ia);return v(O,{title:e.title??"What happened",source:e.source,testID:`buoy-block-timeline-${e.id}`,children:[t.visible.map((o,r)=>v(s,{style:c.tlRow,children:[p(l,{style:c.tlAt,children:o.at}),v(s,{style:c.tlLine,children:[p(s,{style:[c.tlDot,{backgroundColor:bt(o.tone??"muted")}]}),r<t.visible.length-1?p(s,{style:c.tlStem}):null]}),v(s,{style:c.flex,children:[p(l,{style:c.tlSource,children:o.source.toUpperCase()}),p(l,{style:D.rowTitle,numberOfLines:2,children:o.label})]})]},r)),p(tt,{paged:t})]})}function Ra({block:e}){let t=e.series.slice(-60),o=Math.max(1,...t),r=Math.min(...t,0),n=44;return v(O,{title:e.title,source:e.source,testID:`buoy-block-sparkline-${e.id}`,children:[v(s,{style:c.sparkHead,children:[v(l,{style:c.sparkCurrent,children:[e.current??t[t.length-1],e.unit?v(l,{style:c.sparkUnit,children:[" ",e.unit]}):null]}),e.live?p(Dr,{}):null]}),p(s,{style:[c.spark,{height:n}],children:t.map((i,a)=>p(s,{style:[c.sparkBar,{height:Math.max(2,(i-r)/(o-r||1)*n),backgroundColor:a===t.length-1?d.color.accent:d.color.accentBorderStrong}]},a))}),e.label?p(l,{style:c.hint,children:e.label}):null]})}function Dr(){let e=kr(new se.Value(1)).current;return da(()=>{let t=se.loop(se.sequence([se.timing(e,{toValue:.3,duration:700,useNativeDriver:true}),se.timing(e,{toValue:1,duration:700,useNativeDriver:true})]));return t.start(),()=>t.stop()},[e]),v(s,{style:c.live,children:[p(se.View,{style:[c.liveDot,{opacity:e}]}),p(l,{style:c.liveText,children:"LIVE"})]})}function $a({block:e}){let t=[...new Set([...e.left.pairs.map(n=>n.key),...e.right.pairs.map(n=>n.key)])],o=Object.fromEntries(e.left.pairs.map(n=>[n.key,n.value])),r=Object.fromEntries(e.right.pairs.map(n=>[n.key,n.value]));return v(O,{title:e.title,source:e.source,testID:`buoy-block-compare-${e.id}`,children:[v(s,{style:c.cmpHead,children:[p(l,{style:c.cmpKey}),p(l,{style:c.cmpCol,children:e.left.title}),p(l,{style:c.cmpCol,children:e.right.title})]}),t.map((n,i)=>{let a=JSON.stringify(o[n])!==JSON.stringify(r[n]);return v(s,{style:[c.cmpRow,i>0&&D.rowDivider,a&&c.cmpDiff],children:[p(l,{style:c.cmpKey,numberOfLines:1,children:n}),p(l,{style:[c.cmpVal,a&&{color:d.color.danger}],numberOfLines:2,children:Tr(o[n])}),p(l,{style:[c.cmpVal,a&&{color:d.color.accent}],numberOfLines:2,children:Tr(r[n])})]},n)})]})}function Rr({c:e,id:t}){return v(Xt,{children:[e.image?p(gt,{testID:"buoy-internal-chat-image",source:{uri:e.image},style:c.cardImage,resizeMode:"contain",accessibilityLabel:e.title}):null,v(s,{style:c.cardText,children:[p(l,{style:c.cardTitle,numberOfLines:2,children:e.title}),e.subtitle?p(l,{style:D.rowSub,numberOfLines:2,children:e.subtitle}):null,e.facts?.slice(0,4).map(o=>v(s,{style:c.fact,children:[p(l,{style:c.factLabel,children:o.label}),p(l,{style:[c.factValue,o.tone&&{color:bt(o.tone)}],children:o.value})]},o.label))]}),p(Pe,{actions:e.actions,blockId:t})]})}function Aa({block:e}){return p(O,{source:e.source,testID:`buoy-block-card-${e.id}`,children:p(Rr,{c:e,id:e.id})})}function Ba({block:e}){return v(s,{testID:`buoy-block-cardcarousel-${e.id}`,children:[e.title?p(l,{style:c.carouselTitle,children:e.title}):null,p(Fe,{horizontal:true,showsHorizontalScrollIndicator:false,snapToInterval:232,decelerationRate:"fast",contentContainerStyle:c.carousel,children:e.cards.slice(0,8).map((t,o)=>p(s,{style:c.carouselCard,children:p(Rr,{c:t,id:`${e.id}-${o}`})},`${t.title}-${o}`))})]})}function Ha({block:e}){let[t,o]=Ue(false);return v(O,{title:e.route?`Screen \xB7 ${e.route}`:"Screen",source:e.source,testID:`buoy-block-screenshot-${e.id}`,children:[p(f,{onPress:()=>o(r=>!r),accessibilityRole:"imagebutton",accessibilityLabel:e.caption??"Screenshot",children:p(gt,{testID:"buoy-internal-chat-image",source:{uri:e.url},style:[c.shot,t&&c.shotBig],resizeMode:"contain"})}),e.caption?p(l,{style:c.hint,children:e.caption}):null]})}function La({block:e}){let t=e.steps.filter(o=>o.state==="done").length;return v(O,{title:e.title,testID:`buoy-block-plan-${e.id}`,tone:e.pending?"info":void 0,children:[p(s,{style:c.progress,children:p(s,{style:[c.progressFill,{width:`${t/Math.max(1,e.steps.length)*100}%`}]})}),e.steps.map((o,r)=>v(s,{style:[c.step,r>0&&D.rowDivider],children:[p(s,{style:[c.stepMark,o.state==="done"&&c.stepDone,o.state==="failed"&&c.stepFailed,o.state==="running"&&c.stepRunning],children:o.state==="done"?p(wr,{size:10,color:d.color.onAccent}):o.state==="failed"?p(ba,{size:10,color:d.color.text}):p(l,{style:c.stepNum,children:r+1})}),v(l,{style:[D.rowTitle,o.state==="done"&&c.muted],children:[o.text,o.state==="running"?"\u2026":""]})]},r)),p(Pe,{actions:e.actions??(e.pending?[{label:"Go",primary:true,send:"Go ahead with the plan."},{label:"Change it",send:"Let me change the plan first."}]:void 0),blockId:e.id})]})}function Wa({block:e}){let t=Z();return v(f,{testID:`buoy-block-checkpoint-${e.id}`,disabled:!e.restore,onPress:()=>e.restore&&void t.runAction(e.restore,e.id),style:c.checkpoint,accessibilityRole:"button",children:[p(s,{style:c.cpFlag}),v(l,{style:c.cpText,children:[e.label,e.at?` \xB7 ${e.at}`:""]}),e.restore?p(l,{style:c.cpRestore,children:e.restore.label}):null]})}function Oa({block:e}){let t=e.status==="failed"?d.color.danger:e.status==="done"?d.color.accent:d.color.info;return v(O,{testID:`buoy-block-task-${e.id}`,children:[v(s,{style:c.taskHead,children:[p(l,{style:c.cardTitle,children:e.title}),p(s,{style:[D.pill,{backgroundColor:`${t}22`}],children:p(l,{style:[D.pillText,{color:t}],children:e.status.toUpperCase()})})]}),e.progress!==void 0?p(s,{style:[c.progress,c.pad],children:p(s,{style:[c.progressFill,{width:`${Math.round(e.progress*100)}%`,backgroundColor:t}]})}):null,e.detail?p(l,{style:c.hint,children:e.detail}):null,p(Pe,{actions:e.actions,blockId:e.id})]})}function Pa({block:e}){let t=e.tone==="danger"?d.color.danger:e.tone==="warning"?d.color.warning:d.color.info;return v(s,{style:[c.banner,{borderColor:t,backgroundColor:`${t}1A`}],testID:`buoy-block-banner-${e.id}`,children:[p(ua,{size:13,color:t}),p(l,{style:[c.bannerText,{color:t}],numberOfLines:2,children:e.text}),e.actions?.[0]?p(Pe,{actions:e.actions.slice(0,1),blockId:e.id,align:"right"}):null]})}function Va({block:e}){return v(O,{testID:`buoy-block-file-${e.id}`,children:[v(s,{style:D.row,children:[p(s,{style:c.fileIcon,children:p(l,{style:c.fileExt,children:(e.type??e.name.split(".").pop()??"file").toUpperCase().slice(0,4)})}),v(s,{style:c.flex,children:[p(l,{style:D.rowTitle,numberOfLines:1,children:e.name}),e.size?p(l,{style:D.rowSub,children:e.size}):null]})]}),p(Pe,{actions:e.actions,blockId:e.id})]})}function Ea({block:e}){let t=Z(),o=t.answered[e.id];return v(O,{testID:`buoy-block-upload-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),o?p(l,{style:c.decided,children:o.kind==="upload"?`Attached ${o.name}`:"(skipped)"}):p(s,{style:[c.rowEnd,{justifyContent:"flex-start"}],children:p(f,{onPress:()=>t.answer({blockId:e.id,kind:"upload",name:"screenshot.png"}),style:[c.button,c.buttonPlate],children:p(l,{style:c.buttonTextPlate,children:e.accept==="image"?"Choose a screenshot":"Choose a file"})})})]})}var c=x.create({flex:{flex:1},pad:{paddingHorizontal:12,paddingBottom:8},muted:{color:d.color.textSecondary},dim:{opacity:.45},disabled:{opacity:.5},pressed:{opacity:.7},question:{color:d.color.text,fontSize:d.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},hint:{color:d.color.textTertiary,fontSize:d.font.micro,paddingHorizontal:12,paddingBottom:10},decided:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"600",paddingHorizontal:12,paddingVertical:10},rowEnd:{flexDirection:"row",justifyContent:"flex-end",paddingHorizontal:12,paddingBottom:12,gap:8},actionsRow:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:d.radius.row},buttonPrimary:{backgroundColor:d.color.accent},buttonPlate:{backgroundColor:d.color.button},buttonTextPrimary:{color:d.color.onAccent,fontSize:d.font.caption,fontWeight:"600"},buttonTextPlate:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},chips:{flexDirection:"row",flexWrap:"wrap",gap:6},chip:{paddingHorizontal:12,paddingVertical:7,borderRadius:d.radius.chip,backgroundColor:d.color.fill,borderWidth:x.hairlineWidth,borderColor:d.color.border},chipOn:{backgroundColor:d.color.accentSoft,borderColor:d.color.accentBorderStrong},chipText:{color:d.color.text,fontSize:d.font.caption},chipTextOn:{color:d.color.accent,fontWeight:"600"},optionsBox:{marginHorizontal:8,marginBottom:8,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:10},optionLabel:{color:d.color.text,fontSize:d.font.body,fontWeight:"500"},optionDetail:{color:d.color.textSecondary,fontSize:d.font.caption},checkbox:{width:20,height:20,borderRadius:6,borderWidth:1.5,borderColor:d.color.textTertiary,alignItems:"center",justifyContent:"center"},checkboxOn:{backgroundColor:d.color.accent,borderColor:d.color.accent},selectBox:{marginHorizontal:12,marginBottom:12,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,overflow:"hidden"},selectField:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:11},selectPlaceholder:{color:d.color.textSecondary,fontSize:d.font.body},search:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:6,borderTopWidth:x.hairlineWidth,borderTopColor:d.color.separator},searchInput:{flex:1,color:d.color.text,fontSize:d.font.caption,paddingVertical:4},sliderRow:{flexDirection:"row",alignItems:"center",gap:8},stepBtn:{width:28,height:28,borderRadius:14,backgroundColor:d.color.fill,alignItems:"center",justifyContent:"center"},stepText:{color:d.color.text,fontSize:16,fontWeight:"600"},trackHit:{flex:1,height:36,justifyContent:"center"},track:{height:6,borderRadius:3,backgroundColor:d.color.fillTertiary,justifyContent:"center"},fill:{height:6,borderRadius:3,backgroundColor:d.color.accent},thumb:{position:"absolute",width:20,height:20,borderRadius:10,backgroundColor:d.color.knob,marginLeft:-10,shadowColor:"#000",shadowOpacity:.35,shadowRadius:3,shadowOffset:{width:0,height:1}},sliderValue:{width:64,textAlign:"right",color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},inputRow:{flexDirection:"row",alignItems:"center",gap:8,paddingBottom:12},input:{flex:1,height:38,paddingHorizontal:12,borderRadius:d.radius.row,backgroundColor:d.color.surfaceElevated,color:d.color.text,fontSize:d.font.body},fieldRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:10,paddingVertical:6},fieldCol:{paddingVertical:6,gap:6},fieldLabel:{color:d.color.textSecondary,fontSize:d.font.caption,width:110},fieldInput:{flex:1,height:34,paddingHorizontal:10,borderRadius:d.radius.segment,backgroundColor:d.color.surfaceElevated,color:d.color.text,fontSize:d.font.caption},confirmTitle:{color:d.color.text,fontSize:d.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:d.color.text,fontSize:d.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6,paddingBottom:6},consequence:{color:d.color.warning,fontSize:d.font.caption,paddingHorizontal:12},claim:{gap:6,paddingHorizontal:2},claimText:{color:d.color.text,fontSize:d.font.row,lineHeight:22},cite:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"700"},verified:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"600"},citeBox:{padding:10,borderRadius:d.radius.row,backgroundColor:d.color.surface,borderWidth:x.hairlineWidth,borderColor:d.color.border,gap:2},citeLabel:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600"},citeDetail:{color:d.color.textSecondary,fontSize:d.font.caption,fontFamily:"Menlo"},verifyBtn:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:d.radius.chip,backgroundColor:d.color.accentSoft},verifyText:{color:d.color.accent,fontSize:d.font.micro,fontWeight:"700"},detailsBody:{color:d.color.textSecondary,fontSize:d.font.caption,lineHeight:18,paddingHorizontal:12,paddingBottom:12},tabsWrap:{gap:8},tabBar:{flexDirection:"row",gap:6},tab:{paddingHorizontal:12,paddingVertical:6,borderRadius:d.radius.badge,backgroundColor:d.color.fill},tabOn:{backgroundColor:d.color.accentSoft},tabText:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"600"},tabTextOn:{color:d.color.accent},tlRow:{flexDirection:"row",gap:10,paddingHorizontal:12,paddingVertical:4,alignItems:"flex-start"},tlAt:{width:46,color:d.color.textTertiary,fontSize:d.font.micro,fontFamily:"Menlo",paddingTop:3},tlLine:{width:12,alignItems:"center"},tlDot:{width:8,height:8,borderRadius:4,marginTop:5},tlStem:{width:1,flex:1,minHeight:18,backgroundColor:d.color.separator,marginTop:2},tlSource:{color:d.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6},sparkHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingTop:8},sparkCurrent:{color:d.color.text,fontSize:22,fontWeight:"700"},sparkUnit:{color:d.color.textSecondary,fontSize:d.font.caption,fontWeight:"500"},spark:{flexDirection:"row",alignItems:"flex-end",gap:2,paddingHorizontal:12,paddingTop:6,paddingBottom:6},sparkBar:{flex:1,borderRadius:1},live:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:8,paddingVertical:3,borderRadius:d.radius.badge,backgroundColor:d.color.dangerSoft},liveDot:{width:6,height:6,borderRadius:3,backgroundColor:d.color.danger},liveText:{color:d.color.danger,fontSize:9,fontWeight:"800",letterSpacing:.8},cmpHead:{flexDirection:"row",paddingHorizontal:12,paddingVertical:6,backgroundColor:d.color.fill,gap:8},cmpCol:{flex:1,color:d.color.textTertiary,fontSize:d.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},cmpRow:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,gap:8,alignItems:"flex-start"},cmpDiff:{backgroundColor:d.color.fill},cmpKey:{width:90,color:d.color.textSecondary,fontSize:d.font.caption},cmpVal:{flex:1,color:d.color.text,fontSize:d.font.caption,fontFamily:"Menlo"},cardImage:{width:"100%",height:140,backgroundColor:d.color.fill},cardText:{paddingHorizontal:12,paddingTop:10,paddingBottom:4,gap:4},cardTitle:{color:d.color.text,fontSize:d.font.row,fontWeight:"600"},fact:{flexDirection:"row",justifyContent:"space-between",gap:8},factLabel:{color:d.color.textSecondary,fontSize:d.font.caption},factValue:{color:d.color.text,fontSize:d.font.caption,fontWeight:"500"},carouselTitle:{color:d.color.text,fontSize:d.font.caption,fontWeight:"600",paddingBottom:8},carousel:{gap:8,paddingRight:8},carouselCard:{width:224,borderRadius:d.radius.card,borderWidth:x.hairlineWidth,borderColor:d.color.border,backgroundColor:d.color.surface,overflow:"hidden"},shot:{width:"100%",height:220,backgroundColor:d.color.fill},shotBig:{height:520},progress:{height:4,backgroundColor:d.color.fill,marginHorizontal:12,marginTop:6,marginBottom:8,borderRadius:2,overflow:"hidden"},progressFill:{height:4,backgroundColor:d.color.accent},step:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},stepMark:{width:20,height:20,borderRadius:10,backgroundColor:d.color.fillTertiary,alignItems:"center",justifyContent:"center"},stepDone:{backgroundColor:d.color.accent},stepFailed:{backgroundColor:d.color.danger},stepRunning:{backgroundColor:d.color.info},stepNum:{color:d.color.text,fontSize:d.font.micro,fontWeight:"700"},checkpoint:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:7,borderRadius:d.radius.chip,backgroundColor:d.color.fill},cpFlag:{width:8,height:8,borderRadius:2,backgroundColor:d.color.info},cpText:{color:d.color.textSecondary,fontSize:d.font.caption},cpRestore:{color:d.color.accent,fontSize:d.font.caption,fontWeight:"600"},taskHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingTop:12},banner:{flexDirection:"row",alignItems:"center",gap:8,paddingLeft:12,paddingRight:4,paddingVertical:4,borderRadius:d.radius.row,borderWidth:x.hairlineWidth},bannerText:{flex:1,fontSize:d.font.caption,fontWeight:"600"},fileIcon:{width:40,height:40,borderRadius:8,backgroundColor:d.color.fill,alignItems:"center",justifyContent:"center"},fileExt:{color:d.color.textSecondary,fontSize:10,fontWeight:"800"}});import{jsx as A}from"react/jsx-runtime";var Na=class extends Vi{constructor(){super(...arguments);this.state={failed:false}}static getDerivedStateFromError(){return{failed:true}}render(){return this.state.failed?A(l,{style:ja.fallback,testID:"buoy-block-render-failed",children:"This card couldn't be drawn \u2014 the data behind it is still in the conversation."}):this.props.children}},ja=x.create({fallback:{color:Zo.color.textTertiary,fontSize:Zo.font.micro,fontStyle:"italic",paddingVertical:6}}),Ma=e=>A(Zt,{block:e});function Zt({block:e}){return A(Na,{children:A(qa,{block:e})})}function qa({block:e}){switch(e.kind){case"choice":return A(dl,{block:e});case"confirm":return A(ul,{block:e});case"input":return A(pl,{block:e});case"table":return A(Wl,{block:e});case"keyValue":return A(Ol,{block:e});case"list":return A(Vl,{block:e});case"imageGrid":return A(Gl,{block:e});case"diff":return A(Nl,{block:e});case"chart":return A(jl,{block:e});case"steps":return A(Ml,{block:e});case"code":return A(_l,{block:e});case"actions":return A(Pe,{actions:e.actions,blockId:e.id});case"notice":return A(Kl,{block:e});case"finding":return A(Ql,{block:e});case"requestList":return A(ta,{block:e});case"requestCard":return A(ra,{block:e});case"ruleCard":return A(na,{block:e});case"screenElements":return A(ia,{block:e});case"routeChips":return A(la,{block:e});case"logList":return A(aa,{block:e});case"crash":return A(sa,{block:e});case"peek":return A(ca,{block:e});case"suggestions":return A(fa,{block:e});case"multiSelect":return A(ya,{block:e});case"select":return A(xa,{block:e});case"slider":return A(ka,{block:e});case"dateTime":return A(wa,{block:e});case"form":return A(va,{block:e});case"proposal":return A(Sa,{block:e});case"claim":return A(Ta,{block:e});case"details":return A(Ca,{block:e});case"tabs":return A(za,{block:e,renderNested:Ma});case"timeline":return A(Da,{block:e});case"sparkline":return A(Ra,{block:e});case"compare":return A($a,{block:e});case"card":return A(Aa,{block:e});case"cardCarousel":return A(Ba,{block:e});case"screenshot":return A(Ha,{block:e});case"plan":return A(La,{block:e});case"checkpoint":return A(Wa,{block:e});case"task":return A(Oa,{block:e});case"banner":return A(Pa,{block:e});case"file":return A(Va,{block:e});case"upload":return A(Ea,{block:e});default:return null}}import{useEffect as Fa,useState as yt}from"react";import{ChevronDown as Ua,ChevronRight as _a,Copy as Ka,night as T,RefreshCw as Qa}from"@buoy-gg/shared-ui/web";import{jsx as V,jsxs as ze}from"react/jsx-runtime";function Vt({label:e,onPress:t,children:o}){return V(f,{onPress:t,accessibilityRole:"button",accessibilityLabel:e,style:({pressed:r})=>[H.iconBtn,r&&H.pressed],children:o})}function Ja({id:e="chrome-actions"}){let t=Z(),[o,r]=yt(null),n=i=>void t.runAction({label:i,send:`__chrome__:${i}`},e);return ze(s,{style:H.actions,testID:"chrome-message-actions",children:[V(Vt,{label:"Copy",onPress:()=>n("copy"),children:V(Ka,{size:13,color:T.color.textSecondary})}),V(Vt,{label:"Retry",onPress:()=>n("retry"),children:V(Qa,{size:13,color:T.color.textSecondary})}),V(Vt,{label:"Good answer",onPress:()=>{r("up"),n("thumbs up")},children:V(l,{style:[H.glyph,o==="up"&&H.glyphOn],children:"\u{1F44D}"})}),V(Vt,{label:"Bad answer",onPress:()=>{r("down"),n("thumbs down")},children:V(l,{style:[H.glyph,o==="down"&&H.glyphOn],children:"\u{1F44E}"})}),V(Vt,{label:"Export",onPress:()=>n("export transcript"),children:V(l,{style:H.textBtn,children:"Export"})})]})}function Ga({text:e,live:t}){let[o,r]=yt(false);return ze(s,{style:H.reasoning,testID:"chrome-reasoning",children:[ze(f,{onPress:()=>r(n=>!n),style:H.reasoningHead,accessibilityRole:"button",accessibilityState:{expanded:o},children:[t?V(Lt,{size:"small",color:T.color.textTertiary}):null,V(l,{style:H.reasoningTitle,children:t?"Working it out\u2026":"How I got here"}),o?V(Ua,{size:12,color:T.color.textTertiary}):V(_a,{size:12,color:T.color.textTertiary})]}),o?V(l,{style:H.reasoningBody,children:e}):null]})}function Ya({label:e}){let[t,o]=yt(0);return Fa(()=>{let r=setInterval(()=>o(n=>n+250),250);return()=>clearInterval(r)},[]),ze(s,{style:H.elapsed,testID:"chrome-elapsed",children:[V(Lt,{size:"small",color:T.color.textSecondary}),V(l,{style:H.elapsedLabel,children:e}),ze(l,{style:H.elapsedMs,children:[(t/1e3).toFixed(1),"s"]})]})}function Xa(){let[e,t]=yt(""),[o,r]=yt(null);return ze(s,{style:H.composerWrap,testID:"chrome-queue",children:[o?ze(s,{style:H.queuedRow,children:[ze(l,{style:H.queuedText,numberOfLines:1,children:['Queued: "',o,'"']}),V(f,{onPress:()=>r(null),children:V(l,{style:H.queuedCancel,children:"Cancel"})})]}):null,ze(s,{style:H.composer,children:[V(Xe,{style:H.composerInput,value:e,onChangeText:t,placeholder:"Agent is busy \u2014 type and it sends next",placeholderTextColor:T.color.placeholder}),V(f,{disabled:!e.trim(),onPress:()=>{r(e.trim()),t("")},style:[H.queueBtn,!e.trim()&&{opacity:.5}],children:V(l,{style:H.queueBtnText,children:"Queue"})})]})]})}function Za({at:e}){return ze(s,{style:H.divider,testID:"chrome-divider",children:[V(s,{style:H.dividerLine}),ze(l,{style:H.dividerText,children:["App reloaded \xB7 ",e]}),V(s,{style:H.dividerLine})]})}function es({at:e}){return V(l,{style:H.timestamp,children:e})}function ts({text:e}){let t=Z(),[o,r]=yt(false),[n,i]=yt(e);return V(s,{style:H.userWrap,testID:"chrome-edit-bubble",children:o?ze(s,{style:H.editBox,children:[V(Xe,{style:H.editInput,value:n,onChangeText:i,multiline:true}),ze(s,{style:H.editActions,children:[V(f,{onPress:()=>{r(false),t.runAction({label:"re-run edited",send:`__chrome__:re-run "${n}"`},"chrome-edit")},style:H.editPrimary,children:V(l,{style:H.editPrimaryText,children:"Re-run from here"})}),V(f,{onPress:()=>{r(false),t.runAction({label:"branch",send:`__chrome__:branch "${n}"`},"chrome-edit")},style:H.editPlate,children:V(l,{style:H.editPlateText,children:"Branch"})}),V(f,{onPress:()=>r(false),style:H.editPlate,children:V(l,{style:H.editPlateText,children:"Cancel"})})]})]}):ze(f,{onLongPress:()=>r(true),onPress:()=>r(true),style:H.bubble,accessibilityRole:"button",accessibilityLabel:"Edit message",children:[V(l,{style:H.bubbleText,children:n}),V(l,{style:H.bubbleHint,children:"tap to edit \xB7 2 branches"})]})})}var H=x.create({actions:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:2},iconBtn:{paddingHorizontal:8,paddingVertical:6,borderRadius:T.radius.badge},pressed:{backgroundColor:T.color.fill},glyph:{fontSize:13,opacity:.6},glyphOn:{opacity:1},textBtn:{color:T.color.textSecondary,fontSize:T.font.micro,fontWeight:"600"},reasoning:{borderRadius:T.radius.row,backgroundColor:T.color.fill,overflow:"hidden"},reasoningHead:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:8},reasoningTitle:{flex:1,color:T.color.textSecondary,fontSize:T.font.caption,fontStyle:"italic"},reasoningBody:{color:T.color.textSecondary,fontSize:T.font.caption,lineHeight:18,paddingHorizontal:12,paddingBottom:10},elapsed:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:10,borderRadius:T.radius.card,borderWidth:x.hairlineWidth,borderColor:T.color.border,backgroundColor:T.color.surface},elapsedLabel:{flex:1,color:T.color.text,fontSize:T.font.body},elapsedMs:{color:T.color.textTertiary,fontSize:T.font.caption,fontFamily:"Menlo"},composerWrap:{gap:6},queuedRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:6,borderRadius:T.radius.row,backgroundColor:T.color.infoSoft},queuedText:{flex:1,color:T.color.text,fontSize:T.font.caption},queuedCancel:{color:T.color.info,fontSize:T.font.caption,fontWeight:"600"},composer:{flexDirection:"row",alignItems:"center",gap:8},composerInput:{flex:1,height:40,paddingHorizontal:16,borderRadius:20,borderWidth:x.hairlineWidth,borderColor:T.color.border,backgroundColor:T.color.surfaceElevated,color:T.color.text,fontSize:T.font.body},queueBtn:{paddingHorizontal:14,height:40,borderRadius:20,backgroundColor:T.color.button,alignItems:"center",justifyContent:"center"},queueBtnText:{color:T.color.text,fontSize:T.font.caption,fontWeight:"600"},divider:{flexDirection:"row",alignItems:"center",gap:10,paddingVertical:4},dividerLine:{flex:1,height:x.hairlineWidth,backgroundColor:T.color.border},dividerText:{color:T.color.textTertiary,fontSize:T.font.micro},timestamp:{alignSelf:"center",color:T.color.textTertiary,fontSize:T.font.micro},userWrap:{alignItems:"flex-end"},bubble:{maxWidth:"84%",paddingHorizontal:14,paddingVertical:9,borderRadius:18,borderBottomRightRadius:6,backgroundColor:T.color.accentFill,borderWidth:x.hairlineWidth,borderColor:T.color.accentBorder,gap:4},bubbleText:{color:T.color.text,fontSize:T.font.row,lineHeight:21},bubbleHint:{color:T.color.textTertiary,fontSize:10,textAlign:"right"},editBox:{width:"100%",gap:8},editInput:{minHeight:60,padding:12,borderRadius:T.radius.row,backgroundColor:T.color.surfaceElevated,color:T.color.text,fontSize:T.font.row,borderWidth:x.hairlineWidth,borderColor:T.color.accentBorderStrong},editActions:{flexDirection:"row",gap:8,justifyContent:"flex-end",flexWrap:"wrap"},editPrimary:{paddingHorizontal:12,paddingVertical:8,borderRadius:T.radius.row,backgroundColor:T.color.accent},editPrimaryText:{color:T.color.onAccent,fontSize:T.font.caption,fontWeight:"600"},editPlate:{paddingHorizontal:12,paddingVertical:8,borderRadius:T.radius.row,backgroundColor:T.color.button},editPlateText:{color:T.color.text,fontSize:T.font.caption,fontWeight:"600"}});import{useState as $r}from"react";import{AlertTriangle as os,ChevronDown as rs,night as P}from"@buoy-gg/shared-ui/web";import{jsx as ge,jsxs as Et}from"react/jsx-runtime";function Ar({pending:e,onAnswer:t}){let[o,r]=$r("");return Et(s,{style:Q.card,testID:"buoy-ask-buoy-approval",children:[Et(s,{style:Q.titleRow,children:[ge(os,{size:14,color:P.color.warning}),ge(l,{style:Q.title,children:"Allow this change?"})]}),e.restored?ge(l,{style:Q.restored,testID:"buoy-ask-buoy-approval-restored",children:"Asked before the app restarted \u2014 check it still applies."}):null,ge(l,{style:Q.label,children:e.label}),ge(l,{style:Q.reason,children:e.reason}),e.description?ge(ns,{text:e.description}):null,ge(Xe,{testID:"buoy-ask-buoy-approval-note",value:o,onChangeText:r,placeholder:"Add a note for the agent (optional)",placeholderTextColor:P.color.textTertiary,style:Q.note,returnKeyType:"done",blurOnSubmit:true}),Et(s,{style:Q.actions,children:[ge(f,{testID:"buoy-ask-buoy-approve",accessibilityRole:"button",onPress:()=>t({approved:true,reason:o}),style:({pressed:n})=>[Q.button,Q.approve,n&&Q.pressed],children:ge(l,{style:Q.approveText,children:"Allow"})}),e.restored?null:ge(f,{testID:"buoy-ask-buoy-approve-trust",accessibilityRole:"button",onPress:()=>t({approved:true,reason:o,trust:true}),style:({pressed:n})=>[Q.button,Q.trust,n&&Q.pressed],children:ge(l,{style:Q.trustText,children:"Allow for this chat"})}),ge(f,{testID:"buoy-ask-buoy-reject",accessibilityRole:"button",onPress:()=>t({approved:false,reason:o}),style:({pressed:n})=>[Q.button,Q.reject,n&&Q.pressed],children:ge(l,{style:Q.rejectText,children:"Not now"})})]})]})}function ns({text:e}){let[t,o]=$r(false);return Et(s,{children:[Et(f,{testID:"buoy-ask-buoy-approval-details",accessibilityRole:"button",accessibilityState:{expanded:t},onPress:()=>o(r=>!r),style:({pressed:r})=>[Q.disclosure,r&&Q.pressed],hitSlop:6,children:[ge(s,{style:t?Q.chevronOpen:Q.chevronClosed,children:ge(rs,{size:12,color:P.color.textTertiary})}),ge(l,{style:Q.disclosureText,children:t?"Hide details":"Details"})]}),t?ge(Fe,{style:Q.detail,contentContainerStyle:Q.detailContent,nestedScrollEnabled:true,children:ge(l,{style:Q.description,children:e})}):null]})}var Q=x.create({card:{marginHorizontal:P.gutter,marginBottom:10,padding:P.cardPad,borderRadius:P.radius.card,borderWidth:x.hairlineWidth,borderColor:P.color.accentBorderStrong,backgroundColor:P.color.surface,gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6},title:{color:P.color.text,fontSize:P.font.caption,fontWeight:"600"},label:{color:P.color.text,fontSize:P.font.row,fontWeight:"600",lineHeight:20},description:{color:P.color.textSecondary,fontSize:P.font.caption,lineHeight:18},reason:{color:P.color.warning,fontSize:P.font.caption,lineHeight:18},restored:{color:P.color.info,backgroundColor:P.color.infoSoft,fontSize:P.font.micro,lineHeight:16,paddingHorizontal:8,paddingVertical:5,borderRadius:8},disclosure:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:4},disclosureText:{color:P.color.textTertiary,fontSize:P.font.micro,fontWeight:"600"},chevronOpen:{transform:[{rotate:"0deg"}]},chevronClosed:{transform:[{rotate:"-90deg"}]},detail:{maxHeight:150,marginTop:2},detailContent:{paddingBottom:2},note:{color:P.color.text,fontSize:P.font.caption,paddingHorizontal:10,paddingVertical:7,borderRadius:P.radius.row,borderWidth:x.hairlineWidth,borderColor:P.color.border,backgroundColor:P.color.button,marginTop:2},actions:{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:6},button:{paddingHorizontal:16,paddingVertical:9,borderRadius:P.radius.row},approve:{backgroundColor:P.color.accent},approveText:{color:P.color.onAccent,fontWeight:"600",fontSize:P.font.caption},trust:{backgroundColor:P.color.button,borderWidth:x.hairlineWidth,borderColor:P.color.accentBorderStrong},trustText:{color:P.color.accent,fontWeight:"600",fontSize:P.font.caption},reject:{backgroundColor:P.color.button},rejectText:{color:P.color.text,fontSize:P.font.caption},pressed:{opacity:.7}});import{useSyncExternalStore as is}from"react";import{ChevronDown as ls,ChevronRight as as,night as oe}from"@buoy-gg/shared-ui/web";import{isReversible as Br}from"@buoy-gg/agent-core/web";import{jsx as ot,jsxs as at}from"react/jsx-runtime";var Hr=[];function Lr(e){return is(t=>e?.subscribe(t)??(()=>{}),()=>e?.list()??Hr,()=>e?.list()??Hr)}function Wr({ledger:e,onUndoAll:t,expanded:o,onToggle:r}){let n=Lr(e).filter(C=>!C.undoneAt),i=n.filter(C=>C.effect.kind!=="transient");if(i.length===0)return null;let a=i.filter(C=>Br(C.effect)),h=i.length-a.length,u=n.length-i.length,g=o?ls:as,y=[a.length>0?`${a.length} undoable`:null,h>0?`${h} permanent`:null].filter(Boolean).join(" \xB7 ");return at(s,{style:ue.wrap,children:[at(f,{testID:"buoy-ask-buoy-changes-bar",accessibilityRole:"button",accessibilityState:{expanded:o},onPress:r,style:ue.bar,children:[ot(s,{style:ue.dot}),ot(l,{style:ue.summary,numberOfLines:1,children:"Changed this app"}),ot(l,{style:ue.counts,numberOfLines:1,children:y}),ot(g,{size:12,color:oe.color.textSecondary})]}),o&&at(s,{style:ue.panel,children:[at(Fe,{style:ue.panelScroll,testID:"buoy-ask-buoy-changes-scroll",keyboardShouldPersistTaps:"handled",children:[i.map(C=>{let j=!Br(C.effect);return at(s,{style:ue.row,children:[ot(l,{style:ue.rowLabel,children:C.effect.label}),ot(l,{style:[ue.rowTag,j&&ue.rowTagMuted],children:j?"Permanent":"Undoable"})]},C.id)}),u>0&&ot(s,{style:ue.row,children:at(l,{style:[ue.rowLabel,ue.rowLabelMuted],children:["Also did ",u," one-shot action",u===1?"":"s"," (navigation, taps) \u2014 nothing to undo."]})})]}),at(s,{style:ue.footer,children:[a.length>0&&ot(f,{testID:"buoy-ask-buoy-undo-all",accessibilityRole:"button",onPress:t,style:({pressed:C})=>[ue.undo,C&&ue.pressed],children:at(l,{style:ue.undoText,children:["Undo ",a.length," change",a.length===1?"":"s"]})}),h>0&&ot(l,{style:ue.footnote,children:"Permanent changes can't be undone from here."})]})]})]})}var ue=x.create({wrap:{borderBottomWidth:x.hairlineWidth,borderBottomColor:oe.color.border,backgroundColor:oe.color.warningSoft},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:oe.gutter,paddingVertical:10},dot:{width:7,height:7,borderRadius:4,backgroundColor:oe.color.warning},summary:{color:oe.color.text,fontSize:oe.font.caption,fontWeight:"600"},counts:{flex:1,color:oe.color.textSecondary,fontSize:oe.font.caption},panel:{paddingHorizontal:oe.gutter,paddingBottom:12,gap:10},panelScroll:{maxHeight:180},row:{flexDirection:"row",alignItems:"flex-start",gap:10,paddingVertical:8,borderTopWidth:x.hairlineWidth,borderTopColor:oe.color.separator},rowLabel:{flex:1,color:oe.color.text,fontSize:oe.font.caption,lineHeight:18},rowTag:{color:oe.color.accent,fontSize:oe.font.micro,fontWeight:"600",letterSpacing:.6,textTransform:"uppercase",paddingTop:2},rowTagMuted:{color:oe.color.textTertiary},rowLabelMuted:{color:oe.color.textTertiary},footer:{flexDirection:"row",alignItems:"center",gap:12,flexWrap:"wrap"},undo:{paddingHorizontal:14,paddingVertical:8,borderRadius:oe.radius.row,backgroundColor:oe.color.button},undoText:{color:oe.color.accent,fontSize:oe.font.caption,fontWeight:"600"},footnote:{flex:1,color:oe.color.textTertiary,fontSize:oe.font.micro},pressed:{opacity:.7}});function ss(e){let t={};for(let o of e){let r=o.effect;if(r.kind==="network-override")t[r.ruleId]=o.undoneAt?{deleted:true}:{enabled:true};else if(r.kind==="inverse-call"&&r.toolId==="network"&&r.action==="setOverrideRuleEnabled"&&typeof r.params.id=="string"){let n=r.params.enabled===true;if(t[r.params.id]?.deleted)continue;t[r.params.id]={enabled:o.undoneAt?n:!n}}}return t}import{useCallback as cs,useEffect as Or,useRef as ds,useState as us}from"react";import{night as ke}from"@buoy-gg/shared-ui/web";import{jsx as st,jsxs as ps}from"react/jsx-runtime";var Pr=40,hs=120,Vr=Bt.OS==="ios"?10:6,gs=16;function Er({onSend:e,onStop:t,busy:o,draft:r,onDraftTaken:n,disabled:i,placeholder:a,focusKey:h,canFocus:u=true}){let[g,y]=us(""),C=ds(null);Or(()=>{!h||!u||i||C.current?.focus()},[h,u,i]),Or(()=>{r&&(y(ee=>ee?`${ee} ${r}`:r),n?.())},[r,n]);let j=cs(()=>{let ee=g.trim();ee&&(y(""),e(ee))},[g,e]),q=g.trim().length>0&&!o&&!i,X=g.trim().length>0&&o&&!i;return ps(s,{style:be.wrap,children:[st(s,{style:[be.field,i&&be.fieldDisabled],children:st(Xe,{ref:C,testID:"buoy-ask-buoy-input",style:[be.input,g.length===0&&be.inputEmpty],value:g,onChangeText:y,placeholder:a??(i?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:ke.color.placeholder,multiline:true,editable:!i,keyboardType:"ascii-capable",autoCorrect:true,autoCapitalize:"sentences",blurOnSubmit:false,onSubmitEditing:j,returnKeyType:"send",maxLength:4e3})}),X&&st(f,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:j,style:({pressed:ee})=>[be.button,be.queue,ee&&be.pressed],children:st(l,{style:[be.sendGlyph,{color:ke.color.accent}],children:"\u2191"})}),o?st(f,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:t,style:({pressed:ee})=>[be.button,be.stop,ee&&be.pressed],children:st(s,{style:be.stopGlyph})}):st(f,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!q,onPress:j,style:({pressed:ee})=>[be.button,q?be.sendOn:be.sendOff,ee&&q&&be.pressed],children:st(l,{style:[be.sendGlyph,{color:q?ke.color.onAccent:ke.color.textTertiary}],children:"\u2191"})})]})}var be=x.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:ke.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:x.hairlineWidth,borderTopColor:ke.color.border,backgroundColor:ke.color.bg},field:{flex:1,minHeight:Pr,justifyContent:"center",borderRadius:20,borderWidth:x.hairlineWidth,borderColor:ke.color.border,backgroundColor:ke.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:hs,paddingHorizontal:gs,paddingTop:Vr,paddingBottom:Vr,color:ke.color.text,fontSize:ke.font.row},inputEmpty:{height:Pr},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:ke.color.accent},sendOff:{backgroundColor:ke.color.fill},stop:{backgroundColor:ke.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:x.hairlineWidth,borderColor:ke.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:ke.color.text},pressed:{opacity:.7}});import{useEffect as bs,useRef as Nr}from"react";import{jsx as fs}from"react/jsx-runtime";function ys({children:e}){let t=Nr(null),o=Nr(new se.Value(0)).current;return bs(()=>{if(Bt.OS!=="ios")return;let r=(h,u)=>{se.timing(o,{toValue:h,duration:u.duration||250,easing:Tt.bezier(.17,.59,.4,.77),useNativeDriver:false}).start()},n=h=>{let u=t.current;u&&u.measureInWindow((g,y,C,j)=>{let q=y+j-h.endCoordinates.screenY;r(Math.max(0,q),h)})},i=h=>r(0,h),a=[uo.addListener("keyboardWillChangeFrame",n),uo.addListener("keyboardWillHide",i)];return()=>a.forEach(h=>h.remove())},[o]),fs(se.View,{ref:t,style:[ms.flex,{paddingBottom:o}],children:e})}var ms=x.create({flex:{flex:1}});import{useEffect as jr,useState as Mr}from"react";import{Check as xs,Copy as ks,FileText as ws,ModalHeader as eo,night as _e,Otto as vs,Plus as Ss,SettingsSolid as Ts,realNow as xo}from"@buoy-gg/shared-ui/web";import{toolTitle as Cs}from"@buoy-gg/agent-core/web";var zs=e=>e.effect==="read"&&e.status==="ok";function Is(e){let t=[],o=[],r=()=>{if(o.length!==0){if(o.length===1)t.push({kind:"call",call:o[0]});else{let n=[...new Set(o.map(i=>Cs(i.toolId)))];t.push({kind:"reads",id:o.map(i=>i.id).join("+"),calls:o,label:`Looked at ${Ds(n)}`,count:o.length})}o=[]}};for(let n of e){if(zs(n)){o.push(n);continue}r(),t.push({kind:"call",call:n})}return r(),t}function Ds(e){return e.length<=1?e[0]??"":e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`}function Rs(e){let t=[];e.startedAt!==void 0&&e.endedAt!==void 0&&e.endedAt>=e.startedAt&&t.push(qr(e.endedAt-e.startedAt));let o=e.toolCalls.length;if(o>0){t.push(`${o} action${o===1?"":"s"}`);let r=u=>e.toolCalls.filter(g=>g.status===u).length,n=r("failed"),i=r("refused"),a=r("declined"),h=r("stopped");n&&t.push(`${n} failed`),i&&t.push(`${i} refused`),a&&t.push(`${a} declined`),h&&t.push(`${h} not run`)}return t.length?t.join(" \xB7 "):null}function qr(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let o=Math.floor(t/60),r=t%60;return o<60?`${o}m ${String(r).padStart(2,"0")}s`:`${Math.floor(o/60)}h ${String(o%60).padStart(2,"0")}m`}import{jsx as Be,jsxs as Fr}from"react/jsx-runtime";var $s=200,As=()=>"";function Ur({configured:e,busy:t,failed:o=false,activeLabel:r,awaitingApproval:n=false,startedAt:i=null,stopping:a=false,readOnly:h=false,toolCount:u,hasMessages:g,onBack:y,onReset:C,getTranscript:j,onOpenSettings:q,onTicket:X}){let{copied:ee,copy:fe}=fo(j??As),[Ke,Re]=Mr(false);jr(()=>{t?r&&Re(true):Re(false)},[t,r]);let Qe=t&&!n&&i!==null,[Je,ut]=Mr(()=>xo());jr(()=>{if(!Qe)return;ut(xo());let lt=setInterval(()=>ut(xo()),1e3);return()=>clearInterval(lt)},[Qe]);let pt=Qe&&i!==null?qr(Je-i):null,wt=e?o?"error":t?r||Ke?"robot":"thinking":"idle":"confused",Me=a?"Stopping":r??"Thinking",it=e?n?"Waiting for you":t?pt?`${Me} \xB7 ${pt}`:`${Me}\u2026`:h?`Read only${u>0?` \xB7 ${u} tool${u===1?"":"s"}`:""}`:u>0?`Ready \xB7 ${u} tool${u===1?"":"s"} available`:"Ready":"Not set up in this app";return Fr(eo,{children:[y?Be(eo.Navigation,{onBack:y}):null,Be(s,{style:ct.otto,testID:"buoy-ask-buoy-otto",children:Be(vs,{state:wt,pixelSize:2,tickMs:$s,water:false})}),Be(eo.Content,{title:"Ask Buoy",subtitle:it,testID:"buoy-ask-buoy-title"}),Fr(eo.Actions,{children:[X?Be(Ht,{testID:"buoy-ask-buoy-ticket",accessibilityRole:"button",accessibilityLabel:"Summarize for a ticket",disabled:!g||t,onPress:X,style:[ct.actionBtn,(!g||t)&&ct.actionBtnDisabled],children:Be(ws,{size:14,color:g&&!t?_e.color.textSecondary:_e.color.textTertiary})}):null,j?Be(Ht,{testID:"buoy-ask-buoy-copy-chat",accessibilityRole:"button",accessibilityLabel:ee?"Conversation copied":"Copy conversation",disabled:!g,onPress:fe,style:[ct.actionBtn,!g&&ct.actionBtnDisabled],children:ee?Be(xs,{size:14,color:_e.color.accent}):Be(ks,{size:14,color:g?_e.color.textSecondary:_e.color.textTertiary})}):null,q?Be(Ht,{testID:"buoy-ask-buoy-settings",accessibilityRole:"button",accessibilityLabel:"Settings",onPress:q,style:ct.actionBtn,children:Be(Ts,{size:14,color:_e.color.textSecondary})}):null,Be(Ht,{testID:"buoy-ask-buoy-reset",accessibilityRole:"button",accessibilityLabel:"New conversation",disabled:!g,onPress:C,style:[ct.actionBtn,!g&&ct.actionBtnDisabled],children:Be(Ss,{size:14,color:g?_e.color.textSecondary:_e.color.textTertiary})})]})]})}var ct=x.create({otto:{marginRight:8,justifyContent:"center"},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:_e.color.buttonSurface,borderWidth:1,borderColor:_e.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{AlertTriangle as Bs,night as ce,ToggleRow as ko}from"@buoy-gg/shared-ui/web";import{useSyncExternalStore as Hs}from"react";import{definePersistedSetting as Ls,devToolsStorageKeys as Ws}from"@buoy-gg/shared-ui/web";var wo={showThinking:false,bypassApprovals:false,readOnly:false},vo=Ls(`${Ws.base}_ask_buoy_settings`,wo,{sanitize:e=>({showThinking:e.showThinking===true,bypassApprovals:e.bypassApprovals===true,readOnly:e.readOnly===true})}),mt=wo,So=false,To=new Set;function _r(){for(let e of To)try{e()}catch{}}var xt={get:()=>mt,subscribe(e){return To.add(e),So||(So=true,vo.load().then(t=>{mt=t,_r()})),()=>To.delete(e)},set(e,t){mt[e]!==t&&(mt={...mt,[e]:t},_r(),vo.save(mt))},reset(){mt=wo,So=false,vo.clear()}};function It(){return Hs(xt.subscribe,xt.get,xt.get)}import{idFactory as Kr}from"@buoy-gg/agent-core/web";import{realNow as Nt}from"@buoy-gg/shared-ui/web";var to=Kr("m"),Qr=400;function Os(e){if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e);return t.length>Qr?`${t.slice(0,Qr)}\u2026`:t}catch{return}}var Ps=Kr("q"),L={messages:[],busy:false,stopping:false,pending:null,trusted:[],notice:null,configured:false,answers:{},awaitingBlockId:null,actionState:{},queued:[],draft:null,usage:{input:0,output:0,requests:0},meta:{}},Co=new Set,Jr=null,zo=null;function G(e){L={...L,...e};for(let t of Co)try{t()}catch{}}var b={getState:()=>L,subscribe(e){return Co.add(e),()=>Co.delete(e)},setLedger(e){Jr=e},getLedger(){return Jr},holdSession(e,t){zo={session:e,signature:t}},getHeldSession(){return zo},setNotice(e){G({notice:e})},setConfigured(e){e!==L.configured&&G({configured:e})},setMeta(e){Object.keys(e).every(t=>L.meta[t]===e[t])||G({meta:{...L.meta,...e}})},addUser(e){G({messages:[...L.messages,{id:to(),role:"user",text:e,toolCalls:[],blocks:[]}],busy:true})},beginTurn(){G({busy:true})},enqueue(e){let t={id:Ps(),text:e};return G({queued:[...L.queued,t]}),t},removeQueued(e){L.queued.some(t=>t.id===e)&&G({queued:L.queued.filter(t=>t.id!==e)})},shiftQueued(){let[e,...t]=L.queued;if(e)return G({queued:t}),e},takeQueuedToDraft(e){let t=L.queued.find(o=>o.id===e);t&&G({queued:L.queued.filter(o=>o.id!==e),draft:t.text})},requestStop(){!L.busy||L.stopping||G({stopping:true})},clearDraft(){L.draft!==null&&G({draft:null})},removeMessage(e){G({messages:L.messages.filter(t=>t.id!==e)})},recordAnswer(e){G({answers:{...L.answers,[e.blockId]:e},awaitingBlockId:L.awaitingBlockId===e.blockId?null:L.awaitingBlockId})},setActionState(e,t){let o={...L.actionState};t===null?delete o[e]:o[e]=t,G({actionState:o})},startAssistant(){let e=to();return G({messages:[...L.messages,{id:e,role:"assistant",text:"",toolCalls:[],blocks:[],streaming:true,startedAt:Nt()}]}),e},applyEvent(e,t){if(t.type==="history-trimmed"){let r=L.messages.findIndex(a=>a.id===e),n={id:to(),role:"assistant",system:true,text:`Older messages were trimmed from the agent's memory (${t.droppedRounds} exchange${t.droppedRounds===1?"":"s"}).`+(t.droppedPinned?` ${t.droppedPinned===1?"One of them made a change that is":`${t.droppedPinned} of them made changes that are`} still applied \u2014 the changes bar still lists ${t.droppedPinned===1?"it":"them"}, but the agent no longer remembers making ${t.droppedPinned===1?"it":"them"}.`:" It may not recall setup from earlier in this chat \u2014 the changes bar still lists what is applied."),toolCalls:[],blocks:[],endedAt:Nt()},i=[...L.messages];i.splice(r<0?i.length:r,0,n),G({messages:i});return}let o=L.messages.map(r=>{if(r.id!==e)return r;switch(t.type){case"retrying":{let n=Math.max(1,Math.round(t.inMs/1e3));return{...r,waiting:t.reason==="throttled"?`Endpoint busy \u2014 retrying in ${n}s (${t.attempt} of ${t.maxAttempts})`:"Request too large \u2014 trimming older messages and retrying"}}case"text":return{...r,waiting:void 0,text:(r.breakBeforeNextText||t.breakBefore)&&r.text?`${r.text.trimEnd()}
|
|
10
9
|
|
|
11
|
-
${t.delta}`:r.text+t.delta,breakBeforeNextText:!1};case"reasoning":return{...r,breakBeforeNextText:!0,reasoning:[...r.reasoning??[],{text:t.text,afterCalls:r.toolCalls.length}]};case"tool-start":return{...r,waiting:void 0,toolCalls:[...r.toolCalls,{id:t.id,toolId:t.toolId,action:t.action,label:t.label,description:t.description,status:"running",params:Ol(t.params),effect:t.effect,startedAt:Date.now()}]};case"tool-end":return{...r,breakBeforeNextText:!0,toolCalls:r.toolCalls.map(n=>n.id===t.id?{...n,status:!t.ok&&t.summary==="refused"?"refused":!t.ok&&t.summary==="declined"?"declined":!t.ok&&t.summary==="stopped"?"stopped":t.ok?"ok":"failed",summary:t.summary,durationMs:t.durationMs,result:t.result}:n)};case"tool-verified":return{...r,toolCalls:r.toolCalls.map(n=>n.id===t.id?{...n,verification:t.verification}:n)};case"block":return{...r,breakBeforeNextText:!0,blocks:[...r.blocks,{block:t.block,forToolCallId:t.forToolCallId}]};case"usage":return{...r,usage:{input:(r.usage?.input??0)+t.input,output:(r.usage?.output??0)+t.output,requests:(r.usage?.requests??0)+1}};case"error":return{...r,waiting:void 0,error:t.message};default:return r}});Z({messages:o,...t.type==="awaiting-user"?{awaitingBlockId:t.blockId}:{},...t.type==="usage"?{usage:{input:W.usage.input+t.input,output:W.usage.output+t.output,requests:W.usage.requests+1}}:{}})},markStopped(e){Z({messages:W.messages.map(t=>t.id===e?{...t,stopped:!0}:t)})},finishAssistant(e){Z({messages:W.messages.map(t=>t.id===e?{...t,streaming:!1,endedAt:Date.now()}:t),busy:!1,stopping:!1})},askApproval(e){return new Promise(t=>{Z({pending:{...e,resolve:t}})})},answerApproval(e){let t=W.pending,o=typeof e=="boolean"?e:e.approved,r=typeof e!="boolean"&&e.trust===!0&&o,n=t?`${t.toolId}.${t.action}`:"";Z({pending:null,...r&&t&&!W.trusted.some(s=>s.key===n)?{trusted:[...W.trusted,{key:n,label:t.label}]}:{}}),t?.resolve(e)},untrust(e){Ko?.session.untrust(e),Z({trusted:W.trusted.filter(t=>t.key!==e)})},restorePending(e){return W.pending||W.busy?!1:(Z({pending:{...e,restored:!0,resolve:()=>{}}}),!0)},addNote(e){Z({messages:[...W.messages,{id:co(),role:"assistant",text:e,toolCalls:[],blocks:[],endedAt:Date.now()}]})},hydrate(e){return W.messages.length>0||W.busy?!1:(Z({messages:e.messages.map(t=>({...t,restored:!0})),answers:e.answers,usage:e.usage,queued:e.queued??[]}),!0)},reset(){W.pending?.resolve(!1),Z({messages:[],busy:!1,stopping:!1,pending:null,trusted:[],notice:null,answers:{},awaitingBlockId:null,actionState:{},queued:[],draft:null,usage:{input:0,output:0,requests:0}})}};function Qo(e){return e.pending?"awaitingApproval":e.busy?e.stopping?"stopping":"running":e.awaitingBlockId?"awaitingAnswer":"idle"}function uo(e){let t=Qo(e);if(t==="running"||t==="stopping")return null;if(t==="awaitingApproval")return"Paused \u2014 answer the approval above first.";if(t==="awaitingAnswer")return"Paused \u2014 answer the question above first.";let o=e.messages[e.messages.length-1];return o?.role==="assistant"&&o.error?"Paused \u2014 the last turn failed.":o?.role==="assistant"&&o.stopped?"Paused \u2014 you stopped the last turn.":null}import{getUseIsPro as Jl,hasAccountAccess as _t,subscribeAccountAccess as Yl}from"@buoy-gg/shared-ui/web";import{useCallback as Le,useEffect as Tt,useMemo as Xl,useRef as Pt,useState as Zl,useSyncExternalStore as ec}from"react";import{dispatchToolAction as ki,listSnapshotToolIds as tc,listToolActions as oc,readToolSnapshot as rc,waitForToolRegistry as Si}from"@buoy-gg/shared-ui/web";import{answerToText as Ci,CATALOG as Zo,createAskBuoySession as nc,readTargetDigest as ic,runGatedAction as vi,SNAPSHOT_ACTION as Bi}from"@buoy-gg/agent-core/web";import{persistentStorage as Yo,devToolsStorageKeys as Ml}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as Go}from"@buoy-gg/shared-ui/web";var Wl=[{re:/\bBearer\s+[A-Za-z0-9._~+/-]{12,}=*/gi,label:"[bearer token removed]"},{re:/\beyJ[A-Za-z0-9._-]{20,}/g,label:"[jwt removed]"},{re:/\bsk-[A-Za-z0-9_-]{16,}/g,label:"[api key removed]"},{re:/\bBUOY-[A-Z0-9-]{8,}/g,label:"[license key removed]"},{re:/("|')?(authorization|x-api-key|api[_-]?key|password|secret|access_token|refresh_token)\1?\s*[:=]\s*("|')?[^\s"',}]{6,}/gi,label:"[credential removed]"}];function Rt(e){if(!e)return e;let t=e;for(let{re:o,label:r}of Wl)t=t.replace(o,r);return t}var Xo=`${Ml.base}_ask_buoy_transcript`,Jo=1,hi=60,Nl=256e3,ql="[not kept across a restart \u2014 read it again if you need it]";function ut(e){return e&&Rt(e)}function Fl(e){let t=e.streaming===!0;return{...e,text:ut(e.text),streaming:!1,reasoning:e.reasoning?.map(o=>({...o,text:ut(o.text)})),toolCalls:e.toolCalls.map(o=>{let r=o.params?ut(o.params):void 0,{result:n,...s}=o;return o.status==="running"?{...s,params:r,status:"failed",summary:"Interrupted"}:{...s,params:r}}),error:e.error??(t&&!e.text?"This answer was interrupted \u2014 the app restarted mid-turn.":void 0)}}function _l(e){return e.map(t=>t.role==="tool-results"?{...t,results:t.results.map(o=>({...o,content:ql}))}:t.role==="assistant"?{...t,text:ut(t.text)}:{...t,text:ut(t.text)})}function Ul(e){let t={...e,messages:e.messages.slice(-hi),history:e.history.slice(-hi*2)},o=JSON.stringify(t);for(;o.length>Nl&&t.messages.length>1;)t={...t,messages:t.messages.slice(1),history:t.history.slice(Math.min(2,t.history.length))},o=JSON.stringify(t);return t}function Kl(e){if(!e)return null;let t=e.params;if(!t)return null;let o;try{o=JSON.stringify(t)}catch{return null}return Rt(o)!==o?null:{id:e.id,toolId:e.toolId,action:e.action,label:ut(e.label),description:e.description?ut(e.description):void 0,reason:ut(e.reason),params:t,targetDigest:e.targetDigest}}function jl(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.id=="string"&&typeof t.toolId=="string"&&typeof t.action=="string"&&typeof t.label=="string"&&typeof t.reason=="string"&&typeof t.params=="object"&&t.params!==null}function Ql(e){if(!e?.length)return;let t=e.filter(o=>{try{let r=JSON.stringify(o);return Rt(r)===r}catch{return!1}});return t.length?t:void 0}function mi(e){return Ul({v:Jo,savedAt:Date.now(),messages:e.messages.map(Fl),history:_l(e.history),answers:e.answers,usage:e.usage,pending:Kl(e.pending),ledger:Ql(e.ledger),queued:e.queued?.length?e.queued.map(t=>({id:t.id,text:ut(t.text)})):void 0})}function Gl(e){if(!e)return null;try{let t=JSON.parse(e);return t?.v!==Jo||!Array.isArray(t.messages)||t.messages.length===0?null:{v:Jo,savedAt:typeof t.savedAt=="number"?t.savedAt:0,messages:t.messages,history:Array.isArray(t.history)?t.history:[],answers:t.answers??{},usage:t.usage??{input:0,output:0,requests:0},pending:jl(t.pending)?t.pending:null,ledger:Array.isArray(t.ledger)?t.ledger.filter(o=>typeof o=="object"&&o!==null&&typeof o.id=="string"):void 0,queued:Array.isArray(t.queued)?t.queued.filter(o=>typeof o=="object"&&o!==null&&typeof o.id=="string"&&typeof o.text=="string"):void 0}}catch{return null}}async function xi(){try{return Gl(await Yo.getItem(Xo))}catch{return null}}async function wi(e){try{await Yo.setItem(Xo,JSON.stringify(e))}catch{}}async function Ti(){try{await Yo.removeItem(Xo)}catch{}}function po(){h.getHeldSession()?.session.reset(),h.reset(),Ti()}async function go(e){if(h.getState().busy)return{cleared:!1,reverted:0,failed:[{label:"A turn is running",error:"Stop it first."}]};let t=h.getLedger();if(e.undoFirst&&t){let o=await t.revertAll(e.dispatch);return o.failed.length>0?{cleared:!1,reverted:o.reverted,failed:o.failed}:(po(),{cleared:!0,reverted:o.reverted,failed:[]})}return po(),{cleared:!0,reverted:0,failed:[]}}var Ut=typeof R<"u"&&!R;function sc(e){for(let t of h.getState().messages)if(t.restored)for(let o of t.blocks){let r=o.block;if(r?.id!==e)continue;let n=r.question??r.label??r.title;return typeof n=="string"&&n.trim()?n.trim():void 0}}function Ai(){try{let e=oc();for(let t of tc())e[t]||(e[t]=[]),e[t].includes(Bi)||(e[t]=[Bi,...e[t]]);return e}catch{return{}}}var ac=600;function fo(){return ec(h.subscribe,h.getState,h.getState)}function er(e){let t=fo(),o=Jl()(),r=Pt(o);r.current=o;let n=Le((...S)=>!_t()||!r.current?Promise.reject(new Error("Ask Buoy requires Pro access.")):ki(...S),[]),s=Pt(null),a=Pt(!1),g=Pt(null),u=Pt(e);u.current=e;let f=!!e?.endpoint&&!!e?.model,m=e?.persistTranscript!==!1,{bypassApprovals:O,readOnly:$}=tt(),L=Pt(O);L.current=O;let oe=Pt($);oe.current=$;let re=Le(()=>oe.current?{...e?.policy??{},readOnly:!0}:e?.policy??{},[e]),[Te,rt]=Zl(0);Tt(()=>{let S=!1;return Si().then(()=>{S||rt(F=>F+1)}),()=>{S=!0}},[]);let $e=Xl(()=>Ai(),[Te]),nt=Object.keys($e).sort().join(",");Tt(()=>{if(h.setConfigured(f),h.setMeta({model:e?.model,protocol:e?.protocol??(e?"anthropic":void 0),appName:e?.appName,platform:ht.OS,build:Ut?"release":"development"}),!f||!e){s.current=null,h.setNotice("Ask Buoy isn't set up in this app yet. A developer needs to point it at your team's AI endpoint.");return}let S=e.protocol??"anthropic";Ut&&e.apiKey?h.setNotice("This build carries a plaintext apiKey \u2014 that's dev-only and it ships to every install. Use the headers callback with your own gateway for distributed builds."):S==="anthropic"&&/^https?:\/\/api\.openai\.com\//i.test(e.endpoint)?h.setNotice('This endpoint is api.openai.com but the protocol is "anthropic". Set protocol: "openai" in the askBuoy config.'):S==="openai"&&/^https?:\/\/api\.anthropic\.com\//i.test(e.endpoint)?h.setNotice('This endpoint is api.anthropic.com but the protocol is "openai". Remove protocol or set it to "anthropic".'):h.setNotice(null);let F=[e.endpoint,e.protocol??"anthropic",e.model].join("|"),Q=h.getHeldSession();if(Q&&Q.signature===F){s.current=Q.session,Q.session.setAvailableActions($e),Q.session.setApprovalBypass(L.current),Q.session.setReadOnly(oe.current),h.setLedger(Q.session.ledger);return}let se=nc({endpoint:e.endpoint,protocol:e.protocol??"anthropic",model:e.model,headers:e.headers,apiKey:e.apiKey,maxTokens:e.maxTokens,anthropicVersion:e.anthropicVersion,requestOverrides:e.requestOverrides,catalog:e.tools?.length?[...Zo,...e.tools]:void 0,dispatch:n,readSnapshot:rc,availableActions:$e,policy:e.policy,context:e.context,isRelease:Ut,appName:e.appName,platform:ht.OS,requestApproval:ne=>h.askApproval(ne)});s.current=se,se.setApprovalBypass(L.current),se.setReadOnly(oe.current),h.holdSession(se,F),h.setLedger(se.ledger);let ve=!1;return Si().then(ne=>{ne&&!ve&&se.prime()}),m&&!a.current&&(a.current=!0,xi().then(ne=>{!ne||!h.hydrate({messages:ne.messages,answers:ne.answers,usage:ne.usage,queued:ne.queued})||(s.current?.restore(ne.history),ne.ledger?.length&&s.current?.ledger.restore(ne.ledger),ne.pending&&h.restorePending(ne.pending))})),()=>{ve=!0}},[f,e,$e,nt,m]),Tt(()=>{s.current?.setApprovalBypass(O)},[O]),Tt(()=>{s.current?.setReadOnly($)},[$]);let it=t.messages,kt=t.answers,St=t.usage,Dt=t.busy,Je=t.pending,gt=t.queued;Tt(()=>{if(!m||it.length===0)return;let S=()=>{wi(mi({messages:it,history:s.current?.messages??[],answers:kt,usage:St,pending:Je,ledger:h.getLedger()?.list(),queued:gt}))};if(!Dt){S();return}let F=setTimeout(S,ac);return()=>clearTimeout(F)},[m,Dt,it,kt,St,Je,gt]);let ft=Le(S=>{if(!_t()||!r.current)return;let F=s.current;if(!F)return;h.beginTurn();let Q=h.startAssistant(),se=new AbortController;g.current=se,F.setAvailableActions(Ai());let ve=u.current?.onEvent;(async()=>{try{for await(let ne of F.send(S,se.signal))if(h.applyEvent(Q,ne),ve)try{ve(ne)}catch{}}catch(ne){se.signal.aborted||h.applyEvent(Q,{type:"error",message:ne instanceof Error?ne.message:"Something went wrong talking to your AI endpoint."})}finally{se.signal.aborted&&h.markStopped(Q),h.finishAssistant(Q),g.current=null}})()},[]),st=Le(S=>{if(!_t()||!r.current)return;let F=S.trim();if(!s.current||!F)return;if(h.getState().busy){h.enqueue(F);return}let Q=h.getState().awaitingBlockId;Q&&h.recordAnswer({blockId:Q,kind:"skipped"}),h.addUser(F),ft(F)},[ft]),Ct=Le(()=>{let{messages:S,busy:F}=h.getState();if(F||!s.current)return;let Q=[...S].reverse().find(se=>se.role==="user");Q&&ft(Q.text)},[ft]),at=Le(()=>{h.requestStop(),h.getState().pending&&h.answerApproval(!1),g.current?.abort(),g.current=null},[]);Tt(()=>{let S=Yl(()=>{_t()||at()});return()=>{S(),at()}},[at]),Tt(()=>{o||at()},[o,at]),Tt(()=>{if(t.queued.length===0||Qo(t)!=="idle"||uo(t)!==null)return;let S=h.shiftQueued();S&&st(S.text)},[t,st]);let De=Le(S=>h.takeQueuedToDraft(S),[]),zt=Le(S=>h.removeQueued(S),[]),Jt=Le(()=>{g.current?.abort(),g.current=null,po()},[]),To=Le(()=>go({dispatch:ki,undoFirst:!0}),[]),Yt=Le(async S=>{let F=h.getLedger();if(!F){h.setNotice(`${S.label} couldn't run \u2014 no active Ask Buoy session.`);return}let Q=e?.tools?.length?[...Zo,...e.tools]:void 0;if(S.targetDigest){let ve=await ic({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:n,catalog:Q});if(ve!==void 0&&ve!==S.targetDigest){h.addNote(`\u201C${S.label}\u201D wasn't applied \u2014 what it would change has moved on since the app restarted. Nothing was written. Ask again if you still want it.`);return}}let se=await vi({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:n,ledger:F,policy:re(),isRelease:Ut,catalog:Q});se.ok?h.addNote(`Applied \u201C${S.label}\u201D, which was still waiting when the app restarted. Whatever else that answer was going to do is gone \u2014 ask again if there was more to it.`):h.setNotice(`${S.label} failed \u2014 ${se.error}`)},[e,re]),ko=Le(S=>{let F=h.getState().pending,Q=typeof S=="boolean"?S:S.approved;if(h.answerApproval(S),!!F?.restored){if(!Q){h.addNote(`Skipped \u201C${F.label}\u201D. Nothing was changed.`);return}Yt(F)}},[Yt]),So=Le(S=>{h.recordAnswer(S);let F=sc(S.blockId);st(F?`${F} \u2014 ${Ci(S)}`:Ci(S))},[st]),Co=Le(async(S,F)=>{if(!_t()||!r.current){h.setNotice("Ask Buoy requires Pro access.");return}if(S.send){st(S.send);return}if(!S.dispatch)return;let Q=`${F}:${S.label}`,se=h.getLedger();if(!se){h.setNotice(`${S.label} failed \u2014 no active Ask Buoy session.`);return}h.setActionState(Q,"running");let ve=await vi({toolId:S.dispatch.toolId,action:S.dispatch.action,params:S.dispatch.params??{},dispatch:n,ledger:se,policy:re(),isRelease:Ut,catalog:e?.tools?.length?[...Zo,...e.tools]:void 0});ve.ok?h.setActionState(Q,"done"):(h.setActionState(Q,"failed"),h.setNotice(`${S.label} failed \u2014 ${ve.error}`))},[st,e,re]);return{state:t,send:st,stop:at,reset:Jt,undoThenReset:To,approve:ko,retry:Ct,answer:So,runAction:Co,editQueued:De,removeQueued:zt,configured:f,toolCount:Object.keys($e).length,availableToolIds:Object.keys($e)}}import{jsx as He,jsxs as yo}from"react/jsx-runtime";function or(){let e=tt(),t=fo().trusted;return yo(ke,{style:Ie.scroll,contentContainerStyle:Ie.content,testID:"buoy-ask-buoy-settings",children:[He(i,{style:Ie.section,children:"CHAT"}),He(tr,{testID:"buoy-ask-buoy-setting-thinking",label:"Show agent thinking",description:"Adds a collapsed strip under each answer: the model's reasoning, and every step it ran with its parameters, result, duration and token cost. Copy includes the steps and reasoning while this is on, so you can read the run outside the app.",value:e.showThinking,onValueChange:o=>dt.set("showThinking",o)}),He(i,{style:Ie.note,children:"Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."}),He(i,{style:Ie.section,children:"PERMISSIONS"}),He(tr,{testID:"buoy-ask-buoy-setting-readonly",label:"Read only",description:"Inspect the app, change nothing. Every write and simulation is refused until this is off. Undo still works \u2014 putting things back is the safe direction.",value:e.readOnly,onValueChange:o=>dt.set("readOnly",o)}),e.readOnly?He(i,{style:Ie.note,testID:"buoy-ask-buoy-readonly-note",children:"On across reloads until you turn it off here. The header says \u201CRead only\u201D while it is on. It adds to whatever this app already restricts \u2014 it never loosens anything."}):null,He(tr,{testID:"buoy-ask-buoy-setting-bypass",tone:"warning",emphasizeLabel:e.bypassApprovals,disabled:e.readOnly,label:"Skip approval prompts",description:e.readOnly?"Unavailable while Read only is on \u2014 nothing can be approved.":"Runs every action the moment the agent calls it, with no Allow card \u2014 including the destructive ones that wipe or reset data.",value:e.bypassApprovals,onValueChange:o=>dt.set("bypassApprovals",o)}),e.bypassApprovals&&!e.readOnly?yo(l,{style:Ie.warning,testID:"buoy-ask-buoy-bypass-warning",children:[He(lc,{size:14,color:pe.color.warning}),He(i,{style:Ie.warningText,children:"Nothing will ask before a change lands. A wipe or a reset runs on the model's word alone, and Undo only reverses the changes that can be reversed \u2014 the bar tells you which. This stays on across reloads and app restarts until you turn it off here, so leave it off on any device holding data you care about. It does not widen what the agent may reach: read-only mode, this app's deny list and the release-build refusals still apply."})]}):He(i,{style:Ie.note,children:"On by default for destructive actions only \u2014 reads and ordinary writes already run without asking, and the changes bar records them."}),t.length>0?yo(l,{style:Ie.trustedBox,testID:"buoy-ask-buoy-trusted",children:[He(i,{style:Ie.section,children:"ALLOWED WITHOUT ASKING \u2014 THIS CHAT"}),t.map(o=>yo(l,{style:Ie.trustedRow,children:[He(i,{style:Ie.trustedLabel,numberOfLines:2,children:o.label}),He(b,{testID:`buoy-ask-buoy-untrust-${o.key}`,accessibilityRole:"button",onPress:()=>h.untrust(o.key),style:({pressed:r})=>[Ie.forget,r&&{opacity:.7}],hitSlop:6,children:He(i,{style:Ie.forgetText,children:"Ask again"})})]},o.key))]}):null]})}var Ie=y.create({scroll:{flex:1},content:{padding:pe.gutter,gap:10,paddingBottom:32},section:{color:pe.color.textTertiary,fontSize:10,fontWeight:"700",letterSpacing:.6,paddingHorizontal:4,paddingTop:4},warning:{flexDirection:"row",gap:8,padding:pe.cardPad,borderRadius:pe.radius.card,borderWidth:y.hairlineWidth,borderColor:pe.color.warning,backgroundColor:pe.color.surface},warningText:{flex:1,color:pe.color.warning,fontSize:pe.font.micro,lineHeight:16},trustedBox:{gap:6,paddingTop:6},trustedRow:{flexDirection:"row",alignItems:"center",gap:10,padding:pe.cardPad,borderRadius:pe.radius.card,borderWidth:y.hairlineWidth,borderColor:pe.color.border,backgroundColor:pe.color.surface},trustedLabel:{flex:1,color:pe.color.text,fontSize:pe.font.caption,lineHeight:18},forget:{paddingHorizontal:10,paddingVertical:6,borderRadius:pe.radius.row,backgroundColor:pe.color.button},forgetText:{color:pe.color.text,fontSize:pe.font.micro,fontWeight:"600"},note:{color:pe.color.textTertiary,fontSize:pe.font.micro,lineHeight:16,paddingHorizontal:4}});import{ChevronRight as uc,night as Ce,NightSectionLabel as pc}from"@buoy-gg/shared-ui/web";var cc=[{text:"Why is this screen empty?"},{text:"What did the last few network calls return?",needs:"network"},{text:"Show me what's saved for this user",needs:"storage"},{text:"Make the next request to this screen fail with a 500",needs:"network",write:!0,devOnly:!0},{text:"Who am I signed in as right now?"},{text:"Did anything crash or log an error recently?",needs:"console"}],dc=4;function Ii(e){let t=e.availableToolIds.length>0;return cc.filter(o=>o.write&&e.readOnly||o.devOnly&&e.isRelease?!1:o.needs?t&&e.availableToolIds.includes(o.needs):!0).slice(0,dc).map(o=>o.text)}import{jsx as Ge,jsxs as Kt}from"react/jsx-runtime";var Ri=typeof R<"u"&&!R;function Pi({configured:e,onPick:t,availableToolIds:o=[],readOnly:r=!1}){let n=Ii({availableToolIds:o,readOnly:r,isRelease:Ri});return e?Kt(l,{style:Re.wrap,testID:"buoy-ask-buoy-empty",children:[Ge(i,{style:Re.title,children:"Ask about this app"}),Ge(i,{style:Re.body,children:"Ask what the app is doing right now, or tell it to change something. Anything it changes shows up in a bar at the top, with what can be undone."}),Ge(i,{style:Re.buildLine,testID:"buoy-ask-buoy-build-line",children:Ri?"Release build \u2014 reading, impersonation and navigation work; simulations (forcing server responses, driving the screen) need a dev build.":"Dev build \u2014 full simulation available."}),Kt(l,{style:Re.group,children:[Ge(pc,{children:"Try asking"}),Ge(l,{style:Re.card,children:n.map((s,a)=>Ge(gc,{text:s,onPick:t,last:a===n.length-1},s))})]})]}):Kt(l,{style:Re.wrap,testID:"buoy-ask-buoy-unconfigured",children:[Ge(i,{style:Re.title,children:"Not set up yet"}),Kt(i,{style:Re.body,children:["Ask Buoy talks to your own company's AI endpoint \u2014 nothing goes to Buoy. A developer needs to add the ",Ge(i,{style:Re.code,children:"askBuoy"})," prop to"," ",Ge(i,{style:Re.code,children:"<FloatingDevTools />"})," with your team's endpoint and model."]})]})}function gc({text:e,onPick:t,last:o}){return Kt(b,{testID:`buoy-ask-buoy-suggestion-${e.slice(0,12)}`,accessibilityRole:"button",onPress:()=>t(e),style:({pressed:r})=>[Re.row,!o&&Re.rowDivider,r&&Re.pressed],children:[Ge(i,{style:Re.rowText,children:e}),Ge(uc,{size:14,color:Ce.color.textTertiary})]})}var Re=y.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:Ce.gutter,paddingVertical:24,gap:8},title:{color:Ce.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:Ce.color.textSecondary,fontSize:Ce.font.body,lineHeight:20},code:{color:Ce.color.text,fontFamily:"Menlo"},buildLine:{marginTop:8,color:Ce.color.textTertiary,fontSize:Ce.font.micro,lineHeight:15},group:{marginTop:Ce.groupGap-8},card:{borderRadius:Ce.radius.card,borderWidth:y.hairlineWidth,borderColor:Ce.color.border,backgroundColor:Ce.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:Ce.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:y.hairlineWidth,borderBottomColor:Ce.color.separator},rowText:{flex:1,color:Ce.color.text,fontSize:Ce.font.body,lineHeight:19},pressed:{backgroundColor:Ce.color.fill}});import{memo as vc,useCallback as $t,useEffect as Bc,useRef as sr,useState as Oi}from"react";import{AlertTriangle as Ei,Check as Wi,ChevronDown as Mi,ChevronRight as Ni,Copy as Ac,night as w,X as Ic}from"@buoy-gg/shared-ui/web";import{toolTitle as Rc}from"@buoy-gg/agent-core/web";import{isAskBlock as fc}from"@buoy-gg/agent-core/web";function yc({block:e,forToolCallId:t}){if(!t)return!1;let o="source"in e?e.source:void 0;return o==="live"||o==="mocked"}function Di(e,t){let o=new Set(t),r=new Map,n=[],s=[];for(let a of e){if(fc(a.block)){s.push(a);continue}if(yc(a)&&o.has(a.forToolCallId)){let g=r.get(a.forToolCallId)??[];g.push(a.block),r.set(a.forToolCallId,g)}else n.push(a)}return{nested:r,afterText:n,ask:s}}import{useState as zi}from"react";import{Activity as hc,ChevronDown as mc,ChevronRight as xc,night as te}from"@buoy-gg/shared-ui/web";function bo(e){let t=[...e.reasoning??[]].sort((s,a)=>s.afterCalls-a.afterCalls),o=[],r=0,n=s=>{for(;r<t.length&&t[r].afterCalls<=s;)o.push({kind:"thought",text:t[r].text}),r+=1};return e.toolCalls.forEach((s,a)=>{n(a),o.push({kind:"step",n:a+1,call:s})}),n(e.toolCalls.length),o}function rr(e){return(e.reasoning?.length??0)>0||e.toolCalls.length>0}var bc=e=>e.status==="ok"?e.summary||"done":e.status==="running"?"running":`${e.status}${e.summary?` \u2014 ${e.summary}`:""}`;function nr(e,t=" "){let o=[];for(let r of bo(e))if(r.kind==="thought"){o.push(`${t}[thinking]`);for(let n of r.text.trim().split(`
|
|
12
|
-
`))o.push(`${t} ${n}`)}else{let{n,call:s}=r;o.push(`${t}[${n}] ${s.toolId}.${s.action} \u2014 ${bc(s)}`),s.params&&o.push(`${t} ${s.params}`)}return o}import{Fragment as Tc,jsx as Ne,jsxs as pt}from"react/jsx-runtime";function wc({n:e,call:t}){let[o,r]=zi(!1),n=t.status==="failed"||t.status==="refused";return pt(b,{onPress:()=>r(s=>!s),accessibilityRole:"button",accessibilityState:{expanded:o},style:ye.step,children:[pt(l,{style:ye.stepLine,children:[Ne(i,{style:ye.stepN,children:e}),pt(i,{style:[ye.stepName,n&&ye.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),t.durationMs!==void 0?pt(i,{style:ye.stepMs,children:[t.durationMs,"ms"]}):null,Ne(i,{style:[ye.stepStatus,n&&ye.stepFailed],numberOfLines:1,children:t.status==="ok"?t.summary||"done":t.status})]}),o?pt(l,{style:ye.detail,children:[Ne(i,{style:ye.detailLabel,children:"SENT"}),Ne(i,{style:ye.code,selectable:!0,children:t.params??"no parameters"}),t.result?pt(Tc,{children:[Ne(i,{style:ye.detailLabel,children:"RETURNED"}),Ne(i,{style:ye.code,selectable:!0,children:t.result})]}):null]}):null]})}function ir({message:e}){let[t,o]=zi(!1);if(!rr(e))return null;let r=bo(e),n=r.filter(u=>u.kind==="step").length,s=r.length-n,a=e.startedAt!==void 0&&e.endedAt!==void 0?`${((e.endedAt-e.startedAt)/1e3).toFixed(1)}s`:null,g=[n?`${n} step${n===1?"":"s"}`:null,s?`${s} thought${s===1?"":"s"}`:null,a,e.usage?`${e.usage.input+e.usage.output} tokens`:null].filter(Boolean).join(" \xB7 ");return pt(l,{style:ye.wrap,testID:"buoy-ask-buoy-thinking",children:[pt(b,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>o(u=>!u),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:ye.head,children:[Ne(hc,{size:12,color:te.color.textTertiary}),Ne(i,{style:ye.headText,children:g}),t?Ne(mc,{size:12,color:te.color.textTertiary}):Ne(xc,{size:12,color:te.color.textTertiary})]}),t?pt(l,{style:ye.body,children:[r.map((u,f)=>u.kind==="thought"?Ne(i,{style:ye.thought,selectable:!0,children:u.text.trim()},`t${f}`):Ne(wc,{n:u.n,call:u.call},u.call.id)),s===0?Ne(i,{style:ye.none,children:"This model reports no reasoning \u2014 the steps above are the whole trace."}):null]}):null]})}var ye=y.create({wrap:{marginTop:8,borderRadius:te.radius.badge,borderWidth:y.hairlineWidth,borderColor:te.color.separator,backgroundColor:te.color.fill,overflow:"hidden"},head:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:7},headText:{flex:1,color:te.color.textTertiary,fontSize:te.font.micro,fontWeight:"600"},body:{borderTopWidth:y.hairlineWidth,borderTopColor:te.color.separator},thought:{color:te.color.textSecondary,fontSize:te.font.micro,lineHeight:17,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8},step:{paddingHorizontal:10,paddingVertical:7},stepLine:{flexDirection:"row",alignItems:"center",gap:8},stepN:{color:te.color.textTertiary,fontSize:te.font.micro,width:14},stepName:{flex:1,color:te.color.textSecondary,fontSize:te.font.micro,fontWeight:"600"},stepMs:{color:te.color.textTertiary,fontSize:te.font.micro},stepStatus:{color:te.color.textTertiary,fontSize:te.font.micro,maxWidth:110},stepFailed:{color:te.color.danger},detail:{marginTop:6,marginLeft:22,gap:3},detailLabel:{color:te.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.5},code:{color:te.color.textSecondary,fontSize:te.font.micro,lineHeight:16,marginBottom:3},none:{color:te.color.textTertiary,fontSize:te.font.micro,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8}});import{useEffect as kc,useRef as Sc}from"react";import{night as Cc}from"@buoy-gg/shared-ui/web";import{jsx as Li}from"react/jsx-runtime";function Hi(){let e=Sc([0,1,2].map(()=>new ee.Value(.25))).current;return kc(()=>{let t=e.map((o,r)=>ee.loop(ee.sequence([ee.delay(r*140),ee.timing(o,{toValue:1,duration:320,easing:bt.inOut(bt.ease),useNativeDriver:!0}),ee.timing(o,{toValue:.25,duration:320,easing:bt.inOut(bt.ease),useNativeDriver:!0}),ee.delay((2-r)*140)])));return t.forEach(o=>o.start()),()=>t.forEach(o=>o.stop())},[e]),Li(l,{style:Vi.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:e.map((t,o)=>Li(ee.View,{style:[Vi.dot,{opacity:t}]},o))})}var Vi=y.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:Cc.color.textSecondary}});import{jsx as T,jsxs as Pe}from"react/jsx-runtime";function qi({status:e}){switch(e){case"running":return T(yt,{size:"small",color:w.color.textSecondary});case"ok":return T(l,{style:[x.mark,x.markOk],children:T(Wi,{size:10,color:w.color.onAccent})});case"failed":return T(l,{style:[x.mark,x.markFailed],children:T(Ic,{size:10,color:w.color.text})});case"refused":return T(l,{style:[x.mark,x.markRefused],children:T(Ei,{size:10,color:w.color.onAccent})});case"declined":case"stopped":return T(l,{style:[x.mark,x.markNotRun],children:T(l,{style:x.markNotRunBar})})}}function Pc(e){return e.status==="running"?{text:"",tone:"muted"}:e.status==="refused"?{text:"Refused",tone:"warning"}:e.status==="failed"?{text:"Failed",tone:"danger"}:e.status==="declined"?{text:"You declined",tone:"muted"}:e.status==="stopped"?{text:"Not run \u2014 stopped",tone:"muted"}:e.verification?.status==="verified"?{text:"Verified",tone:"ok"}:e.verification?.status==="unverified"?{text:"Done \xB7 not yet visible",tone:"muted"}:e.verification?.status==="failed"?{text:"Done \xB7 check failed",tone:"warning"}:{text:e.summary||"Done",tone:"muted"}}var Dc=e=>e.status==="failed"||e.status==="refused"||e.status==="declined"||e.status==="stopped";function Fi({call:e,receipts:t,last:o}){let[r,n]=Oi(!1),s=Pc(e),a=r?Mi:Ni,g=e.status==="failed"&&e.summary&&e.summary!=="Failed"?e.summary:null;return Pe(l,{style:[x.row,!o&&x.rowDivider],children:[Pe(b,{testID:`buoy-ask-buoy-tool-${e.toolId}`,accessibilityRole:"button",accessibilityLabel:`${e.label}, ${s.text||"running"}`,accessibilityState:{expanded:r},onPress:()=>n(u=>!u),children:[Pe(l,{style:x.rowLine,children:[T(l,{style:x.markSlot,children:T(qi,{status:e.status})}),T(i,{style:x.rowTitle,children:e.label}),s.text?T(i,{style:[x.rowStatus,s.tone==="danger"&&x.rowStatusDanger,s.tone==="warning"&&x.rowStatusWarning,s.tone==="ok"&&x.rowStatusOk],numberOfLines:1,children:s.text}):null,T(a,{size:12,color:w.color.textTertiary})]}),r&&Pe(l,{style:x.rowDetail,children:[T(i,{style:x.rowTool,children:Rc(e.toolId).toUpperCase()}),e.description?T(i,{style:x.rowDescription,children:e.description}):null,g?T(i,{style:x.rowFailure,children:g}):null,e.verification?T(i,{style:[x.rowDescription,e.verification.status==="failed"&&x.rowFailure,e.verification.status==="verified"&&x.rowVerified],testID:`buoy-ask-buoy-verification-${e.verification.status}`,children:e.verification.detail}):null]})]}),r&&t.length>0&&T(l,{style:x.rowReceipts,testID:`buoy-ask-buoy-tool-receipt-${e.toolId}`,children:t.map(u=>T(Ht,{block:u},u.id))})]})}function zc({label:e,count:t,calls:o,receipts:r,last:n}){let[s,a]=Oi(!1),g=s?Mi:Ni;return Pe(l,{style:!n&&!s&&x.rowDivider,children:[T(b,{testID:"buoy-ask-buoy-reads-group",accessibilityRole:"button",accessibilityLabel:`${e}, ${t} reads`,accessibilityState:{expanded:s},onPress:()=>a(u=>!u),style:[x.row,s&&x.rowDivider],children:Pe(l,{style:x.rowLine,children:[T(l,{style:x.markSlot,children:T(qi,{status:"ok"})}),T(i,{style:x.rowTitle,children:e}),Pe(i,{style:x.rowStatus,numberOfLines:1,children:[t," reads"]}),T(g,{size:12,color:w.color.textTertiary})]})}),s&&T(l,{style:x.groupBody,children:o.map((u,f)=>T(Fi,{call:u,receipts:r.get(u.id)??[],last:n&&f===o.length-1},u.id))})]})}function Vc({calls:e,receipts:t}){let o=li(e);return T(l,{style:x.card,testID:"buoy-ask-buoy-activity",children:o.map((r,n)=>r.kind==="reads"?T(zc,{label:r.label,count:r.count,calls:r.calls,receipts:t,last:n===o.length-1},r.id):T(Fi,{call:r.call,receipts:t.get(r.call.id)??[],last:n===o.length-1},r.call.id))})}function $i({blocks:e}){return e.length===0?null:T(l,{style:x.blocks,children:e.map(({block:t})=>T(Ht,{block:t},t.id))})}function Lc({message:e}){return T(l,{style:x.systemLine,testID:"buoy-ask-buoy-system-line",children:T(i,{style:x.systemText,children:e.text})})}function Hc({message:e}){return T(l,{style:x.userWrap,children:T(l,{style:x.userBubble,children:T(i,{style:x.userText,selectable:!0,children:e.text})})})}function $c({message:e,onRetry:t,waitingOnUser:o}){let{showThinking:r}=tt(),n=!!e.streaming&&!o,{nested:s,afterText:a,ask:g}=Di(e.blocks,e.toolCalls.map(u=>u.id));return Pe(l,{style:x.assistantWrap,children:[e.toolCalls.length>0&&T(Vc,{calls:e.toolCalls,receipts:s}),e.text.length>0&&T(Po,{text:e.text,style:x.assistantText}),T($i,{blocks:a}),T($i,{blocks:g}),r&&!e.streaming&&T(ir,{message:e}),n&&Pe(l,{style:x.waitingRow,children:[T(Hi,{}),e.waiting?T(i,{style:x.waitingText,testID:"buoy-ask-buoy-waiting",children:e.waiting}):null]}),e.error&&T(Ec,{error:e.error,onRetry:t}),e.stopped&&!e.error&&T(Oc,{onRetry:t,changed:e.toolCalls.some(u=>u.status==="ok"&&!!u.effect&&u.effect!=="read")})]})}function Oc({onRetry:e,changed:t}){return Pe(l,{style:x.stoppedBox,testID:"buoy-ask-buoy-stopped",children:[T(i,{style:x.stoppedText,children:t?"Stopped. Changes already made are listed above.":"Stopped."}),e&&T(b,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:e,style:({pressed:o})=>[x.retry,o&&x.retryPressed],children:T(i,{style:x.retryText,children:"Try again"})})]})}function Ec({error:e,onRetry:t}){let r=/fetch failed|network|ECONN|timed? ?out|socket/i.test(e)?"Couldn't reach your AI endpoint. Check the connection and try again.":"Something went wrong with that turn.";return Pe(l,{style:x.errorBox,testID:"buoy-ask-buoy-error",children:[T(Ei,{size:14,color:w.color.danger}),Pe(l,{style:x.errorBody,children:[T(i,{style:x.errorText,children:r}),T(i,{style:x.errorDetail,selectable:!0,children:e}),t&&T(b,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:t,style:({pressed:n})=>[x.retry,n&&x.retryPressed],children:T(i,{style:x.retryText,children:"Try again"})})]})]})}function ar(e,t=!1){let o=[];for(let r of e){if(r.role==="user"){o.push(`You: ${r.text}`);continue}if(r.system){o.push(` \u2014 ${r.text}`);continue}if(t)o.push(...nr(r));else for(let n of r.toolCalls){let s=Dc(n)?` (${n.status})`:"";o.push(` \xB7 ${n.label}${n.summary?` \u2014 ${n.summary}`:""}${s}`)}r.text&&o.push(`Ask Buoy: ${r.text}`);for(let n of Mr(r.blocks.map(s=>s.block)))o.push(n);r.error&&o.push(` ! ${r.error}`),r.stopped&&!r.error&&o.push(" ! Stopped by the user.")}return o.join(`
|
|
13
|
-
`)}function Wc({testID:e,label:t,getText:o}){let{copied:r,copy:n}=Lt(o);return Pe(b,{testID:e,accessibilityRole:"button",accessibilityLabel:t,onPress:n,style:({pressed:s})=>[x.copyBtn,x.iconBtn,s&&x.copyPressed],children:[r?T(Wi,{size:11,color:w.color.accent}):T(Ac,{size:11,color:w.color.textSecondary}),T(i,{style:[x.copyText,r&&x.copiedText],children:r?"Copied":t})]})}function Mc({message:e}){let{showThinking:t}=tt(),o=$t(()=>ar(h.getState().messages,t),[t]),r=ci(e);return Pe(l,{style:x.transcriptActions,children:[r?T(i,{style:x.turnFooter,testID:"buoy-ask-buoy-turn-footer",children:r}):null,T(Wc,{testID:"buoy-ask-buoy-copy",label:"Copy conversation",getText:o})]})}var Nc=vc(function({message:t,onRetry:o,waitingOnUser:r}){if(t.role==="user")return T(Hc,{message:t});if(t.system)return T(Lc,{message:t});let n=!t.streaming&&!t.error;return Pe(l,{children:[T($c,{message:t,onRetry:o,waitingOnUser:r}),n&&T(Mc,{message:t})]})});function lr({messages:e,ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r,onRetry:n,waitingOnUser:s}){let a=sr(null),g=sr(!0),u=sr(!1),f=$t(Te=>{let{contentOffset:rt,contentSize:$e,layoutMeasurement:nt}=Te.nativeEvent,it=$e.height-nt.height-rt.y;g.current=it<80},[]),m=$t(()=>{u.current=!0},[]),O=$t(Te=>{u.current&&f(Te)},[f]),$=$t(Te=>{u.current=!1,f(Te)},[f]),L=$t(()=>{g.current&&(a.current?.scrollToEnd({animated:!1}),requestAnimationFrame(()=>a.current?.scrollToEnd({animated:!1})))},[]),oe=e[e.length-1],re=oe?`${oe.id}:${oe.text.length}:${oe.toolCalls.length}:${oe.error??""}`:"";return Bc(()=>{L()},[re,L]),T(Ao,{ref:a,testID:"buoy-ask-buoy-messages-scroll",style:x.list,contentContainerStyle:x.listContent,data:e,keyExtractor:Te=>Te.id,renderItem:({item:Te})=>T(Nc,{message:Te,onRetry:Te.id===oe?.id?n:void 0,waitingOnUser:Te.id===oe?.id?s:!1}),onScroll:O,onScrollBeginDrag:m,onScrollEndDrag:$,onMomentumScrollEnd:f,scrollEventThrottle:32,onContentSizeChange:L,keyboardShouldPersistTaps:"handled",keyboardDismissMode:"interactive",ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r})}var x=y.create({list:{flex:1,backgroundColor:"transparent"},listContent:{paddingHorizontal:w.gutter,paddingTop:12,paddingBottom:16,gap:16,flexGrow:1},userWrap:{alignItems:"flex-end"},userBubble:{maxWidth:"84%",paddingHorizontal:14,paddingVertical:9,borderRadius:18,borderBottomRightRadius:6,backgroundColor:w.color.accentFill,borderWidth:y.hairlineWidth,borderColor:w.color.accentBorder},userText:{color:w.color.text,fontSize:w.font.row,lineHeight:21},systemLine:{alignSelf:"stretch",paddingHorizontal:12,paddingVertical:7,borderRadius:w.radius.row,backgroundColor:w.color.fill},systemText:{color:w.color.textSecondary,fontSize:w.font.micro,lineHeight:16,textAlign:"center"},assistantWrap:{alignItems:"stretch",gap:10},blocks:{gap:10},waitingRow:{flexDirection:"row",alignItems:"center",gap:8},waitingText:{color:w.color.textSecondary,fontSize:w.font.caption},assistantText:{color:w.color.text,fontSize:w.font.row,lineHeight:22,paddingHorizontal:2},card:{borderRadius:w.radius.card,borderWidth:y.hairlineWidth,borderColor:w.color.border,backgroundColor:w.color.surface,overflow:"hidden"},row:{paddingHorizontal:12,paddingVertical:10},rowDivider:{borderBottomWidth:y.hairlineWidth,borderBottomColor:w.color.separator},rowLine:{flexDirection:"row",alignItems:"center",gap:10},markSlot:{width:18,height:18,alignItems:"center",justifyContent:"center"},mark:{width:16,height:16,borderRadius:8,alignItems:"center",justifyContent:"center"},markOk:{backgroundColor:w.color.accent},markFailed:{backgroundColor:w.color.danger},markRefused:{backgroundColor:w.color.warning},markNotRun:{borderWidth:1.5,borderColor:w.color.textTertiary},markNotRunBar:{width:7,height:1.5,borderRadius:1,backgroundColor:w.color.textSecondary},rowTitle:{flex:1,color:w.color.text,fontSize:w.font.body,lineHeight:19},rowStatus:{color:w.color.textTertiary,fontSize:w.font.caption,maxWidth:120},rowStatusDanger:{color:w.color.danger},rowStatusWarning:{color:w.color.warning},rowStatusOk:{color:w.color.accent},rowVerified:{color:w.color.accent},rowDetail:{paddingLeft:28,paddingTop:8,gap:4},rowTool:{color:w.color.textTertiary,fontSize:w.font.micro,fontWeight:"600",letterSpacing:.8},rowDescription:{color:w.color.textSecondary,fontSize:w.font.caption,lineHeight:18},rowFailure:{color:w.color.danger,fontSize:w.font.caption,lineHeight:18},rowReceipts:{paddingTop:10,gap:10},groupBody:{paddingLeft:14,backgroundColor:w.color.fill},stoppedBox:{alignItems:"flex-start",gap:2,paddingHorizontal:12,paddingVertical:8},stoppedText:{color:w.color.textTertiary,fontSize:w.font.caption,lineHeight:18},errorBox:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:12,paddingVertical:10,borderRadius:w.radius.row,backgroundColor:w.color.dangerSoft},errorBody:{flex:1,gap:4},errorText:{color:w.color.danger,fontSize:w.font.caption,fontWeight:"600",lineHeight:18},errorDetail:{color:w.color.textSecondary,fontSize:w.font.micro,lineHeight:15},retry:{alignSelf:"flex-start",marginTop:6,paddingHorizontal:14,paddingVertical:7,borderRadius:w.radius.row,backgroundColor:w.color.button},retryPressed:{opacity:.7},retryText:{color:w.color.accent,fontSize:w.font.caption,fontWeight:"600"},transcriptActions:{flexDirection:"row",alignItems:"center",gap:10,marginTop:8},turnFooter:{flex:1,color:w.color.textTertiary,fontSize:w.font.micro,fontVariant:["tabular-nums"]},copyBtn:{paddingHorizontal:10,paddingVertical:5,borderRadius:w.radius.badge,backgroundColor:w.color.fill},iconBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8},copyPressed:{opacity:.7},copyText:{color:w.color.textSecondary,fontSize:w.font.micro,fontWeight:"600"},copiedText:{color:w.color.accent}});import{night as Fe,X as qc}from"@buoy-gg/shared-ui/web";import{jsx as Ot,jsxs as cr}from"react/jsx-runtime";var Fc=132;function _i({items:e,paused:t,onEdit:o,onRemove:r}){return e.length===0?null:cr(l,{style:qe.wrap,testID:"buoy-ask-buoy-queued",children:[Ot(ke,{style:qe.list,contentContainerStyle:qe.listContent,keyboardShouldPersistTaps:"handled",children:e.map((n,s)=>cr(l,{style:[qe.row,t!==null&&qe.rowPaused],children:[cr(b,{testID:`buoy-ask-buoy-queue-item-${s}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${n.text}`,onPress:()=>o(n.id),style:({pressed:a})=>[qe.rowBody,a&&qe.pressed],children:[Ot(i,{style:qe.ordinal,children:s===0?"NEXT":"THEN"}),Ot(i,{style:qe.text,numberOfLines:3,children:n.text})]}),Ot(b,{testID:`buoy-ask-buoy-queue-remove-${s}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>r(n.id),hitSlop:8,style:({pressed:a})=>[qe.remove,a&&qe.pressed],children:Ot(qc,{size:11,color:Fe.color.textTertiary})})]},n.id))}),Ot(i,{style:[qe.hint,t!==null&&qe.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes \xB7 tap to edit"})]})}var qe=y.create({wrap:{paddingHorizontal:Fe.gutter,paddingTop:8,gap:6,backgroundColor:Fe.color.bg},list:{maxHeight:Fc},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:Fe.radius.row,borderWidth:y.hairlineWidth,borderColor:Fe.color.border,backgroundColor:Fe.color.surface},rowPaused:{borderColor:Fe.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:Fe.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:Fe.color.textSecondary,fontSize:Fe.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:Fe.color.textTertiary,fontSize:Fe.font.micro},hintPaused:{color:Fe.color.warning}});var Ui="Summarize this conversation as a bug ticket, using one buoy_ui finding block and nothing else. Title it with the problem in one line. Evidence rows, in this order: Steps (what we did), Expected, Observed, Build (dev or release, platform), Evidence (the exact requests, statuses, logs or values you actually saw this conversation), Still applied (overrides or changes from your changes list that are still live, or 'none'). Only facts you observed in this conversation; write 'unknown' where you don't know rather than guessing, and put anything you inferred rather than saw in a final row labelled Inference. Do not run any tool or change anything to produce this.";import{Fragment as Jc,jsx as Ae,jsxs as mo}from"react/jsx-runtime";function xo({visible:e,onClose:t,onBack:o,onMinimize:r,persistenceKey:n,config:s}){let{state:a,send:g,stop:u,reset:f,undoThenReset:m,approve:O,retry:$,answer:L,runAction:oe,editQueued:re,removeQueued:Te,configured:rt,toolCount:$e,availableToolIds:nt}=er(s),[it,kt]=dr(!1),St=ot(()=>{u(),t()},[u,t]),Dt=ot(()=>h.clearDraft(),[]),[Je,gt]=dr(!1),ft=ot(()=>gt(!1),[]),st=ot(()=>gt(!0),[]),Ct=!e,at=!!a.pending||!!a.awaitingBlockId,De=a.messages[a.messages.length-1],zt=Qt(!1),Jt=Qt(a.busy);jt(()=>{Ct&&Jt.current&&!a.busy&&(zt.current=!0),Ct||(zt.current=!1),Jt.current=a.busy},[Ct,a.busy]),jt(()=>{if(!Ct){Et("ask-buoy",null);return}at?Et("ask-buoy",{kind:"needsInput",label:a.pending?"Needs your approval":"Has a question for you"}):zt.current&&De?.role==="assistant"&&De.error?Et("ask-buoy",{kind:"failed",label:"The last turn failed"}):zt.current&&!a.busy?Et("ask-buoy",{kind:"done",label:"Finished"}):Et("ask-buoy",null)},[Ct,at,a.busy,a.pending,De]),jt(()=>()=>Et("ask-buoy",null),[]),jt(()=>{a.pending&&Je&>(!1)},[a.pending,Je]);let To=Gc({minBottom:16}),[Yt,ko]=dr("bottomSheet"),So=Yt==="floating"?0:To.bottom,Co=ot(()=>{let ae=h.getLedger();ae&&(async()=>{let be=await ae.revertAll(Uc);if(be.failed.length===0){h.setNotice(null);return}let _e=be.failed.map(Wt=>`${Wt.label} (${Wt.error})`).join("; ");h.setNotice(`Couldn't undo ${be.failed.length} change${be.failed.length===1?"":"s"} \u2014 ${_e}`)})()},[]),S=ot(()=>kt(ae=>!ae),[]),F=Qt(new ee.Value(560)).current,Q=Qt(!1),se=ot(()=>{Q.current||(Q.current=!0,F.stopAnimation(ae=>{let be=typeof ae=="number"&&ae>200?ae:560;ee.timing(F,{toValue:120,duration:220,useNativeDriver:!1}).start(()=>{setTimeout(()=>{ee.spring(F,{toValue:be,friction:9,useNativeDriver:!1}).start(()=>{Q.current=!1})},2500)})}))},[F]),ve=ho(()=>{let ae=a.messages[a.messages.length-1];if(!ae||ae.role!=="assistant")return"";let be=ae.blocks.filter(_e=>_e.block.kind==="peek").length;return be>0?`${ae.id}:${be}`:""},[a.messages]),ne=Qt("");jt(()=>{ve&&ve!==ne.current&&s?.peek!==!1&&se(),ne.current=ve},[ve,se,s]);let hr=ot(()=>{let be=h.getLedger()?.list().filter(_e=>!_e.undoneAt&&_c(_e.effect)).length??0;if(be===0){f();return}Xt.alert("Undo changes first?",`Ask Buoy made ${be} change${be===1?"":"s"} that can still be undone. Clearing the conversation loses the only automatic undo for ${be===1?"it":"them"}.`,[{text:"Undo, then clear",onPress:()=>{(async()=>{let _e=await m();if(_e.cleared)return;let Wt=_e.reverted+_e.failed.length,es=_e.failed.map(Sr=>`${Sr.label} (${Sr.error})`).join(`
|
|
14
|
-
`);
|
|
10
|
+
${t.delta}`:r.text+t.delta,breakBeforeNextText:false};case"reasoning":return{...r,breakBeforeNextText:true,reasoning:[...r.reasoning??[],{text:t.text,afterCalls:r.toolCalls.length}]};case"tool-start":return{...r,waiting:void 0,toolCalls:[...r.toolCalls,{id:t.id,toolId:t.toolId,action:t.action,label:t.label,description:t.description,status:"running",params:Os(t.params),effect:t.effect,startedAt:Nt()}]};case"tool-end":return{...r,breakBeforeNextText:true,toolCalls:r.toolCalls.map(n=>n.id===t.id?{...n,status:!t.ok&&t.summary==="refused"?"refused":!t.ok&&t.summary==="declined"?"declined":!t.ok&&t.summary==="stopped"?"stopped":t.ok?"ok":"failed",summary:t.summary,durationMs:t.durationMs,result:t.result}:n)};case"tool-verified":return{...r,toolCalls:r.toolCalls.map(n=>n.id===t.id?{...n,verification:t.verification}:n)};case"block":return{...r,breakBeforeNextText:true,blocks:[...r.blocks,{block:t.block,forToolCallId:t.forToolCallId}]};case"usage":return{...r,usage:{input:(r.usage?.input??0)+t.input,output:(r.usage?.output??0)+t.output,requests:(r.usage?.requests??0)+1}};case"error":return{...r,waiting:void 0,error:t.message};default:return r}});G({messages:o,...t.type==="awaiting-user"?{awaitingBlockId:t.blockId}:{},...t.type==="usage"?{usage:{input:L.usage.input+t.input,output:L.usage.output+t.output,requests:L.usage.requests+1}}:{}})},markStopped(e){G({messages:L.messages.map(t=>t.id===e?{...t,stopped:true}:t)})},finishAssistant(e){G({messages:L.messages.map(t=>t.id===e?{...t,streaming:false,endedAt:Nt()}:t),busy:false,stopping:false})},askApproval(e){return new Promise(t=>{G({pending:{...e,resolve:t}})})},answerApproval(e){let t=L.pending,o=typeof e=="boolean"?e:e.approved,r=typeof e!="boolean"&&e.trust===true&&o,n=t?`${t.toolId}.${t.action}`:"";G({pending:null,...r&&t&&!L.trusted.some(i=>i.key===n)?{trusted:[...L.trusted,{key:n,label:t.label}]}:{}}),t?.resolve(e)},untrust(e){zo?.session.untrust(e),G({trusted:L.trusted.filter(t=>t.key!==e)})},restorePending(e){return L.pending||L.busy?false:(G({pending:{...e,restored:true,resolve:()=>{}}}),true)},addNote(e){G({messages:[...L.messages,{id:to(),role:"assistant",text:e,toolCalls:[],blocks:[],endedAt:Nt()}]})},hydrate(e){return L.messages.length>0||L.busy?false:(G({messages:e.messages.map(t=>({...t,restored:true})),answers:e.answers,usage:e.usage,queued:e.queued??[]}),true)},reset(){L.pending?.resolve(false),G({messages:[],busy:false,stopping:false,pending:null,trusted:[],notice:null,answers:{},awaitingBlockId:null,actionState:{},queued:[],draft:null,usage:{input:0,output:0,requests:0}})}};function Gr(e){return e.pending?"awaitingApproval":e.busy?e.stopping?"stopping":"running":e.awaitingBlockId?"awaitingAnswer":"idle"}function Yr(e){let t=Gr(e);if(t==="running"||t==="stopping")return null;if(t==="awaitingApproval")return"Paused \u2014 answer the approval above first.";if(t==="awaitingAnswer")return"Paused \u2014 answer the question above first.";let o=e.messages[e.messages.length-1];return o?.role==="assistant"&&o.error?"Paused \u2014 the last turn failed.":o?.role==="assistant"&&o.stopped?"Paused \u2014 you stopped the last turn.":null}import{getUseIsPro as Vs,hasAccountAccess as jt,subscribeAccountAccess as Es}from"@buoy-gg/shared-ui/web";import{useCallback as Ie,useEffect as dt,useMemo as Ns,useRef as kt,useState as js,useSyncExternalStore as Ms}from"react";import{dispatchToolAction as Xr,listSnapshotToolIds as qs,listToolActions as Fs,readToolSnapshot as Us,waitForToolRegistry as Zr}from"@buoy-gg/shared-ui/web";import{answerToText as en,CATALOG as Io,createAskBuoySession as _s,readTargetDigest as Ks,runGatedAction as tn,SNAPSHOT_ACTION as on}from"@buoy-gg/agent-core/web";import{persistentStorage as Do,devToolsStorageKeys as Qs}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as rn}from"@buoy-gg/shared-ui/web";var Js=[{re:/\bBearer\s+[A-Za-z0-9._~+/-]{12,}=*/gi,label:"[bearer token removed]"},{re:/\beyJ[A-Za-z0-9._-]{20,}/g,label:"[jwt removed]"},{re:/\bsk-[A-Za-z0-9_-]{16,}/g,label:"[api key removed]"},{re:/\bBUOY-[A-Z0-9-]{8,}/g,label:"[license key removed]"},{re:/("|')?(authorization|x-api-key|api[_-]?key|password|secret|access_token|refresh_token)\1?\s*[:=]\s*("|')?[^\s"',}]{6,}/gi,label:"[credential removed]"}];function Mt(e){if(!e)return e;let t=e;for(let{re:o,label:r}of Js)t=t.replace(o,r);return t}var Ro=`${Qs.base}_ask_buoy_transcript`,$o=1,nn=60,Gs=256e3,Ys="[not kept across a restart \u2014 read it again if you need it]";function rt(e){return e&&Mt(e)}function Xs(e){let t=e.streaming===true;return{...e,text:rt(e.text),streaming:false,reasoning:e.reasoning?.map(o=>({...o,text:rt(o.text)})),toolCalls:e.toolCalls.map(o=>{let r=o.params?rt(o.params):void 0,{result:n,...i}=o;return o.status==="running"?{...i,params:r,status:"failed",summary:"Interrupted"}:{...i,params:r}}),error:e.error??(t&&!e.text?"This answer was interrupted \u2014 the app restarted mid-turn.":void 0)}}function Zs(e){return e.map(t=>t.role==="tool-results"?{...t,results:t.results.map(o=>({...o,content:Ys}))}:t.role==="assistant"?{...t,text:rt(t.text)}:{...t,text:rt(t.text)})}function ec(e){let t={...e,messages:e.messages.slice(-nn),history:e.history.slice(-nn*2)},o=JSON.stringify(t);for(;o.length>Gs&&t.messages.length>1;)t={...t,messages:t.messages.slice(1),history:t.history.slice(Math.min(2,t.history.length))},o=JSON.stringify(t);return t}function tc(e){if(!e)return null;let t=e.params;if(!t)return null;let o;try{o=JSON.stringify(t)}catch{return null}return Mt(o)!==o?null:{id:e.id,toolId:e.toolId,action:e.action,label:rt(e.label),description:e.description?rt(e.description):void 0,reason:rt(e.reason),params:t,targetDigest:e.targetDigest}}function oc(e){if(typeof e!="object"||e===null)return false;let t=e;return typeof t.id=="string"&&typeof t.toolId=="string"&&typeof t.action=="string"&&typeof t.label=="string"&&typeof t.reason=="string"&&typeof t.params=="object"&&t.params!==null}function rc(e){if(!e?.length)return;let t=e.filter(o=>{try{let r=JSON.stringify(o);return Mt(r)===r}catch{return false}});return t.length?t:void 0}function nc(e){return ec({v:$o,savedAt:Date.now(),messages:e.messages.map(Xs),history:Zs(e.history),answers:e.answers,usage:e.usage,pending:tc(e.pending),ledger:rc(e.ledger),queued:e.queued?.length?e.queued.map(t=>({id:t.id,text:rt(t.text)})):void 0})}function ic(e){if(!e)return null;try{let t=JSON.parse(e);return t?.v!==$o||!Array.isArray(t.messages)||t.messages.length===0?null:{v:$o,savedAt:typeof t.savedAt=="number"?t.savedAt:0,messages:t.messages,history:Array.isArray(t.history)?t.history:[],answers:t.answers??{},usage:t.usage??{input:0,output:0,requests:0},pending:oc(t.pending)?t.pending:null,ledger:Array.isArray(t.ledger)?t.ledger.filter(o=>typeof o=="object"&&o!==null&&typeof o.id=="string"):void 0,queued:Array.isArray(t.queued)?t.queued.filter(o=>typeof o=="object"&&o!==null&&typeof o.id=="string"&&typeof o.text=="string"):void 0}}catch{return null}}async function lc(){try{return ic(await Do.getItem(Ro))}catch{return null}}async function ac(e){try{await Do.setItem(Ro,JSON.stringify(e))}catch{}}async function sc(){try{await Do.removeItem(Ro)}catch{}}function Ao(){b.getHeldSession()?.session.reset(),b.reset(),sc()}async function ln(e){if(b.getState().busy)return{cleared:false,reverted:0,failed:[{label:"A turn is running",error:"Stop it first."}]};let t=b.getLedger();if(e.undoFirst&&t){let o=await t.revertAll(e.dispatch);return o.failed.length>0?{cleared:false,reverted:o.reverted,failed:o.failed}:(Ao(),{cleared:true,reverted:o.reverted,failed:[]})}return Ao(),{cleared:true,reverted:0,failed:[]}}var qt=typeof Qt<"u"&&!Qt;function cc(e){for(let t of b.getState().messages)if(t.restored)for(let o of t.blocks){let r=o.block;if(r?.id!==e)continue;let n=r.question??r.label??r.title;return typeof n=="string"&&n.trim()?n.trim():void 0}}function an(){try{let e=Fs();for(let t of qs())e[t]||(e[t]=[]),e[t].includes(on)||(e[t]=[on,...e[t]]);return e}catch{return{}}}var dc=600;function Bo(){return Ms(b.subscribe,b.getState,b.getState)}function sn(e){let t=Bo(),o=Vs()(),r=kt(o);r.current=o;let n=Ie((...S)=>!jt()||!r.current?Promise.reject(new Error("Ask Buoy requires Pro access.")):Xr(...S),[]),i=kt(null),a=kt(false),h=kt(null),u=kt(e);u.current=e;let g=!!e?.endpoint&&!!e?.model,y=e?.persistTranscript!==false,{bypassApprovals:C,readOnly:j}=It(),q=kt(C);q.current=C;let X=kt(j);X.current=j;let ee=Ie(()=>X.current?{...e?.policy??{},readOnly:true}:e?.policy??{},[e]),[fe,Ke]=js(0);dt(()=>{let S=false;return Zr().then(()=>{S||Ke(E=>E+1)}),()=>{S=true}},[]);let Re=Ns(()=>an(),[fe]),Qe=Object.keys(Re).sort().join(",");dt(()=>{if(b.setConfigured(g),b.setMeta({model:e?.model,protocol:e?.protocol??(e?"anthropic":void 0),appName:e?.appName,platform:Bt.OS,build:qt?"release":"development"}),!g||!e){i.current=null,b.setNotice("Ask Buoy isn't set up in this app yet. A developer needs to point it at your team's AI endpoint.");return}let S=e.protocol??"anthropic";qt&&e.apiKey?b.setNotice("This build carries a plaintext apiKey \u2014 that's dev-only and it ships to every install. Use the headers callback with your own gateway for distributed builds."):S==="anthropic"&&/^https?:\/\/api\.openai\.com\//i.test(e.endpoint)?b.setNotice('This endpoint is api.openai.com but the protocol is "anthropic". Set protocol: "openai" in the askBuoy config.'):S==="openai"&&/^https?:\/\/api\.anthropic\.com\//i.test(e.endpoint)?b.setNotice('This endpoint is api.anthropic.com but the protocol is "openai". Remove protocol or set it to "anthropic".'):b.setNotice(null);let E=[e.endpoint,e.protocol??"anthropic",e.model].join("|"),U=b.getHeldSession();if(U&&U.signature===E){i.current=U.session,U.session.setAvailableActions(Re),U.session.setApprovalBypass(q.current),U.session.setReadOnly(X.current),b.setLedger(U.session.ledger);return}let re=_s({endpoint:e.endpoint,protocol:e.protocol??"anthropic",model:e.model,headers:e.headers,apiKey:e.apiKey,maxTokens:e.maxTokens,anthropicVersion:e.anthropicVersion,requestOverrides:e.requestOverrides,catalog:e.tools?.length?[...Io,...e.tools]:void 0,dispatch:n,readSnapshot:Us,availableActions:Re,policy:e.policy,context:e.context,isRelease:qt,appName:e.appName,platform:Bt.OS,requestApproval:te=>b.askApproval(te)});i.current=re,re.setApprovalBypass(q.current),re.setReadOnly(X.current),b.holdSession(re,E),b.setLedger(re.ledger);let xe=false;return Zr().then(te=>{te&&!xe&&re.prime()}),y&&!a.current&&(a.current=true,lc().then(te=>{!te||!b.hydrate({messages:te.messages,answers:te.answers,usage:te.usage,queued:te.queued})||(i.current?.restore(te.history),te.ledger?.length&&i.current?.ledger.restore(te.ledger),te.pending&&b.restorePending(te.pending))})),()=>{xe=true}},[g,e,Re,Qe,y]),dt(()=>{i.current?.setApprovalBypass(C)},[C]),dt(()=>{i.current?.setReadOnly(j)},[j]);let Je=t.messages,ut=t.answers,pt=t.usage,wt=t.busy,Me=t.pending,it=t.queued;dt(()=>{if(!y||Je.length===0)return;let S=()=>{ac(nc({messages:Je,history:i.current?.messages??[],answers:ut,usage:pt,pending:Me,ledger:b.getLedger()?.list(),queued:it}))};if(!wt){S();return}let E=setTimeout(S,dc);return()=>clearTimeout(E)},[y,wt,Je,ut,pt,Me,it]);let lt=Ie(S=>{if(!jt()||!r.current)return;let E=i.current;if(!E)return;b.beginTurn();let U=b.startAssistant(),re=new AbortController;h.current=re,E.setAvailableActions(an());let xe=u.current?.onEvent;(async()=>{try{for await(let te of E.send(S,re.signal))if(b.applyEvent(U,te),xe)try{xe(te)}catch{}}catch(te){re.signal.aborted||b.applyEvent(U,{type:"error",message:te instanceof Error?te.message:"Something went wrong talking to your AI endpoint."})}finally{re.signal.aborted&&b.markStopped(U),b.finishAssistant(U),h.current=null}})()},[]),Ge=Ie(S=>{if(!jt()||!r.current)return;let E=S.trim();if(!i.current||!E)return;if(b.getState().busy){b.enqueue(E);return}let U=b.getState().awaitingBlockId;U&&b.recordAnswer({blockId:U,kind:"skipped"}),b.addUser(E),lt(E)},[lt]),ht=Ie(()=>{let{messages:S,busy:E}=b.getState();if(E||!i.current)return;let U=[...S].reverse().find(re=>re.role==="user");U&<(U.text)},[lt]),Ye=Ie(()=>{b.requestStop(),b.getState().pending&&b.answerApproval(false),h.current?.abort(),h.current=null},[]);dt(()=>{let S=Es(()=>{jt()||Ye()});return()=>{S(),Ye()}},[Ye]),dt(()=>{o||Ye()},[o,Ye]),dt(()=>{if(t.queued.length===0||Gr(t)!=="idle"||Yr(t)!==null)return;let S=b.shiftQueued();S&&Ge(S.text)},[t,Ge]);let Ce=Ie(S=>b.takeQueuedToDraft(S),[]),vt=Ie(S=>b.removeQueued(S),[]),Ut=Ie(()=>{h.current?.abort(),h.current=null,Ao()},[]),io=Ie(()=>ln({dispatch:Xr,undoFirst:true}),[]),_t=Ie(async S=>{let E=b.getLedger();if(!E){b.setNotice(`${S.label} couldn't run \u2014 no active Ask Buoy session.`);return}let U=e?.tools?.length?[...Io,...e.tools]:void 0;if(S.targetDigest){let xe=await Ks({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:n,catalog:U});if(xe!==void 0&&xe!==S.targetDigest){b.addNote(`\u201C${S.label}\u201D wasn't applied \u2014 what it would change has moved on since the app restarted. Nothing was written. Ask again if you still want it.`);return}}let re=await tn({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:n,ledger:E,policy:ee(),isRelease:qt,catalog:U});re.ok?b.addNote(`Applied \u201C${S.label}\u201D, which was still waiting when the app restarted. Whatever else that answer was going to do is gone \u2014 ask again if there was more to it.`):b.setNotice(`${S.label} failed \u2014 ${re.error}`)},[e,ee]),lo=Ie(S=>{let E=b.getState().pending,U=typeof S=="boolean"?S:S.approved;if(b.answerApproval(S),!!E?.restored){if(!U){b.addNote(`Skipped \u201C${E.label}\u201D. Nothing was changed.`);return}_t(E)}},[_t]),ao=Ie(S=>{b.recordAnswer(S);let E=cc(S.blockId);Ge(E?`${E} \u2014 ${en(S)}`:en(S))},[Ge]),so=Ie(async(S,E)=>{if(!jt()||!r.current){b.setNotice("Ask Buoy requires Pro access.");return}if(S.send){Ge(S.send);return}if(!S.dispatch)return;let U=`${E}:${S.label}`,re=b.getLedger();if(!re){b.setNotice(`${S.label} failed \u2014 no active Ask Buoy session.`);return}b.setActionState(U,"running");let xe=await tn({toolId:S.dispatch.toolId,action:S.dispatch.action,params:S.dispatch.params??{},dispatch:n,ledger:re,policy:ee(),isRelease:qt,catalog:e?.tools?.length?[...Io,...e.tools]:void 0});xe.ok?b.setActionState(U,"done"):(b.setActionState(U,"failed"),b.setNotice(`${S.label} failed \u2014 ${xe.error}`))},[Ge,e,ee]);return{state:t,send:Ge,stop:Ye,reset:Ut,undoThenReset:io,approve:lo,retry:ht,answer:ao,runAction:so,editQueued:Ce,removeQueued:vt,configured:g,toolCount:Object.keys(Re).length,availableToolIds:Object.keys(Re)}}import{jsx as De,jsxs as oo}from"react/jsx-runtime";function cn(){let e=It(),t=Bo().trusted;return oo(Fe,{style:ve.scroll,contentContainerStyle:ve.content,testID:"buoy-ask-buoy-settings",children:[De(l,{style:ve.section,children:"CHAT"}),De(ko,{testID:"buoy-ask-buoy-setting-thinking",label:"Show agent thinking",description:"Adds a collapsed strip under each answer: the model's reasoning, and every step it ran with its parameters, result, duration and token cost. Copy includes the steps and reasoning while this is on, so you can read the run outside the app.",value:e.showThinking,onValueChange:o=>xt.set("showThinking",o)}),De(l,{style:ve.note,children:"Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."}),De(l,{style:ve.section,children:"PERMISSIONS"}),De(ko,{testID:"buoy-ask-buoy-setting-readonly",label:"Read only",description:"Inspect the app, change nothing. Every write and simulation is refused until this is off. Undo still works \u2014 putting things back is the safe direction.",value:e.readOnly,onValueChange:o=>xt.set("readOnly",o)}),e.readOnly?De(l,{style:ve.note,testID:"buoy-ask-buoy-readonly-note",children:"On across reloads until you turn it off here. The header says \u201CRead only\u201D while it is on. It adds to whatever this app already restricts \u2014 it never loosens anything."}):null,De(ko,{testID:"buoy-ask-buoy-setting-bypass",tone:"warning",emphasizeLabel:e.bypassApprovals,disabled:e.readOnly,label:"Skip approval prompts",description:e.readOnly?"Unavailable while Read only is on \u2014 nothing can be approved.":"Runs every action the moment the agent calls it, with no Allow card \u2014 including the destructive ones that wipe or reset data.",value:e.bypassApprovals,onValueChange:o=>xt.set("bypassApprovals",o)}),e.bypassApprovals&&!e.readOnly?oo(s,{style:ve.warning,testID:"buoy-ask-buoy-bypass-warning",children:[De(Bs,{size:14,color:ce.color.warning}),De(l,{style:ve.warningText,children:"Nothing will ask before a change lands. A wipe or a reset runs on the model's word alone, and Undo only reverses the changes that can be reversed \u2014 the bar tells you which. This stays on across reloads and app restarts until you turn it off here, so leave it off on any device holding data you care about. It does not widen what the agent may reach: read-only mode, this app's deny list and the release-build refusals still apply."})]}):De(l,{style:ve.note,children:"On by default for destructive actions only \u2014 reads and ordinary writes already run without asking, and the changes bar records them."}),t.length>0?oo(s,{style:ve.trustedBox,testID:"buoy-ask-buoy-trusted",children:[De(l,{style:ve.section,children:"ALLOWED WITHOUT ASKING \u2014 THIS CHAT"}),t.map(o=>oo(s,{style:ve.trustedRow,children:[De(l,{style:ve.trustedLabel,numberOfLines:2,children:o.label}),De(f,{testID:`buoy-ask-buoy-untrust-${o.key}`,accessibilityRole:"button",onPress:()=>b.untrust(o.key),style:({pressed:r})=>[ve.forget,r&&{opacity:.7}],hitSlop:6,children:De(l,{style:ve.forgetText,children:"Ask again"})})]},o.key))]}):null]})}var ve=x.create({scroll:{flex:1},content:{padding:ce.gutter,gap:10,paddingBottom:32},section:{color:ce.color.textTertiary,fontSize:10,fontWeight:"700",letterSpacing:.6,paddingHorizontal:4,paddingTop:4},warning:{flexDirection:"row",gap:8,padding:ce.cardPad,borderRadius:ce.radius.card,borderWidth:x.hairlineWidth,borderColor:ce.color.warning,backgroundColor:ce.color.surface},warningText:{flex:1,color:ce.color.warning,fontSize:ce.font.micro,lineHeight:16},trustedBox:{gap:6,paddingTop:6},trustedRow:{flexDirection:"row",alignItems:"center",gap:10,padding:ce.cardPad,borderRadius:ce.radius.card,borderWidth:x.hairlineWidth,borderColor:ce.color.border,backgroundColor:ce.color.surface},trustedLabel:{flex:1,color:ce.color.text,fontSize:ce.font.caption,lineHeight:18},forget:{paddingHorizontal:10,paddingVertical:6,borderRadius:ce.radius.row,backgroundColor:ce.color.button},forgetText:{color:ce.color.text,fontSize:ce.font.micro,fontWeight:"600"},note:{color:ce.color.textTertiary,fontSize:ce.font.micro,lineHeight:16,paddingHorizontal:4}});import{ChevronRight as uc,night as me,NightSectionLabel as pc}from"@buoy-gg/shared-ui/web";var hc=[{text:"Why is this screen empty?"},{text:"What did the last few network calls return?",needs:"network"},{text:"Show me what's saved for this user",needs:"storage"},{text:"Make the next request to this screen fail with a 500",needs:"network",write:true,devOnly:true},{text:"Who am I signed in as right now?"},{text:"Did anything crash or log an error recently?",needs:"console"}],gc=4;function bc(e){let t=e.availableToolIds.length>0;return hc.filter(o=>o.write&&e.readOnly||o.devOnly&&e.isRelease?false:o.needs?t&&e.availableToolIds.includes(o.needs):true).slice(0,gc).map(o=>o.text)}import{jsx as je,jsxs as Ft}from"react/jsx-runtime";var dn=typeof Qt<"u"&&!Qt;function fc({configured:e,onPick:t,availableToolIds:o=[],readOnly:r=false}){let n=bc({availableToolIds:o,readOnly:r,isRelease:dn});return e?Ft(s,{style:Se.wrap,testID:"buoy-ask-buoy-empty",children:[je(l,{style:Se.title,children:"Ask about this app"}),je(l,{style:Se.body,children:"Ask what the app is doing right now, or tell it to change something. Anything it changes shows up in a bar at the top, with what can be undone."}),je(l,{style:Se.buildLine,testID:"buoy-ask-buoy-build-line",children:dn?"Release build \u2014 reading, impersonation and navigation work; simulations (forcing server responses, driving the screen) need a dev build.":"Dev build \u2014 full simulation available."}),Ft(s,{style:Se.group,children:[je(pc,{children:"Try asking"}),je(s,{style:Se.card,children:n.map((i,a)=>je(yc,{text:i,onPick:t,last:a===n.length-1},i))})]})]}):Ft(s,{style:Se.wrap,testID:"buoy-ask-buoy-unconfigured",children:[je(l,{style:Se.title,children:"Not set up yet"}),Ft(l,{style:Se.body,children:["Ask Buoy talks to your own company's AI endpoint \u2014 nothing goes to Buoy. A developer needs to add the ",je(l,{style:Se.code,children:"askBuoy"})," prop to"," ",je(l,{style:Se.code,children:"<FloatingDevTools />"})," with your team's endpoint and model."]})]})}function yc({text:e,onPick:t,last:o}){return Ft(f,{testID:`buoy-ask-buoy-suggestion-${e.slice(0,12)}`,accessibilityRole:"button",onPress:()=>t(e),style:({pressed:r})=>[Se.row,!o&&Se.rowDivider,r&&Se.pressed],children:[je(l,{style:Se.rowText,children:e}),je(uc,{size:14,color:me.color.textTertiary})]})}var Se=x.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:me.gutter,paddingVertical:24,gap:8},title:{color:me.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:me.color.textSecondary,fontSize:me.font.body,lineHeight:20},code:{color:me.color.text,fontFamily:"Menlo"},buildLine:{marginTop:8,color:me.color.textTertiary,fontSize:me.font.micro,lineHeight:15},group:{marginTop:me.groupGap-8},card:{borderRadius:me.radius.card,borderWidth:x.hairlineWidth,borderColor:me.color.border,backgroundColor:me.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:me.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:x.hairlineWidth,borderBottomColor:me.color.separator},rowText:{flex:1,color:me.color.text,fontSize:me.font.body,lineHeight:19},pressed:{backgroundColor:me.color.fill}});import{memo as mc,useCallback as Dt,useEffect as xc,useRef as Ho,useState as un}from"react";import{AlertTriangle as pn,Check as hn,ChevronDown as gn,ChevronRight as bn,Copy as kc,night as k,X as wc}from"@buoy-gg/shared-ui/web";import{toolTitle as vc}from"@buoy-gg/agent-core/web";import{isAskBlock as Sc}from"@buoy-gg/agent-core/web";function Tc({block:e,forToolCallId:t}){if(!t)return false;let o="source"in e?e.source:void 0;return o==="live"||o==="mocked"}function Cc(e,t){let o=new Set(t),r=new Map,n=[],i=[];for(let a of e){if(Sc(a.block)){i.push(a);continue}if(Tc(a)&&o.has(a.forToolCallId)){let h=r.get(a.forToolCallId)??[];h.push(a.block),r.set(a.forToolCallId,h)}else n.push(a)}return{nested:r,afterText:n,ask:i}}import{useState as fn}from"react";import{Activity as zc,ChevronDown as Ic,ChevronRight as Dc,night as Y}from"@buoy-gg/shared-ui/web";function Lo(e){let t=[...e.reasoning??[]].sort((i,a)=>i.afterCalls-a.afterCalls),o=[],r=0,n=i=>{for(;r<t.length&&t[r].afterCalls<=i;)o.push({kind:"thought",text:t[r].text}),r+=1};return e.toolCalls.forEach((i,a)=>{n(a),o.push({kind:"step",n:a+1,call:i})}),n(e.toolCalls.length),o}function yn(e){return(e.reasoning?.length??0)>0||e.toolCalls.length>0}var Rc=e=>e.status==="ok"?e.summary||"done":e.status==="running"?"running":`${e.status}${e.summary?` \u2014 ${e.summary}`:""}`;function mn(e,t=" "){let o=[];for(let r of Lo(e))if(r.kind==="thought"){o.push(`${t}[thinking]`);for(let n of r.text.trim().split(`
|
|
11
|
+
`))o.push(`${t} ${n}`)}else{let{n,call:i}=r;o.push(`${t}[${n}] ${i.toolId}.${i.action} \u2014 ${Rc(i)}`),i.params&&o.push(`${t} ${i.params}`)}return o}import{Fragment as $c,jsx as He,jsxs as nt}from"react/jsx-runtime";function Ac({n:e,call:t}){let[o,r]=fn(false),n=t.status==="failed"||t.status==="refused";return nt(f,{onPress:()=>r(i=>!i),accessibilityRole:"button",accessibilityState:{expanded:o},style:pe.step,children:[nt(s,{style:pe.stepLine,children:[He(l,{style:pe.stepN,children:e}),nt(l,{style:[pe.stepName,n&&pe.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),t.durationMs!==void 0?nt(l,{style:pe.stepMs,children:[t.durationMs,"ms"]}):null,He(l,{style:[pe.stepStatus,n&&pe.stepFailed],numberOfLines:1,children:t.status==="ok"?t.summary||"done":t.status})]}),o?nt(s,{style:pe.detail,children:[He(l,{style:pe.detailLabel,children:"SENT"}),He(l,{style:pe.code,selectable:true,children:t.params??"no parameters"}),t.result?nt($c,{children:[He(l,{style:pe.detailLabel,children:"RETURNED"}),He(l,{style:pe.code,selectable:true,children:t.result})]}):null]}):null]})}function xn({message:e}){let[t,o]=fn(false);if(!yn(e))return null;let r=Lo(e),n=r.filter(u=>u.kind==="step").length,i=r.length-n,a=e.startedAt!==void 0&&e.endedAt!==void 0?`${((e.endedAt-e.startedAt)/1e3).toFixed(1)}s`:null,h=[n?`${n} step${n===1?"":"s"}`:null,i?`${i} thought${i===1?"":"s"}`:null,a,e.usage?`${e.usage.input+e.usage.output} tokens`:null].filter(Boolean).join(" \xB7 ");return nt(s,{style:pe.wrap,testID:"buoy-ask-buoy-thinking",children:[nt(f,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>o(u=>!u),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:pe.head,children:[He(zc,{size:12,color:Y.color.textTertiary}),He(l,{style:pe.headText,children:h}),t?He(Ic,{size:12,color:Y.color.textTertiary}):He(Dc,{size:12,color:Y.color.textTertiary})]}),t?nt(s,{style:pe.body,children:[r.map((u,g)=>u.kind==="thought"?He(l,{style:pe.thought,selectable:true,children:u.text.trim()},`t${g}`):He(Ac,{n:u.n,call:u.call},u.call.id)),i===0?He(l,{style:pe.none,children:"This model reports no reasoning \u2014 the steps above are the whole trace."}):null]}):null]})}var pe=x.create({wrap:{marginTop:8,borderRadius:Y.radius.badge,borderWidth:x.hairlineWidth,borderColor:Y.color.separator,backgroundColor:Y.color.fill,overflow:"hidden"},head:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:7},headText:{flex:1,color:Y.color.textTertiary,fontSize:Y.font.micro,fontWeight:"600"},body:{borderTopWidth:x.hairlineWidth,borderTopColor:Y.color.separator},thought:{color:Y.color.textSecondary,fontSize:Y.font.micro,lineHeight:17,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8},step:{paddingHorizontal:10,paddingVertical:7},stepLine:{flexDirection:"row",alignItems:"center",gap:8},stepN:{color:Y.color.textTertiary,fontSize:Y.font.micro,width:14},stepName:{flex:1,color:Y.color.textSecondary,fontSize:Y.font.micro,fontWeight:"600"},stepMs:{color:Y.color.textTertiary,fontSize:Y.font.micro},stepStatus:{color:Y.color.textTertiary,fontSize:Y.font.micro,maxWidth:110},stepFailed:{color:Y.color.danger},detail:{marginTop:6,marginLeft:22,gap:3},detailLabel:{color:Y.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.5},code:{color:Y.color.textSecondary,fontSize:Y.font.micro,lineHeight:16,marginBottom:3},none:{color:Y.color.textTertiary,fontSize:Y.font.micro,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8}});import{useEffect as Bc,useRef as Hc}from"react";import{night as Lc}from"@buoy-gg/shared-ui/web";import{jsx as kn}from"react/jsx-runtime";function Wc(){let e=Hc([0,1,2].map(()=>new se.Value(.25))).current;return Bc(()=>{let t=e.map((o,r)=>se.loop(se.sequence([se.delay(r*140),se.timing(o,{toValue:1,duration:320,easing:Tt.inOut(Tt.ease),useNativeDriver:true}),se.timing(o,{toValue:.25,duration:320,easing:Tt.inOut(Tt.ease),useNativeDriver:true}),se.delay((2-r)*140)])));return t.forEach(o=>o.start()),()=>t.forEach(o=>o.stop())},[e]),kn(s,{style:wn.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:e.map((t,o)=>kn(se.View,{style:[wn.dot,{opacity:t}]},o))})}var wn=x.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:Lc.color.textSecondary}});import{jsx as w,jsxs as Te}from"react/jsx-runtime";function vn({status:e}){switch(e){case"running":return w(Lt,{size:"small",color:k.color.textSecondary});case"ok":return w(s,{style:[m.mark,m.markOk],children:w(hn,{size:10,color:k.color.onAccent})});case"failed":return w(s,{style:[m.mark,m.markFailed],children:w(wc,{size:10,color:k.color.text})});case"refused":return w(s,{style:[m.mark,m.markRefused],children:w(pn,{size:10,color:k.color.onAccent})});case"declined":case"stopped":return w(s,{style:[m.mark,m.markNotRun],children:w(s,{style:m.markNotRunBar})})}}function Oc(e){return e.status==="running"?{text:"",tone:"muted"}:e.status==="refused"?{text:"Refused",tone:"warning"}:e.status==="failed"?{text:"Failed",tone:"danger"}:e.status==="declined"?{text:"You declined",tone:"muted"}:e.status==="stopped"?{text:"Not run \u2014 stopped",tone:"muted"}:e.verification?.status==="verified"?{text:"Verified",tone:"ok"}:e.verification?.status==="unverified"?{text:"Done \xB7 not yet visible",tone:"muted"}:e.verification?.status==="failed"?{text:"Done \xB7 check failed",tone:"warning"}:{text:e.summary||"Done",tone:"muted"}}var Pc=e=>e.status==="failed"||e.status==="refused"||e.status==="declined"||e.status==="stopped";function Sn({call:e,receipts:t,last:o}){let[r,n]=un(false),i=Oc(e),a=r?gn:bn,h=e.status==="failed"&&e.summary&&e.summary!=="Failed"?e.summary:null;return Te(s,{style:[m.row,!o&&m.rowDivider],children:[Te(f,{testID:`buoy-ask-buoy-tool-${e.toolId}`,accessibilityRole:"button",accessibilityLabel:`${e.label}, ${i.text||"running"}`,accessibilityState:{expanded:r},onPress:()=>n(u=>!u),children:[Te(s,{style:m.rowLine,children:[w(s,{style:m.markSlot,children:w(vn,{status:e.status})}),w(l,{style:m.rowTitle,children:e.label}),i.text?w(l,{style:[m.rowStatus,i.tone==="danger"&&m.rowStatusDanger,i.tone==="warning"&&m.rowStatusWarning,i.tone==="ok"&&m.rowStatusOk],numberOfLines:1,children:i.text}):null,w(a,{size:12,color:k.color.textTertiary})]}),r&&Te(s,{style:m.rowDetail,children:[w(l,{style:m.rowTool,children:vc(e.toolId).toUpperCase()}),e.description?w(l,{style:m.rowDescription,children:e.description}):null,h?w(l,{style:m.rowFailure,children:h}):null,e.verification?w(l,{style:[m.rowDescription,e.verification.status==="failed"&&m.rowFailure,e.verification.status==="verified"&&m.rowVerified],testID:`buoy-ask-buoy-verification-${e.verification.status}`,children:e.verification.detail}):null]})]}),r&&t.length>0&&w(s,{style:m.rowReceipts,testID:`buoy-ask-buoy-tool-receipt-${e.toolId}`,children:t.map(u=>w(Zt,{block:u},u.id))})]})}function Vc({label:e,count:t,calls:o,receipts:r,last:n}){let[i,a]=un(false),h=i?gn:bn;return Te(s,{style:!n&&!i&&m.rowDivider,children:[w(f,{testID:"buoy-ask-buoy-reads-group",accessibilityRole:"button",accessibilityLabel:`${e}, ${t} reads`,accessibilityState:{expanded:i},onPress:()=>a(u=>!u),style:[m.row,i&&m.rowDivider],children:Te(s,{style:m.rowLine,children:[w(s,{style:m.markSlot,children:w(vn,{status:"ok"})}),w(l,{style:m.rowTitle,children:e}),Te(l,{style:m.rowStatus,numberOfLines:1,children:[t," reads"]}),w(h,{size:12,color:k.color.textTertiary})]})}),i&&w(s,{style:m.groupBody,children:o.map((u,g)=>w(Sn,{call:u,receipts:r.get(u.id)??[],last:n&&g===o.length-1},u.id))})]})}function Ec({calls:e,receipts:t}){let o=Is(e);return w(s,{style:m.card,testID:"buoy-ask-buoy-activity",children:o.map((r,n)=>r.kind==="reads"?w(Vc,{label:r.label,count:r.count,calls:r.calls,receipts:t,last:n===o.length-1},r.id):w(Sn,{call:r.call,receipts:t.get(r.call.id)??[],last:n===o.length-1},r.call.id))})}function Tn({blocks:e}){return e.length===0?null:w(s,{style:m.blocks,children:e.map(({block:t})=>w(Zt,{block:t},t.id))})}function Nc({message:e}){return w(s,{style:m.systemLine,testID:"buoy-ask-buoy-system-line",children:w(l,{style:m.systemText,children:e.text})})}function jc({message:e}){return w(s,{style:m.userWrap,children:w(s,{style:m.userBubble,children:w(l,{style:m.userText,selectable:true,children:e.text})})})}function Mc({message:e,onRetry:t,waitingOnUser:o}){let{showThinking:r}=It(),n=!!e.streaming&&!o,{nested:i,afterText:a,ask:h}=Cc(e.blocks,e.toolCalls.map(u=>u.id));return Te(s,{style:m.assistantWrap,children:[e.toolCalls.length>0&&w(Ec,{calls:e.toolCalls,receipts:i}),e.text.length>0&&w(ur,{text:e.text,style:m.assistantText}),w(Tn,{blocks:a}),w(Tn,{blocks:h}),r&&!e.streaming&&w(xn,{message:e}),n&&Te(s,{style:m.waitingRow,children:[w(Wc,{}),e.waiting?w(l,{style:m.waitingText,testID:"buoy-ask-buoy-waiting",children:e.waiting}):null]}),e.error&&w(Fc,{error:e.error,onRetry:t}),e.stopped&&!e.error&&w(qc,{onRetry:t,changed:e.toolCalls.some(u=>u.status==="ok"&&!!u.effect&&u.effect!=="read")})]})}function qc({onRetry:e,changed:t}){return Te(s,{style:m.stoppedBox,testID:"buoy-ask-buoy-stopped",children:[w(l,{style:m.stoppedText,children:t?"Stopped. Changes already made are listed above.":"Stopped."}),e&&w(f,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:e,style:({pressed:o})=>[m.retry,o&&m.retryPressed],children:w(l,{style:m.retryText,children:"Try again"})})]})}function Fc({error:e,onRetry:t}){let o=/fetch failed|network|ECONN|timed? ?out|socket/i.test(e)?"Couldn't reach your AI endpoint. Check the connection and try again.":"Something went wrong with that turn.";return Te(s,{style:m.errorBox,testID:"buoy-ask-buoy-error",children:[w(pn,{size:14,color:k.color.danger}),Te(s,{style:m.errorBody,children:[w(l,{style:m.errorText,children:o}),w(l,{style:m.errorDetail,selectable:true,children:e}),t&&w(f,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:t,style:({pressed:r})=>[m.retry,r&&m.retryPressed],children:w(l,{style:m.retryText,children:"Try again"})})]})]})}function Cn(e,t=false){let o=[];for(let r of e){if(r.role==="user"){o.push(`You: ${r.text}`);continue}if(r.system){o.push(` \u2014 ${r.text}`);continue}if(t)o.push(...mn(r));else for(let n of r.toolCalls){let i=Pc(n)?` (${n.status})`:"";o.push(` \xB7 ${n.label}${n.summary?` \u2014 ${n.summary}`:""}${i}`)}r.text&&o.push(`Ask Buoy: ${r.text}`);for(let n of Hl(r.blocks.map(i=>i.block)))o.push(n);r.error&&o.push(` ! ${r.error}`),r.stopped&&!r.error&&o.push(" ! Stopped by the user.")}return o.join(`
|
|
12
|
+
`)}function Uc({testID:e,label:t,getText:o}){let{copied:r,copy:n}=fo(o);return Te(f,{testID:e,accessibilityRole:"button",accessibilityLabel:t,onPress:n,style:({pressed:i})=>[m.copyBtn,m.iconBtn,i&&m.copyPressed],children:[r?w(hn,{size:11,color:k.color.accent}):w(kc,{size:11,color:k.color.textSecondary}),w(l,{style:[m.copyText,r&&m.copiedText],children:r?"Copied":t})]})}function _c({message:e}){let{showThinking:t}=It(),o=Dt(()=>Cn(b.getState().messages,t),[t]),r=Rs(e);return Te(s,{style:m.transcriptActions,children:[r?w(l,{style:m.turnFooter,testID:"buoy-ask-buoy-turn-footer",children:r}):null,w(Uc,{testID:"buoy-ask-buoy-copy",label:"Copy conversation",getText:o})]})}var Kc=mc(function({message:e,onRetry:t,waitingOnUser:o}){if(e.role==="user")return w(jc,{message:e});if(e.system)return w(Nc,{message:e});let r=!e.streaming&&!e.error;return Te(s,{children:[w(Mc,{message:e,onRetry:t,waitingOnUser:o}),r&&w(_c,{message:e})]})});function zn({messages:e,ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r,onRetry:n,waitingOnUser:i}){let a=Ho(null),h=Ho(true),u=Ho(false),g=Dt(fe=>{let{contentOffset:Ke,contentSize:Re,layoutMeasurement:Qe}=fe.nativeEvent,Je=Re.height-Qe.height-Ke.y;h.current=Je<80},[]),y=Dt(()=>{u.current=true},[]),C=Dt(fe=>{u.current&&g(fe)},[g]),j=Dt(fe=>{u.current=false,g(fe)},[g]),q=Dt(()=>{h.current&&(a.current?.scrollToEnd({animated:false}),requestAnimationFrame(()=>a.current?.scrollToEnd({animated:false})))},[]),X=e[e.length-1],ee=X?`${X.id}:${X.text.length}:${X.toolCalls.length}:${X.error??""}`:"";return xc(()=>{q()},[ee,q]),w(Go,{ref:a,testID:"buoy-ask-buoy-messages-scroll",style:m.list,contentContainerStyle:m.listContent,data:e,keyExtractor:fe=>fe.id,renderItem:({item:fe})=>w(Kc,{message:fe,onRetry:fe.id===X?.id?n:void 0,waitingOnUser:fe.id===X?.id?i:false}),onScroll:C,onScrollBeginDrag:y,onScrollEndDrag:j,onMomentumScrollEnd:g,scrollEventThrottle:32,onContentSizeChange:q,keyboardShouldPersistTaps:"handled",keyboardDismissMode:"interactive",ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r})}var m=x.create({list:{flex:1,backgroundColor:"transparent"},listContent:{paddingHorizontal:k.gutter,paddingTop:12,paddingBottom:16,gap:16,flexGrow:1},userWrap:{alignItems:"flex-end"},userBubble:{maxWidth:"84%",paddingHorizontal:14,paddingVertical:9,borderRadius:18,borderBottomRightRadius:6,backgroundColor:k.color.accentFill,borderWidth:x.hairlineWidth,borderColor:k.color.accentBorder},userText:{color:k.color.text,fontSize:k.font.row,lineHeight:21},systemLine:{alignSelf:"stretch",paddingHorizontal:12,paddingVertical:7,borderRadius:k.radius.row,backgroundColor:k.color.fill},systemText:{color:k.color.textSecondary,fontSize:k.font.micro,lineHeight:16,textAlign:"center"},assistantWrap:{alignItems:"stretch",gap:10},blocks:{gap:10},waitingRow:{flexDirection:"row",alignItems:"center",gap:8},waitingText:{color:k.color.textSecondary,fontSize:k.font.caption},assistantText:{color:k.color.text,fontSize:k.font.row,lineHeight:22,paddingHorizontal:2},card:{borderRadius:k.radius.card,borderWidth:x.hairlineWidth,borderColor:k.color.border,backgroundColor:k.color.surface,overflow:"hidden"},row:{paddingHorizontal:12,paddingVertical:10},rowDivider:{borderBottomWidth:x.hairlineWidth,borderBottomColor:k.color.separator},rowLine:{flexDirection:"row",alignItems:"center",gap:10},markSlot:{width:18,height:18,alignItems:"center",justifyContent:"center"},mark:{width:16,height:16,borderRadius:8,alignItems:"center",justifyContent:"center"},markOk:{backgroundColor:k.color.accent},markFailed:{backgroundColor:k.color.danger},markRefused:{backgroundColor:k.color.warning},markNotRun:{borderWidth:1.5,borderColor:k.color.textTertiary},markNotRunBar:{width:7,height:1.5,borderRadius:1,backgroundColor:k.color.textSecondary},rowTitle:{flex:1,color:k.color.text,fontSize:k.font.body,lineHeight:19},rowStatus:{color:k.color.textTertiary,fontSize:k.font.caption,maxWidth:120},rowStatusDanger:{color:k.color.danger},rowStatusWarning:{color:k.color.warning},rowStatusOk:{color:k.color.accent},rowVerified:{color:k.color.accent},rowDetail:{paddingLeft:28,paddingTop:8,gap:4},rowTool:{color:k.color.textTertiary,fontSize:k.font.micro,fontWeight:"600",letterSpacing:.8},rowDescription:{color:k.color.textSecondary,fontSize:k.font.caption,lineHeight:18},rowFailure:{color:k.color.danger,fontSize:k.font.caption,lineHeight:18},rowReceipts:{paddingTop:10,gap:10},groupBody:{paddingLeft:14,backgroundColor:k.color.fill},stoppedBox:{alignItems:"flex-start",gap:2,paddingHorizontal:12,paddingVertical:8},stoppedText:{color:k.color.textTertiary,fontSize:k.font.caption,lineHeight:18},errorBox:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:12,paddingVertical:10,borderRadius:k.radius.row,backgroundColor:k.color.dangerSoft},errorBody:{flex:1,gap:4},errorText:{color:k.color.danger,fontSize:k.font.caption,fontWeight:"600",lineHeight:18},errorDetail:{color:k.color.textSecondary,fontSize:k.font.micro,lineHeight:15},retry:{alignSelf:"flex-start",marginTop:6,paddingHorizontal:14,paddingVertical:7,borderRadius:k.radius.row,backgroundColor:k.color.button},retryPressed:{opacity:.7},retryText:{color:k.color.accent,fontSize:k.font.caption,fontWeight:"600"},transcriptActions:{flexDirection:"row",alignItems:"center",gap:10,marginTop:8},turnFooter:{flex:1,color:k.color.textTertiary,fontSize:k.font.micro,fontVariant:["tabular-nums"]},copyBtn:{paddingHorizontal:10,paddingVertical:5,borderRadius:k.radius.badge,backgroundColor:k.color.fill},iconBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8},copyPressed:{opacity:.7},copyText:{color:k.color.textSecondary,fontSize:k.font.micro,fontWeight:"600"},copiedText:{color:k.color.accent}});import{night as Le,X as Qc}from"@buoy-gg/shared-ui/web";import{jsx as Rt,jsxs as Wo}from"react/jsx-runtime";var Jc=132;function Gc({items:e,paused:t,onEdit:o,onRemove:r}){return e.length===0?null:Wo(s,{style:We.wrap,testID:"buoy-ask-buoy-queued",children:[Rt(Fe,{style:We.list,contentContainerStyle:We.listContent,keyboardShouldPersistTaps:"handled",children:e.map((n,i)=>Wo(s,{style:[We.row,t!==null&&We.rowPaused],children:[Wo(f,{testID:`buoy-ask-buoy-queue-item-${i}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${n.text}`,onPress:()=>o(n.id),style:({pressed:a})=>[We.rowBody,a&&We.pressed],children:[Rt(l,{style:We.ordinal,children:i===0?"NEXT":"THEN"}),Rt(l,{style:We.text,numberOfLines:3,children:n.text})]}),Rt(f,{testID:`buoy-ask-buoy-queue-remove-${i}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>r(n.id),hitSlop:8,style:({pressed:a})=>[We.remove,a&&We.pressed],children:Rt(Qc,{size:11,color:Le.color.textTertiary})})]},n.id))}),Rt(l,{style:[We.hint,t!==null&&We.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes \xB7 tap to edit"})]})}var We=x.create({wrap:{paddingHorizontal:Le.gutter,paddingTop:8,gap:6,backgroundColor:Le.color.bg},list:{maxHeight:Jc},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:Le.radius.row,borderWidth:x.hairlineWidth,borderColor:Le.color.border,backgroundColor:Le.color.surface},rowPaused:{borderColor:Le.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:Le.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:Le.color.textSecondary,fontSize:Le.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:Le.color.textTertiary,fontSize:Le.font.micro},hintPaused:{color:Le.color.warning}});var Yc="Summarize this conversation as a bug ticket, using one buoy_ui finding block and nothing else. Title it with the problem in one line. Evidence rows, in this order: Steps (what we did), Expected, Observed, Build (dev or release, platform), Evidence (the exact requests, statuses, logs or values you actually saw this conversation), Still applied (overrides or changes from your changes list that are still live, or 'none'). Only facts you observed in this conversation; write 'unknown' where you don't know rather than guessing, and put anything you inferred rather than saw in a final row labelled Inference. Do not run any tool or change anything to produce this.";import{Fragment as Xc,jsx as we,jsxs as ro}from"react/jsx-runtime";function Oo({visible:e,onClose:t,onBack:o,onMinimize:r,persistenceKey:n,config:i}){let{state:a,send:h,stop:u,reset:g,undoThenReset:y,approve:C,retry:j,answer:q,runAction:X,editQueued:ee,removeQueued:fe,configured:Ke,toolCount:Re,availableToolIds:Qe}=sn(i),[Je,ut]=co(false),pt=qe(()=>{u(),t()},[u,t]),wt=qe(()=>b.clearDraft(),[]),[Me,it]=co(false),lt=qe(()=>it(false),[]),Ge=qe(()=>it(true),[]),ht=!e,Ye=!!a.pending||!!a.awaitingBlockId,Ce=a.messages[a.messages.length-1],vt=At(false),Ut=At(a.busy);$t(()=>{ht&&Ut.current&&!a.busy&&(vt.current=true),ht||(vt.current=false),Ut.current=a.busy},[ht,a.busy]),$t(()=>{if(!ht){Ct("ask-buoy",null);return}Ye?Ct("ask-buoy",{kind:"needsInput",label:a.pending?"Needs your approval":"Has a question for you"}):vt.current&&Ce?.role==="assistant"&&Ce.error?Ct("ask-buoy",{kind:"failed",label:"The last turn failed"}):vt.current&&!a.busy?Ct("ask-buoy",{kind:"done",label:"Finished"}):Ct("ask-buoy",null)},[ht,Ye,a.busy,a.pending,Ce]),$t(()=>()=>Ct("ask-buoy",null),[]),$t(()=>{a.pending&&Me&&it(false)},[a.pending,Me]);let io=Pi({minBottom:16}),[_t,lo]=co("bottomSheet"),ao=_t==="floating"?0:io.bottom,so=qe(()=>{let J=b.getLedger();J&&(async()=>{let ne=await J.revertAll(Hi);if(ne.failed.length===0){b.setNotice(null);return}let St=ne.failed.map(Kt=>`${Kt.label} (${Kt.error})`).join("; ");b.setNotice(`Couldn't undo ${ne.failed.length} change${ne.failed.length===1?"":"s"} \u2014 ${St}`)})()},[]),S=qe(()=>ut(J=>!J),[]),E=At(new se.Value(560)).current,U=At(false),re=qe(()=>{U.current||(U.current=true,E.stopAnimation(J=>{let ne=typeof J=="number"&&J>200?J:560;se.timing(E,{toValue:120,duration:220,useNativeDriver:false}).start(()=>{setTimeout(()=>{se.spring(E,{toValue:ne,friction:9,useNativeDriver:false}).start(()=>{U.current=false})},2500)})}))},[E]),xe=Jt(()=>{let J=a.messages[a.messages.length-1];if(!J||J.role!=="assistant")return"";let ne=J.blocks.filter(St=>St.block.kind==="peek").length;return ne>0?`${J.id}:${ne}`:""},[a.messages]),te=At("");$t(()=>{xe&&xe!==te.current&&i?.peek!==false&&re(),te.current=xe},[xe,re,i]);let $n=qe(()=>{let J=b.getLedger()?.list().filter(ne=>!ne.undoneAt&&Bi(ne.effect)).length??0;if(J===0){g();return}po.alert("Undo changes first?",`Ask Buoy made ${J} change${J===1?"":"s"} that can still be undone. Clearing the conversation loses the only automatic undo for ${J===1?"it":"them"}.`,[{text:"Undo, then clear",onPress:()=>{(async()=>{let ne=await y();if(ne.cleared)return;let St=ne.reverted+ne.failed.length,Kt=ne.failed.map(Uo=>`${Uo.label} (${Uo.error})`).join(`
|
|
13
|
+
`);po.alert(`Couldn't undo ${ne.failed.length} of ${St} change${St===1?"":"s"}`,`${Kt}
|
|
15
14
|
|
|
16
|
-
Still applied in the app. Clear the conversation anyway?`,[{text:"Keep conversation",style:"cancel"},{text:"Clear anyway",style:"destructive",onPress:
|
|
15
|
+
Still applied in the app. Clear the conversation anyway?`,[{text:"Keep conversation",style:"cancel"},{text:"Clear anyway",style:"destructive",onPress:g}])})()}},{text:"Clear anyway",style:"destructive",onPress:g},{text:"Cancel",style:"cancel"}])},[g,y]),An=Jt(()=>{let J=a.messages[a.messages.length-1];return!J||J.role!=="assistant"||!J.streaming?null:J.toolCalls.find(ne=>ne.status==="running")?.label??null},[a.messages]),No=Lr(b.getLedger()),jo=Jt(()=>ss(No),[No]),Bn=Jt(()=>({answer:q,runAction:(J,ne)=>{if(J.minimize){r?.({mode:"bottomSheet"});return}return X(J,ne)},answered:a.answers,actionState:a.actionState,busy:a.busy,supports:{openTool:false,minimize:!!r,dispatch:true},rules:jo}),[q,X,r,a.answers,a.actionState,a.busy,jo]),Hn=!a.busy&&Ce?.role==="assistant"&&!!Ce.error,Mo=!a.busy&&Ce?.role==="assistant"&&Ce.stopped&&!Ce.error?Ce.id:null,Ln=Yr(a),{showThinking:qo,readOnly:Fo}=It(),Wn=qe(()=>Cn(a.messages,qo),[a.messages,qo]),On=qe(()=>h(Yc),[h]),Pn=Me?ro(ho,{children:[we(ho.Navigation,{onBack:lt}),we(ho.Content,{title:"Settings",subtitle:"Ask Buoy",testID:"buoy-ask-buoy-settings-title"})]}):we(Ur,{configured:Ke,busy:a.busy,failed:Hn,activeLabel:An,awaitingApproval:!!a.pending,startedAt:Ce?.role==="assistant"&&Ce.streaming?Ce.startedAt??null:null,stopping:a.stopping,readOnly:Fo,toolCount:Re,hasMessages:a.messages.length>0,onBack:o,onReset:$n,getTranscript:Wn,onOpenSettings:Ge,onTicket:On});return we(Oi,{visible:e,onClose:pt,disableScrollWrapper:true,background:false,initialHeight:560,animatedHeight:E,header:{customContent:Pn,showToggleButton:false},onBack:o,onMinimize:r,onModeChange:lo,persistenceKey:n??"buoy-ask-buoy",enablePersistence:true,children:we(tr,{value:Bn,children:ro(s,{style:[Po.root,{paddingBottom:ao}],children:[we(Wr,{ledger:b.getLedger(),onUndoAll:so,expanded:Je,onToggle:S}),a.notice&&ro(s,{style:Po.notice,testID:"buoy-ask-buoy-notice",children:[we(Wi,{size:14,color:Wt.color.info}),we(l,{style:Po.noticeText,children:a.notice})]}),we(ys,{children:we(Li,{featureName:"Ask Buoy",children:Me?we(cn,{}):ro(Xc,{children:[we(zn,{messages:a.messages,onRetry:j,waitingOnUser:!!a.pending||!!a.awaitingBlockId,ListEmptyComponent:we(fc,{configured:Ke,onPick:h,availableToolIds:Qe,readOnly:Fo||!!i?.policy?.readOnly})}),we(Gc,{items:a.queued,paused:Ln,onEdit:ee,onRemove:fe}),a.pending&&we(Ar,{pending:a.pending,onAnswer:C}),we(Er,{onSend:h,onStop:u,busy:a.busy,draft:a.draft,onDraftTaken:wt,disabled:!Ke,focusKey:Mo,canFocus:e,placeholder:Mo?"Tell it what to do differently\u2026":a.awaitingBlockId?"Pick an option above, or type\u2026":void 0})]})})})]})})})}var Po=x.create({root:{flex:1,backgroundColor:"transparent"},notice:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:Wt.gutter,paddingVertical:10,backgroundColor:Wt.color.infoSoft},noticeText:{flex:1,color:Wt.color.text,fontSize:Wt.font.caption,lineHeight:18}});import{AskBuoyIcon as In,ASK_BUOY_ICON_COLOR as Dn}from"@buoy-gg/floating-tools-core/web";import{jsx as Rn}from"react/jsx-runtime";var no={id:"ask-buoy",name:"ASK BUOY",description:"Ask about this app in plain English",slot:"both",color:Dn,icon:({size:e,slot:t})=>Rn(In,{size:t==="dial"?e*1.5:e}),component:Oo};function Zc(e){let{name:t,description:o,...r}=e,n=r;return{...no,name:t??no.name,description:o??no.description,component:i=>Rn(Oo,{...i,config:n})}}import{isReversible as Vo}from"@buoy-gg/agent-core/web";var Eo=1,ed={version:Eo,async dispose(e){let t=b.getLedger();for(let o of t?.list()??[])o.undoneAt||o.effect.kind==="network-override"&&await e("network","deleteOverrideRule",{id:o.effect.ruleId})},getSnapshot(){let e=b.getState(),t=(b.getLedger()?.list()??[]).filter(o=>!o.undoneAt);return{version:Eo,busy:e.busy,configured:e.configured,notice:e.notice,messageCount:e.messages.length,messages:e.messages.map(o=>({id:o.id,role:o.role,text:Mt(o.text),streaming:!!o.streaming,toolCalls:o.toolCalls.map(r=>({toolId:r.toolId,action:r.action,status:r.status}))})),usage:e.usage,pendingApproval:e.pending?{toolId:e.pending.toolId,action:e.pending.action,label:e.pending.label}:null,changes:{reversible:t.filter(o=>Vo(o.effect)).length,permanent:t.filter(o=>o.effect.kind!=="transient"&&!Vo(o.effect)).length,transients:t.filter(o=>o.effect.kind==="transient").length,items:t.map(o=>({kind:o.effect.kind,label:o.effect.label}))}}},subscribe(e){let t=b.subscribe(e),o=b.getLedger()?.subscribe(e);return()=>{t(),o?.()}},actions:{listChanges:()=>(b.getLedger()?.list()??[]).filter(e=>!e.undoneAt).map(e=>({id:e.id,at:e.at,toolId:e.toolId,action:e.action,kind:e.effect.kind,label:e.effect.label,reversible:Vo(e.effect)})),undoAll:async()=>{let e=b.getLedger();return e?{ok:true,...await e.revertAll(rn)}:{ok:false,error:"No Ask Buoy session on this device."}},reset:async()=>{let e=await ln({dispatch:rn,undoFirst:true});return e.cleared?{ok:true,reverted:e.reverted}:{ok:false,error:`Couldn't undo ${e.failed.length} change${e.failed.length===1?"":"s"} \u2014 conversation kept.`,failed:e.failed}}}};export{Eo as ASK_BUOY_ADAPTER_VERSION,Dn as ASK_BUOY_ICON_COLOR,Ar as ApprovalCard,Ur as AskBuoyHeader,In as AskBuoyIcon,Oo as AskBuoyModal,cn as AskBuoySettings,Pe as BlockActionRow,O as BlockCard,tr as BlockHandlersProvider,Zt as BlockRenderer,Wr as ChangesBar,Er as Composer,ts as EditableUserBubble,Ya as ElapsedRow,Dr as LivePill,ur as Markdown,Ja as MessageActions,zn as MessageList,ar as ProvenanceBadge,Xa as QueuedComposer,Ga as ReasoningStrip,Za as ReloadDivider,xn as ThinkingStrip,es as Timestamp,xt as askBuoySettings,b as askBuoyStore,ed as askBuoySyncAdapter,no as askBuoyToolPreset,Zc as createAskBuoyTool,yn as hasTrace,Mt as redactForWire,Lo as traceEntries,mn as traceToText,sn as useAskBuoy,It as useAskBuoySettings,Bo as useAskBuoyState,Z as useBlockHandlers};
|