@buoy-gg/ask-buoy 7.0.73 → 7.0.75
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/lib/commonjs/blocks/AskBlocks.js +1 -1
- package/lib/commonjs/blocks/AskBlocks.test.js +1 -0
- package/lib/commonjs/components/Composer.js +1 -1
- package/lib/commonjs/components/Composer.test.js +1 -0
- package/lib/commonjs/components/EmptyState.js +1 -1
- package/lib/commonjs/components/EmptyState.test.js +1 -0
- package/lib/module/blocks/AskBlocks.js +1 -1
- package/lib/module/blocks/AskBlocks.test.js +1 -0
- package/lib/module/components/Composer.js +1 -1
- package/lib/module/components/Composer.test.js +1 -0
- package/lib/module/components/EmptyState.js +1 -1
- package/lib/module/components/EmptyState.test.js +1 -0
- package/lib/typescript/blocks/AskBlocks.test.d.ts +2 -0
- package/lib/typescript/components/Composer.test.d.ts +2 -0
- package/lib/typescript/components/EmptyState.test.d.ts +2 -0
- package/lib/web/index.mjs +11 -11
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Choice=Choice;exports.Confirm=Confirm;exports.Input=Input;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _context=require("./context");var _icons=require("./icons");var _primitives=require("./primitives");var _jsxRuntime=require("react/jsx-runtime");function Choice({block:e}){const i=(0,_context.useBlockHandlers)();const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Choice=Choice;exports.Confirm=Confirm;exports.Input=Input;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _context=require("./context");var _icons=require("./icons");var _primitives=require("./primitives");var _jsxRuntime=require("react/jsx-runtime");function Choice({block:e}){const i=(0,_context.useBlockHandlers)();const o=i.answered[e.id];const s=o?.kind==="choice"?o.optionId:null;const n=!!o;return(0,_jsxRuntime.jsxs)(_primitives.Card,{testID:`buoy-block-choice-${e.id}`,tone:n?void 0:"info",children:[e.questionInAnswer?null:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.question,children:e.question}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.options,e.questionInAnswer&&styles.optionsAlone],children:e.options.slice(0,5).map((t,a)=>{const r=s===t.id;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:`buoy-block-option-${t.id}`,accessibilityRole:"button",accessibilityState:{selected:r,disabled:n},disabled:n,onPress:()=>i.answer({blockId:e.id,kind:"choice",optionId:t.id,label:t.label}),style:({pressed:l})=>[styles.option,a>0&&styles.optionDivider,r&&styles.optionChosen,n&&!r&&styles.optionDimmed,l&&!n&&styles.pressed],children:[t.icon?(0,_jsxRuntime.jsx)(_icons.BlockIcon,{name:t.icon}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.optionText,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.optionLabel,r&&styles.optionLabelChosen],children:t.label}),t.detail?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.optionDetail,children:t.detail}):null]}),r?(0,_jsxRuntime.jsx)(_sharedUi.Check,{size:14,color:_sharedUi.night.color.accent}):n?null:(0,_jsxRuntime.jsx)(_sharedUi.ChevronRight,{size:14,color:_sharedUi.night.color.textTertiary})]},t.id)})}),!n&&e.allowFreeText!==false?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.hint,children:"Or just type your answer below."}):null]})}function Confirm({block:e}){const i=(0,_context.useBlockHandlers)();const o=i.answered[e.id];const s=!!o;const n=o?.kind==="confirm"?o.approved:null;return(0,_jsxRuntime.jsxs)(_primitives.Card,{testID:`buoy-block-confirm-${e.id}`,tone:s?void 0:"warning",children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.confirmTitle,children:e.title}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.confirmChange,children:e.change}),e.consequence?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.confirmConsequence,children:e.consequence}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.confirmActions,children:s?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.decided,children:n?`\u2713 ${e.approveLabel??"Done"}`:`\u2715 ${e.declineLabel??"Not now"}`}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>i.answer({blockId:e.id,kind:"confirm",approved:true}),style:({pressed:t})=>[styles.button,styles.buttonPrimary,t&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.buttonTextPrimary,children:e.approveLabel??"Do it"})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>i.answer({blockId:e.id,kind:"confirm",approved:false}),style:({pressed:t})=>[styles.button,styles.buttonPlate,t&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.buttonTextPlate,children:e.declineLabel??"Not now"})})]})})]})}function Input({block:e}){const i=(0,_context.useBlockHandlers)();const o=i.answered[e.id];const s=!!o;const[n,t]=(0,_react.useState)("");const a=e.type==="secret";const r=()=>{const l=n.trim();if(!l)return;i.answer({blockId:e.id,kind:"input",value:l})};return(0,_jsxRuntime.jsxs)(_primitives.Card,{testID:`buoy-block-input-${e.id}`,tone:s?void 0:"info",children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.question,children:e.label}),s?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.decided,children:o.kind==="input"?a?"\u2022\u2022\u2022\u2022\u2022\u2022":o.value:"(skipped)"}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.inputRow,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{testID:"buoy-block-input-field",style:styles.input,value:n,onChangeText:t,placeholder:e.placeholder??"",placeholderTextColor:_sharedUi.night.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:a,autoCapitalize:"none",autoCorrect:false,returnKeyType:"send",onSubmitEditing:r}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!n.trim(),onPress:r,style:({pressed:l})=>[styles.button,styles.buttonPrimary,!n.trim()&&styles.buttonDisabled,l&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.buttonTextPrimary,children:e.submitLabel??"Send"})})]})]})}const styles=_reactNative.StyleSheet.create({question:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:_sharedUi.night.radius.row,backgroundColor:_sharedUi.night.color.surfaceElevated,overflow:"hidden"},optionsAlone:{marginTop:8},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.separator},optionChosen:{backgroundColor:_sharedUi.night.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.body,fontWeight:"500"},optionLabelChosen:{color:_sharedUi.night.color.accent},optionDetail:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption,lineHeight:17},hint:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:_sharedUi.night.color.warning,fontSize:_sharedUi.night.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.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:_sharedUi.night.radius.row,backgroundColor:_sharedUi.night.color.surfaceElevated,color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:_sharedUi.night.radius.row},buttonPrimary:{backgroundColor:_sharedUi.night.color.accent},buttonPlate:{backgroundColor:_sharedUi.night.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:_sharedUi.night.color.onAccent,fontSize:_sharedUi.night.font.caption,fontWeight:"600"},buttonTextPlate:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.caption,fontWeight:"600"},pressed:{opacity:.7}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var _react=require("react");var _server=require("react-dom/server");var _vitest=require("vitest");var _AskBlocks=require("./AskBlocks");const question="If you want the value of `e2e-after-local`, ask and I'll read it.";const block={id:"ask-1",kind:"choice",question,options:[{id:"yes",label:"Yes, go ahead"},{id:"no",label:"No thanks"}]};(0,_vitest.it)("shows the question on a card the model wrote",()=>{(0,_vitest.expect)((0,_server.renderToStaticMarkup)((0,_react.createElement)(_AskBlocks.Choice,{block}))).toContain("e2e-after-local")});(0,_vitest.it)("leaves it out when the answer above already says it",()=>{const e=(0,_server.renderToStaticMarkup)((0,_react.createElement)(_AskBlocks.Choice,{block:{...block,questionInAnswer:true}}));(0,_vitest.expect)(e).not.toContain("e2e-after-local");(0,_vitest.expect)(e).toContain("Yes, go ahead")});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Composer=Composer;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const MIN_INPUT_HEIGHT=40;const MAX_INPUT_HEIGHT=120;const INPUT_PAD_V=_reactNative.Platform.OS==="ios"?10:6;const INPUT_PAD_H=16;function Composer({onSend:c,onStop:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Composer=Composer;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const MIN_INPUT_HEIGHT=40;const MAX_INPUT_HEIGHT=120;const INPUT_PAD_V=_reactNative.Platform.OS==="ios"?10:6;const INPUT_PAD_H=16;function Composer({onSend:c,onStop:b,busy:n,draft:r,onDraftTaken:a,disabled:t,placeholder:g,focusKey:u,canFocus:d=true}){const[o,s]=(0,_react.useState)("");const h=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{if(!u||!d||t)return;h.current?.focus()},[u,d,t]);(0,_react.useEffect)(()=>{if(!r)return;s(e=>e?`${e} ${r}`:r);a?.()},[r,a]);const l=(0,_react.useCallback)(()=>{const e=o.trim();if(!e)return;s("");c(e)},[o,c]);const i=o.trim().length>0&&!n&&!t;const p=o.trim().length>0&&n&&!t;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.field,t&&styles.fieldDisabled],children:(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:h,testID:"buoy-ask-buoy-input",accessibilityLabel:"Message for Ask Buoy",style:[styles.input,o.length===0&&styles.inputEmpty],value:o,onChangeText:s,placeholder:g??(t?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:_sharedUi.night.color.placeholder,multiline:true,editable:!t,keyboardType:"ascii-capable",autoCorrect:true,autoCapitalize:"sentences",blurOnSubmit:false,onSubmitEditing:l,returnKeyType:"send",maxLength:4e3})}),p&&(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:l,style:({pressed:e})=>[styles.button,styles.queue,e&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.sendGlyph,{color:_sharedUi.night.color.accent}],children:"\u2191"})}),n?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:b,style:({pressed:e})=>[styles.button,styles.stop,e&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.stopGlyph})}):(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!i,onPress:l,style:({pressed:e})=>[styles.button,i?styles.sendOn:styles.sendOff,e&&i&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.sendGlyph,{color:i?_sharedUi.night.color.onAccent:_sharedUi.night.color.textTertiary}],children:"\u2191"})})]})}const styles=_reactNative.StyleSheet.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:_sharedUi.night.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.bg},field:{flex:1,minHeight:MIN_INPUT_HEIGHT,justifyContent:"center",borderRadius:20,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:MAX_INPUT_HEIGHT,paddingHorizontal:INPUT_PAD_H,paddingTop:INPUT_PAD_V,paddingBottom:INPUT_PAD_V,color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row},inputEmpty:{height:MIN_INPUT_HEIGHT},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:_sharedUi.night.color.accent},sendOff:{backgroundColor:_sharedUi.night.color.fill},stop:{backgroundColor:_sharedUi.night.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:_sharedUi.night.color.text},pressed:{opacity:.7}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var _react=require("react");var _server=require("react-dom/server");var _vitest=require("vitest");var _Composer=require("./Composer");_vitest.vi.mock("react-native",async e=>({...await e(),TextInput:t=>(0,_react.createElement)("textarea",{"aria-label":t.accessibilityLabel,"data-testid":t.testID})}));(0,_vitest.it)("labels the text box",()=>{const e=(0,_server.renderToStaticMarkup)((0,_react.createElement)(_Composer.Composer,{onSend:()=>{},onStop:()=>{},busy:false}));(0,_vitest.expect)(e).toContain('aria-label="Message for Ask Buoy"')});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.EmptyState=EmptyState;var _sharedUi=require("@buoy-gg/shared-ui");var _reactNative=require("react-native");var _suggestions=require("../store/suggestions");var _jsxRuntime=require("react/jsx-runtime");const isRelease=typeof __DEV__!=="undefined"&&!__DEV__;function EmptyState({configured:e,onPick:t,availableToolIds:o=[],readOnly:i=false}){const r=(0,_suggestions.pickSuggestions)({availableToolIds:o,readOnly:i,isRelease});if(!e){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-unconfigured",children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Not set up yet"}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.body,children:["Ask Buoy talks to your own company's AI endpoint
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.EmptyState=EmptyState;var _sharedUi=require("@buoy-gg/shared-ui");var _reactNative=require("react-native");var _suggestions=require("../store/suggestions");var _jsxRuntime=require("react/jsx-runtime");const isRelease=typeof __DEV__!=="undefined"&&!__DEV__;function EmptyState({configured:e,onPick:t,availableToolIds:o=[],readOnly:i=false}){const r=(0,_suggestions.pickSuggestions)({availableToolIds:o,readOnly:i,isRelease});if(!e){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-unconfigured",children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Not set up yet"}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.body,children:["Ask Buoy talks to your own company's AI endpoint. Nothing goes to Buoy. A developer needs to add the ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,children:"askBuoy"})," setting where the app sets up Buoy. It needs your team's endpoint and model."]})]})}return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-empty",children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Ask about this app"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.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."}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.buildLine,testID:"buoy-ask-buoy-build-line",children:isRelease?"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."}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.group,children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{children:"Try asking"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.card,children:r.map((n,s)=>(0,_jsxRuntime.jsx)(Suggestion,{text:n,onPick:t,last:s===r.length-1},n))})]})]})}function Suggestion({text:e,onPick:t,last:o}){return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:`buoy-ask-buoy-suggestion-${e.slice(0,12)}`,accessibilityRole:"button",onPress:()=>t(e),style:({pressed:i})=>[styles.row,!o&&styles.rowDivider,i&&styles.pressed],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowText,children:e}),(0,_jsxRuntime.jsx)(_sharedUi.ChevronRight,{size:14,color:_sharedUi.night.color.textTertiary})]})}const styles=_reactNative.StyleSheet.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:_sharedUi.night.gutter,paddingVertical:24,gap:8},title:{color:_sharedUi.night.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.body,lineHeight:20},code:{color:_sharedUi.night.color.text,fontFamily:_reactNative.Platform.OS==="web"?_sharedUi.monoFont:"Menlo"},buildLine:{marginTop:8,color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,lineHeight:15},group:{marginTop:_sharedUi.night.groupGap-8},card:{borderRadius:_sharedUi.night.radius.card,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomColor:_sharedUi.night.color.separator},rowText:{flex:1,color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.body,lineHeight:19},pressed:{backgroundColor:_sharedUi.night.color.fill}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var _react=require("react");var _server=require("react-dom/server");var _vitest=require("vitest");var _EmptyState=require("./EmptyState");(0,_vitest.it)("names the setting, not a React component",()=>{const e=(0,_server.renderToStaticMarkup)((0,_react.createElement)(_EmptyState.EmptyState,{configured:false,onPick:()=>{}}));(0,_vitest.expect)(e).toContain("askBuoy");(0,_vitest.expect)(e).not.toContain("FloatingDevTools")});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{useState as x}from"react";import{Pressable as h,StyleSheet as g,Text as l,TextInput as w,View as
|
|
1
|
+
"use strict";import{useState as x}from"react";import{Pressable as h,StyleSheet as g,Text as l,TextInput as w,View as y}from"react-native";import{Check as z,ChevronRight as T,night as o}from"@buoy-gg/shared-ui";import{useBlockHandlers as b}from"./context";import{BlockIcon as C}from"./icons";import{Card as m}from"./primitives";import{jsx as n,jsxs as p,Fragment as I}from"react/jsx-runtime";export function Choice({block:t}){const a=b();const d=a.answered[t.id];const s=d?.kind==="choice"?d.optionId:null;const r=!!d;return p(m,{testID:`buoy-block-choice-${t.id}`,tone:r?void 0:"info",children:[t.questionInAnswer?null:n(l,{style:e.question,children:t.question}),n(y,{style:[e.options,t.questionInAnswer&&e.optionsAlone],children:t.options.slice(0,5).map((i,f)=>{const c=s===i.id;return p(h,{testID:`buoy-block-option-${i.id}`,accessibilityRole:"button",accessibilityState:{selected:c,disabled:r},disabled:r,onPress:()=>a.answer({blockId:t.id,kind:"choice",optionId:i.id,label:i.label}),style:({pressed:u})=>[e.option,f>0&&e.optionDivider,c&&e.optionChosen,r&&!c&&e.optionDimmed,u&&!r&&e.pressed],children:[i.icon?n(C,{name:i.icon}):null,p(y,{style:e.optionText,children:[n(l,{style:[e.optionLabel,c&&e.optionLabelChosen],children:i.label}),i.detail?n(l,{style:e.optionDetail,children:i.detail}):null]}),c?n(z,{size:14,color:o.color.accent}):r?null:n(T,{size:14,color:o.color.textTertiary})]},i.id)})}),!r&&t.allowFreeText!==false?n(l,{style:e.hint,children:"Or just type your answer below."}):null]})}export function Confirm({block:t}){const a=b();const d=a.answered[t.id];const s=!!d;const r=d?.kind==="confirm"?d.approved:null;return p(m,{testID:`buoy-block-confirm-${t.id}`,tone:s?void 0:"warning",children:[n(l,{style:e.confirmTitle,children:t.title}),n(l,{style:e.confirmChange,children:t.change}),t.consequence?n(l,{style:e.confirmConsequence,children:t.consequence}):null,n(y,{style:e.confirmActions,children:s?n(l,{style:e.decided,children:r?`\u2713 ${t.approveLabel??"Done"}`:`\u2715 ${t.declineLabel??"Not now"}`}):p(I,{children:[n(h,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>a.answer({blockId:t.id,kind:"confirm",approved:true}),style:({pressed:i})=>[e.button,e.buttonPrimary,i&&e.pressed],children:n(l,{style:e.buttonTextPrimary,children:t.approveLabel??"Do it"})}),n(h,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>a.answer({blockId:t.id,kind:"confirm",approved:false}),style:({pressed:i})=>[e.button,e.buttonPlate,i&&e.pressed],children:n(l,{style:e.buttonTextPlate,children:t.declineLabel??"Not now"})})]})})]})}export function Input({block:t}){const a=b();const d=a.answered[t.id];const s=!!d;const[r,i]=x("");const f=t.type==="secret";const c=()=>{const u=r.trim();if(!u)return;a.answer({blockId:t.id,kind:"input",value:u})};return p(m,{testID:`buoy-block-input-${t.id}`,tone:s?void 0:"info",children:[n(l,{style:e.question,children:t.label}),s?n(l,{style:e.decided,children:d.kind==="input"?f?"\u2022\u2022\u2022\u2022\u2022\u2022":d.value:"(skipped)"}):p(y,{style:e.inputRow,children:[n(w,{testID:"buoy-block-input-field",style:e.input,value:r,onChangeText:i,placeholder:t.placeholder??"",placeholderTextColor:o.color.placeholder,keyboardType:t.type==="number"?"numeric":"ascii-capable",secureTextEntry:f,autoCapitalize:"none",autoCorrect:false,returnKeyType:"send",onSubmitEditing:c}),n(h,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!r.trim(),onPress:c,style:({pressed:u})=>[e.button,e.buttonPrimary,!r.trim()&&e.buttonDisabled,u&&e.pressed],children:n(l,{style:e.buttonTextPrimary,children:t.submitLabel??"Send"})})]})]})}const e=g.create({question:{color:o.color.text,fontSize:o.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:o.radius.row,backgroundColor:o.color.surfaceElevated,overflow:"hidden"},optionsAlone:{marginTop:8},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:g.hairlineWidth,borderTopColor:o.color.separator},optionChosen:{backgroundColor:o.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:o.color.text,fontSize:o.font.body,fontWeight:"500"},optionLabelChosen:{color:o.color.accent},optionDetail:{color:o.color.textSecondary,fontSize:o.font.caption,lineHeight:17},hint:{color:o.color.textTertiary,fontSize:o.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:o.color.text,fontSize:o.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:o.color.text,fontSize:o.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:o.color.warning,fontSize:o.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:o.color.textSecondary,fontSize:o.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:o.radius.row,backgroundColor:o.color.surfaceElevated,color:o.color.text,fontSize:o.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:o.radius.row},buttonPrimary:{backgroundColor:o.color.accent},buttonPlate:{backgroundColor:o.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:o.color.onAccent,fontSize:o.font.caption,fontWeight:"600"},buttonTextPlate:{color:o.color.text,fontSize:o.font.caption,fontWeight:"600"},pressed:{opacity:.7}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{createElement as t}from"react";import{renderToStaticMarkup as a}from"react-dom/server";import{expect as e,it as n}from"vitest";import{Choice as i}from"./AskBlocks";const s="If you want the value of `e2e-after-local`, ask and I'll read it.";const r={id:"ask-1",kind:"choice",question:s,options:[{id:"yes",label:"Yes, go ahead"},{id:"no",label:"No thanks"}]};n("shows the question on a card the model wrote",()=>{e(a(t(i,{block:r}))).toContain("e2e-after-local")});n("leaves it out when the answer above already says it",()=>{const o=a(t(i,{block:{...r,questionInAnswer:true}}));e(o).not.toContain("e2e-after-local");e(o).toContain("Yes, go ahead")});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{useCallback as H,useEffect as x,useRef as _,useState as w}from"react";import{Platform as D,Pressable as p,StyleSheet as c,Text as C,TextInput as R,View as b}from"react-native";import{night as t}from"@buoy-gg/shared-ui";import{jsx as r,jsxs as
|
|
1
|
+
"use strict";import{useCallback as H,useEffect as x,useRef as _,useState as w}from"react";import{Platform as D,Pressable as p,StyleSheet as c,Text as C,TextInput as R,View as b}from"react-native";import{night as t}from"@buoy-gg/shared-ui";import{jsx as r,jsxs as A}from"react/jsx-runtime";const T=40;const E=120;const k=D.OS==="ios"?10:6;const G=16;export function Composer({onSend:h,onStop:I,busy:a,draft:l,onDraftTaken:y,disabled:i,placeholder:P,focusKey:g,canFocus:f=true}){const[n,u]=w("");const m=_(null);x(()=>{if(!g||!f||i)return;m.current?.focus()},[g,f,i]);x(()=>{if(!l)return;u(o=>o?`${o} ${l}`:l);y?.()},[l,y]);const d=H(()=>{const o=n.trim();if(!o)return;u("");h(o)},[n,h]);const s=n.trim().length>0&&!a&&!i;const S=n.trim().length>0&&a&&!i;return A(b,{style:e.wrap,children:[r(b,{style:[e.field,i&&e.fieldDisabled],children:r(R,{ref:m,testID:"buoy-ask-buoy-input",accessibilityLabel:"Message for Ask Buoy",style:[e.input,n.length===0&&e.inputEmpty],value:n,onChangeText:u,placeholder:P??(i?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:t.color.placeholder,multiline:true,editable:!i,keyboardType:"ascii-capable",autoCorrect:true,autoCapitalize:"sentences",blurOnSubmit:false,onSubmitEditing:d,returnKeyType:"send",maxLength:4e3})}),S&&r(p,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:d,style:({pressed:o})=>[e.button,e.queue,o&&e.pressed],children:r(C,{style:[e.sendGlyph,{color:t.color.accent}],children:"\u2191"})}),a?r(p,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:I,style:({pressed:o})=>[e.button,e.stop,o&&e.pressed],children:r(b,{style:e.stopGlyph})}):r(p,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!s,onPress:d,style:({pressed:o})=>[e.button,s?e.sendOn:e.sendOff,o&&s&&e.pressed],children:r(C,{style:[e.sendGlyph,{color:s?t.color.onAccent:t.color.textTertiary}],children:"\u2191"})})]})}const e=c.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:t.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:c.hairlineWidth,borderTopColor:t.color.border,backgroundColor:t.color.bg},field:{flex:1,minHeight:T,justifyContent:"center",borderRadius:20,borderWidth:c.hairlineWidth,borderColor:t.color.border,backgroundColor:t.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:E,paddingHorizontal:G,paddingTop:k,paddingBottom:k,color:t.color.text,fontSize:t.font.row},inputEmpty:{height:T},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:t.color.accent},sendOff:{backgroundColor:t.color.fill},stop:{backgroundColor:t.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:c.hairlineWidth,borderColor:t.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:t.color.text},pressed:{opacity:.7}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{createElement as a}from"react";import{renderToStaticMarkup as o}from"react-dom/server";import{expect as r,it as i,vi as s}from"vitest";s.mock("react-native",async t=>({...await t(),TextInput:e=>a("textarea",{"aria-label":e.accessibilityLabel,"data-testid":e.testID})}));import{Composer as m}from"./Composer";i("labels the text box",()=>{const t=o(a(m,{onSend:()=>{},onStop:()=>{},busy:false}));r(t).toContain('aria-label="Message for Ask Buoy"')});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{monoFont as y}from"@buoy-gg/shared-ui";import{Platform as b}from"react-native";import{Pressable as f,StyleSheet as c,Text as r,View as l}from"react-native";import{ChevronRight as m,night as
|
|
1
|
+
"use strict";import{monoFont as y}from"@buoy-gg/shared-ui";import{Platform as b}from"react-native";import{Pressable as f,StyleSheet as c,Text as r,View as l}from"react-native";import{ChevronRight as m,night as e,NightSectionLabel as w}from"@buoy-gg/shared-ui";import{pickSuggestions as x}from"../store/suggestions";import{jsx as t,jsxs as n}from"react/jsx-runtime";const h=typeof __DEV__!=="undefined"&&!__DEV__;export function EmptyState({configured:i,onPick:s,availableToolIds:a=[],readOnly:d=false}){const u=x({availableToolIds:a,readOnly:d,isRelease:h});if(!i){return n(l,{style:o.wrap,testID:"buoy-ask-buoy-unconfigured",children:[t(r,{style:o.title,children:"Not set up yet"}),n(r,{style:o.body,children:["Ask Buoy talks to your own company's AI endpoint. Nothing goes to Buoy. A developer needs to add the ",t(r,{style:o.code,children:"askBuoy"})," setting where the app sets up Buoy. It needs your team's endpoint and model."]})]})}return n(l,{style:o.wrap,testID:"buoy-ask-buoy-empty",children:[t(r,{style:o.title,children:"Ask about this app"}),t(r,{style:o.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."}),t(r,{style:o.buildLine,testID:"buoy-ask-buoy-build-line",children:h?"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."}),n(l,{style:o.group,children:[t(w,{children:"Try asking"}),t(l,{style:o.card,children:u.map((g,p)=>t(k,{text:g,onPick:s,last:p===u.length-1},g))})]})]})}function k({text:i,onPick:s,last:a}){return n(f,{testID:`buoy-ask-buoy-suggestion-${i.slice(0,12)}`,accessibilityRole:"button",onPress:()=>s(i),style:({pressed:d})=>[o.row,!a&&o.rowDivider,d&&o.pressed],children:[t(r,{style:o.rowText,children:i}),t(m,{size:14,color:e.color.textTertiary})]})}const o=c.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:e.gutter,paddingVertical:24,gap:8},title:{color:e.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:e.color.textSecondary,fontSize:e.font.body,lineHeight:20},code:{color:e.color.text,fontFamily:b.OS==="web"?y:"Menlo"},buildLine:{marginTop:8,color:e.color.textTertiary,fontSize:e.font.micro,lineHeight:15},group:{marginTop:e.groupGap-8},card:{borderRadius:e.radius.card,borderWidth:c.hairlineWidth,borderColor:e.color.border,backgroundColor:e.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:e.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:c.hairlineWidth,borderBottomColor:e.color.separator},rowText:{flex:1,color:e.color.text,fontSize:e.font.body,lineHeight:19},pressed:{backgroundColor:e.color.fill}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{createElement as e}from"react";import{renderToStaticMarkup as n}from"react-dom/server";import{expect as o,it as r}from"vitest";import{EmptyState as i}from"./EmptyState";r("names the setting, not a React component",()=>{const t=n(e(i,{configured:false,onPick:()=>{}}));o(t).toContain("askBuoy");o(t).not.toContain("FloatingDevTools")});
|
package/lib/web/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
"use client";var gr=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var vi=Object.getOwnPropertyNames;var Si=Object.prototype.hasOwnProperty;var Ti=(e,t)=>{for(var o in t)gr(e,o,{get:t[o],enumerable:true})},fr=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vi(t))!Si.call(e,n)&&n!==o&&gr(e,n,{get:()=>t[n],enumerable:!(r=wi(t,n))||r.enumerable});return e},Ci=(e,t,o)=>(fr(e,t,"default"),o&&fr(o,t,"default"));var ao=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useCallback as Ke,useEffect as Ft,useMemo as so,useRef as _t,useState as Io}from"react";var br={};Ti(br,{AccessibilityInfo:()=>Ri,ActivityIndicator:()=>Jt,Alert:()=>Ro,Animated:()=>ue,AppRegistry:()=>Ai,AppState:()=>Bi,Appearance:()=>$i,BackHandler:()=>Li,Button:()=>kl,CheckBox:()=>_i,Clipboard:()=>Oi,DeviceEventEmitter:()=>il,Dimensions:()=>Hi,Easing:()=>At,FlatList:()=>mr,I18nManager:()=>Pi,Image:()=>wt,ImageBackground:()=>Ui,InteractionManager:()=>Wi,Keyboard:()=>zo,KeyboardAvoidingView:()=>Ki,LayoutAnimation:()=>Ei,Linking:()=>Ni,LogBox:()=>nl,Modal:()=>ml,NativeEventEmitter:()=>Vi,NativeModules:()=>Di,PanResponder:()=>Mi,Picker:()=>Ji,PixelRatio:()=>ji,Platform:()=>we,Pressable:()=>m,ProgressBar:()=>Gi,RefreshControl:()=>Qi,SafeAreaView:()=>Yi,ScrollView:()=>Je,SectionList:()=>Xi,Share:()=>yr,StatusBar:()=>Zi,StyleSheet:()=>w,Switch:()=>Tr,Text:()=>l,TextInput:()=>rt,Touchable:()=>el,TouchableHighlight:()=>bl,TouchableNativeFeedback:()=>tl,TouchableOpacity:()=>Kt,TouchableWithoutFeedback:()=>yl,UIManager:()=>qi,Vibration:()=>Fi,View:()=>s,VirtualizedList:()=>ol,YellowBox:()=>rl,findNodeHandle:()=>xl,unstable_createElement:()=>zi,useColorScheme:()=>ll,useLocaleContext:()=>al,useWindowDimensions:()=>kr});Ci(br,Ii);import*as Ii from"react-native-web";import{unstable_createElement as zi,NativeModules as Di,AccessibilityInfo as Ri,Animated as ue,Appearance as $i,AppRegistry as Ai,AppState as Bi,BackHandler as Li,Clipboard as Oi,Dimensions as Hi,Easing as At,I18nManager as Pi,Keyboard as zo,InteractionManager as Wi,LayoutAnimation as Ei,Linking as Ni,NativeEventEmitter as Vi,PanResponder as Mi,PixelRatio as ji,Platform as we,Share as yr,StyleSheet as w,UIManager as qi,Vibration as Fi,CheckBox as _i,FlatList as mr,Image as wt,ImageBackground as Ui,KeyboardAvoidingView as Ki,Picker as Ji,ProgressBar as Gi,RefreshControl as Qi,SafeAreaView as Yi,SectionList as Xi,StatusBar as Zi,Touchable as el,TouchableNativeFeedback as tl,VirtualizedList as ol,YellowBox as rl,LogBox as nl,DeviceEventEmitter as il,useColorScheme as ll,useLocaleContext as al,useWindowDimensions as kr}from"react-native-web";import*as $e from"react-native-web";import{createElement as Do,forwardRef as xr,useCallback as sl,useRef as cl}from"react";import{useEffect as dl,useState as ul}from"react";import{createPortal as pl}from"react-dom";var hl='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as gl}from"react/jsx-runtime";var Ut=Symbol.for("@buoy-gg/portal-host"),wr=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function vr(){let e=document;if(e[Ut])return e[Ut].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:hl});let o=()=>{let f=document.fullscreenElement,T=f&&f.tagName!=="CANVAS"?f:document.body;t.parentElement!==T&&T.appendChild(t)},r=new Map,n=f=>{(!t.contains(f.target)||!wr(f.target))&&r.set(f.code||f.key,{key:f.key,code:f.code,location:f.location,keyCode:f.keyCode,which:f.which,altKey:f.altKey,ctrlKey:f.ctrlKey,metaKey:f.metaKey,shiftKey:f.shiftKey})},i=f=>{r.delete(f.code||f.key)},a=()=>r.clear(),g=()=>{let f=[...r.values()];r.clear();for(let T of f)document.dispatchEvent(new KeyboardEvent("keyup",{...T,bubbles:true}))},u=f=>{wr(f.target)&&f.stopPropagation()},h=f=>f.stopPropagation();return o(),document.addEventListener("fullscreenchange",o),document.addEventListener("keydown",n,true),document.addEventListener("keyup",i,true),window.addEventListener("blur",a),t.addEventListener("focusin",g),t.addEventListener("keydown",u),t.addEventListener("keyup",u),t.addEventListener("keypress",u),t.addEventListener("wheel",h,{passive:true}),e[Ut]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",o),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",i,true),window.removeEventListener("blur",a),t.remove(),delete e[Ut]}},t}function fl({children:e}){let[t,o]=ul(null);return dl(()=>{let r=vr(),n=document[Ut];return n.users++,o(r),()=>{--n.users===0&&n.dispose()}},[]),t?pl(gl("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}function Ne(e){let t=xr((r,n)=>{let{accessibilityState:i,accessibilityValue:a,...g}=r;for(let u of["busy","checked","disabled","expanded","selected"])i?.[u]!==void 0&&g[`aria-${u}`]===void 0&&(g[`aria-${u}`]=i[u]);for(let[u,h]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))a?.[u]!==void 0&&g[`aria-${h}`]===void 0&&(g[`aria-${h}`]=a[u]);return Do(e,{...g,ref:n})}),o=e.State;return o&&Object.assign(t,{State:o}),t.displayName=e.displayName??e.name??"NativeWebView",t}var s=Ne($e.View),l=Ne($e.Text),rt=Ne($e.TextInput),Kt=Ne($e.TouchableOpacity),bl=Ne($e.TouchableHighlight),yl=Ne($e.TouchableWithoutFeedback),m=Ne($e.Pressable),Je=Ne($e.ScrollView),Sr=xr((e,t)=>{let o=cl(null),r=sl(n=>{if(n){let i=n;for(;i.parentElement&&i.parentElement!==document.body;)i=i.parentElement;i.parentElement===document.body&&(o.current=i,Object.assign(i.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),vr().appendChild(i))}else o.current&&(document.body.appendChild(o.current),o.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return Do(fl,null,Do($e.Modal,{...e,ref:r}))});Sr.displayName="Modal";var ml=Ne(Sr),Tr=Ne($e.Switch),Jt=Ne($e.ActivityIndicator),kl=Ne($e.Button),xl=$e.findNodeHandle,Ro={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 h=document.createElement("p");h.textContent=t,h.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(h)}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 h of g){let f=document.createElement("button");f.type="button",f.textContent=h.text??"OK",f.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${h.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,f.onclick=()=>{u(),h.onPress?.()},a.appendChild(f)}n.addEventListener("cancel",h=>{h.preventDefault(),r?.cancelable!==false&&(u(),r?.onDismiss?.())}),n.appendChild(a),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};import{isReversible as wl}from"@buoy-gg/agent-core/web";import{dispatchToolAction as vl,FeatureGate as Sl,Info as Cr,JsModal as Tl,ModalHeader as $o,night as Ge,setToolAttention as Bt,useSafeAreaInsets as Cl}from"@buoy-gg/shared-ui/web";import{Component as Il}from"react";import{night as Ir}from"@buoy-gg/shared-ui/web";import{useState as zl}from"react";import{Check as Dl,ChevronRight as Rl,night as M}from"@buoy-gg/shared-ui/web";import{createContext as $l,useContext as Al}from"react";import{jsx as Bl}from"react/jsx-runtime";var Ll={answer:()=>{},runAction:()=>{},answered:{},supports:{}},zr=$l(Ll);function Dr({value:e,children:t}){return Bl(zr.Provider,{value:e,children:t})}function oe(){return Al(zr)}function Ol(e,t){return`${e}:${t.label}`}import{AlertTriangle as Hl,Check as Pl,Clock as Wl,Database as El,Eye as Nl,Globe as Vl,Image as Ml,Info as jl,Layers as Rr,Navigation as ql,night as Gt,User as Fl}from"@buoy-gg/shared-ui/web";import{jsx as Ae}from"react/jsx-runtime";function $r({name:e,size:t=14}){let o=Gt.color.textSecondary,r=(()=>{switch(e){case"network":return Ae(Vl,{size:t,color:o});case"storage":return Ae(El,{size:t,color:o});case"route":return Ae(ql,{size:t,color:o});case"screen":return Ae(Nl,{size:t,color:o});case"user":return Ae(Fl,{size:t,color:o});case"image":return Ae(Ml,{size:t,color:o});case"check":return Ae(Pl,{size:t,color:Gt.color.accent});case"warn":return Ae(Hl,{size:t,color:Gt.color.warning});case"info":return Ae(jl,{size:t,color:Gt.color.info});case"store":return Ae(Rr,{size:t,color:o});case"query":return Ae(Rr,{size:t,color:o});case"clock":return Ae(Wl,{size:t,color:o})}})();return Ae(s,{style:_l.wrap,children:r})}var _l=w.create({wrap:{width:24,height:24,borderRadius:6,backgroundColor:Gt.color.fill,alignItems:"center",justifyContent:"center"}});import{monoFont as Ul}from"@buoy-gg/shared-ui/web";import{useState as Ar}from"react";import{Check as Kl,ChevronDown as Br,ChevronUp as Lr,night as I,X as Jl}from"@buoy-gg/shared-ui/web";function Gl(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 ve,jsxs as nt}from"react/jsx-runtime";function vt(e){switch(e){case"accent":return I.color.accent;case"warning":return I.color.warning;case"danger":return I.color.danger;case"info":return I.color.info;case"muted":return I.color.textTertiary;default:return I.color.text}}function Or({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"?I.color.warning:e==="mocked"?I.color.danger:I.color.textTertiary;return ve(s,{style:[F.badge,{borderColor:o}],children:ve(l,{style:[F.badgeText,{color:o}],children:t})})}function W({title:e,source:t,children:o,testID:r,tone:n,collapsible:i,summary:a}){let[g,u]=Ar(false),h=!!i&&!g;return nt(s,{style:[F.card,n==="warning"&&F.cardWarning,n==="danger"&&F.cardDanger,n==="info"&&F.cardInfo],testID:r,children:[(e||t&&t!=="live")&&nt(s,{style:F.titleRow,children:[e?ve(l,{style:F.title,numberOfLines:2,children:e}):ve(s,{style:F.flex}),ve(Or,{source:t})]}),i?nt(m,{testID:r?`${r}-toggle`:void 0,onPress:()=>u(f=>!f),accessibilityRole:"button",accessibilityState:{expanded:g},accessibilityLabel:`${a??"Details"}, ${g?"hide":"show"}`,style:({pressed:f})=>[F.disclosure,!h&&F.disclosureOpen,f&&F.pressed],children:[ve(l,{style:F.disclosureText,numberOfLines:1,children:a??"Details"}),h?ve(Br,{size:12,color:I.color.textTertiary}):ve(Lr,{size:12,color:I.color.textTertiary})]}):null,h?null:o]})}var Ql=5;function it(e,t,o=Ql){let[r,n]=Ar(t),{hidden:i,next:a,expanded:g,canExpand:u,canCollapse:h}=Gl(e.length,t,r,o);return{visible:e.slice(0,r),hidden:i,next:a,expanded:g,showMore:u?()=>n(f=>f+o):void 0,showLess:h?()=>n(t):void 0}}function lt({paged:e}){let{next:t,showMore:o,showLess:r}=e;return!o&&!r?null:nt(s,{style:F.moreRow,children:[o?nt(m,{testID:"buoy-block-show-more",onPress:o,style:[F.more,F.moreCell],accessibilityRole:"button",children:[nt(l,{style:F.moreText,children:["Show ",t," more"]}),ve(Br,{size:12,color:I.color.textTertiary})]}):null,r?nt(m,{testID:"buoy-block-show-fewer",onPress:r,style:[F.more,F.moreCell],accessibilityRole:"button",children:[ve(l,{style:F.moreText,children:"Show fewer"}),ve(Lr,{size:12,color:I.color.textTertiary})]}):null]})}function Yl({shown:e,total:t}){return!t||t<=e?null:ve(s,{style:F.more,children:nt(l,{style:F.moreNote,children:[e," of ",t," shown"]})})}function Ve({actions:e,blockId:t,align:o="left"}){let r=oe();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:ve(s,{style:[F.actions,o==="right"&&F.actionsRight],children:n.slice(0,2).map(i=>{let a=r.actionState?.[Ol(t,i)],g=!!r.busy||a==="running"||a==="done";return nt(m,{accessibilityRole:"button",accessibilityLabel:i.label,testID:`buoy-block-action-${i.label.toLowerCase().replace(/\s+/g,"-")}`,disabled:g,onPress:()=>void r.runAction(i,t),style:({pressed:u})=>[F.button,i.primary?F.buttonPrimary:F.buttonPlate,g&&F.buttonDisabled,u&&!g&&F.pressed],children:[a==="running"?ve(Jt,{size:"small",color:i.primary?I.color.onAccent:I.color.text}):a==="done"?ve(Kl,{size:12,color:i.primary?I.color.onAccent:I.color.accent}):a==="failed"?ve(Jl,{size:12,color:I.color.danger}):null,ve(l,{style:[F.buttonText,i.primary?F.buttonTextPrimary:F.buttonTextPlate],children:i.label})]},i.label)})})}var D=w.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},rowDivider:{borderTopWidth:w.hairlineWidth,borderTopColor:I.color.separator},rowTitle:{flex:1,color:I.color.text,fontSize:I.font.body,lineHeight:19},rowSub:{color:I.color.textSecondary,fontSize:I.font.caption,lineHeight:17},rowTrailing:{color:I.color.textTertiary,fontSize:I.font.caption,maxWidth:120,textAlign:"right"},mono:{fontFamily:we.OS==="web"?Ul:"Menlo",fontSize:12,color:I.color.text},pill:{paddingHorizontal:7,paddingVertical:2,borderRadius:I.radius.badge,backgroundColor:I.color.fill},pillText:{fontSize:I.font.micro,fontWeight:"700",letterSpacing:.4,color:I.color.textSecondary}}),F=w.create({card:{borderRadius:I.radius.card,borderWidth:w.hairlineWidth,borderColor:I.color.border,backgroundColor:I.color.surface,overflow:"hidden"},cardWarning:{borderColor:I.color.warning,backgroundColor:I.color.warningSoft},cardDanger:{borderColor:I.color.danger,backgroundColor:I.color.dangerSoft},cardInfo:{borderColor:I.color.accentBorderStrong,backgroundColor:I.color.accentSoft},titleRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:6},flex:{flex:1},title:{flex:1,color:I.color.text,fontSize:I.font.caption,fontWeight:"600"},disclosure:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:9},disclosureOpen:{borderBottomWidth:w.hairlineWidth,borderBottomColor:I.color.separator},disclosureText:{flex:1,color:I.color.textSecondary,fontSize:I.font.caption},badge:{borderWidth:w.hairlineWidth,borderRadius:I.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:w.hairlineWidth,borderTopColor:I.color.separator},moreCell:{flex:1},moreText:{color:I.color.textSecondary,fontSize:I.font.caption,fontWeight:"600"},moreNote:{color:I.color.textTertiary,fontSize:I.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:I.radius.row},buttonPrimary:{backgroundColor:I.color.accent},buttonPlate:{backgroundColor:I.color.button},buttonDisabled:{opacity:.55},buttonText:{fontSize:I.font.caption,fontWeight:"600"},buttonTextPrimary:{color:I.color.onAccent},buttonTextPlate:{color:I.color.text},pressed:{opacity:.7}});import{Fragment as Xl,jsx as ie,jsxs as St}from"react/jsx-runtime";function Zl({block:e}){let t=oe(),o=t.answered[e.id],r=o?.kind==="choice"?o.optionId:null,n=!!o;return St(W,{testID:`buoy-block-choice-${e.id}`,tone:n?void 0:"info",children:[ie(l,{style:j.question,children:e.question}),ie(s,{style:j.options,children:e.options.slice(0,5).map((i,a)=>{let g=r===i.id;return St(m,{testID:`buoy-block-option-${i.id}`,accessibilityRole:"button",accessibilityState:{selected:g,disabled:n},disabled:n,onPress:()=>t.answer({blockId:e.id,kind:"choice",optionId:i.id,label:i.label}),style:({pressed:u})=>[j.option,a>0&&j.optionDivider,g&&j.optionChosen,n&&!g&&j.optionDimmed,u&&!n&&j.pressed],children:[i.icon?ie($r,{name:i.icon}):null,St(s,{style:j.optionText,children:[ie(l,{style:[j.optionLabel,g&&j.optionLabelChosen],children:i.label}),i.detail?ie(l,{style:j.optionDetail,children:i.detail}):null]}),g?ie(Dl,{size:14,color:M.color.accent}):n?null:ie(Rl,{size:14,color:M.color.textTertiary})]},i.id)})}),!n&&e.allowFreeText!==false?ie(l,{style:j.hint,children:"Or just type your answer below."}):null]})}function ea({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,n=o?.kind==="confirm"?o.approved:null;return St(W,{testID:`buoy-block-confirm-${e.id}`,tone:r?void 0:"warning",children:[ie(l,{style:j.confirmTitle,children:e.title}),ie(l,{style:j.confirmChange,children:e.change}),e.consequence?ie(l,{style:j.confirmConsequence,children:e.consequence}):null,ie(s,{style:j.confirmActions,children:r?ie(l,{style:j.decided,children:n?`\u2713 ${e.approveLabel??"Done"}`:`\u2715 ${e.declineLabel??"Not now"}`}):St(Xl,{children:[ie(m,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:true}),style:({pressed:i})=>[j.button,j.buttonPrimary,i&&j.pressed],children:ie(l,{style:j.buttonTextPrimary,children:e.approveLabel??"Do it"})}),ie(m,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:false}),style:({pressed:i})=>[j.button,j.buttonPlate,i&&j.pressed],children:ie(l,{style:j.buttonTextPlate,children:e.declineLabel??"Not now"})})]})})]})}function ta({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,[n,i]=zl(""),a=e.type==="secret",g=()=>{let u=n.trim();u&&t.answer({blockId:e.id,kind:"input",value:u})};return St(W,{testID:`buoy-block-input-${e.id}`,tone:r?void 0:"info",children:[ie(l,{style:j.question,children:e.label}),r?ie(l,{style:j.decided,children:o.kind==="input"?a?"\u2022\u2022\u2022\u2022\u2022\u2022":o.value:"(skipped)"}):St(s,{style:j.inputRow,children:[ie(rt,{testID:"buoy-block-input-field",style:j.input,value:n,onChangeText:i,placeholder:e.placeholder??"",placeholderTextColor:M.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:a,autoCapitalize:"none",autoCorrect:false,returnKeyType:"send",onSubmitEditing:g}),ie(m,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!n.trim(),onPress:g,style:({pressed:u})=>[j.button,j.buttonPrimary,!n.trim()&&j.buttonDisabled,u&&j.pressed],children:ie(l,{style:j.buttonTextPrimary,children:e.submitLabel??"Send"})})]})]})}var j=w.create({question:{color:M.color.text,fontSize:M.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:M.radius.row,backgroundColor:M.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:w.hairlineWidth,borderTopColor:M.color.separator},optionChosen:{backgroundColor:M.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:M.color.text,fontSize:M.font.body,fontWeight:"500"},optionLabelChosen:{color:M.color.accent},optionDetail:{color:M.color.textSecondary,fontSize:M.font.caption,lineHeight:17},hint:{color:M.color.textTertiary,fontSize:M.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:M.color.text,fontSize:M.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:M.color.text,fontSize:M.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:M.color.warning,fontSize:M.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:M.color.textSecondary,fontSize:M.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:M.radius.row,backgroundColor:M.color.surfaceElevated,color:M.color.text,fontSize:M.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:M.radius.row},buttonPrimary:{backgroundColor:M.color.accent},buttonPlate:{backgroundColor:M.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:M.color.onAccent,fontSize:M.font.caption,fontWeight:"600"},buttonTextPlate:{color:M.color.text,fontSize:M.font.caption,fontWeight:"600"},pressed:{opacity:.7}});import{monoFont as Hr}from"@buoy-gg/shared-ui/web";import{useState as Pr}from"react";import{AlertTriangle as oa,Check as ra,Info as na,night as B,X as ia}from"@buoy-gg/shared-ui/web";import{DataViewer as la,TreeDiffViewer as aa}from"@buoy-gg/shared-ui/web/dataViewer";import{CAPS as Qt}from"@buoy-gg/agent-core/web";import{monoFont as Wr}from"@buoy-gg/shared-ui/web";import{useState as sa}from"react";import{night as le}from"@buoy-gg/shared-ui/web";var Er=e=>/^\s*\|.*\|\s*$/.test(e),ca=e=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(e),Nr=e=>e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim()),da=/^\s*```\s*([\w+-]*)\s*$/;function ua(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+$/,""),g=
|
|
3
|
-
`),closed:
|
|
1
|
+
"use client";var yr=Object.defineProperty;var Ci=Object.getOwnPropertyDescriptor;var Ii=Object.getOwnPropertyNames;var zi=Object.prototype.hasOwnProperty;var Di=(e,t)=>{for(var o in t)yr(e,o,{get:t[o],enumerable:true})},mr=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ii(t))!zi.call(e,n)&&n!==o&&yr(e,n,{get:()=>t[n],enumerable:!(r=Ci(t,n))||r.enumerable});return e},Ri=(e,t,o)=>(mr(e,t,"default"),o&&mr(o,t,"default"));var co=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useCallback as Ue,useEffect as Ut,useMemo as uo,useRef as Kt,useState as Do}from"react";var xr={};Di(xr,{AccessibilityInfo:()=>Li,ActivityIndicator:()=>Yt,Alert:()=>Bo,Animated:()=>ue,AppRegistry:()=>Hi,AppState:()=>Pi,Appearance:()=>Oi,BackHandler:()=>Wi,Button:()=>Cl,CheckBox:()=>Ji,Clipboard:()=>Ei,DeviceEventEmitter:()=>cl,Dimensions:()=>Vi,Easing:()=>At,FlatList:()=>wr,I18nManager:()=>Ni,Image:()=>wt,ImageBackground:()=>Yi,InteractionManager:()=>ji,Keyboard:()=>Ro,KeyboardAvoidingView:()=>Qi,LayoutAnimation:()=>Mi,Linking:()=>qi,LogBox:()=>sl,Modal:()=>Tl,NativeEventEmitter:()=>Fi,NativeModules:()=>Bi,PanResponder:()=>_i,Picker:()=>Xi,PixelRatio:()=>Ui,Platform:()=>we,Pressable:()=>x,ProgressBar:()=>Zi,RefreshControl:()=>el,SafeAreaView:()=>tl,ScrollView:()=>Ke,SectionList:()=>ol,Share:()=>kr,StatusBar:()=>rl,StyleSheet:()=>v,Switch:()=>Dr,Text:()=>l,TextInput:()=>rt,Touchable:()=>nl,TouchableHighlight:()=>vl,TouchableNativeFeedback:()=>il,TouchableOpacity:()=>Jt,TouchableWithoutFeedback:()=>Sl,UIManager:()=>Ki,Vibration:()=>Gi,View:()=>s,VirtualizedList:()=>ll,YellowBox:()=>al,findNodeHandle:()=>Il,unstable_createElement:()=>Ai,useColorScheme:()=>dl,useLocaleContext:()=>ul,useWindowDimensions:()=>vr});Ri(xr,$i);import*as $i from"react-native-web";import{unstable_createElement as Ai,NativeModules as Bi,AccessibilityInfo as Li,Appearance as Oi,AppRegistry as Hi,AppState as Pi,BackHandler as Wi,Clipboard as Ei,Dimensions as Vi,Easing as At,I18nManager as Ni,Keyboard as Ro,InteractionManager as ji,LayoutAnimation as Mi,Linking as qi,NativeEventEmitter as Fi,PanResponder as _i,PixelRatio as Ui,Platform as we,Share as kr,UIManager as Ki,Vibration as Gi,CheckBox as Ji,FlatList as wr,Image as wt,ImageBackground as Yi,KeyboardAvoidingView as Qi,Picker as Xi,ProgressBar as Zi,RefreshControl as el,SafeAreaView as tl,SectionList as ol,StatusBar as rl,Touchable as nl,TouchableNativeFeedback as il,VirtualizedList as ll,YellowBox as al,LogBox as sl,DeviceEventEmitter as cl,useColorScheme as dl,useLocaleContext as ul,useWindowDimensions as vr}from"react-native-web";import*as Ie from"react-native-web";import{createElement as $o,forwardRef as Sr,useCallback as pl,useRef as hl}from"react";import{useEffect as gl,useState as fl}from"react";import{createPortal as bl}from"react-dom";var yl='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as ml}from"react/jsx-runtime";var Gt=Symbol.for("@buoy-gg/portal-host"),Tr=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function Cr(){let e=document;if(e[Gt])return e[Gt].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:yl});let o=()=>{let f=document.fullscreenElement,m=f&&f.tagName!=="CANVAS"?f:document.body;t.parentElement!==m&&m.appendChild(t)},r=new Map,n=f=>{(!t.contains(f.target)||!Tr(f.target))&&r.set(f.code||f.key,{key:f.key,code:f.code,location:f.location,keyCode:f.keyCode,which:f.which,altKey:f.altKey,ctrlKey:f.ctrlKey,metaKey:f.metaKey,shiftKey:f.shiftKey})},i=f=>{r.delete(f.code||f.key)},a=()=>r.clear(),g=()=>{let f=[...r.values()];r.clear();for(let m of f)document.dispatchEvent(new KeyboardEvent("keyup",{...m,bubbles:true}))},d=f=>{Tr(f.target)&&f.stopPropagation()},h=f=>f.stopPropagation();return o(),document.addEventListener("fullscreenchange",o),document.addEventListener("keydown",n,true),document.addEventListener("keyup",i,true),window.addEventListener("blur",a),t.addEventListener("focusin",g),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",h,{passive:true}),e[Gt]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",o),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",i,true),window.removeEventListener("blur",a),t.remove(),delete e[Gt]}},t}function xl({children:e}){let[t,o]=fl(null);return gl(()=>{let r=Cr(),n=document[Gt];return n.users++,o(r),()=>{--n.users===0&&n.dispose()}},[]),t?bl(ml("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var Bt=Ie,kl=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],Lt=e=>typeof e=="number"?`${e}px`:e;function Ao(e){if(Array.isArray(e)){let m=e.map(Ao);return m.some((L,V)=>L!==e[V])?m:e}if(!e||typeof e!="object"||!kl.some(m=>e[m]!=null))return e;let{shadowColor:t,shadowOffset:o,shadowOpacity:r,shadowRadius:n,textShadowColor:i,textShadowOffset:a,textShadowRadius:g,...d}=e;if(t!=null||o!=null||r!=null||n!=null){let m=t??"black",L=r==null?m:`color-mix(in srgb, ${m} ${Math.min(r,1)*100}%, transparent)`,V=`${Lt(o?.width??0)} ${Lt(o?.height??0)} ${Lt(n??0)} ${L}`;d.boxShadow=typeof d.boxShadow=="string"?`${d.boxShadow}, ${V}`:d.boxShadow??V}let{width:h=0,height:f=0}=a??{};if(i&&(h||f||g)){let m=`${Lt(h)} ${Lt(f)} ${Lt(g??0)} ${i}`;d.textShadow=d.textShadow?`${d.textShadow}, ${m}`:m}return d}var wl=Bt.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function Ir(e,t){if(typeof e=="function")return r=>Ir(e(r),t);let o=Ao(e);return t?[o,wl[t]]:o}var v={...Bt.StyleSheet,create:e=>Bt.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,o])=>[t,Ao(o)])))};function Ve(e){let t=Sr((r,n)=>{let{accessibilityState:i,accessibilityValue:a,pointerEvents:g,...d}=r;for(let f of["busy","checked","disabled","expanded","selected"])i?.[f]!==void 0&&d[`aria-${f}`]===void 0&&(d[`aria-${f}`]=i[f]);for(let[f,m]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))a?.[f]!==void 0&&d[`aria-${m}`]===void 0&&(d[`aria-${m}`]=a[f]);let h=Ir(d.style,g);return h!==d.style&&(d.style=h),$o(e,{...d,ref:n})}),o=e.State;return o&&Object.assign(t,{State:o}),t.displayName=e.displayName??e.name??"NativeWebView",t}var s=Ve(Ie.View),l=Ve(Ie.Text),ue={...Bt.Animated,View:Bt.Animated.createAnimatedComponent(s),Text:Bt.Animated.createAnimatedComponent(l)},rt=Ve(Ie.TextInput),Jt=Ve(Ie.TouchableOpacity),vl=Ve(Ie.TouchableHighlight),Sl=Ve(Ie.TouchableWithoutFeedback),x=Ve(Ie.Pressable),Ke=Ve(Ie.ScrollView),zr=Sr((e,t)=>{let o=hl(null),r=pl(n=>{if(n){let i=n;for(;i.parentElement&&i.parentElement!==document.body;)i=i.parentElement;i.parentElement===document.body&&(o.current=i,Object.assign(i.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),Cr().appendChild(i))}else o.current&&(document.body.appendChild(o.current),o.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return $o(xl,null,$o(Ie.Modal,{...e,ref:r}))});zr.displayName="Modal";var Tl=Ve(zr),Dr=Ve(Ie.Switch),Yt=Ve(Ie.ActivityIndicator),Cl=Ve(Ie.Button),Il=Ie.findNodeHandle,Bo={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 h=document.createElement("p");h.textContent=t,h.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(h)}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"}],d=()=>{n.close?.(),n.remove()};for(let h of g){let f=document.createElement("button");f.type="button",f.textContent=h.text??"OK",f.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${h.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,f.onclick=()=>{d(),h.onPress?.()},a.appendChild(f)}n.addEventListener("cancel",h=>{h.preventDefault(),r?.cancelable!==false&&(d(),r?.onDismiss?.())}),n.appendChild(a),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};import{isReversible as zl}from"@buoy-gg/agent-core/web";import{dispatchToolAction as Dl,FeatureGate as Rl,Info as Rr,JsModal as $l,ModalHeader as Lo,night as Ge,setToolAttention as Ot,useSafeAreaInsets as Al}from"@buoy-gg/shared-ui/web";import{Component as Bl}from"react";import{night as $r}from"@buoy-gg/shared-ui/web";import{useState as Ll}from"react";import{Check as Ol,ChevronRight as Hl,night as M}from"@buoy-gg/shared-ui/web";import{createContext as Pl,useContext as Wl}from"react";import{jsx as El}from"react/jsx-runtime";var Vl={answer:()=>{},runAction:()=>{},answered:{},supports:{}},Ar=Pl(Vl);function Br({value:e,children:t}){return El(Ar.Provider,{value:e,children:t})}function oe(){return Wl(Ar)}function Nl(e,t){return`${e}:${t.label}`}import{AlertTriangle as jl,Check as Ml,Clock as ql,Database as Fl,Eye as _l,Globe as Ul,Image as Kl,Info as Gl,Layers as Lr,Navigation as Jl,night as Qt,User as Yl}from"@buoy-gg/shared-ui/web";import{jsx as Ae}from"react/jsx-runtime";function Or({name:e,size:t=14}){let o=Qt.color.textSecondary,r=(()=>{switch(e){case"network":return Ae(Ul,{size:t,color:o});case"storage":return Ae(Fl,{size:t,color:o});case"route":return Ae(Jl,{size:t,color:o});case"screen":return Ae(_l,{size:t,color:o});case"user":return Ae(Yl,{size:t,color:o});case"image":return Ae(Kl,{size:t,color:o});case"check":return Ae(Ml,{size:t,color:Qt.color.accent});case"warn":return Ae(jl,{size:t,color:Qt.color.warning});case"info":return Ae(Gl,{size:t,color:Qt.color.info});case"store":return Ae(Lr,{size:t,color:o});case"query":return Ae(Lr,{size:t,color:o});case"clock":return Ae(ql,{size:t,color:o})}})();return Ae(s,{style:Ql.wrap,children:r})}var Ql=v.create({wrap:{width:24,height:24,borderRadius:6,backgroundColor:Qt.color.fill,alignItems:"center",justifyContent:"center"}});import{monoFont as Xl}from"@buoy-gg/shared-ui/web";import{useState as Hr}from"react";import{Check as Zl,ChevronDown as Pr,ChevronUp as Wr,night as I,X as ea}from"@buoy-gg/shared-ui/web";function ta(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 ve,jsxs as nt}from"react/jsx-runtime";function vt(e){switch(e){case"accent":return I.color.accent;case"warning":return I.color.warning;case"danger":return I.color.danger;case"info":return I.color.info;case"muted":return I.color.textTertiary;default:return I.color.text}}function Er({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"?I.color.warning:e==="mocked"?I.color.danger:I.color.textTertiary;return ve(s,{style:[_.badge,{borderColor:o}],children:ve(l,{style:[_.badgeText,{color:o}],children:t})})}function W({title:e,source:t,children:o,testID:r,tone:n,collapsible:i,summary:a}){let[g,d]=Hr(false),h=!!i&&!g;return nt(s,{style:[_.card,n==="warning"&&_.cardWarning,n==="danger"&&_.cardDanger,n==="info"&&_.cardInfo],testID:r,children:[(e||t&&t!=="live")&&nt(s,{style:_.titleRow,children:[e?ve(l,{style:_.title,numberOfLines:2,children:e}):ve(s,{style:_.flex}),ve(Er,{source:t})]}),i?nt(x,{testID:r?`${r}-toggle`:void 0,onPress:()=>d(f=>!f),accessibilityRole:"button",accessibilityState:{expanded:g},accessibilityLabel:`${a??"Details"}, ${g?"hide":"show"}`,style:({pressed:f})=>[_.disclosure,!h&&_.disclosureOpen,f&&_.pressed],children:[ve(l,{style:_.disclosureText,numberOfLines:1,children:a??"Details"}),h?ve(Pr,{size:12,color:I.color.textTertiary}):ve(Wr,{size:12,color:I.color.textTertiary})]}):null,h?null:o]})}var oa=5;function it(e,t,o=oa){let[r,n]=Hr(t),{hidden:i,next:a,expanded:g,canExpand:d,canCollapse:h}=ta(e.length,t,r,o);return{visible:e.slice(0,r),hidden:i,next:a,expanded:g,showMore:d?()=>n(f=>f+o):void 0,showLess:h?()=>n(t):void 0}}function lt({paged:e}){let{next:t,showMore:o,showLess:r}=e;return!o&&!r?null:nt(s,{style:_.moreRow,children:[o?nt(x,{testID:"buoy-block-show-more",onPress:o,style:[_.more,_.moreCell],accessibilityRole:"button",children:[nt(l,{style:_.moreText,children:["Show ",t," more"]}),ve(Pr,{size:12,color:I.color.textTertiary})]}):null,r?nt(x,{testID:"buoy-block-show-fewer",onPress:r,style:[_.more,_.moreCell],accessibilityRole:"button",children:[ve(l,{style:_.moreText,children:"Show fewer"}),ve(Wr,{size:12,color:I.color.textTertiary})]}):null]})}function ra({shown:e,total:t}){return!t||t<=e?null:ve(s,{style:_.more,children:nt(l,{style:_.moreNote,children:[e," of ",t," shown"]})})}function Ne({actions:e,blockId:t,align:o="left"}){let r=oe();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:ve(s,{style:[_.actions,o==="right"&&_.actionsRight],children:n.slice(0,2).map(i=>{let a=r.actionState?.[Nl(t,i)],g=!!r.busy||a==="running"||a==="done";return nt(x,{accessibilityRole:"button",accessibilityLabel:i.label,testID:`buoy-block-action-${i.label.toLowerCase().replace(/\s+/g,"-")}`,disabled:g,onPress:()=>void r.runAction(i,t),style:({pressed:d})=>[_.button,i.primary?_.buttonPrimary:_.buttonPlate,g&&_.buttonDisabled,d&&!g&&_.pressed],children:[a==="running"?ve(Yt,{size:"small",color:i.primary?I.color.onAccent:I.color.text}):a==="done"?ve(Zl,{size:12,color:i.primary?I.color.onAccent:I.color.accent}):a==="failed"?ve(ea,{size:12,color:I.color.danger}):null,ve(l,{style:[_.buttonText,i.primary?_.buttonTextPrimary:_.buttonTextPlate],children:i.label})]},i.label)})})}var D=v.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},rowDivider:{borderTopWidth:v.hairlineWidth,borderTopColor:I.color.separator},rowTitle:{flex:1,color:I.color.text,fontSize:I.font.body,lineHeight:19},rowSub:{color:I.color.textSecondary,fontSize:I.font.caption,lineHeight:17},rowTrailing:{color:I.color.textTertiary,fontSize:I.font.caption,maxWidth:120,textAlign:"right"},mono:{fontFamily:we.OS==="web"?Xl:"Menlo",fontSize:12,color:I.color.text},pill:{paddingHorizontal:7,paddingVertical:2,borderRadius:I.radius.badge,backgroundColor:I.color.fill},pillText:{fontSize:I.font.micro,fontWeight:"700",letterSpacing:.4,color:I.color.textSecondary}}),_=v.create({card:{borderRadius:I.radius.card,borderWidth:v.hairlineWidth,borderColor:I.color.border,backgroundColor:I.color.surface,overflow:"hidden"},cardWarning:{borderColor:I.color.warning,backgroundColor:I.color.warningSoft},cardDanger:{borderColor:I.color.danger,backgroundColor:I.color.dangerSoft},cardInfo:{borderColor:I.color.accentBorderStrong,backgroundColor:I.color.accentSoft},titleRow:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:6},flex:{flex:1},title:{flex:1,color:I.color.text,fontSize:I.font.caption,fontWeight:"600"},disclosure:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:9},disclosureOpen:{borderBottomWidth:v.hairlineWidth,borderBottomColor:I.color.separator},disclosureText:{flex:1,color:I.color.textSecondary,fontSize:I.font.caption},badge:{borderWidth:v.hairlineWidth,borderRadius:I.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:v.hairlineWidth,borderTopColor:I.color.separator},moreCell:{flex:1},moreText:{color:I.color.textSecondary,fontSize:I.font.caption,fontWeight:"600"},moreNote:{color:I.color.textTertiary,fontSize:I.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:I.radius.row},buttonPrimary:{backgroundColor:I.color.accent},buttonPlate:{backgroundColor:I.color.button},buttonDisabled:{opacity:.55},buttonText:{fontSize:I.font.caption,fontWeight:"600"},buttonTextPrimary:{color:I.color.onAccent},buttonTextPlate:{color:I.color.text},pressed:{opacity:.7}});import{Fragment as na,jsx as ie,jsxs as St}from"react/jsx-runtime";function ia({block:e}){let t=oe(),o=t.answered[e.id],r=o?.kind==="choice"?o.optionId:null,n=!!o;return St(W,{testID:`buoy-block-choice-${e.id}`,tone:n?void 0:"info",children:[e.questionInAnswer?null:ie(l,{style:q.question,children:e.question}),ie(s,{style:[q.options,e.questionInAnswer&&q.optionsAlone],children:e.options.slice(0,5).map((i,a)=>{let g=r===i.id;return St(x,{testID:`buoy-block-option-${i.id}`,accessibilityRole:"button",accessibilityState:{selected:g,disabled:n},disabled:n,onPress:()=>t.answer({blockId:e.id,kind:"choice",optionId:i.id,label:i.label}),style:({pressed:d})=>[q.option,a>0&&q.optionDivider,g&&q.optionChosen,n&&!g&&q.optionDimmed,d&&!n&&q.pressed],children:[i.icon?ie(Or,{name:i.icon}):null,St(s,{style:q.optionText,children:[ie(l,{style:[q.optionLabel,g&&q.optionLabelChosen],children:i.label}),i.detail?ie(l,{style:q.optionDetail,children:i.detail}):null]}),g?ie(Ol,{size:14,color:M.color.accent}):n?null:ie(Hl,{size:14,color:M.color.textTertiary})]},i.id)})}),!n&&e.allowFreeText!==false?ie(l,{style:q.hint,children:"Or just type your answer below."}):null]})}function la({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,n=o?.kind==="confirm"?o.approved:null;return St(W,{testID:`buoy-block-confirm-${e.id}`,tone:r?void 0:"warning",children:[ie(l,{style:q.confirmTitle,children:e.title}),ie(l,{style:q.confirmChange,children:e.change}),e.consequence?ie(l,{style:q.confirmConsequence,children:e.consequence}):null,ie(s,{style:q.confirmActions,children:r?ie(l,{style:q.decided,children:n?`\u2713 ${e.approveLabel??"Done"}`:`\u2715 ${e.declineLabel??"Not now"}`}):St(na,{children:[ie(x,{testID:"buoy-block-approve",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:true}),style:({pressed:i})=>[q.button,q.buttonPrimary,i&&q.pressed],children:ie(l,{style:q.buttonTextPrimary,children:e.approveLabel??"Do it"})}),ie(x,{testID:"buoy-block-decline",accessibilityRole:"button",onPress:()=>t.answer({blockId:e.id,kind:"confirm",approved:false}),style:({pressed:i})=>[q.button,q.buttonPlate,i&&q.pressed],children:ie(l,{style:q.buttonTextPlate,children:e.declineLabel??"Not now"})})]})})]})}function aa({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,[n,i]=Ll(""),a=e.type==="secret",g=()=>{let d=n.trim();d&&t.answer({blockId:e.id,kind:"input",value:d})};return St(W,{testID:`buoy-block-input-${e.id}`,tone:r?void 0:"info",children:[ie(l,{style:q.question,children:e.label}),r?ie(l,{style:q.decided,children:o.kind==="input"?a?"\u2022\u2022\u2022\u2022\u2022\u2022":o.value:"(skipped)"}):St(s,{style:q.inputRow,children:[ie(rt,{testID:"buoy-block-input-field",style:q.input,value:n,onChangeText:i,placeholder:e.placeholder??"",placeholderTextColor:M.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:a,autoCapitalize:"none",autoCorrect:false,returnKeyType:"send",onSubmitEditing:g}),ie(x,{testID:"buoy-block-input-submit",accessibilityRole:"button",disabled:!n.trim(),onPress:g,style:({pressed:d})=>[q.button,q.buttonPrimary,!n.trim()&&q.buttonDisabled,d&&q.pressed],children:ie(l,{style:q.buttonTextPrimary,children:e.submitLabel??"Send"})})]})]})}var q=v.create({question:{color:M.color.text,fontSize:M.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},options:{marginHorizontal:8,marginBottom:8,borderRadius:M.radius.row,backgroundColor:M.color.surfaceElevated,overflow:"hidden"},optionsAlone:{marginTop:8},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},optionDivider:{borderTopWidth:v.hairlineWidth,borderTopColor:M.color.separator},optionChosen:{backgroundColor:M.color.accentSoft},optionDimmed:{opacity:.45},optionText:{flex:1,gap:2},optionLabel:{color:M.color.text,fontSize:M.font.body,fontWeight:"500"},optionLabelChosen:{color:M.color.accent},optionDetail:{color:M.color.textSecondary,fontSize:M.font.caption,lineHeight:17},hint:{color:M.color.textTertiary,fontSize:M.font.micro,paddingHorizontal:12,paddingBottom:10},confirmTitle:{color:M.color.text,fontSize:M.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:M.color.text,fontSize:M.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6},confirmConsequence:{color:M.color.warning,fontSize:M.font.caption,lineHeight:17,paddingHorizontal:12,paddingTop:6},confirmActions:{flexDirection:"row",gap:8,paddingHorizontal:12,paddingVertical:12,alignItems:"center"},decided:{color:M.color.textSecondary,fontSize:M.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:M.radius.row,backgroundColor:M.color.surfaceElevated,color:M.color.text,fontSize:M.font.body},button:{paddingHorizontal:14,paddingVertical:9,borderRadius:M.radius.row},buttonPrimary:{backgroundColor:M.color.accent},buttonPlate:{backgroundColor:M.color.button},buttonDisabled:{opacity:.5},buttonTextPrimary:{color:M.color.onAccent,fontSize:M.font.caption,fontWeight:"600"},buttonTextPlate:{color:M.color.text,fontSize:M.font.caption,fontWeight:"600"},pressed:{opacity:.7}});import{monoFont as Vr}from"@buoy-gg/shared-ui/web";import{useState as Nr}from"react";import{AlertTriangle as sa,Check as ca,Info as da,night as B,X as ua}from"@buoy-gg/shared-ui/web";import{DataViewer as pa,TreeDiffViewer as ha}from"@buoy-gg/shared-ui/web/dataViewer";import{CAPS as Xt}from"@buoy-gg/agent-core/web";import{monoFont as jr}from"@buoy-gg/shared-ui/web";import{useState as ga}from"react";import{night as le}from"@buoy-gg/shared-ui/web";var Mr=e=>/^\s*\|.*\|\s*$/.test(e),fa=e=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(e),qr=e=>e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim()),ba=/^\s*```\s*([\w+-]*)\s*$/;function ya(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+$/,""),g=ba.exec(a);if(g){r();let f=[],m=i+1,L=false;for(;m<n.length;){if(/^\s*```\s*$/.test(n[m])){L=true;break}f.push(n[m]),m++}t.push({kind:"code",lang:g[1]??"",text:f.join(`
|
|
3
|
+
`),closed:L}),i=L?m:n.length;continue}if(!a.trim()){r();continue}if(Mr(a)&&n[i+1]&&fa(n[i+1])){r();let f=qr(a),m=[],L=i+2;for(;L<n.length&&Mr(n[L]);)m.push(qr(n[L])),L++;t.push({kind:"table",header:f,rows:m}),i=L-1;continue}let d=/^#{1,6}\s+(.*)$/.exec(a);if(d){r(),t.push({kind:"h",text:d[1]});continue}let h=/^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(a);if(h){r();let f=Math.min(2,Math.floor(h[1].length/2)),m=/^\d/.test(h[2])?h[2].replace(")","."):"\u2022";t.push({kind:"li",text:h[3],marker:m,depth:f});continue}o.push(a.trim())}return r(),t}var Oo=12,Ho=4;function ma(e,t){let o=[];return t.length>Oo&&o.push(`${Oo} of ${t.length} rows`),e.length>Ho&&o.push(`${Ho} of ${e.length} columns`),o.length?`Showing ${o.join(" \xB7 ")}`:null}import{jsx as me,jsxs as po}from"react/jsx-runtime";function Ht(e,t){let o=e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1"),r=[],n=/(\*\*[^*]+\*\*|`[^`]+`|\*[^*\s][^*]*\*|_[^_\s][^_]*_)/g,i=0,a,g=0;for(;a=n.exec(o);){a.index>i&&r.push(o.slice(i,a.index));let d=a[0];d.startsWith("**")?r.push(me(l,{style:[t,K.bold],children:d.slice(2,-2)},g++)):d.startsWith("`")?r.push(me(l,{style:[t,K.code],children:d.slice(1,-1)},g++)):r.push(me(l,{style:[t,K.italic],children:d.slice(1,-1)},g++)),i=a.index+d.length}return i<o.length&&r.push(o.slice(i)),r}var xa=e=>e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1");function ka({header:e,rows:t}){let[o,r]=ga(false),n=ma(e,t),i=o?e:e.slice(0,Ho),a=o?t:t.slice(0,Oo),g=po(s,{style:o&&K.tableWide,children:[me(s,{style:K.tableHead,children:i.map((d,h)=>me(l,{style:[K.th,h===0&&K.firstCol,o&&K.colFixed],numberOfLines:1,children:d.replace(/\*\*/g,"")},h))}),a.map((d,h)=>me(s,{style:[K.tr,h>0&&K.trDivider],children:i.map((f,m)=>me(l,{style:[K.td,m===0&&K.firstCol,m===0&&K.tdFirst,o&&K.colFixed],numberOfLines:o?3:2,children:Ht(xa(d[m]??""),K.td)},m))},h))]});return po(s,{style:K.table,testID:"buoy-ask-buoy-md-table",children:[o?me(Ke,{style:K.tableScrollV,nestedScrollEnabled:true,children:me(Ke,{horizontal:true,showsHorizontalScrollIndicator:true,children:g})}):g,n?po(x,{testID:"buoy-ask-buoy-md-table-toggle",accessibilityRole:"button",accessibilityLabel:o?"Show fewer rows":"Show all rows and columns",onPress:()=>r(d=>!d),style:({pressed:d})=>[K.tfoot,d&&K.pressed],children:[me(l,{style:K.tfootText,children:o?`All ${t.length} rows \xB7 ${e.length} columns`:n}),me(l,{style:K.tfootAction,children:o?"Show fewer":"Show all"})]}):null]})}function Fr({text:e,style:t}){let o=ya(e);return me(s,{style:K.wrap,children:o.map((r,n)=>r.kind==="table"?me(ka,{header:r.header,rows:r.rows},n):r.kind==="code"?me(Ke,{horizontal:true,style:K.codeBlock,contentContainerStyle:K.codeBlockContent,testID:"buoy-ask-buoy-md-code",children:me(l,{style:K.codeText,selectable:true,children:r.text})},n):r.kind==="li"?po(s,{style:[K.li,{paddingLeft:4+r.depth*14}],children:[me(l,{style:[t,K.marker],children:r.marker}),me(l,{style:[t,K.liText],selectable:true,children:Ht(r.text,t)})]},n):me(l,{style:[t,r.kind==="h"&&K.bold],selectable:true,children:Ht(r.text,t)},n))})}var K=v.create({wrap:{gap:8},bold:{fontWeight:"600"},italic:{fontStyle:"italic"},code:{fontFamily:we.OS==="web"?jr:"Menlo",fontSize:13,color:le.color.accent,backgroundColor:le.color.fill},codeBlock:{borderRadius:le.radius.row,borderWidth:v.hairlineWidth,borderColor:le.color.border,backgroundColor:le.color.surface},codeBlockContent:{paddingHorizontal:12,paddingVertical:10},codeText:{fontFamily:we.OS==="web"?jr:"Menlo",fontSize:12,lineHeight:18,color:le.color.text},li:{flexDirection:"row",gap:8},table:{borderRadius:le.radius.row,borderWidth:v.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:v.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:v.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 wa,useEffect as va,useRef as Sa,useState as Ta}from"react";import{copyToClipboard as Ca}from"@buoy-gg/shared-ui/web";var Ia=1500;function ho(e){let[t,o]=Ta(false),r=Sa(null);va(()=>()=>{r.current&&clearTimeout(r.current)},[]);let n=wa(()=>{let i=e();Ca(i).then(a=>{if(!a){kr.share({message:i}).catch(()=>{});return}o(true),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>o(false),Ia)}).catch(()=>{})},[e]);return{copied:t,copy:n}}var za=e=>typeof e=="string"?e:e.text;function _r(e){switch(e.kind){case"finding":return[e.title,...e.evidence.map(t=>`${t.label}: ${t.value}`)].join(`
|
|
4
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(`
|
|
5
|
-
`);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(za).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(`
|
|
6
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(`
|
|
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 va(e){return e.map(Mr).filter(t=>!!t)}import{Fragment as Sa,jsx as z,jsxs as ge}from"react/jsx-runtime";function Lo(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 Ta({block:e}){let t=it(e.rows,Qt.tableRows),{visible:o}=t,r=e.columns.slice(0,4);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-table-${e.id}`,children:[z(s,{style:$.tableHead,children:r.map((n,i)=>z(l,{style:[$.th,i===0&&$.firstCol],numberOfLines:1,children:n},n))}),o.map((n,i)=>z(s,{style:[$.tr,i>0&&D.rowDivider],children:r.map((a,g)=>{let u=n[g],h=typeof u=="string"?u:u?.text??"",f=typeof u=="string"?void 0:u?.tone;return z(l,{style:[$.td,g===0&&$.firstCol,g===0&&$.tdFirst,f&&{color:vt(f)}],numberOfLines:2,children:Lt(h,$.td)},g)})},i)),z(lt,{paged:t})]})}function Ca({block:e}){let t=it(e.pairs,Qt.keyValuePairs),{visible:o}=t,[r,n]=Pr(null);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-keyvalue-${e.id}`,children:[o.map((i,a)=>{let g=typeof i.value=="object"&&i.value!==null,u=r===i.key;return ge(m,{onPress:g?()=>n(u?null:i.key):void 0,style:[$.kvRow,a>0&&D.rowDivider],children:[z(l,{style:$.kvKey,numberOfLines:1,children:i.key}),z(l,{style:[$.kvValue,u&&D.mono],numberOfLines:u?void 0:2,selectable:true,children:u?JSON.stringify(i.value,null,2):Lo(i.value)})]},i.key)}),z(lt,{paged:t})]})}function Ia(e){let t=!!e.image;return{canExpand:t,rowRunsAction:!!e.action&&!t,actionIsOwnControl:!!e.action&&t}}function za({block:e}){let t=oe(),o=it(e.items,Qt.listItems),{visible:r}=o,[n,i]=Pr(null);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-list-${e.id}`,children:[r.map((a,g)=>{let u=`${a.id??a.title}-${g}`,h=n===u,{canExpand:f,rowRunsAction:T,actionIsOwnControl:O}=Ia(a),_=f||T?m:s,ee=f?{onPress:()=>i(h?null:u),accessibilityRole:"button",accessibilityState:{expanded:h},accessibilityLabel:`${a.title}, ${h?"hide":"show"} picture`,testID:`buoy-block-list-row-${u}`}:T?{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button"}:{};return ge(s,{style:g>0?D.rowDivider:void 0,children:[h&&a.image?z(m,{onPress:()=>i(null),accessibilityRole:"button",accessibilityLabel:`Hide ${a.title}`,testID:`buoy-block-list-hero-${u}`,style:$.listHero,children:z(wt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.listHeroImage,resizeMode:"contain",accessibilityLabel:a.title})}):null,ge(_,{...ee,style:D.row,children:[a.image&&!h?z(wt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.thumb,resizeMode:"contain",accessibilityLabel:a.title}):a.icon?z($r,{name:a.icon}):null,ge(s,{style:$.flex,children:[z(l,{style:[D.rowTitle,a.tone&&{color:vt(a.tone)}],numberOfLines:h?void 0:2,children:Lt(a.title,D.rowTitle)}),a.subtitle?z(l,{style:D.rowSub,numberOfLines:h?void 0:2,children:Lt(a.subtitle,D.rowSub)}):null]}),a.trailing?z(l,{style:[D.rowTrailing,a.tone&&{color:vt(a.tone)}],numberOfLines:1,children:a.trailing}):null,a.action?O?z(m,{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button",accessibilityLabel:a.action.label,hitSlop:8,children:z(l,{style:$.rowAction,children:a.action.label})}):z(l,{style:$.rowAction,children:a.action.label}):null]})]},u)}),z(lt,{paged:o})]})}function jr(e){return e!==null&&typeof e=="object"}function Da(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 Ra({block:e}){let t=it(e.changes,Qt.keyValuePairs);return ge(W,{title:e.title??"What changed",source:e.source,testID:`buoy-block-diff-${e.id}`,collapsible:true,summary:Da(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 ge(s,{style:[$.diffRow,r>0&&D.rowDivider],children:[z(l,{style:$.diffPath,numberOfLines:1,children:o.path}),jr(o.before)||jr(o.after)?z(s,{style:$.diffTree,children:z(aa,{oldValue:o.before,newValue:o.after,showUnchanged:false,scrollEnabled:false})}):ge(Sa,{children:[n?null:ge(s,{style:$.diffLine,children:[z(l,{style:[$.diffMark,{color:B.color.danger}],children:"\u2212"}),z(l,{style:[$.diffValue,{color:B.color.danger}],numberOfLines:3,selectable:true,children:Lo(o.before)})]}),i?null:ge(s,{style:$.diffLine,children:[z(l,{style:[$.diffMark,{color:B.color.accent}],children:"+"}),z(l,{style:[$.diffValue,{color:B.color.accent}],numberOfLines:3,selectable:true,children:Lo(o.after)})]})]})]},`${o.path}-${r}`)}),z(lt,{paged:t})]})}function $a({block:e}){let t=e.bars.slice(0,Qt.chartBars),o=e.max??Math.max(1,...t.map(r=>r.value));return z(W,{title:e.title,source:e.source,testID:`buoy-block-chart-${e.id}`,children:z(s,{style:$.chart,children:t.map((r,n)=>ge(s,{style:$.barRow,children:[z(l,{style:$.barLabel,numberOfLines:1,children:r.label}),z(s,{style:$.barTrack,children:z(s,{style:[$.bar,{width:`${Math.max(2,Math.round(r.value/o*100))}%`,backgroundColor:vt(r.tone??"accent")}]})}),ge(l,{style:$.barValue,numberOfLines:1,children:[r.value,r.unit?` ${r.unit}`:""]})]},`${r.label}-${n}`))})})}function Aa({block:e}){return z(W,{title:e.title,testID:`buoy-block-steps-${e.id}`,children:e.steps.map((t,o)=>ge(s,{style:[$.step,o>0&&D.rowDivider],children:[z(s,{style:[$.stepMark,t.state==="done"&&$.stepDone,t.state==="failed"&&$.stepFailed],children:t.state==="done"?z(ra,{size:10,color:B.color.onAccent}):t.state==="failed"?z(ia,{size:10,color:B.color.text}):z(l,{style:$.stepNum,children:o+1})}),z(l,{style:[D.rowTitle,t.state==="done"&&$.stepTextDone],children:t.text})]},o))})}function Ba(e){try{let t=JSON.parse(e);return t!==null&&typeof t=="object"?t:void 0}catch{return}}function La({block:e,value:t}){return z(W,{title:e.title,testID:`buoy-block-code-${e.id}`,children:z(s,{style:$.viewer,children:z(la,{title:e.title??"Payload",data:t,initialExpanded:true,showTypeFilter:false,testIDPrefix:`buoy-block-code-${e.id}`})})})}function Oa({block:e}){return z(W,{title:e.title,testID:`buoy-block-code-${e.id}`,children:z(l,{style:[D.mono,$.code],selectable:true,children:e.text})})}function Ha({block:e}){let t=Ba(e.text);return t===void 0?z(Oa,{block:e}):z(La,{block:e,value:t})}function Pa({block:e}){let t=e.tone==="danger"?B.color.danger:e.tone==="warning"?B.color.warning:B.color.info,o=e.tone==="info"?na:oa;return ge(W,{tone:e.tone,testID:`buoy-block-notice-${e.id}`,children:[ge(s,{style:$.noticeRow,children:[z(o,{size:14,color:t}),z(l,{style:$.noticeText,children:e.text})]}),z(Ve,{actions:e.actions,blockId:e.id})]})}function Wa({block:e}){let{copied:t,copy:o}=uo(()=>Mr(e)??e.title);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-finding-${e.id}`,tone:"warning",children:[e.evidence.map((r,n)=>ge(s,{style:[$.kvRow,n>0&&D.rowDivider],children:[z(l,{style:$.kvKey,numberOfLines:1,children:r.label}),z(l,{style:[$.kvValue,r.tone&&{color:vt(r.tone)}],selectable:true,children:r.value})]},`${r.label}-${n}`)),z(s,{style:$.findingFoot,children:z(m,{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:z(l,{style:[$.findingCopyText,t&&{color:B.color.accent}],children:t?"Copied":"Copy finding"})})}),z(Ve,{actions:e.actions,blockId:e.id})]})}var $=w.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:w.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:we.OS==="web"?Hr:"Menlo",fontSize:12,width:10},diffValue:{flex:1,fontFamily:we.OS==="web"?Hr:"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 Ea}from"react";import{night as Me}from"@buoy-gg/shared-ui/web";import{CAPS as qr}from"@buoy-gg/agent-core/web";import{jsx as Fe,jsxs as Oo}from"react/jsx-runtime";function Na({block:e}){let[t,o]=Ea(null),{width:r}=kr(),n=e.images.slice(0,qr.gridMax),i=n.length>qr.gridImages,a=Math.min(150,Math.floor((r-2*Me.gutter-24-8)/2)),g=({img:u,i:h})=>Oo(m,{testID:`buoy-block-image-${h}`,accessibilityRole:"imagebutton",accessibilityLabel:u.alt,onPress:()=>o(t===h?null:h),style:[_e.tile,{width:a},i&&_e.tileCarousel],children:[Fe(wt,{testID:"buoy-internal-chat-image",source:{uri:u.url},style:[_e.image,{width:a,height:a}],resizeMode:"contain",accessibilityLabel:u.alt}),Fe(l,{style:_e.name,numberOfLines:1,children:u.alt}),u.caption?Fe(l,{style:_e.caption,numberOfLines:1,children:u.caption}):null]},`${u.url}-${h}`);return Oo(W,{title:e.title,source:e.source,testID:`buoy-block-imagegrid-${e.id}`,children:[t!==null&&n[t]?Oo(m,{onPress:()=>o(null),style:_e.hero,accessibilityRole:"button",accessibilityLabel:`Close ${n[t].alt}`,children:[Fe(wt,{testID:"buoy-internal-chat-image",source:{uri:n[t].url},style:_e.heroImage,resizeMode:"contain",accessibilityLabel:n[t].alt}),Fe(l,{style:_e.heroCaption,children:n[t].alt}),n[t].caption?Fe(l,{style:_e.caption,children:n[t].caption}):null]}):null,i?Fe(Je,{horizontal:true,showsHorizontalScrollIndicator:false,snapToInterval:a+8,decelerationRate:"fast",contentContainerStyle:_e.carousel,children:n.map((u,h)=>Fe(g,{img:u,i:h},h))}):Fe(s,{style:_e.grid,children:n.map((u,h)=>Fe(g,{img:u,i:h},h))}),Fe(Yl,{shown:n.length,total:e.total})]})}var _e=w.create({grid:{flexDirection:"row",flexWrap:"wrap",gap:8,padding:12},carousel:{gap:8,paddingHorizontal:12,paddingVertical:12},tile:{gap:4},tileCarousel:{},image:{borderRadius:Me.radius.row,backgroundColor:Me.color.fill},name:{color:Me.color.text,fontSize:Me.font.micro,fontWeight:"600"},caption:{color:Me.color.textSecondary,fontSize:Me.font.micro},hero:{alignItems:"center",padding:12,gap:6,borderBottomWidth:w.hairlineWidth,borderBottomColor:Me.color.separator},heroImage:{width:"100%",height:240,borderRadius:Me.radius.row,backgroundColor:Me.color.fill},heroCaption:{color:Me.color.text,fontSize:Me.font.caption}});import{monoFont as Va}from"@buoy-gg/shared-ui/web";import{useState as Ma}from"react";import{AlertTriangle as ja,ChevronRight as qa,Eye as Fr,night as R,NightSegmented as Fa}from"@buoy-gg/shared-ui/web";import{CAPS as po}from"@buoy-gg/agent-core/web";import{jsx as P,jsxs as ae}from"react/jsx-runtime";function _r(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 Ur(e){try{let t=new URL(e);return t.pathname+(t.search?"?\u2026":"")}catch{return e}}function Kr({status:e}){return P(s,{style:[D.pill,{backgroundColor:`${_r(e)}22`}],children:P(l,{style:[D.pillText,{color:_r(e)}],children:e??"\u2026"})})}function _a({block:e}){let t=oe(),o=t.supports?.openTool!==false,r=it(e.requests,po.listItems),{visible:n}=r;return ae(W,{title:e.title??"Network requests",source:e.source,testID:`buoy-block-requests-${e.id}`,children:[n.map((i,a)=>ae(m,{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:[P(l,{style:G.method,children:i.method}),P(l,{style:D.rowTitle,numberOfLines:1,children:Ur(i.url)}),i.mocked?P(l,{style:G.mockedChip,children:"MOCKED"}):null,i.durationMs!==void 0?ae(l,{style:D.rowTrailing,children:[i.durationMs," ms"]}):null,P(Kr,{status:i.status}),o?P(qa,{size:12,color:R.color.textTertiary}):null]},`${i.id}-${a}`)),P(lt,{paged:r})]})}var Ua=[{key:"response",label:"Response"},{key:"request",label:"Request"}];function Ka({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),i=oe();return ae(W,{source:e.source,testID:`buoy-block-request-${e.id}`,children:[ae(s,{style:[D.row,G.reqHead],children:[P(l,{style:G.method,children:e.request.method}),P(l,{style:D.rowTitle,numberOfLines:2,children:Ur(e.request.url)}),e.request.mocked?P(l,{style:G.mockedChip,children:"MOCKED"}):null,P(Kr,{status:e.request.status})]}),P(s,{style:G.tabs,children:P(Fa,{tabs:Ua,activeKey:t,onChange:a=>o(a),size:"sm"})}),P(l,{style:[D.mono,G.body],numberOfLines:14,selectable:true,children:n.length>1600?`${n.slice(0,1600)}
|
|
8
|
-
\u2026`:n}),P(Ve,{blockId:e.id,actions:[{label:"Open in Network",openTool:{toolId:"network",select:e.request.id}}]}),(i.supports?.openTool===false,null)]})}function Ja({block:e}){let t=oe().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(W,{title:r.name??"Network override",source:e.source,testID:`buoy-block-rule-${e.id}`,tone:r.enabled?"warning":void 0,children:[ae(s,{style:G.ruleBody,children:[ae(l,{style:G.ruleLine,children:[ae(l,{style:G.ruleKey,children:[r.methods?.length?r.methods.join("/"):"ANY"," "]}),P(l,{style:D.mono,children:r.urlPattern})]}),ae(l,{style:G.ruleLine,children:[P(l,{style:G.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"}`:""]}),P(s,{style:[D.pill,r.enabled?G.on:G.off],children:P(l,{style:[D.pillText,{color:r.enabled?R.color.onAccent:R.color.textSecondary}],children:o?"DELETED":r.enabled?"ON":"OFF"})})]}),o?null:P(Ve,{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 Ga({block:e}){let t=oe(),o=it(e.elements,po.chips),{visible:r}=o;return ae(W,{title:e.title??"On screen right now",source:e.source,testID:`buoy-block-screen-${e.id}`,children:[r.map((n,i)=>ae(m,{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:[P(Fr,{size:12,color:R.color.textTertiary}),P(l,{style:D.rowTitle,numberOfLines:1,children:n.label??n.testID??n.name}),P(l,{style:D.rowTrailing,numberOfLines:1,children:n.name})]},`${n.nativeTag}-${i}`)),P(lt,{paged:o})]})}function Qa({block:e}){let t=oe(),o=it(e.routes,po.chips),r=o.visible;return ae(W,{title:e.current?`Routes \xB7 you're on ${e.current}`:"Routes",source:e.source,testID:`buoy-block-routes-${e.id}`,children:[P(s,{style:G.chips,children:r.map((n,i)=>P(m,{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:[G.chip,n.path===e.current&&G.chipCurrent],accessibilityRole:"button",children:P(l,{style:[G.chipText,n.dynamic&&G.chipDynamic],children:n.path})},`${n.path}-${i}`))}),P(lt,{paged:o})]})}var Jr={error:R.color.danger,warn:R.color.warning,warning:R.color.warning,info:R.color.info};function Ya({block:e}){let t=it(e.entries,po.listItems),{visible:o}=t;return ae(W,{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,G.logRow],children:[P(s,{style:[D.pill,{backgroundColor:`${Jr[r.level]??R.color.textTertiary}22`}],children:P(l,{style:[D.pillText,{color:Jr[r.level]??R.color.textSecondary}],children:r.level.toUpperCase()})}),P(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}`)),P(lt,{paged:t})]})}function Xa({block:e}){return ae(W,{tone:"danger",testID:`buoy-block-crash-${e.id}`,children:[ae(s,{style:G.crashHead,children:[P(ja,{size:14,color:R.color.danger}),ae(l,{style:G.crashTitle,children:["The app crashed",e.route?` on ${e.route}`:""]})]}),P(l,{style:[D.mono,G.crashMsg],numberOfLines:4,selectable:true,children:e.message}),e.suspect?ae(l,{style:G.suspect,children:["Most likely cause: ",e.suspect.label]}):null,P(Ve,{blockId:e.id,actions:[...e.suspect?.action?[{...e.suspect.action,primary:true}]:[],...e.actions??[]].slice(0,2)})]})}function Za({block:e}){let t=oe(),o=t.supports?.minimize!==false;return ae(m,{testID:`buoy-block-peek-${e.id}`,disabled:!o,onPress:()=>void t.runAction({label:"Look",minimize:true},e.id),style:({pressed:r})=>[G.peek,r&&{opacity:.7}],accessibilityRole:"button",accessibilityLabel:`${e.label}. Look at the app`,children:[P(l,{style:G.peekText,children:e.label}),o?ae(s,{style:G.peekLook,children:[P(Fr,{size:12,color:R.color.accent}),P(l,{style:G.peekLookText,children:"Look"})]}):null]})}var G=w.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:w.hairlineWidth,borderColor:R.color.border},chipCurrent:{backgroundColor:R.color.accentSoft,borderColor:R.color.accentBorderStrong},chipText:{color:R.color.text,fontSize:R.font.caption,fontFamily:we.OS==="web"?Va:"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{monoFont as Ho}from"@buoy-gg/shared-ui/web";import{useEffect as es,useRef as Gr,useState as Qe}from"react";import{AlertTriangle as ts,Check as Qr,ChevronDown as Yr,ChevronRight as Xr,night as d,NightSegmented as os,RefreshCw as rs,Search as ns,X as is}from"@buoy-gg/shared-ui/web";import{Fragment as ho,jsx as p,jsxs as v}from"react/jsx-runtime";var Zr=e=>typeof e=="string"?e:e===void 0?"\u2014":JSON.stringify(e);function ls({block:e}){let t=oe();return p(s,{style:c.chips,testID:`buoy-block-suggestions-${e.id}`,children:e.chips.slice(0,4).map(o=>p(m,{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 as({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,[n,i]=Qe([]),a=o?.kind==="multi"?o.optionIds:n,g=h=>i(f=>f.includes(h)?f.filter(T=>T!==h):[...f,h]),u=n.length>=(e.min??1)&&(!e.max||n.length<=e.max);return v(W,{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((h,f)=>{let T=a.includes(h.id);return v(m,{disabled:r,onPress:()=>g(h.id),style:[c.option,f>0&&D.rowDivider,r&&!T&&c.dim],accessibilityRole:"checkbox",accessibilityState:{checked:T},children:[p(s,{style:[c.checkbox,T&&c.checkboxOn],children:T?p(Qr,{size:11,color:d.color.onAccent}):null}),v(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:h.label}),h.detail?p(l,{style:c.optionDetail,children:h.detail}):null]})]},h.id)})}),r?null:p(s,{style:c.rowEnd,children:p(m,{testID:"buoy-block-multi-submit",disabled:!u,onPress:()=>t.answer({blockId:e.id,kind:"multi",optionIds:n,labels:e.options.filter(h=>n.includes(h.id)).map(h=>h.label)}),style:[c.button,c.buttonPrimary,!u&&c.disabled],children:p(l,{style:c.buttonTextPrimary,children:e.submitLabel??`Use ${n.length||""}`.trim()})})})]})}var ss=8;function cs({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Qe(""),[i,a]=Qe(false),g=o?.kind==="select"?o.label:null,u=e.options.filter(f=>!r||f.label.toLowerCase().includes(r.toLowerCase())).slice(0,8),h=e.searchable!==false&&e.options.length>=ss;return v(W,{testID:`buoy-block-select-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),g?p(l,{style:c.decided,children:g}):v(s,{style:c.selectBox,children:[v(m,{onPress:()=>a(f=>!f),style:c.selectField,accessibilityRole:"button",children:[p(l,{style:c.selectPlaceholder,children:i?"Choose\u2026":`${e.options.length} options`}),p(Yr,{size:14,color:d.color.textSecondary})]}),i&&v(ho,{children:[h&&v(s,{style:c.search,children:[p(ns,{size:12,color:d.color.textSecondary}),p(rt,{style:c.searchInput,value:r,onChangeText:n,placeholder:"Search",placeholderTextColor:d.color.placeholder,autoCapitalize:"none",autoCorrect:false})]}),u.map((f,T)=>v(m,{onPress:()=>t.answer({blockId:e.id,kind:"select",optionId:f.id,label:f.label}),style:[c.option,T>0&&D.rowDivider],accessibilityRole:"button",children:[v(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:f.label}),f.detail?p(l,{style:c.optionDetail,children:f.detail}):null]}),p(Xr,{size:12,color:d.color.textTertiary})]},f.id)),e.options.length>u.length?v(l,{style:c.hint,children:[e.options.length-u.length," more \u2014 keep typing"]}):null]})]})]})}function en({min:e,max:t,step:o=1,value:r,unit:n,onChange:i,disabled:a}){let g=Gr(0),u=t>e?(r-e)/(t-e)*100:0,h=_=>Math.min(t,Math.max(e,+(Math.round((_-e)/o)*o+e).toFixed(6))),f=_=>!a&&i(h(r+_*o)),T=_=>{if(a||g.current<=0)return;let ee=Math.min(1,Math.max(0,_.nativeEvent.locationX/g.current));i(h(e+ee*(t-e)))},O=_=>{g.current=_.nativeEvent.layout.width};return v(s,{style:c.sliderRow,children:[p(m,{disabled:a,onPress:()=>f(-1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Decrease",children:p(l,{style:c.stepText,children:"\u2212"})}),p(m,{style:c.trackHit,onLayout:O,onPress:T,disabled:a,accessibilityRole:"adjustable",accessibilityValue:{min:e,max:t,now:r},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:_=>f(_.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(m,{disabled:a,onPress:()=>f(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 ds({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Qe(e.value??e.min);return v(W,{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(en,{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(m,{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 us({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Qe(""),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(W,{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(ho,{children:[p(s,{style:[c.chips,c.pad],children:i.map(a=>p(m,{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(rt,{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(m,{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 tn({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(Tr,{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(m,{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(en,{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(rt,{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 on(e){let[t,o]=Qe(()=>Object.fromEntries(e.map(r=>[r.key,r.value])));return{values:t,set:(r,n)=>o(i=>({...i,[r]:n}))}}function ps({block:e}){let t=oe(),o=t.answered[e.id],{values:r,set:n}=on(e.fields);return v(W,{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(tn,{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(m,{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 hs({block:e}){let t=oe(),o=t.answered[e.id],{values:r,set:n}=on(e.fields),i=o?.kind==="proposal"?o.approved:null;return v(W,{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(tn,{f:a,value:r[a.key],onChange:g=>n(a.key,g),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(ho,{children:[p(m,{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(m,{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 gs({block:e}){let t=oe(),[o,r]=Qe(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,g)=>v(l,{onPress:()=>r(o===g?null:g),style:c.cite,children:[" [",g+1,"]"]},g)),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(m,{onPress:()=>void t.runAction(e.verify,e.id),style:c.verifyBtn,accessibilityRole:"button",children:[p(rs,{size:11,color:d.color.accent}),p(l,{style:c.verifyText,children:n==="running"?"Checking\u2026":e.verify.label})]}):null]})}function fs({block:e}){let[t,o]=Qe(!!e.open);return v(W,{testID:`buoy-block-details-${e.id}`,children:[v(m,{onPress:()=>o(r=>!r),style:D.row,accessibilityRole:"button",accessibilityState:{expanded:t},children:[p(l,{style:D.rowTitle,children:e.summary}),t?p(Yr,{size:12,color:d.color.textTertiary}):p(Xr,{size:12,color:d.color.textTertiary})]}),t?p(l,{style:c.detailsBody,selectable:true,children:e.body}):null]})}function bs({block:e,renderNested:t}){let[o,r]=Qe(0),n=e.tabs.map((a,g)=>({key:String(g),label:a.label})),i=e.tabs[o];return v(s,{style:c.tabsWrap,testID:`buoy-block-tabs-${e.id}`,children:[p(os,{tabs:n,activeKey:String(o),onChange:a=>r(Number(a)),size:"sm"}),i&&t?t(i.block):null]})}var ys=10;function ms({block:e}){let t=it(e.events,ys);return v(W,{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:vt(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(lt,{paged:t})]})}function ks({block:e}){let t=e.series.slice(-60),o=Math.max(1,...t),r=Math.min(...t,0),n=44;return v(W,{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(rn,{}):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 rn(){let e=Gr(new ue.Value(1)).current;return es(()=>{let t=ue.loop(ue.sequence([ue.timing(e,{toValue:.3,duration:700,useNativeDriver:true}),ue.timing(e,{toValue:1,duration:700,useNativeDriver:true})]));return t.start(),()=>t.stop()},[e]),v(s,{style:c.live,children:[p(ue.View,{style:[c.liveDot,{opacity:e}]}),p(l,{style:c.liveText,children:"LIVE"})]})}function xs({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(W,{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:Zr(o[n])}),p(l,{style:[c.cmpVal,a&&{color:d.color.accent}],numberOfLines:2,children:Zr(r[n])})]},n)})]})}function nn({c:e,id:t}){return v(ho,{children:[e.image?p(wt,{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:vt(o.tone)}],children:o.value})]},o.label))]}),p(Ve,{actions:e.actions,blockId:t})]})}function ws({block:e}){return p(W,{source:e.source,testID:`buoy-block-card-${e.id}`,children:p(nn,{c:e,id:e.id})})}function vs({block:e}){return v(s,{testID:`buoy-block-cardcarousel-${e.id}`,children:[e.title?p(l,{style:c.carouselTitle,children:e.title}):null,p(Je,{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(nn,{c:t,id:`${e.id}-${o}`})},`${t.title}-${o}`))})]})}function Ss({block:e}){let[t,o]=Qe(false);return v(W,{title:e.route?`Screen \xB7 ${e.route}`:"Screen",source:e.source,testID:`buoy-block-screenshot-${e.id}`,children:[p(m,{onPress:()=>o(r=>!r),accessibilityRole:"imagebutton",accessibilityLabel:e.caption??"Screenshot",children:p(wt,{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 Ts({block:e}){let t=e.steps.filter(o=>o.state==="done").length;return v(W,{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(Qr,{size:10,color:d.color.onAccent}):o.state==="failed"?p(is,{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(Ve,{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 Cs({block:e}){let t=oe();return v(m,{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 Is({block:e}){let t=e.status==="failed"?d.color.danger:e.status==="done"?d.color.accent:d.color.info;return v(W,{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(Ve,{actions:e.actions,blockId:e.id})]})}function zs({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(ts,{size:13,color:t}),p(l,{style:[c.bannerText,{color:t}],numberOfLines:2,children:e.text}),e.actions?.[0]?p(Ve,{actions:e.actions.slice(0,1),blockId:e.id,align:"right"}):null]})}function Ds({block:e}){return v(W,{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(Ve,{actions:e.actions,blockId:e.id})]})}function Rs({block:e}){let t=oe(),o=t.answered[e.id];return v(W,{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(m,{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=w.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:w.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:w.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:w.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:we.OS==="web"?Ho:"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:we.OS==="web"?Ho:"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:we.OS==="web"?Ho:"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:w.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:w.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 $s=class extends Il{constructor(){super(...arguments);this.state={failed:false}}static getDerivedStateFromError(){return{failed:true}}render(){return this.state.failed?A(l,{style:As.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}},As=w.create({fallback:{color:Ir.color.textTertiary,fontSize:Ir.font.micro,fontStyle:"italic",paddingVertical:6}}),Bs=e=>A(go,{block:e});function go({block:e}){return A($s,{children:A(Ls,{block:e})})}function Ls({block:e}){switch(e.kind){case"choice":return A(Zl,{block:e});case"confirm":return A(ea,{block:e});case"input":return A(ta,{block:e});case"table":return A(Ta,{block:e});case"keyValue":return A(Ca,{block:e});case"list":return A(za,{block:e});case"imageGrid":return A(Na,{block:e});case"diff":return A(Ra,{block:e});case"chart":return A($a,{block:e});case"steps":return A(Aa,{block:e});case"code":return A(Ha,{block:e});case"actions":return A(Ve,{actions:e.actions,blockId:e.id});case"notice":return A(Pa,{block:e});case"finding":return A(Wa,{block:e});case"requestList":return A(_a,{block:e});case"requestCard":return A(Ka,{block:e});case"ruleCard":return A(Ja,{block:e});case"screenElements":return A(Ga,{block:e});case"routeChips":return A(Qa,{block:e});case"logList":return A(Ya,{block:e});case"crash":return A(Xa,{block:e});case"peek":return A(Za,{block:e});case"suggestions":return A(ls,{block:e});case"multiSelect":return A(as,{block:e});case"select":return A(cs,{block:e});case"slider":return A(ds,{block:e});case"dateTime":return A(us,{block:e});case"form":return A(ps,{block:e});case"proposal":return A(hs,{block:e});case"claim":return A(gs,{block:e});case"details":return A(fs,{block:e});case"tabs":return A(bs,{block:e,renderNested:Bs});case"timeline":return A(ms,{block:e});case"sparkline":return A(ks,{block:e});case"compare":return A(xs,{block:e});case"card":return A(ws,{block:e});case"cardCarousel":return A(vs,{block:e});case"screenshot":return A(Ss,{block:e});case"plan":return A(Ts,{block:e});case"checkpoint":return A(Cs,{block:e});case"task":return A(Is,{block:e});case"banner":return A(zs,{block:e});case"file":return A(Ds,{block:e});case"upload":return A(Rs,{block:e});default:return null}}import{monoFont as Os}from"@buoy-gg/shared-ui/web";import{useEffect as Hs,useState as Tt}from"react";import{ChevronDown as Ps,ChevronRight as Ws,Copy as Es,night as C,RefreshCw as Ns}from"@buoy-gg/shared-ui/web";import{jsx as N,jsxs as ze}from"react/jsx-runtime";function Yt({label:e,onPress:t,children:o}){return N(m,{onPress:t,accessibilityRole:"button",accessibilityLabel:e,style:({pressed:r})=>[H.iconBtn,r&&H.pressed],children:o})}function Vs({id:e="chrome-actions"}){let t=oe(),[o,r]=Tt(null),n=i=>void t.runAction({label:i,send:`__chrome__:${i}`},e);return ze(s,{style:H.actions,testID:"chrome-message-actions",children:[N(Yt,{label:"Copy",onPress:()=>n("copy"),children:N(Es,{size:13,color:C.color.textSecondary})}),N(Yt,{label:"Retry",onPress:()=>n("retry"),children:N(Ns,{size:13,color:C.color.textSecondary})}),N(Yt,{label:"Good answer",onPress:()=>{r("up"),n("thumbs up")},children:N(l,{style:[H.glyph,o==="up"&&H.glyphOn],children:"\u{1F44D}"})}),N(Yt,{label:"Bad answer",onPress:()=>{r("down"),n("thumbs down")},children:N(l,{style:[H.glyph,o==="down"&&H.glyphOn],children:"\u{1F44E}"})}),N(Yt,{label:"Export",onPress:()=>n("export transcript"),children:N(l,{style:H.textBtn,children:"Export"})})]})}function Ms({text:e,live:t}){let[o,r]=Tt(false);return ze(s,{style:H.reasoning,testID:"chrome-reasoning",children:[ze(m,{onPress:()=>r(n=>!n),style:H.reasoningHead,accessibilityRole:"button",accessibilityState:{expanded:o},children:[t?N(Jt,{size:"small",color:C.color.textTertiary}):null,N(l,{style:H.reasoningTitle,children:t?"Working it out\u2026":"How I got here"}),o?N(Ps,{size:12,color:C.color.textTertiary}):N(Ws,{size:12,color:C.color.textTertiary})]}),o?N(l,{style:H.reasoningBody,children:e}):null]})}function js({label:e}){let[t,o]=Tt(0);return Hs(()=>{let r=setInterval(()=>o(n=>n+250),250);return()=>clearInterval(r)},[]),ze(s,{style:H.elapsed,testID:"chrome-elapsed",children:[N(Jt,{size:"small",color:C.color.textSecondary}),N(l,{style:H.elapsedLabel,children:e}),ze(l,{style:H.elapsedMs,children:[(t/1e3).toFixed(1),"s"]})]})}function qs(){let[e,t]=Tt(""),[o,r]=Tt(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,'"']}),N(m,{onPress:()=>r(null),children:N(l,{style:H.queuedCancel,children:"Cancel"})})]}):null,ze(s,{style:H.composer,children:[N(rt,{style:H.composerInput,value:e,onChangeText:t,placeholder:"Agent is busy \u2014 type and it sends next",placeholderTextColor:C.color.placeholder}),N(m,{disabled:!e.trim(),onPress:()=>{r(e.trim()),t("")},style:[H.queueBtn,!e.trim()&&{opacity:.5}],children:N(l,{style:H.queueBtnText,children:"Queue"})})]})]})}function Fs({at:e}){return ze(s,{style:H.divider,testID:"chrome-divider",children:[N(s,{style:H.dividerLine}),ze(l,{style:H.dividerText,children:["App reloaded \xB7 ",e]}),N(s,{style:H.dividerLine})]})}function _s({at:e}){return N(l,{style:H.timestamp,children:e})}function Us({text:e}){let t=oe(),[o,r]=Tt(false),[n,i]=Tt(e);return N(s,{style:H.userWrap,testID:"chrome-edit-bubble",children:o?ze(s,{style:H.editBox,children:[N(rt,{style:H.editInput,value:n,onChangeText:i,multiline:true}),ze(s,{style:H.editActions,children:[N(m,{onPress:()=>{r(false),t.runAction({label:"re-run edited",send:`__chrome__:re-run "${n}"`},"chrome-edit")},style:H.editPrimary,children:N(l,{style:H.editPrimaryText,children:"Re-run from here"})}),N(m,{onPress:()=>{r(false),t.runAction({label:"branch",send:`__chrome__:branch "${n}"`},"chrome-edit")},style:H.editPlate,children:N(l,{style:H.editPlateText,children:"Branch"})}),N(m,{onPress:()=>r(false),style:H.editPlate,children:N(l,{style:H.editPlateText,children:"Cancel"})})]})]}):ze(m,{onLongPress:()=>r(true),onPress:()=>r(true),style:H.bubble,accessibilityRole:"button",accessibilityLabel:"Edit message",children:[N(l,{style:H.bubbleText,children:n}),N(l,{style:H.bubbleHint,children:"tap to edit \xB7 2 branches"})]})})}var H=w.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:w.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:we.OS==="web"?Os:"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:w.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:w.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:w.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:w.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 ln}from"react";import{AlertTriangle as Ks,ChevronDown as Js,night as E}from"@buoy-gg/shared-ui/web";import{jsx as ke,jsxs as Xt}from"react/jsx-runtime";function an({pending:e,onAnswer:t}){let[o,r]=ln("");return Xt(s,{style:Q.card,testID:"buoy-ask-buoy-approval",children:[Xt(s,{style:Q.titleRow,children:[ke(Ks,{size:14,color:E.color.warning}),ke(l,{style:Q.title,children:"Allow this change?"})]}),e.restored?ke(l,{style:Q.restored,testID:"buoy-ask-buoy-approval-restored",children:"Asked before the app restarted \u2014 check it still applies."}):null,ke(l,{style:Q.label,children:e.label}),ke(l,{style:Q.reason,children:e.reason}),e.description?ke(Gs,{text:e.description}):null,ke(rt,{testID:"buoy-ask-buoy-approval-note",value:o,onChangeText:r,placeholder:"Add a note for the agent (optional)",placeholderTextColor:E.color.textTertiary,style:Q.note,returnKeyType:"done",blurOnSubmit:true}),Xt(s,{style:Q.actions,children:[ke(m,{testID:"buoy-ask-buoy-approve",accessibilityRole:"button",onPress:()=>t({approved:true,reason:o}),style:({pressed:n})=>[Q.button,Q.approve,n&&Q.pressed],children:ke(l,{style:Q.approveText,children:"Allow"})}),e.restored?null:ke(m,{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:ke(l,{style:Q.trustText,children:"Allow for this chat"})}),ke(m,{testID:"buoy-ask-buoy-reject",accessibilityRole:"button",onPress:()=>t({approved:false,reason:o}),style:({pressed:n})=>[Q.button,Q.reject,n&&Q.pressed],children:ke(l,{style:Q.rejectText,children:"Not now"})})]})]})}function Gs({text:e}){let[t,o]=ln(false);return Xt(s,{children:[Xt(m,{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:[ke(s,{style:t?Q.chevronOpen:Q.chevronClosed,children:ke(Js,{size:12,color:E.color.textTertiary})}),ke(l,{style:Q.disclosureText,children:t?"Hide details":"Details"})]}),t?ke(Je,{style:Q.detail,contentContainerStyle:Q.detailContent,nestedScrollEnabled:true,children:ke(l,{style:Q.description,children:e})}):null]})}var Q=w.create({card:{marginHorizontal:E.gutter,marginBottom:10,padding:E.cardPad,borderRadius:E.radius.card,borderWidth:w.hairlineWidth,borderColor:E.color.accentBorderStrong,backgroundColor:E.color.surface,gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6},title:{color:E.color.text,fontSize:E.font.caption,fontWeight:"600"},label:{color:E.color.text,fontSize:E.font.row,fontWeight:"600",lineHeight:20},description:{color:E.color.textSecondary,fontSize:E.font.caption,lineHeight:18},reason:{color:E.color.warning,fontSize:E.font.caption,lineHeight:18},restored:{color:E.color.info,backgroundColor:E.color.infoSoft,fontSize:E.font.micro,lineHeight:16,paddingHorizontal:8,paddingVertical:5,borderRadius:8},disclosure:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:4},disclosureText:{color:E.color.textTertiary,fontSize:E.font.micro,fontWeight:"600"},chevronOpen:{transform:[{rotate:"0deg"}]},chevronClosed:{transform:[{rotate:"-90deg"}]},detail:{maxHeight:150,marginTop:2},detailContent:{paddingBottom:2},note:{color:E.color.text,fontSize:E.font.caption,paddingHorizontal:10,paddingVertical:7,borderRadius:E.radius.row,borderWidth:w.hairlineWidth,borderColor:E.color.border,backgroundColor:E.color.button,marginTop:2},actions:{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:6},button:{paddingHorizontal:16,paddingVertical:9,borderRadius:E.radius.row},approve:{backgroundColor:E.color.accent},approveText:{color:E.color.onAccent,fontWeight:"600",fontSize:E.font.caption},trust:{backgroundColor:E.color.button,borderWidth:w.hairlineWidth,borderColor:E.color.accentBorderStrong},trustText:{color:E.color.accent,fontWeight:"600",fontSize:E.font.caption},reject:{backgroundColor:E.color.button},rejectText:{color:E.color.text,fontSize:E.font.caption},pressed:{opacity:.7}});import{useSyncExternalStore as Qs}from"react";import{ChevronDown as Ys,ChevronRight as Xs,night as re}from"@buoy-gg/shared-ui/web";import{isReversible as sn}from"@buoy-gg/agent-core/web";import{jsx as at,jsxs as bt}from"react/jsx-runtime";var cn=[];function dn(e){return Qs(t=>e?.subscribe(t)??(()=>{}),()=>e?.list()??cn,()=>e?.list()??cn)}function un({ledger:e,onUndoAll:t,expanded:o,onToggle:r}){let n=dn(e).filter(T=>!T.undoneAt),i=n.filter(T=>T.effect.kind!=="transient");if(i.length===0)return null;let a=i.filter(T=>sn(T.effect)),g=i.length-a.length,u=n.length-i.length,h=o?Ys:Xs,f=[a.length>0?`${a.length} undoable`:null,g>0?`${g} permanent`:null].filter(Boolean).join(" \xB7 ");return bt(s,{style:fe.wrap,children:[bt(m,{testID:"buoy-ask-buoy-changes-bar",accessibilityRole:"button",accessibilityState:{expanded:o},onPress:r,style:fe.bar,children:[at(s,{style:fe.dot}),at(l,{style:fe.summary,numberOfLines:1,children:"Changed this app"}),at(l,{style:fe.counts,numberOfLines:1,children:f}),at(h,{size:12,color:re.color.textSecondary})]}),o&&bt(s,{style:fe.panel,children:[bt(Je,{style:fe.panelScroll,testID:"buoy-ask-buoy-changes-scroll",keyboardShouldPersistTaps:"handled",children:[i.map(T=>{let O=!sn(T.effect);return bt(s,{style:fe.row,children:[at(l,{style:fe.rowLabel,children:T.effect.label}),at(l,{style:[fe.rowTag,O&&fe.rowTagMuted],children:O?"Permanent":"Undoable"})]},T.id)}),u>0&&at(s,{style:fe.row,children:bt(l,{style:[fe.rowLabel,fe.rowLabelMuted],children:["Also did ",u," one-shot action",u===1?"":"s"," (navigation, taps) \u2014 nothing to undo."]})})]}),bt(s,{style:fe.footer,children:[a.length>0&&at(m,{testID:"buoy-ask-buoy-undo-all",accessibilityRole:"button",onPress:t,style:({pressed:T})=>[fe.undo,T&&fe.pressed],children:bt(l,{style:fe.undoText,children:["Undo ",a.length," change",a.length===1?"":"s"]})}),g>0&&at(l,{style:fe.footnote,children:"Permanent changes can't be undone from here."})]})]})]})}var fe=w.create({wrap:{borderBottomWidth:w.hairlineWidth,borderBottomColor:re.color.border,backgroundColor:re.color.warningSoft},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:re.gutter,paddingVertical:10},dot:{width:7,height:7,borderRadius:4,backgroundColor:re.color.warning},summary:{color:re.color.text,fontSize:re.font.caption,fontWeight:"600"},counts:{flex:1,color:re.color.textSecondary,fontSize:re.font.caption},panel:{paddingHorizontal:re.gutter,paddingBottom:12,gap:10},panelScroll:{maxHeight:180},row:{flexDirection:"row",alignItems:"flex-start",gap:10,paddingVertical:8,borderTopWidth:w.hairlineWidth,borderTopColor:re.color.separator},rowLabel:{flex:1,color:re.color.text,fontSize:re.font.caption,lineHeight:18},rowTag:{color:re.color.accent,fontSize:re.font.micro,fontWeight:"600",letterSpacing:.6,textTransform:"uppercase",paddingTop:2},rowTagMuted:{color:re.color.textTertiary},rowLabelMuted:{color:re.color.textTertiary},footer:{flexDirection:"row",alignItems:"center",gap:12,flexWrap:"wrap"},undo:{paddingHorizontal:14,paddingVertical:8,borderRadius:re.radius.row,backgroundColor:re.color.button},undoText:{color:re.color.accent,fontSize:re.font.caption,fontWeight:"600"},footnote:{flex:1,color:re.color.textTertiary,fontSize:re.font.micro},pressed:{opacity:.7}});function Zs(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 ec,useEffect as pn,useRef as tc,useState as oc}from"react";import{night as Te}from"@buoy-gg/shared-ui/web";import{jsx as yt,jsxs as rc}from"react/jsx-runtime";var hn=40,nc=120,gn=we.OS==="ios"?10:6,ic=16;function fn({onSend:e,onStop:t,busy:o,draft:r,onDraftTaken:n,disabled:i,placeholder:a,focusKey:g,canFocus:u=true}){let[h,f]=oc(""),T=tc(null);pn(()=>{!g||!u||i||T.current?.focus()},[g,u,i]),pn(()=>{r&&(f(ce=>ce?`${ce} ${r}`:r),n?.())},[r,n]);let O=ec(()=>{let ce=h.trim();ce&&(f(""),e(ce))},[h,e]),_=h.trim().length>0&&!o&&!i,ee=h.trim().length>0&&o&&!i;return rc(s,{style:xe.wrap,children:[yt(s,{style:[xe.field,i&&xe.fieldDisabled],children:yt(rt,{ref:T,testID:"buoy-ask-buoy-input",style:[xe.input,h.length===0&&xe.inputEmpty],value:h,onChangeText:f,placeholder:a??(i?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:Te.color.placeholder,multiline:true,editable:!i,keyboardType:"ascii-capable",autoCorrect:true,autoCapitalize:"sentences",blurOnSubmit:false,onSubmitEditing:O,returnKeyType:"send",maxLength:4e3})}),ee&&yt(m,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:O,style:({pressed:ce})=>[xe.button,xe.queue,ce&&xe.pressed],children:yt(l,{style:[xe.sendGlyph,{color:Te.color.accent}],children:"\u2191"})}),o?yt(m,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:t,style:({pressed:ce})=>[xe.button,xe.stop,ce&&xe.pressed],children:yt(s,{style:xe.stopGlyph})}):yt(m,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!_,onPress:O,style:({pressed:ce})=>[xe.button,_?xe.sendOn:xe.sendOff,ce&&_&&xe.pressed],children:yt(l,{style:[xe.sendGlyph,{color:_?Te.color.onAccent:Te.color.textTertiary}],children:"\u2191"})})]})}var xe=w.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:Te.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:w.hairlineWidth,borderTopColor:Te.color.border,backgroundColor:Te.color.bg},field:{flex:1,minHeight:hn,justifyContent:"center",borderRadius:20,borderWidth:w.hairlineWidth,borderColor:Te.color.border,backgroundColor:Te.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:nc,paddingHorizontal:ic,paddingTop:gn,paddingBottom:gn,color:Te.color.text,fontSize:Te.font.row},inputEmpty:{height:hn},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:Te.color.accent},sendOff:{backgroundColor:Te.color.fill},stop:{backgroundColor:Te.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:w.hairlineWidth,borderColor:Te.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:Te.color.text},pressed:{opacity:.7}});import{useEffect as lc,useRef as bn}from"react";import{jsx as ac}from"react/jsx-runtime";function sc({children:e}){let t=bn(null),o=bn(new ue.Value(0)).current;return lc(()=>{if(we.OS!=="ios")return;let r=(g,u)=>{ue.timing(o,{toValue:g,duration:u.duration||250,easing:At.bezier(.17,.59,.4,.77),useNativeDriver:false}).start()},n=g=>{let u=t.current;u&&u.measureInWindow((h,f,T,O)=>{let _=f+O-g.endCoordinates.screenY;r(Math.max(0,_),g)})},i=g=>r(0,g),a=[zo.addListener("keyboardWillChangeFrame",n),zo.addListener("keyboardWillHide",i)];return()=>a.forEach(g=>g.remove())},[o]),ac(ue.View,{ref:t,style:[cc.flex,{paddingBottom:o}],children:e})}var cc=w.create({flex:{flex:1}});import{useEffect as yn,useState as mn}from"react";import{Check as dc,Copy as uc,FileText as pc,ModalHeader as fo,night as Ye,Otto as hc,Plus as gc,SettingsSolid as fc,realNow as Po}from"@buoy-gg/shared-ui/web";import{toolTitle as bc}from"@buoy-gg/agent-core/web";var yc=e=>e.effect==="read"&&e.status==="ok";function mc(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=>bc(i.toolId)))];t.push({kind:"reads",id:o.map(i=>i.id).join("+"),calls:o,label:`Looked at ${kc(n)}`,count:o.length})}o=[]}};for(let n of e){if(yc(n)){o.push(n);continue}r(),t.push({kind:"call",call:n})}return r(),t}function kc(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 xc(e){let t=[];e.startedAt!==void 0&&e.endedAt!==void 0&&e.endedAt>=e.startedAt&&t.push(kn(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(h=>h.status===u).length,n=r("failed"),i=r("refused"),a=r("declined"),g=r("stopped");n&&t.push(`${n} failed`),i&&t.push(`${i} refused`),a&&t.push(`${a} declined`),g&&t.push(`${g} not run`)}return t.length?t.join(" \xB7 "):null}function kn(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 xn}from"react/jsx-runtime";var wc=200,vc=()=>"";function wn({configured:e,busy:t,failed:o=false,activeLabel:r,awaitingApproval:n=false,startedAt:i=null,stopping:a=false,readOnly:g=false,toolCount:u,hasMessages:h,onBack:f,onReset:T,getTranscript:O,onOpenSettings:_,onTicket:ee}){let{copied:ce,copy:pe}=uo(O??vc),[Pe,qe]=mn(false);yn(()=>{t?r&&qe(true):qe(false)},[t,r]);let We=t&&!n&&i!==null,[Xe,Ze]=mn(()=>Po());yn(()=>{if(!We)return;Ze(Po());let Et=setInterval(()=>Ze(Po()),1e3);return()=>clearInterval(Et)},[We]);let et=We&&i!==null?kn(Xe-i):null,Wt=e?o?"error":t?r||Pe?"robot":"thinking":"idle":"confused",tt=a?"Stopping":r??"Thinking",Ee=e?n?"Waiting for you":t?et?`${tt} \xB7 ${et}`:`${tt}\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 xn(fo,{children:[f?Be(fo.Navigation,{onBack:f}):null,Be(s,{style:mt.otto,testID:"buoy-ask-buoy-otto",children:Be(hc,{state:Wt,pixelSize:2,tickMs:wc,water:false})}),Be(fo.Content,{title:"Ask Buoy",subtitle:Ee,testID:"buoy-ask-buoy-title"}),xn(fo.Actions,{children:[ee?Be(Kt,{testID:"buoy-ask-buoy-ticket",accessibilityRole:"button",accessibilityLabel:"Summarize for a ticket",disabled:!h||t,onPress:ee,style:[mt.actionBtn,(!h||t)&&mt.actionBtnDisabled],children:Be(pc,{size:14,color:h&&!t?Ye.color.textSecondary:Ye.color.textTertiary})}):null,O?Be(Kt,{testID:"buoy-ask-buoy-copy-chat",accessibilityRole:"button",accessibilityLabel:ce?"Conversation copied":"Copy conversation",disabled:!h,onPress:pe,style:[mt.actionBtn,!h&&mt.actionBtnDisabled],children:ce?Be(dc,{size:14,color:Ye.color.accent}):Be(uc,{size:14,color:h?Ye.color.textSecondary:Ye.color.textTertiary})}):null,_?Be(Kt,{testID:"buoy-ask-buoy-settings",accessibilityRole:"button",accessibilityLabel:"Settings",onPress:_,style:mt.actionBtn,children:Be(fc,{size:14,color:Ye.color.textSecondary})}):null,Be(Kt,{testID:"buoy-ask-buoy-reset",accessibilityRole:"button",accessibilityLabel:"New conversation",disabled:!h,onPress:T,style:[mt.actionBtn,!h&&mt.actionBtnDisabled],children:Be(gc,{size:14,color:h?Ye.color.textSecondary:Ye.color.textTertiary})})]})]})}var mt=w.create({otto:{marginRight:8,justifyContent:"center"},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:Ye.color.buttonSurface,borderWidth:1,borderColor:Ye.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{useCallback as Sc,useEffect as Tc,useState as Cc}from"react";import{AlertTriangle as Ic,night as se,ToggleRow as Wo}from"@buoy-gg/shared-ui/web";import{useSyncExternalStore as zc}from"react";import{definePersistedSetting as Dc,devToolsStorageKeys as Rc}from"@buoy-gg/shared-ui/web";var Eo={showThinking:false,bypassApprovals:false,readOnly:false,hostedNoticeSeen:false,claudeNoticeSeen:false},No=Dc(`${Rc.base}_ask_buoy_settings`,Eo,{sanitize:e=>({showThinking:e.showThinking===true,bypassApprovals:e.bypassApprovals===true,readOnly:e.readOnly===true,hostedNoticeSeen:e.hostedNoticeSeen===true,claudeNoticeSeen:e.claudeNoticeSeen===true})}),Ct=Eo,Vo=false,Mo=new Set;function vn(){for(let e of Mo)try{e()}catch{}}var st={get:()=>Ct,subscribe(e){return Mo.add(e),Vo||(Vo=true,No.load().then(t=>{Ct=t,vn()})),()=>Mo.delete(e)},set(e,t){Ct[e]!==t&&(Ct={...Ct,[e]:t},vn(),No.save(Ct))},reset(){Ct=Eo,Vo=false,No.clear()}};function Ot(){return zc(st.subscribe,st.get,st.get)}import{useSyncExternalStore as $c}from"react";import{definePersistedSetting as Ac,devToolsStorageKeys as Bc,subscribeStorageWrites as Lc}from"@buoy-gg/shared-ui/web";var jo="claude",Sn=Bc.askBuoy.model(),Tn=e=>e==="luna"?"luna":"claude",Cn=Ac(Sn,jo,{sanitize:Tn}),bo=jo,In=false,qo=new Set;function Oc(){for(let e of qo)try{e()}catch{}}function Fo(e){e!==bo&&(bo=e,Oc())}var yo={get:()=>bo,subscribe(e){return qo.add(e),In||(In=true,Cn.load().then(Fo),Lc((t,o)=>{if(t===Sn)try{Fo(Tn(o===null?jo:JSON.parse(o)))}catch{}})),()=>qo.delete(e)},set(e){e!==bo&&(Fo(e),Cn.save(e))}};function zn(){return $c(yo.subscribe,yo.get,yo.get)}import{idFactory as Dn}from"@buoy-gg/agent-core/web";import{realNow as Zt}from"@buoy-gg/shared-ui/web";import{persistentStorage as _o,devToolsStorageKeys as Hc}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as Rn}from"@buoy-gg/shared-ui/web";var Pc=[{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*("|')?(?!(?:authorization|bearer|cookie|header)\b)[^\s"',}]{6,}/gi,label:"[credential removed]"}];function eo(e){if(!e)return e;let t=e;for(let{re:o,label:r}of Pc)t=t.replace(o,r);return t}var Uo=`${Hc.base}_ask_buoy_transcript`,Ko=1,$n=60,Wc=256e3,Ec="[not kept across a restart \u2014 read it again if you need it]";function ct(e){return e&&eo(e)}function Nc(e){let t=e.streaming===true;return{...e,text:ct(e.text),streaming:false,reasoning:e.reasoning?.map(o=>({...o,text:ct(o.text)})),toolCalls:e.toolCalls.map(o=>{let r=o.params?ct(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 Vc(e){return e.map(t=>t.role==="tool-results"?{...t,results:t.results.map(o=>({...o,content:Ec}))}:t.role==="assistant"?{...t,text:ct(t.text)}:{...t,text:ct(t.text)})}function An(e){let t={...e,messages:e.messages.slice(-$n),history:e.history.slice(-$n*2)},o=JSON.stringify(t);for(;o.length>Wc&&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 Mc(e){if(!e)return null;let t=e.params;if(!t)return null;let o;try{o=JSON.stringify(t)}catch{return null}return eo(o)!==o?null:{id:e.id,toolId:e.toolId,action:e.action,label:ct(e.label),description:e.description?ct(e.description):void 0,reason:ct(e.reason),params:t,targetDigest:e.targetDigest}}function jc(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 Bn(e){if(!e?.length)return;let t=e.filter(o=>{try{let r=JSON.stringify(o);return eo(r)===r}catch{return false}});return t.length?t:void 0}function qc(e){return An({v:Ko,savedAt:Date.now(),messages:e.messages.map(Nc),history:Vc(e.history),answers:e.answers,usage:e.usage,pending:Mc(e.pending),ledger:Bn(e.ledger),queued:e.queued?.length?e.queued.map(t=>({id:t.id,text:ct(t.text)})):void 0})}function Fc(e){if(!e)return null;try{let t=JSON.parse(e);return t?.v!==Ko||!Array.isArray(t.messages)||t.messages.length===0?null:{v:Ko,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:jc(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 Ln(){try{return Fc(await _o.getItem(Uo))}catch{return null}}var mo=0;async function On(e){mo+=1;try{await _o.setItem(Uo,JSON.stringify(e))}catch{}}async function _c(e){let t=mo,o=await Ln();!o||t!==mo||await On(An({...o,ledger:Bn(e)}))}async function Uc(){mo+=1;try{await _o.removeItem(Uo)}catch{}}var ko=Dn("m"),Hn=400;function Kc(e){if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e);return t.length>Hn?`${t.slice(0,Hn)}\u2026`:t}catch{return}}var Jc=Dn("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},credits:null,claudeOut:false,meta:{}},Pn=null,Wn=null,Jo=new Set,Go=null,En=null,Qo=null;function X(e){L={...L,...e};for(let t of Jo)try{t()}catch{}}var b={getState:()=>L,subscribe(e){return Jo.add(e),()=>Jo.delete(e)},setLedger(e){e!==Go&&(En?.(),Go=e,En=e?e.subscribe(()=>void _c(e.list())):null)},getLedger(){return Go},holdSession(e,t){Qo={session:e,signature:t}},getHeldSession(){return Qo},setReporter(e){Pn=e},getReporter(){return Pn},setUsageReader(e){Wn=e},getUsageReader(){return Wn},setNotice(e){X({notice:e})},setConfigured(e){e!==L.configured&&X({configured:e})},setClaudeOut(e){L.claudeOut!==e&&X({claudeOut:e})},setMeta(e){Object.keys(e).every(t=>L.meta[t]===e[t])||X({meta:{...L.meta,...e}})},addUser(e){X({messages:[...L.messages,{id:ko(),role:"user",text:e,toolCalls:[],blocks:[]}],busy:true})},beginTurn(){X({busy:true})},enqueue(e){let t={id:Jc(),text:e};return X({queued:[...L.queued,t]}),t},removeQueued(e){L.queued.some(t=>t.id===e)&&X({queued:L.queued.filter(t=>t.id!==e)})},shiftQueued(){let[e,...t]=L.queued;if(e)return X({queued:t}),e},takeQueuedToDraft(e){let t=L.queued.find(o=>o.id===e);t&&X({queued:L.queued.filter(o=>o.id!==e),draft:t.text})},requestStop(){!L.busy||L.stopping||X({stopping:true})},clearDraft(){L.draft!==null&&X({draft:null})},removeMessage(e){X({messages:L.messages.filter(t=>t.id!==e)})},recordAnswer(e){X({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,X({actionState:o})},startAssistant(){let e=ko();return X({messages:[...L.messages,{id:e,role:"assistant",text:"",toolCalls:[],blocks:[],streaming:true,startedAt:Zt()}]}),e},applyEvent(e,t){if(t.type==="history-trimmed"){let r=L.messages.findIndex(a=>a.id===e),n={id:ko(),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:Zt()},i=[...L.messages];i.splice(r<0?i.length:r,0,n),X({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})`:t.reason==="network"?"Connection dropped \u2014 trying again":"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 Da(e){return e.map(_r).filter(t=>!!t)}import{Fragment as Ra,jsx as z,jsxs as ge}from"react/jsx-runtime";function Po(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 $a({block:e}){let t=it(e.rows,Xt.tableRows),{visible:o}=t,r=e.columns.slice(0,4);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-table-${e.id}`,children:[z(s,{style:$.tableHead,children:r.map((n,i)=>z(l,{style:[$.th,i===0&&$.firstCol],numberOfLines:1,children:n},n))}),o.map((n,i)=>z(s,{style:[$.tr,i>0&&D.rowDivider],children:r.map((a,g)=>{let d=n[g],h=typeof d=="string"?d:d?.text??"",f=typeof d=="string"?void 0:d?.tone;return z(l,{style:[$.td,g===0&&$.firstCol,g===0&&$.tdFirst,f&&{color:vt(f)}],numberOfLines:2,children:Ht(h,$.td)},g)})},i)),z(lt,{paged:t})]})}function Aa({block:e}){let t=it(e.pairs,Xt.keyValuePairs),{visible:o}=t,[r,n]=Nr(null);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-keyvalue-${e.id}`,children:[o.map((i,a)=>{let g=typeof i.value=="object"&&i.value!==null,d=r===i.key;return ge(x,{onPress:g?()=>n(d?null:i.key):void 0,style:[$.kvRow,a>0&&D.rowDivider],children:[z(l,{style:$.kvKey,numberOfLines:1,children:i.key}),z(l,{style:[$.kvValue,d&&D.mono],numberOfLines:d?void 0:2,selectable:true,children:d?JSON.stringify(i.value,null,2):Po(i.value)})]},i.key)}),z(lt,{paged:t})]})}function Ba(e){let t=!!e.image;return{canExpand:t,rowRunsAction:!!e.action&&!t,actionIsOwnControl:!!e.action&&t}}function La({block:e}){let t=oe(),o=it(e.items,Xt.listItems),{visible:r}=o,[n,i]=Nr(null);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-list-${e.id}`,children:[r.map((a,g)=>{let d=`${a.id??a.title}-${g}`,h=n===d,{canExpand:f,rowRunsAction:m,actionIsOwnControl:L}=Ba(a),V=f||m?x:s,ee=f?{onPress:()=>i(h?null:d),accessibilityRole:"button",accessibilityState:{expanded:h},accessibilityLabel:`${a.title}, ${h?"hide":"show"} picture`,testID:`buoy-block-list-row-${d}`}:m?{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button"}:{};return ge(s,{style:g>0?D.rowDivider:void 0,children:[h&&a.image?z(x,{onPress:()=>i(null),accessibilityRole:"button",accessibilityLabel:`Hide ${a.title}`,testID:`buoy-block-list-hero-${d}`,style:$.listHero,children:z(wt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.listHeroImage,resizeMode:"contain",accessibilityLabel:a.title})}):null,ge(V,{...ee,style:D.row,children:[a.image&&!h?z(wt,{testID:"buoy-internal-chat-image",source:{uri:a.image},style:$.thumb,resizeMode:"contain",accessibilityLabel:a.title}):a.icon?z(Or,{name:a.icon}):null,ge(s,{style:$.flex,children:[z(l,{style:[D.rowTitle,a.tone&&{color:vt(a.tone)}],numberOfLines:h?void 0:2,children:Ht(a.title,D.rowTitle)}),a.subtitle?z(l,{style:D.rowSub,numberOfLines:h?void 0:2,children:Ht(a.subtitle,D.rowSub)}):null]}),a.trailing?z(l,{style:[D.rowTrailing,a.tone&&{color:vt(a.tone)}],numberOfLines:1,children:a.trailing}):null,a.action?L?z(x,{onPress:()=>void t.runAction(a.action,e.id),accessibilityRole:"button",accessibilityLabel:a.action.label,hitSlop:8,children:z(l,{style:$.rowAction,children:a.action.label})}):z(l,{style:$.rowAction,children:a.action.label}):null]})]},d)}),z(lt,{paged:o})]})}function Ur(e){return e!==null&&typeof e=="object"}function Oa(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 Ha({block:e}){let t=it(e.changes,Xt.keyValuePairs);return ge(W,{title:e.title??"What changed",source:e.source,testID:`buoy-block-diff-${e.id}`,collapsible:true,summary:Oa(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 ge(s,{style:[$.diffRow,r>0&&D.rowDivider],children:[z(l,{style:$.diffPath,numberOfLines:1,children:o.path}),Ur(o.before)||Ur(o.after)?z(s,{style:$.diffTree,children:z(ha,{oldValue:o.before,newValue:o.after,showUnchanged:false,scrollEnabled:false})}):ge(Ra,{children:[n?null:ge(s,{style:$.diffLine,children:[z(l,{style:[$.diffMark,{color:B.color.danger}],children:"\u2212"}),z(l,{style:[$.diffValue,{color:B.color.danger}],numberOfLines:3,selectable:true,children:Po(o.before)})]}),i?null:ge(s,{style:$.diffLine,children:[z(l,{style:[$.diffMark,{color:B.color.accent}],children:"+"}),z(l,{style:[$.diffValue,{color:B.color.accent}],numberOfLines:3,selectable:true,children:Po(o.after)})]})]})]},`${o.path}-${r}`)}),z(lt,{paged:t})]})}function Pa({block:e}){let t=e.bars.slice(0,Xt.chartBars),o=e.max??Math.max(1,...t.map(r=>r.value));return z(W,{title:e.title,source:e.source,testID:`buoy-block-chart-${e.id}`,children:z(s,{style:$.chart,children:t.map((r,n)=>ge(s,{style:$.barRow,children:[z(l,{style:$.barLabel,numberOfLines:1,children:r.label}),z(s,{style:$.barTrack,children:z(s,{style:[$.bar,{width:`${Math.max(2,Math.round(r.value/o*100))}%`,backgroundColor:vt(r.tone??"accent")}]})}),ge(l,{style:$.barValue,numberOfLines:1,children:[r.value,r.unit?` ${r.unit}`:""]})]},`${r.label}-${n}`))})})}function Wa({block:e}){return z(W,{title:e.title,testID:`buoy-block-steps-${e.id}`,children:e.steps.map((t,o)=>ge(s,{style:[$.step,o>0&&D.rowDivider],children:[z(s,{style:[$.stepMark,t.state==="done"&&$.stepDone,t.state==="failed"&&$.stepFailed],children:t.state==="done"?z(ca,{size:10,color:B.color.onAccent}):t.state==="failed"?z(ua,{size:10,color:B.color.text}):z(l,{style:$.stepNum,children:o+1})}),z(l,{style:[D.rowTitle,t.state==="done"&&$.stepTextDone],children:t.text})]},o))})}function Ea(e){try{let t=JSON.parse(e);return t!==null&&typeof t=="object"?t:void 0}catch{return}}function Va({block:e,value:t}){return z(W,{title:e.title,testID:`buoy-block-code-${e.id}`,children:z(s,{style:$.viewer,children:z(pa,{title:e.title??"Payload",data:t,initialExpanded:true,showTypeFilter:false,testIDPrefix:`buoy-block-code-${e.id}`})})})}function Na({block:e}){return z(W,{title:e.title,testID:`buoy-block-code-${e.id}`,children:z(l,{style:[D.mono,$.code],selectable:true,children:e.text})})}function ja({block:e}){let t=Ea(e.text);return t===void 0?z(Na,{block:e}):z(Va,{block:e,value:t})}function Ma({block:e}){let t=e.tone==="danger"?B.color.danger:e.tone==="warning"?B.color.warning:B.color.info,o=e.tone==="info"?da:sa;return ge(W,{tone:e.tone,testID:`buoy-block-notice-${e.id}`,children:[ge(s,{style:$.noticeRow,children:[z(o,{size:14,color:t}),z(l,{style:$.noticeText,children:e.text})]}),z(Ne,{actions:e.actions,blockId:e.id})]})}function qa({block:e}){let{copied:t,copy:o}=ho(()=>_r(e)??e.title);return ge(W,{title:e.title,source:e.source,testID:`buoy-block-finding-${e.id}`,tone:"warning",children:[e.evidence.map((r,n)=>ge(s,{style:[$.kvRow,n>0&&D.rowDivider],children:[z(l,{style:$.kvKey,numberOfLines:1,children:r.label}),z(l,{style:[$.kvValue,r.tone&&{color:vt(r.tone)}],selectable:true,children:r.value})]},`${r.label}-${n}`)),z(s,{style:$.findingFoot,children:z(x,{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:z(l,{style:[$.findingCopyText,t&&{color:B.color.accent}],children:t?"Copied":"Copy finding"})})}),z(Ne,{actions:e.actions,blockId:e.id})]})}var $=v.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:v.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:we.OS==="web"?Vr:"Menlo",fontSize:12,width:10},diffValue:{flex:1,fontFamily:we.OS==="web"?Vr:"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 Fa}from"react";import{night as je}from"@buoy-gg/shared-ui/web";import{CAPS as Kr}from"@buoy-gg/agent-core/web";import{jsx as Fe,jsxs as Wo}from"react/jsx-runtime";function _a({block:e}){let[t,o]=Fa(null),{width:r}=vr(),n=e.images.slice(0,Kr.gridMax),i=n.length>Kr.gridImages,a=Math.min(150,Math.floor((r-2*je.gutter-24-8)/2)),g=({img:d,i:h})=>Wo(x,{testID:`buoy-block-image-${h}`,accessibilityRole:"imagebutton",accessibilityLabel:d.alt,onPress:()=>o(t===h?null:h),style:[_e.tile,{width:a},i&&_e.tileCarousel],children:[Fe(wt,{testID:"buoy-internal-chat-image",source:{uri:d.url},style:[_e.image,{width:a,height:a}],resizeMode:"contain",accessibilityLabel:d.alt}),Fe(l,{style:_e.name,numberOfLines:1,children:d.alt}),d.caption?Fe(l,{style:_e.caption,numberOfLines:1,children:d.caption}):null]},`${d.url}-${h}`);return Wo(W,{title:e.title,source:e.source,testID:`buoy-block-imagegrid-${e.id}`,children:[t!==null&&n[t]?Wo(x,{onPress:()=>o(null),style:_e.hero,accessibilityRole:"button",accessibilityLabel:`Close ${n[t].alt}`,children:[Fe(wt,{testID:"buoy-internal-chat-image",source:{uri:n[t].url},style:_e.heroImage,resizeMode:"contain",accessibilityLabel:n[t].alt}),Fe(l,{style:_e.heroCaption,children:n[t].alt}),n[t].caption?Fe(l,{style:_e.caption,children:n[t].caption}):null]}):null,i?Fe(Ke,{horizontal:true,showsHorizontalScrollIndicator:false,snapToInterval:a+8,decelerationRate:"fast",contentContainerStyle:_e.carousel,children:n.map((d,h)=>Fe(g,{img:d,i:h},h))}):Fe(s,{style:_e.grid,children:n.map((d,h)=>Fe(g,{img:d,i:h},h))}),Fe(ra,{shown:n.length,total:e.total})]})}var _e=v.create({grid:{flexDirection:"row",flexWrap:"wrap",gap:8,padding:12},carousel:{gap:8,paddingHorizontal:12,paddingVertical:12},tile:{gap:4},tileCarousel:{},image:{borderRadius:je.radius.row,backgroundColor:je.color.fill},name:{color:je.color.text,fontSize:je.font.micro,fontWeight:"600"},caption:{color:je.color.textSecondary,fontSize:je.font.micro},hero:{alignItems:"center",padding:12,gap:6,borderBottomWidth:v.hairlineWidth,borderBottomColor:je.color.separator},heroImage:{width:"100%",height:240,borderRadius:je.radius.row,backgroundColor:je.color.fill},heroCaption:{color:je.color.text,fontSize:je.font.caption}});import{monoFont as Ua}from"@buoy-gg/shared-ui/web";import{useState as Ka}from"react";import{AlertTriangle as Ga,ChevronRight as Ja,Eye as Gr,night as R,NightSegmented as Ya}from"@buoy-gg/shared-ui/web";import{CAPS as go}from"@buoy-gg/agent-core/web";import{jsx as P,jsxs as ae}from"react/jsx-runtime";function Jr(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 Qr({status:e}){return P(s,{style:[D.pill,{backgroundColor:`${Jr(e)}22`}],children:P(l,{style:[D.pillText,{color:Jr(e)}],children:e??"\u2026"})})}function Qa({block:e}){let t=oe(),o=t.supports?.openTool!==false,r=it(e.requests,go.listItems),{visible:n}=r;return ae(W,{title:e.title??"Network requests",source:e.source,testID:`buoy-block-requests-${e.id}`,children:[n.map((i,a)=>ae(x,{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:[P(l,{style:J.method,children:i.method}),P(l,{style:D.rowTitle,numberOfLines:1,children:Yr(i.url)}),i.mocked?P(l,{style:J.mockedChip,children:"MOCKED"}):null,i.durationMs!==void 0?ae(l,{style:D.rowTrailing,children:[i.durationMs," ms"]}):null,P(Qr,{status:i.status}),o?P(Ja,{size:12,color:R.color.textTertiary}):null]},`${i.id}-${a}`)),P(lt,{paged:r})]})}var Xa=[{key:"response",label:"Response"},{key:"request",label:"Request"}];function Za({block:e}){let[t,o]=Ka("response"),r=t==="response"?e.responseBody:e.requestBody,n=r===void 0?"(none)":typeof r=="string"?r:JSON.stringify(r,null,2),i=oe();return ae(W,{source:e.source,testID:`buoy-block-request-${e.id}`,children:[ae(s,{style:[D.row,J.reqHead],children:[P(l,{style:J.method,children:e.request.method}),P(l,{style:D.rowTitle,numberOfLines:2,children:Yr(e.request.url)}),e.request.mocked?P(l,{style:J.mockedChip,children:"MOCKED"}):null,P(Qr,{status:e.request.status})]}),P(s,{style:J.tabs,children:P(Ya,{tabs:Xa,activeKey:t,onChange:a=>o(a),size:"sm"})}),P(l,{style:[D.mono,J.body],numberOfLines:14,selectable:true,children:n.length>1600?`${n.slice(0,1600)}
|
|
8
|
+
\u2026`:n}),P(Ne,{blockId:e.id,actions:[{label:"Open in Network",openTool:{toolId:"network",select:e.request.id}}]}),(i.supports?.openTool===false,null)]})}function es({block:e}){let t=oe().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(W,{title:r.name??"Network override",source:e.source,testID:`buoy-block-rule-${e.id}`,tone:r.enabled?"warning":void 0,children:[ae(s,{style:J.ruleBody,children:[ae(l,{style:J.ruleLine,children:[ae(l,{style:J.ruleKey,children:[r.methods?.length?r.methods.join("/"):"ANY"," "]}),P(l,{style:D.mono,children:r.urlPattern})]}),ae(l,{style:J.ruleLine,children:[P(l,{style:J.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"}`:""]}),P(s,{style:[D.pill,r.enabled?J.on:J.off],children:P(l,{style:[D.pillText,{color:r.enabled?R.color.onAccent:R.color.textSecondary}],children:o?"DELETED":r.enabled?"ON":"OFF"})})]}),o?null:P(Ne,{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 ts({block:e}){let t=oe(),o=it(e.elements,go.chips),{visible:r}=o;return ae(W,{title:e.title??"On screen right now",source:e.source,testID:`buoy-block-screen-${e.id}`,children:[r.map((n,i)=>ae(x,{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:[P(Gr,{size:12,color:R.color.textTertiary}),P(l,{style:D.rowTitle,numberOfLines:1,children:n.label??n.testID??n.name}),P(l,{style:D.rowTrailing,numberOfLines:1,children:n.name})]},`${n.nativeTag}-${i}`)),P(lt,{paged:o})]})}function os({block:e}){let t=oe(),o=it(e.routes,go.chips),r=o.visible;return ae(W,{title:e.current?`Routes \xB7 you're on ${e.current}`:"Routes",source:e.source,testID:`buoy-block-routes-${e.id}`,children:[P(s,{style:J.chips,children:r.map((n,i)=>P(x,{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:[J.chip,n.path===e.current&&J.chipCurrent],accessibilityRole:"button",children:P(l,{style:[J.chipText,n.dynamic&&J.chipDynamic],children:n.path})},`${n.path}-${i}`))}),P(lt,{paged:o})]})}var Xr={error:R.color.danger,warn:R.color.warning,warning:R.color.warning,info:R.color.info};function rs({block:e}){let t=it(e.entries,go.listItems),{visible:o}=t;return ae(W,{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,J.logRow],children:[P(s,{style:[D.pill,{backgroundColor:`${Xr[r.level]??R.color.textTertiary}22`}],children:P(l,{style:[D.pillText,{color:Xr[r.level]??R.color.textSecondary}],children:r.level.toUpperCase()})}),P(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}`)),P(lt,{paged:t})]})}function ns({block:e}){return ae(W,{tone:"danger",testID:`buoy-block-crash-${e.id}`,children:[ae(s,{style:J.crashHead,children:[P(Ga,{size:14,color:R.color.danger}),ae(l,{style:J.crashTitle,children:["The app crashed",e.route?` on ${e.route}`:""]})]}),P(l,{style:[D.mono,J.crashMsg],numberOfLines:4,selectable:true,children:e.message}),e.suspect?ae(l,{style:J.suspect,children:["Most likely cause: ",e.suspect.label]}):null,P(Ne,{blockId:e.id,actions:[...e.suspect?.action?[{...e.suspect.action,primary:true}]:[],...e.actions??[]].slice(0,2)})]})}function is({block:e}){let t=oe(),o=t.supports?.minimize!==false;return ae(x,{testID:`buoy-block-peek-${e.id}`,disabled:!o,onPress:()=>void t.runAction({label:"Look",minimize:true},e.id),style:({pressed:r})=>[J.peek,r&&{opacity:.7}],accessibilityRole:"button",accessibilityLabel:`${e.label}. Look at the app`,children:[P(l,{style:J.peekText,children:e.label}),o?ae(s,{style:J.peekLook,children:[P(Gr,{size:12,color:R.color.accent}),P(l,{style:J.peekLookText,children:"Look"})]}):null]})}var J=v.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:v.hairlineWidth,borderColor:R.color.border},chipCurrent:{backgroundColor:R.color.accentSoft,borderColor:R.color.accentBorderStrong},chipText:{color:R.color.text,fontSize:R.font.caption,fontFamily:we.OS==="web"?Ua:"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{monoFont as Eo}from"@buoy-gg/shared-ui/web";import{useEffect as ls,useRef as Zr,useState as Je}from"react";import{AlertTriangle as as,Check as en,ChevronDown as tn,ChevronRight as on,night as u,NightSegmented as ss,RefreshCw as cs,Search as ds,X as us}from"@buoy-gg/shared-ui/web";import{Fragment as fo,jsx as p,jsxs as S}from"react/jsx-runtime";var rn=e=>typeof e=="string"?e:e===void 0?"\u2014":JSON.stringify(e);function ps({block:e}){let t=oe();return p(s,{style:c.chips,testID:`buoy-block-suggestions-${e.id}`,children:e.chips.slice(0,4).map(o=>p(x,{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 hs({block:e}){let t=oe(),o=t.answered[e.id],r=!!o,[n,i]=Je([]),a=o?.kind==="multi"?o.optionIds:n,g=h=>i(f=>f.includes(h)?f.filter(m=>m!==h):[...f,h]),d=n.length>=(e.min??1)&&(!e.max||n.length<=e.max);return S(W,{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((h,f)=>{let m=a.includes(h.id);return S(x,{disabled:r,onPress:()=>g(h.id),style:[c.option,f>0&&D.rowDivider,r&&!m&&c.dim],accessibilityRole:"checkbox",accessibilityState:{checked:m},children:[p(s,{style:[c.checkbox,m&&c.checkboxOn],children:m?p(en,{size:11,color:u.color.onAccent}):null}),S(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:h.label}),h.detail?p(l,{style:c.optionDetail,children:h.detail}):null]})]},h.id)})}),r?null:p(s,{style:c.rowEnd,children:p(x,{testID:"buoy-block-multi-submit",disabled:!d,onPress:()=>t.answer({blockId:e.id,kind:"multi",optionIds:n,labels:e.options.filter(h=>n.includes(h.id)).map(h=>h.label)}),style:[c.button,c.buttonPrimary,!d&&c.disabled],children:p(l,{style:c.buttonTextPrimary,children:e.submitLabel??`Use ${n.length||""}`.trim()})})})]})}var gs=8;function fs({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Je(""),[i,a]=Je(false),g=o?.kind==="select"?o.label:null,d=e.options.filter(f=>!r||f.label.toLowerCase().includes(r.toLowerCase())).slice(0,8),h=e.searchable!==false&&e.options.length>=gs;return S(W,{testID:`buoy-block-select-${e.id}`,tone:o?void 0:"info",children:[p(l,{style:c.question,children:e.label}),g?p(l,{style:c.decided,children:g}):S(s,{style:c.selectBox,children:[S(x,{onPress:()=>a(f=>!f),style:c.selectField,accessibilityRole:"button",children:[p(l,{style:c.selectPlaceholder,children:i?"Choose\u2026":`${e.options.length} options`}),p(tn,{size:14,color:u.color.textSecondary})]}),i&&S(fo,{children:[h&&S(s,{style:c.search,children:[p(ds,{size:12,color:u.color.textSecondary}),p(rt,{style:c.searchInput,value:r,onChangeText:n,placeholder:"Search",placeholderTextColor:u.color.placeholder,autoCapitalize:"none",autoCorrect:false})]}),d.map((f,m)=>S(x,{onPress:()=>t.answer({blockId:e.id,kind:"select",optionId:f.id,label:f.label}),style:[c.option,m>0&&D.rowDivider],accessibilityRole:"button",children:[S(s,{style:c.flex,children:[p(l,{style:c.optionLabel,children:f.label}),f.detail?p(l,{style:c.optionDetail,children:f.detail}):null]}),p(on,{size:12,color:u.color.textTertiary})]},f.id)),e.options.length>d.length?S(l,{style:c.hint,children:[e.options.length-d.length," more \u2014 keep typing"]}):null]})]})]})}function nn({min:e,max:t,step:o=1,value:r,unit:n,onChange:i,disabled:a}){let g=Zr(0),d=t>e?(r-e)/(t-e)*100:0,h=V=>Math.min(t,Math.max(e,+(Math.round((V-e)/o)*o+e).toFixed(6))),f=V=>!a&&i(h(r+V*o)),m=V=>{if(a||g.current<=0)return;let ee=Math.min(1,Math.max(0,V.nativeEvent.locationX/g.current));i(h(e+ee*(t-e)))},L=V=>{g.current=V.nativeEvent.layout.width};return S(s,{style:c.sliderRow,children:[p(x,{disabled:a,onPress:()=>f(-1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Decrease",children:p(l,{style:c.stepText,children:"\u2212"})}),p(x,{style:c.trackHit,onLayout:L,onPress:m,disabled:a,accessibilityRole:"adjustable",accessibilityValue:{min:e,max:t,now:r},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:V=>f(V.nativeEvent.actionName==="increment"?1:-1),children:S(s,{style:c.track,pointerEvents:"none",children:[p(s,{style:[c.fill,{width:`${d}%`}]}),p(s,{style:[c.thumb,{left:`${d}%`}]})]})}),p(x,{disabled:a,onPress:()=>f(1),style:c.stepBtn,accessibilityRole:"button",accessibilityLabel:"Increase",children:p(l,{style:c.stepText,children:"+"})}),S(l,{style:c.sliderValue,children:[r,n?` ${n}`:""]})]})}function bs({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Je(e.value??e.min);return S(W,{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(nn,{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(x,{onPress:()=>t.answer({blockId:e.id,kind:"slider",value:r,unit:e.unit}),style:[c.button,c.buttonPrimary],children:S(l,{style:c.buttonTextPrimary,children:["Use ",r,e.unit?` ${e.unit}`:""]})})})]})}function ys({block:e}){let t=oe(),o=t.answered[e.id],[r,n]=Je(""),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 S(W,{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)"}):S(fo,{children:[p(s,{style:[c.chips,c.pad],children:i.map(a=>p(x,{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))}),S(s,{style:[c.inputRow,c.pad],children:[p(rt,{style:c.input,value:r,onChangeText:n,placeholder:e.mode==="time"?"14:30":"2026-09-15",placeholderTextColor:u.color.placeholder,keyboardType:"numbers-and-punctuation"}),p(x,{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 ln({f:e,value:t,onChange:o,disabled:r}){return e.type==="toggle"?S(s,{style:c.fieldRow,children:[p(l,{style:c.fieldLabel,children:e.label}),p(Dr,{value:!!t,onValueChange:o,disabled:r,trackColor:{true:u.color.accent,false:u.color.fillTertiary},thumbColor:u.color.knob})]}):e.type==="select"?S(s,{style:c.fieldCol,children:[p(l,{style:c.fieldLabel,children:e.label}),p(s,{style:c.chips,children:e.options.map(n=>p(x,{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"?S(s,{style:c.fieldCol,children:[p(l,{style:c.fieldLabel,children:e.label}),p(nn,{min:e.min,max:e.max,step:e.step,unit:e.unit,value:typeof t=="number"?t:e.min,onChange:o,disabled:r})]}):S(s,{style:c.fieldRow,children:[p(l,{style:c.fieldLabel,children:e.label}),p(rt,{style:c.fieldInput,value:t==null?"":String(t),onChangeText:o,editable:!r,placeholder:e.placeholder??"",placeholderTextColor:u.color.placeholder,keyboardType:e.type==="number"?"numeric":"ascii-capable",secureTextEntry:e.type==="secret",autoCapitalize:"none",autoCorrect:false})]})}function an(e){let[t,o]=Je(()=>Object.fromEntries(e.map(r=>[r.key,r.value])));return{values:t,set:(r,n)=>o(i=>({...i,[r]:n}))}}function ms({block:e}){let t=oe(),o=t.answered[e.id],{values:r,set:n}=an(e.fields);return S(W,{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(ln,{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(x,{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 xs({block:e}){let t=oe(),o=t.answered[e.id],{values:r,set:n}=an(e.fields),i=o?.kind==="proposal"?o.approved:null;return S(W,{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(ln,{f:a,value:r[a.key],onChange:g=>n(a.key,g),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"}):S(fo,{children:[p(x,{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(x,{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 ks({block:e}){let t=oe(),[o,r]=Je(null),n=t.actionState?.[`${e.id}:${e.verify?.label??"Verify"}`],i=e.verified||n==="done";return S(s,{style:c.claim,testID:`buoy-block-claim-${e.id}`,children:[S(l,{style:c.claimText,children:[e.text,e.sources.map((a,g)=>S(l,{onPress:()=>r(o===g?null:g),style:c.cite,children:[" [",g+1,"]"]},g)),i?p(l,{style:c.verified,children:" \u2713 verified"}):null]}),o!==null&&e.sources[o]?S(s,{style:c.citeBox,children:[S(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?S(x,{onPress:()=>void t.runAction(e.verify,e.id),style:c.verifyBtn,accessibilityRole:"button",children:[p(cs,{size:11,color:u.color.accent}),p(l,{style:c.verifyText,children:n==="running"?"Checking\u2026":e.verify.label})]}):null]})}function ws({block:e}){let[t,o]=Je(!!e.open);return S(W,{testID:`buoy-block-details-${e.id}`,children:[S(x,{onPress:()=>o(r=>!r),style:D.row,accessibilityRole:"button",accessibilityState:{expanded:t},children:[p(l,{style:D.rowTitle,children:e.summary}),t?p(tn,{size:12,color:u.color.textTertiary}):p(on,{size:12,color:u.color.textTertiary})]}),t?p(l,{style:c.detailsBody,selectable:true,children:e.body}):null]})}function vs({block:e,renderNested:t}){let[o,r]=Je(0),n=e.tabs.map((a,g)=>({key:String(g),label:a.label})),i=e.tabs[o];return S(s,{style:c.tabsWrap,testID:`buoy-block-tabs-${e.id}`,children:[p(ss,{tabs:n,activeKey:String(o),onChange:a=>r(Number(a)),size:"sm"}),i&&t?t(i.block):null]})}var Ss=10;function Ts({block:e}){let t=it(e.events,Ss);return S(W,{title:e.title??"What happened",source:e.source,testID:`buoy-block-timeline-${e.id}`,children:[t.visible.map((o,r)=>S(s,{style:c.tlRow,children:[p(l,{style:c.tlAt,children:o.at}),S(s,{style:c.tlLine,children:[p(s,{style:[c.tlDot,{backgroundColor:vt(o.tone??"muted")}]}),r<t.visible.length-1?p(s,{style:c.tlStem}):null]}),S(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(lt,{paged:t})]})}function Cs({block:e}){let t=e.series.slice(-60),o=Math.max(1,...t),r=Math.min(...t,0),n=44;return S(W,{title:e.title,source:e.source,testID:`buoy-block-sparkline-${e.id}`,children:[S(s,{style:c.sparkHead,children:[S(l,{style:c.sparkCurrent,children:[e.current??t[t.length-1],e.unit?S(l,{style:c.sparkUnit,children:[" ",e.unit]}):null]}),e.live?p(sn,{}):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?u.color.accent:u.color.accentBorderStrong}]},a))}),e.label?p(l,{style:c.hint,children:e.label}):null]})}function sn(){let e=Zr(new ue.Value(1)).current;return ls(()=>{let t=ue.loop(ue.sequence([ue.timing(e,{toValue:.3,duration:700,useNativeDriver:true}),ue.timing(e,{toValue:1,duration:700,useNativeDriver:true})]));return t.start(),()=>t.stop()},[e]),S(s,{style:c.live,children:[p(ue.View,{style:[c.liveDot,{opacity:e}]}),p(l,{style:c.liveText,children:"LIVE"})]})}function Is({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 S(W,{title:e.title,source:e.source,testID:`buoy-block-compare-${e.id}`,children:[S(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 S(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:u.color.danger}],numberOfLines:2,children:rn(o[n])}),p(l,{style:[c.cmpVal,a&&{color:u.color.accent}],numberOfLines:2,children:rn(r[n])})]},n)})]})}function cn({c:e,id:t}){return S(fo,{children:[e.image?p(wt,{testID:"buoy-internal-chat-image",source:{uri:e.image},style:c.cardImage,resizeMode:"contain",accessibilityLabel:e.title}):null,S(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=>S(s,{style:c.fact,children:[p(l,{style:c.factLabel,children:o.label}),p(l,{style:[c.factValue,o.tone&&{color:vt(o.tone)}],children:o.value})]},o.label))]}),p(Ne,{actions:e.actions,blockId:t})]})}function zs({block:e}){return p(W,{source:e.source,testID:`buoy-block-card-${e.id}`,children:p(cn,{c:e,id:e.id})})}function Ds({block:e}){return S(s,{testID:`buoy-block-cardcarousel-${e.id}`,children:[e.title?p(l,{style:c.carouselTitle,children:e.title}):null,p(Ke,{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(cn,{c:t,id:`${e.id}-${o}`})},`${t.title}-${o}`))})]})}function Rs({block:e}){let[t,o]=Je(false);return S(W,{title:e.route?`Screen \xB7 ${e.route}`:"Screen",source:e.source,testID:`buoy-block-screenshot-${e.id}`,children:[p(x,{onPress:()=>o(r=>!r),accessibilityRole:"imagebutton",accessibilityLabel:e.caption??"Screenshot",children:p(wt,{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 $s({block:e}){let t=e.steps.filter(o=>o.state==="done").length;return S(W,{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)=>S(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(en,{size:10,color:u.color.onAccent}):o.state==="failed"?p(us,{size:10,color:u.color.text}):p(l,{style:c.stepNum,children:r+1})}),S(l,{style:[D.rowTitle,o.state==="done"&&c.muted],children:[o.text,o.state==="running"?"\u2026":""]})]},r)),p(Ne,{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 As({block:e}){let t=oe();return S(x,{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}),S(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 Bs({block:e}){let t=e.status==="failed"?u.color.danger:e.status==="done"?u.color.accent:u.color.info;return S(W,{testID:`buoy-block-task-${e.id}`,children:[S(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(Ne,{actions:e.actions,blockId:e.id})]})}function Ls({block:e}){let t=e.tone==="danger"?u.color.danger:e.tone==="warning"?u.color.warning:u.color.info;return S(s,{style:[c.banner,{borderColor:t,backgroundColor:`${t}1A`}],testID:`buoy-block-banner-${e.id}`,children:[p(as,{size:13,color:t}),p(l,{style:[c.bannerText,{color:t}],numberOfLines:2,children:e.text}),e.actions?.[0]?p(Ne,{actions:e.actions.slice(0,1),blockId:e.id,align:"right"}):null]})}function Os({block:e}){return S(W,{testID:`buoy-block-file-${e.id}`,children:[S(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)})}),S(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(Ne,{actions:e.actions,blockId:e.id})]})}function Hs({block:e}){let t=oe(),o=t.answered[e.id];return S(W,{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(x,{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=v.create({flex:{flex:1},pad:{paddingHorizontal:12,paddingBottom:8},muted:{color:u.color.textSecondary},dim:{opacity:.45},disabled:{opacity:.5},pressed:{opacity:.7},question:{color:u.color.text,fontSize:u.font.row,fontWeight:"600",lineHeight:20,paddingHorizontal:12,paddingTop:12,paddingBottom:8},hint:{color:u.color.textTertiary,fontSize:u.font.micro,paddingHorizontal:12,paddingBottom:10},decided:{color:u.color.textSecondary,fontSize:u.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:u.radius.row},buttonPrimary:{backgroundColor:u.color.accent},buttonPlate:{backgroundColor:u.color.button},buttonTextPrimary:{color:u.color.onAccent,fontSize:u.font.caption,fontWeight:"600"},buttonTextPlate:{color:u.color.text,fontSize:u.font.caption,fontWeight:"600"},chips:{flexDirection:"row",flexWrap:"wrap",gap:6},chip:{paddingHorizontal:12,paddingVertical:7,borderRadius:u.radius.chip,backgroundColor:u.color.fill,borderWidth:v.hairlineWidth,borderColor:u.color.border},chipOn:{backgroundColor:u.color.accentSoft,borderColor:u.color.accentBorderStrong},chipText:{color:u.color.text,fontSize:u.font.caption},chipTextOn:{color:u.color.accent,fontWeight:"600"},optionsBox:{marginHorizontal:8,marginBottom:8,borderRadius:u.radius.row,backgroundColor:u.color.surfaceElevated,overflow:"hidden"},option:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:10},optionLabel:{color:u.color.text,fontSize:u.font.body,fontWeight:"500"},optionDetail:{color:u.color.textSecondary,fontSize:u.font.caption},checkbox:{width:20,height:20,borderRadius:6,borderWidth:1.5,borderColor:u.color.textTertiary,alignItems:"center",justifyContent:"center"},checkboxOn:{backgroundColor:u.color.accent,borderColor:u.color.accent},selectBox:{marginHorizontal:12,marginBottom:12,borderRadius:u.radius.row,backgroundColor:u.color.surfaceElevated,overflow:"hidden"},selectField:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:11},selectPlaceholder:{color:u.color.textSecondary,fontSize:u.font.body},search:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:6,borderTopWidth:v.hairlineWidth,borderTopColor:u.color.separator},searchInput:{flex:1,color:u.color.text,fontSize:u.font.caption,paddingVertical:4},sliderRow:{flexDirection:"row",alignItems:"center",gap:8},stepBtn:{width:28,height:28,borderRadius:14,backgroundColor:u.color.fill,alignItems:"center",justifyContent:"center"},stepText:{color:u.color.text,fontSize:16,fontWeight:"600"},trackHit:{flex:1,height:36,justifyContent:"center"},track:{height:6,borderRadius:3,backgroundColor:u.color.fillTertiary,justifyContent:"center"},fill:{height:6,borderRadius:3,backgroundColor:u.color.accent},thumb:{position:"absolute",width:20,height:20,borderRadius:10,backgroundColor:u.color.knob,marginLeft:-10,shadowColor:"#000",shadowOpacity:.35,shadowRadius:3,shadowOffset:{width:0,height:1}},sliderValue:{width:64,textAlign:"right",color:u.color.text,fontSize:u.font.caption,fontWeight:"600"},inputRow:{flexDirection:"row",alignItems:"center",gap:8,paddingBottom:12},input:{flex:1,height:38,paddingHorizontal:12,borderRadius:u.radius.row,backgroundColor:u.color.surfaceElevated,color:u.color.text,fontSize:u.font.body},fieldRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:10,paddingVertical:6},fieldCol:{paddingVertical:6,gap:6},fieldLabel:{color:u.color.textSecondary,fontSize:u.font.caption,width:110},fieldInput:{flex:1,height:34,paddingHorizontal:10,borderRadius:u.radius.segment,backgroundColor:u.color.surfaceElevated,color:u.color.text,fontSize:u.font.caption},confirmTitle:{color:u.color.text,fontSize:u.font.row,fontWeight:"600",paddingHorizontal:12,paddingTop:12},confirmChange:{color:u.color.text,fontSize:u.font.body,lineHeight:19,paddingHorizontal:12,paddingTop:6,paddingBottom:6},consequence:{color:u.color.warning,fontSize:u.font.caption,paddingHorizontal:12},claim:{gap:6,paddingHorizontal:2},claimText:{color:u.color.text,fontSize:u.font.row,lineHeight:22},cite:{color:u.color.accent,fontSize:u.font.caption,fontWeight:"700"},verified:{color:u.color.accent,fontSize:u.font.caption,fontWeight:"600"},citeBox:{padding:10,borderRadius:u.radius.row,backgroundColor:u.color.surface,borderWidth:v.hairlineWidth,borderColor:u.color.border,gap:2},citeLabel:{color:u.color.text,fontSize:u.font.caption,fontWeight:"600"},citeDetail:{color:u.color.textSecondary,fontSize:u.font.caption,fontFamily:we.OS==="web"?Eo:"Menlo"},verifyBtn:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:u.radius.chip,backgroundColor:u.color.accentSoft},verifyText:{color:u.color.accent,fontSize:u.font.micro,fontWeight:"700"},detailsBody:{color:u.color.textSecondary,fontSize:u.font.caption,lineHeight:18,paddingHorizontal:12,paddingBottom:12},tabsWrap:{gap:8},tabBar:{flexDirection:"row",gap:6},tab:{paddingHorizontal:12,paddingVertical:6,borderRadius:u.radius.badge,backgroundColor:u.color.fill},tabOn:{backgroundColor:u.color.accentSoft},tabText:{color:u.color.textSecondary,fontSize:u.font.caption,fontWeight:"600"},tabTextOn:{color:u.color.accent},tlRow:{flexDirection:"row",gap:10,paddingHorizontal:12,paddingVertical:4,alignItems:"flex-start"},tlAt:{width:46,color:u.color.textTertiary,fontSize:u.font.micro,fontFamily:we.OS==="web"?Eo:"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:u.color.separator,marginTop:2},tlSource:{color:u.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6},sparkHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingTop:8},sparkCurrent:{color:u.color.text,fontSize:22,fontWeight:"700"},sparkUnit:{color:u.color.textSecondary,fontSize:u.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:u.radius.badge,backgroundColor:u.color.dangerSoft},liveDot:{width:6,height:6,borderRadius:3,backgroundColor:u.color.danger},liveText:{color:u.color.danger,fontSize:9,fontWeight:"800",letterSpacing:.8},cmpHead:{flexDirection:"row",paddingHorizontal:12,paddingVertical:6,backgroundColor:u.color.fill,gap:8},cmpCol:{flex:1,color:u.color.textTertiary,fontSize:u.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},cmpRow:{flexDirection:"row",paddingHorizontal:12,paddingVertical:8,gap:8,alignItems:"flex-start"},cmpDiff:{backgroundColor:u.color.fill},cmpKey:{width:90,color:u.color.textSecondary,fontSize:u.font.caption},cmpVal:{flex:1,color:u.color.text,fontSize:u.font.caption,fontFamily:we.OS==="web"?Eo:"Menlo"},cardImage:{width:"100%",height:140,backgroundColor:u.color.fill},cardText:{paddingHorizontal:12,paddingTop:10,paddingBottom:4,gap:4},cardTitle:{color:u.color.text,fontSize:u.font.row,fontWeight:"600"},fact:{flexDirection:"row",justifyContent:"space-between",gap:8},factLabel:{color:u.color.textSecondary,fontSize:u.font.caption},factValue:{color:u.color.text,fontSize:u.font.caption,fontWeight:"500"},carouselTitle:{color:u.color.text,fontSize:u.font.caption,fontWeight:"600",paddingBottom:8},carousel:{gap:8,paddingRight:8},carouselCard:{width:224,borderRadius:u.radius.card,borderWidth:v.hairlineWidth,borderColor:u.color.border,backgroundColor:u.color.surface,overflow:"hidden"},shot:{width:"100%",height:220,backgroundColor:u.color.fill},shotBig:{height:520},progress:{height:4,backgroundColor:u.color.fill,marginHorizontal:12,marginTop:6,marginBottom:8,borderRadius:2,overflow:"hidden"},progressFill:{height:4,backgroundColor:u.color.accent},step:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:9},stepMark:{width:20,height:20,borderRadius:10,backgroundColor:u.color.fillTertiary,alignItems:"center",justifyContent:"center"},stepDone:{backgroundColor:u.color.accent},stepFailed:{backgroundColor:u.color.danger},stepRunning:{backgroundColor:u.color.info},stepNum:{color:u.color.text,fontSize:u.font.micro,fontWeight:"700"},checkpoint:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:7,borderRadius:u.radius.chip,backgroundColor:u.color.fill},cpFlag:{width:8,height:8,borderRadius:2,backgroundColor:u.color.info},cpText:{color:u.color.textSecondary,fontSize:u.font.caption},cpRestore:{color:u.color.accent,fontSize:u.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:u.radius.row,borderWidth:v.hairlineWidth},bannerText:{flex:1,fontSize:u.font.caption,fontWeight:"600"},fileIcon:{width:40,height:40,borderRadius:8,backgroundColor:u.color.fill,alignItems:"center",justifyContent:"center"},fileExt:{color:u.color.textSecondary,fontSize:10,fontWeight:"800"}});import{jsx as A}from"react/jsx-runtime";var Ps=class extends Bl{constructor(){super(...arguments);this.state={failed:false}}static getDerivedStateFromError(){return{failed:true}}render(){return this.state.failed?A(l,{style:Ws.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}},Ws=v.create({fallback:{color:$r.color.textTertiary,fontSize:$r.font.micro,fontStyle:"italic",paddingVertical:6}}),Es=e=>A(bo,{block:e});function bo({block:e}){return A(Ps,{children:A(Vs,{block:e})})}function Vs({block:e}){switch(e.kind){case"choice":return A(ia,{block:e});case"confirm":return A(la,{block:e});case"input":return A(aa,{block:e});case"table":return A($a,{block:e});case"keyValue":return A(Aa,{block:e});case"list":return A(La,{block:e});case"imageGrid":return A(_a,{block:e});case"diff":return A(Ha,{block:e});case"chart":return A(Pa,{block:e});case"steps":return A(Wa,{block:e});case"code":return A(ja,{block:e});case"actions":return A(Ne,{actions:e.actions,blockId:e.id});case"notice":return A(Ma,{block:e});case"finding":return A(qa,{block:e});case"requestList":return A(Qa,{block:e});case"requestCard":return A(Za,{block:e});case"ruleCard":return A(es,{block:e});case"screenElements":return A(ts,{block:e});case"routeChips":return A(os,{block:e});case"logList":return A(rs,{block:e});case"crash":return A(ns,{block:e});case"peek":return A(is,{block:e});case"suggestions":return A(ps,{block:e});case"multiSelect":return A(hs,{block:e});case"select":return A(fs,{block:e});case"slider":return A(bs,{block:e});case"dateTime":return A(ys,{block:e});case"form":return A(ms,{block:e});case"proposal":return A(xs,{block:e});case"claim":return A(ks,{block:e});case"details":return A(ws,{block:e});case"tabs":return A(vs,{block:e,renderNested:Es});case"timeline":return A(Ts,{block:e});case"sparkline":return A(Cs,{block:e});case"compare":return A(Is,{block:e});case"card":return A(zs,{block:e});case"cardCarousel":return A(Ds,{block:e});case"screenshot":return A(Rs,{block:e});case"plan":return A($s,{block:e});case"checkpoint":return A(As,{block:e});case"task":return A(Bs,{block:e});case"banner":return A(Ls,{block:e});case"file":return A(Os,{block:e});case"upload":return A(Hs,{block:e});default:return null}}import{monoFont as Ns}from"@buoy-gg/shared-ui/web";import{useEffect as js,useState as Tt}from"react";import{ChevronDown as Ms,ChevronRight as qs,Copy as Fs,night as C,RefreshCw as _s}from"@buoy-gg/shared-ui/web";import{jsx as N,jsxs as ze}from"react/jsx-runtime";function Zt({label:e,onPress:t,children:o}){return N(x,{onPress:t,accessibilityRole:"button",accessibilityLabel:e,style:({pressed:r})=>[H.iconBtn,r&&H.pressed],children:o})}function Us({id:e="chrome-actions"}){let t=oe(),[o,r]=Tt(null),n=i=>void t.runAction({label:i,send:`__chrome__:${i}`},e);return ze(s,{style:H.actions,testID:"chrome-message-actions",children:[N(Zt,{label:"Copy",onPress:()=>n("copy"),children:N(Fs,{size:13,color:C.color.textSecondary})}),N(Zt,{label:"Retry",onPress:()=>n("retry"),children:N(_s,{size:13,color:C.color.textSecondary})}),N(Zt,{label:"Good answer",onPress:()=>{r("up"),n("thumbs up")},children:N(l,{style:[H.glyph,o==="up"&&H.glyphOn],children:"\u{1F44D}"})}),N(Zt,{label:"Bad answer",onPress:()=>{r("down"),n("thumbs down")},children:N(l,{style:[H.glyph,o==="down"&&H.glyphOn],children:"\u{1F44E}"})}),N(Zt,{label:"Export",onPress:()=>n("export transcript"),children:N(l,{style:H.textBtn,children:"Export"})})]})}function Ks({text:e,live:t}){let[o,r]=Tt(false);return ze(s,{style:H.reasoning,testID:"chrome-reasoning",children:[ze(x,{onPress:()=>r(n=>!n),style:H.reasoningHead,accessibilityRole:"button",accessibilityState:{expanded:o},children:[t?N(Yt,{size:"small",color:C.color.textTertiary}):null,N(l,{style:H.reasoningTitle,children:t?"Working it out\u2026":"How I got here"}),o?N(Ms,{size:12,color:C.color.textTertiary}):N(qs,{size:12,color:C.color.textTertiary})]}),o?N(l,{style:H.reasoningBody,children:e}):null]})}function Gs({label:e}){let[t,o]=Tt(0);return js(()=>{let r=setInterval(()=>o(n=>n+250),250);return()=>clearInterval(r)},[]),ze(s,{style:H.elapsed,testID:"chrome-elapsed",children:[N(Yt,{size:"small",color:C.color.textSecondary}),N(l,{style:H.elapsedLabel,children:e}),ze(l,{style:H.elapsedMs,children:[(t/1e3).toFixed(1),"s"]})]})}function Js(){let[e,t]=Tt(""),[o,r]=Tt(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,'"']}),N(x,{onPress:()=>r(null),children:N(l,{style:H.queuedCancel,children:"Cancel"})})]}):null,ze(s,{style:H.composer,children:[N(rt,{style:H.composerInput,value:e,onChangeText:t,placeholder:"Agent is busy \u2014 type and it sends next",placeholderTextColor:C.color.placeholder}),N(x,{disabled:!e.trim(),onPress:()=>{r(e.trim()),t("")},style:[H.queueBtn,!e.trim()&&{opacity:.5}],children:N(l,{style:H.queueBtnText,children:"Queue"})})]})]})}function Ys({at:e}){return ze(s,{style:H.divider,testID:"chrome-divider",children:[N(s,{style:H.dividerLine}),ze(l,{style:H.dividerText,children:["App reloaded \xB7 ",e]}),N(s,{style:H.dividerLine})]})}function Qs({at:e}){return N(l,{style:H.timestamp,children:e})}function Xs({text:e}){let t=oe(),[o,r]=Tt(false),[n,i]=Tt(e);return N(s,{style:H.userWrap,testID:"chrome-edit-bubble",children:o?ze(s,{style:H.editBox,children:[N(rt,{style:H.editInput,value:n,onChangeText:i,multiline:true}),ze(s,{style:H.editActions,children:[N(x,{onPress:()=>{r(false),t.runAction({label:"re-run edited",send:`__chrome__:re-run "${n}"`},"chrome-edit")},style:H.editPrimary,children:N(l,{style:H.editPrimaryText,children:"Re-run from here"})}),N(x,{onPress:()=>{r(false),t.runAction({label:"branch",send:`__chrome__:branch "${n}"`},"chrome-edit")},style:H.editPlate,children:N(l,{style:H.editPlateText,children:"Branch"})}),N(x,{onPress:()=>r(false),style:H.editPlate,children:N(l,{style:H.editPlateText,children:"Cancel"})})]})]}):ze(x,{onLongPress:()=>r(true),onPress:()=>r(true),style:H.bubble,accessibilityRole:"button",accessibilityLabel:"Edit message",children:[N(l,{style:H.bubbleText,children:n}),N(l,{style:H.bubbleHint,children:"tap to edit \xB7 2 branches"})]})})}var H=v.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:v.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:we.OS==="web"?Ns:"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:v.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:v.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:v.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:v.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 dn}from"react";import{AlertTriangle as Zs,ChevronDown as ec,night as E}from"@buoy-gg/shared-ui/web";import{jsx as xe,jsxs as eo}from"react/jsx-runtime";function un({pending:e,onAnswer:t}){let[o,r]=dn("");return eo(s,{style:Y.card,testID:"buoy-ask-buoy-approval",children:[eo(s,{style:Y.titleRow,children:[xe(Zs,{size:14,color:E.color.warning}),xe(l,{style:Y.title,children:"Allow this change?"})]}),e.restored?xe(l,{style:Y.restored,testID:"buoy-ask-buoy-approval-restored",children:"Asked before the app restarted \u2014 check it still applies."}):null,xe(l,{style:Y.label,children:e.label}),xe(l,{style:Y.reason,children:e.reason}),e.description?xe(tc,{text:e.description}):null,xe(rt,{testID:"buoy-ask-buoy-approval-note",value:o,onChangeText:r,placeholder:"Add a note for the agent (optional)",placeholderTextColor:E.color.textTertiary,style:Y.note,returnKeyType:"done",blurOnSubmit:true}),eo(s,{style:Y.actions,children:[xe(x,{testID:"buoy-ask-buoy-approve",accessibilityRole:"button",onPress:()=>t({approved:true,reason:o}),style:({pressed:n})=>[Y.button,Y.approve,n&&Y.pressed],children:xe(l,{style:Y.approveText,children:"Allow"})}),e.restored?null:xe(x,{testID:"buoy-ask-buoy-approve-trust",accessibilityRole:"button",onPress:()=>t({approved:true,reason:o,trust:true}),style:({pressed:n})=>[Y.button,Y.trust,n&&Y.pressed],children:xe(l,{style:Y.trustText,children:"Allow for this chat"})}),xe(x,{testID:"buoy-ask-buoy-reject",accessibilityRole:"button",onPress:()=>t({approved:false,reason:o}),style:({pressed:n})=>[Y.button,Y.reject,n&&Y.pressed],children:xe(l,{style:Y.rejectText,children:"Not now"})})]})]})}function tc({text:e}){let[t,o]=dn(false);return eo(s,{children:[eo(x,{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(s,{style:t?Y.chevronOpen:Y.chevronClosed,children:xe(ec,{size:12,color:E.color.textTertiary})}),xe(l,{style:Y.disclosureText,children:t?"Hide details":"Details"})]}),t?xe(Ke,{style:Y.detail,contentContainerStyle:Y.detailContent,nestedScrollEnabled:true,children:xe(l,{style:Y.description,children:e})}):null]})}var Y=v.create({card:{marginHorizontal:E.gutter,marginBottom:10,padding:E.cardPad,borderRadius:E.radius.card,borderWidth:v.hairlineWidth,borderColor:E.color.accentBorderStrong,backgroundColor:E.color.surface,gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6},title:{color:E.color.text,fontSize:E.font.caption,fontWeight:"600"},label:{color:E.color.text,fontSize:E.font.row,fontWeight:"600",lineHeight:20},description:{color:E.color.textSecondary,fontSize:E.font.caption,lineHeight:18},reason:{color:E.color.warning,fontSize:E.font.caption,lineHeight:18},restored:{color:E.color.info,backgroundColor:E.color.infoSoft,fontSize:E.font.micro,lineHeight:16,paddingHorizontal:8,paddingVertical:5,borderRadius:8},disclosure:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:4},disclosureText:{color:E.color.textTertiary,fontSize:E.font.micro,fontWeight:"600"},chevronOpen:{transform:[{rotate:"0deg"}]},chevronClosed:{transform:[{rotate:"-90deg"}]},detail:{maxHeight:150,marginTop:2},detailContent:{paddingBottom:2},note:{color:E.color.text,fontSize:E.font.caption,paddingHorizontal:10,paddingVertical:7,borderRadius:E.radius.row,borderWidth:v.hairlineWidth,borderColor:E.color.border,backgroundColor:E.color.button,marginTop:2},actions:{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:6},button:{paddingHorizontal:16,paddingVertical:9,borderRadius:E.radius.row},approve:{backgroundColor:E.color.accent},approveText:{color:E.color.onAccent,fontWeight:"600",fontSize:E.font.caption},trust:{backgroundColor:E.color.button,borderWidth:v.hairlineWidth,borderColor:E.color.accentBorderStrong},trustText:{color:E.color.accent,fontWeight:"600",fontSize:E.font.caption},reject:{backgroundColor:E.color.button},rejectText:{color:E.color.text,fontSize:E.font.caption},pressed:{opacity:.7}});import{useSyncExternalStore as oc}from"react";import{ChevronDown as rc,ChevronRight as nc,night as re}from"@buoy-gg/shared-ui/web";import{isReversible as pn}from"@buoy-gg/agent-core/web";import{jsx as at,jsxs as bt}from"react/jsx-runtime";var hn=[];function gn(e){return oc(t=>e?.subscribe(t)??(()=>{}),()=>e?.list()??hn,()=>e?.list()??hn)}function fn({ledger:e,onUndoAll:t,expanded:o,onToggle:r}){let n=gn(e).filter(m=>!m.undoneAt),i=n.filter(m=>m.effect.kind!=="transient");if(i.length===0)return null;let a=i.filter(m=>pn(m.effect)),g=i.length-a.length,d=n.length-i.length,h=o?rc:nc,f=[a.length>0?`${a.length} undoable`:null,g>0?`${g} permanent`:null].filter(Boolean).join(" \xB7 ");return bt(s,{style:fe.wrap,children:[bt(x,{testID:"buoy-ask-buoy-changes-bar",accessibilityRole:"button",accessibilityState:{expanded:o},onPress:r,style:fe.bar,children:[at(s,{style:fe.dot}),at(l,{style:fe.summary,numberOfLines:1,children:"Changed this app"}),at(l,{style:fe.counts,numberOfLines:1,children:f}),at(h,{size:12,color:re.color.textSecondary})]}),o&&bt(s,{style:fe.panel,children:[bt(Ke,{style:fe.panelScroll,testID:"buoy-ask-buoy-changes-scroll",keyboardShouldPersistTaps:"handled",children:[i.map(m=>{let L=!pn(m.effect);return bt(s,{style:fe.row,children:[at(l,{style:fe.rowLabel,children:m.effect.label}),at(l,{style:[fe.rowTag,L&&fe.rowTagMuted],children:L?"Permanent":"Undoable"})]},m.id)}),d>0&&at(s,{style:fe.row,children:bt(l,{style:[fe.rowLabel,fe.rowLabelMuted],children:["Also did ",d," one-shot action",d===1?"":"s"," (navigation, taps) \u2014 nothing to undo."]})})]}),bt(s,{style:fe.footer,children:[a.length>0&&at(x,{testID:"buoy-ask-buoy-undo-all",accessibilityRole:"button",onPress:t,style:({pressed:m})=>[fe.undo,m&&fe.pressed],children:bt(l,{style:fe.undoText,children:["Undo ",a.length," change",a.length===1?"":"s"]})}),g>0&&at(l,{style:fe.footnote,children:"Permanent changes can't be undone from here."})]})]})]})}var fe=v.create({wrap:{borderBottomWidth:v.hairlineWidth,borderBottomColor:re.color.border,backgroundColor:re.color.warningSoft},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:re.gutter,paddingVertical:10},dot:{width:7,height:7,borderRadius:4,backgroundColor:re.color.warning},summary:{color:re.color.text,fontSize:re.font.caption,fontWeight:"600"},counts:{flex:1,color:re.color.textSecondary,fontSize:re.font.caption},panel:{paddingHorizontal:re.gutter,paddingBottom:12,gap:10},panelScroll:{maxHeight:180},row:{flexDirection:"row",alignItems:"flex-start",gap:10,paddingVertical:8,borderTopWidth:v.hairlineWidth,borderTopColor:re.color.separator},rowLabel:{flex:1,color:re.color.text,fontSize:re.font.caption,lineHeight:18},rowTag:{color:re.color.accent,fontSize:re.font.micro,fontWeight:"600",letterSpacing:.6,textTransform:"uppercase",paddingTop:2},rowTagMuted:{color:re.color.textTertiary},rowLabelMuted:{color:re.color.textTertiary},footer:{flexDirection:"row",alignItems:"center",gap:12,flexWrap:"wrap"},undo:{paddingHorizontal:14,paddingVertical:8,borderRadius:re.radius.row,backgroundColor:re.color.button},undoText:{color:re.color.accent,fontSize:re.font.caption,fontWeight:"600"},footnote:{flex:1,color:re.color.textTertiary,fontSize:re.font.micro},pressed:{opacity:.7}});function ic(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 lc,useEffect as bn,useRef as ac,useState as sc}from"react";import{night as Te}from"@buoy-gg/shared-ui/web";import{jsx as yt,jsxs as cc}from"react/jsx-runtime";var yn=40,dc=120,mn=we.OS==="ios"?10:6,uc=16;function xn({onSend:e,onStop:t,busy:o,draft:r,onDraftTaken:n,disabled:i,placeholder:a,focusKey:g,canFocus:d=true}){let[h,f]=sc(""),m=ac(null);bn(()=>{!g||!d||i||m.current?.focus()},[g,d,i]),bn(()=>{r&&(f(ce=>ce?`${ce} ${r}`:r),n?.())},[r,n]);let L=lc(()=>{let ce=h.trim();ce&&(f(""),e(ce))},[h,e]),V=h.trim().length>0&&!o&&!i,ee=h.trim().length>0&&o&&!i;return cc(s,{style:ke.wrap,children:[yt(s,{style:[ke.field,i&&ke.fieldDisabled],children:yt(rt,{ref:m,testID:"buoy-ask-buoy-input",accessibilityLabel:"Message for Ask Buoy",style:[ke.input,h.length===0&&ke.inputEmpty],value:h,onChangeText:f,placeholder:a??(i?"Ask Buoy isn't set up yet":"Ask, or tell it what to change\u2026"),placeholderTextColor:Te.color.placeholder,multiline:true,editable:!i,keyboardType:"ascii-capable",autoCorrect:true,autoCapitalize:"sentences",blurOnSubmit:false,onSubmitEditing:L,returnKeyType:"send",maxLength:4e3})}),ee&&yt(x,{testID:"buoy-ask-buoy-queue",accessibilityRole:"button",accessibilityLabel:"Queue message",onPress:L,style:({pressed:ce})=>[ke.button,ke.queue,ce&&ke.pressed],children:yt(l,{style:[ke.sendGlyph,{color:Te.color.accent}],children:"\u2191"})}),o?yt(x,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:t,style:({pressed:ce})=>[ke.button,ke.stop,ce&&ke.pressed],children:yt(s,{style:ke.stopGlyph})}):yt(x,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!V,onPress:L,style:({pressed:ce})=>[ke.button,V?ke.sendOn:ke.sendOff,ce&&V&&ke.pressed],children:yt(l,{style:[ke.sendGlyph,{color:V?Te.color.onAccent:Te.color.textTertiary}],children:"\u2191"})})]})}var ke=v.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:Te.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:v.hairlineWidth,borderTopColor:Te.color.border,backgroundColor:Te.color.bg},field:{flex:1,minHeight:yn,justifyContent:"center",borderRadius:20,borderWidth:v.hairlineWidth,borderColor:Te.color.border,backgroundColor:Te.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:dc,paddingHorizontal:uc,paddingTop:mn,paddingBottom:mn,color:Te.color.text,fontSize:Te.font.row},inputEmpty:{height:yn},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:Te.color.accent},sendOff:{backgroundColor:Te.color.fill},stop:{backgroundColor:Te.color.fillTertiary},queue:{backgroundColor:"transparent",borderWidth:v.hairlineWidth,borderColor:Te.color.accentBorderStrong},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:Te.color.text},pressed:{opacity:.7}});import{useEffect as pc,useRef as kn}from"react";import{jsx as hc}from"react/jsx-runtime";function gc({children:e}){let t=kn(null),o=kn(new ue.Value(0)).current;return pc(()=>{if(we.OS!=="ios")return;let r=(g,d)=>{ue.timing(o,{toValue:g,duration:d.duration||250,easing:At.bezier(.17,.59,.4,.77),useNativeDriver:false}).start()},n=g=>{let d=t.current;d&&d.measureInWindow((h,f,m,L)=>{let V=f+L-g.endCoordinates.screenY;r(Math.max(0,V),g)})},i=g=>r(0,g),a=[Ro.addListener("keyboardWillChangeFrame",n),Ro.addListener("keyboardWillHide",i)];return()=>a.forEach(g=>g.remove())},[o]),hc(ue.View,{ref:t,style:[fc.flex,{paddingBottom:o}],children:e})}var fc=v.create({flex:{flex:1}});import{useEffect as wn,useState as vn}from"react";import{Check as bc,Copy as yc,FileText as mc,ModalHeader as yo,night as Ye,Otto as xc,Plus as kc,SettingsSolid as wc,realNow as Vo}from"@buoy-gg/shared-ui/web";import{toolTitle as vc}from"@buoy-gg/agent-core/web";var Sc=e=>e.effect==="read"&&e.status==="ok";function Tc(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=>vc(i.toolId)))];t.push({kind:"reads",id:o.map(i=>i.id).join("+"),calls:o,label:`Looked at ${Cc(n)}`,count:o.length})}o=[]}};for(let n of e){if(Sc(n)){o.push(n);continue}r(),t.push({kind:"call",call:n})}return r(),t}function Cc(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 Ic(e){let t=[];e.startedAt!==void 0&&e.endedAt!==void 0&&e.endedAt>=e.startedAt&&t.push(Sn(e.endedAt-e.startedAt));let o=e.toolCalls.length;if(o>0){t.push(`${o} action${o===1?"":"s"}`);let r=d=>e.toolCalls.filter(h=>h.status===d).length,n=r("failed"),i=r("refused"),a=r("declined"),g=r("stopped");n&&t.push(`${n} failed`),i&&t.push(`${i} refused`),a&&t.push(`${a} declined`),g&&t.push(`${g} not run`)}return t.length?t.join(" \xB7 "):null}function Sn(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 Tn}from"react/jsx-runtime";var zc=200,Dc=()=>"";function Cn({configured:e,busy:t,failed:o=false,activeLabel:r,awaitingApproval:n=false,startedAt:i=null,stopping:a=false,readOnly:g=false,toolCount:d,hasMessages:h,onBack:f,onReset:m,getTranscript:L,onOpenSettings:V,onTicket:ee}){let{copied:ce,copy:pe}=ho(L??Dc),[Pe,qe]=vn(false);wn(()=>{t?r&&qe(true):qe(false)},[t,r]);let We=t&&!n&&i!==null,[Xe,Ze]=vn(()=>Vo());wn(()=>{if(!We)return;Ze(Vo());let Nt=setInterval(()=>Ze(Vo()),1e3);return()=>clearInterval(Nt)},[We]);let et=We&&i!==null?Sn(Xe-i):null,Vt=e?o?"error":t?r||Pe?"robot":"thinking":"idle":"confused",tt=a?"Stopping":r??"Thinking",Ee=e?n?"Waiting for you":t?et?`${tt} \xB7 ${et}`:`${tt}\u2026`:g?`Read only${d>0?` \xB7 ${d} tool${d===1?"":"s"}`:""}`:d>0?`Ready \xB7 ${d} tool${d===1?"":"s"} available`:"Ready":"Not set up in this app";return Tn(yo,{children:[f?Be(yo.Navigation,{onBack:f}):null,Be(s,{style:mt.otto,testID:"buoy-ask-buoy-otto",children:Be(xc,{state:Vt,pixelSize:2,tickMs:zc,water:false})}),Be(yo.Content,{title:"Ask Buoy",subtitle:Ee,testID:"buoy-ask-buoy-title"}),Tn(yo.Actions,{children:[ee?Be(Jt,{testID:"buoy-ask-buoy-ticket",accessibilityRole:"button",accessibilityLabel:"Summarize for a ticket",disabled:!h||t,onPress:ee,style:[mt.actionBtn,(!h||t)&&mt.actionBtnDisabled],children:Be(mc,{size:14,color:h&&!t?Ye.color.textSecondary:Ye.color.textTertiary})}):null,L?Be(Jt,{testID:"buoy-ask-buoy-copy-chat",accessibilityRole:"button",accessibilityLabel:ce?"Conversation copied":"Copy conversation",disabled:!h,onPress:pe,style:[mt.actionBtn,!h&&mt.actionBtnDisabled],children:ce?Be(bc,{size:14,color:Ye.color.accent}):Be(yc,{size:14,color:h?Ye.color.textSecondary:Ye.color.textTertiary})}):null,V?Be(Jt,{testID:"buoy-ask-buoy-settings",accessibilityRole:"button",accessibilityLabel:"Settings",onPress:V,style:mt.actionBtn,children:Be(wc,{size:14,color:Ye.color.textSecondary})}):null,Be(Jt,{testID:"buoy-ask-buoy-reset",accessibilityRole:"button",accessibilityLabel:"New conversation",disabled:!h,onPress:m,style:[mt.actionBtn,!h&&mt.actionBtnDisabled],children:Be(kc,{size:14,color:h?Ye.color.textSecondary:Ye.color.textTertiary})})]})]})}var mt=v.create({otto:{marginRight:8,justifyContent:"center"},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:Ye.color.buttonSurface,borderWidth:1,borderColor:Ye.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{useCallback as Rc,useEffect as $c,useState as Ac}from"react";import{AlertTriangle as Bc,night as se,ToggleRow as No}from"@buoy-gg/shared-ui/web";import{useSyncExternalStore as Lc}from"react";import{definePersistedSetting as Oc,devToolsStorageKeys as Hc}from"@buoy-gg/shared-ui/web";var jo={showThinking:false,bypassApprovals:false,readOnly:false,hostedNoticeSeen:false,claudeNoticeSeen:false},Mo=Oc(`${Hc.base}_ask_buoy_settings`,jo,{sanitize:e=>({showThinking:e.showThinking===true,bypassApprovals:e.bypassApprovals===true,readOnly:e.readOnly===true,hostedNoticeSeen:e.hostedNoticeSeen===true,claudeNoticeSeen:e.claudeNoticeSeen===true})}),Ct=jo,qo=false,Fo=new Set;function In(){for(let e of Fo)try{e()}catch{}}var st={get:()=>Ct,subscribe(e){return Fo.add(e),qo||(qo=true,Mo.load().then(t=>{Ct=t,In()})),()=>Fo.delete(e)},set(e,t){Ct[e]!==t&&(Ct={...Ct,[e]:t},In(),Mo.save(Ct))},reset(){Ct=jo,qo=false,Mo.clear()}};function Pt(){return Lc(st.subscribe,st.get,st.get)}import{useSyncExternalStore as Pc}from"react";import{definePersistedSetting as Wc,devToolsStorageKeys as Ec,subscribeStorageWrites as Vc}from"@buoy-gg/shared-ui/web";var _o="claude",zn=Ec.askBuoy.model(),Dn=e=>e==="luna"?"luna":"claude",Rn=Wc(zn,_o,{sanitize:Dn}),mo=_o,$n=false,Uo=new Set;function Nc(){for(let e of Uo)try{e()}catch{}}function Ko(e){e!==mo&&(mo=e,Nc())}var xo={get:()=>mo,subscribe(e){return Uo.add(e),$n||($n=true,Rn.load().then(Ko),Vc((t,o)=>{if(t===zn)try{Ko(Dn(o===null?_o:JSON.parse(o)))}catch{}})),()=>Uo.delete(e)},set(e){e!==mo&&(Ko(e),Rn.save(e))}};function An(){return Pc(xo.subscribe,xo.get,xo.get)}import{idFactory as Bn}from"@buoy-gg/agent-core/web";import{realNow as to}from"@buoy-gg/shared-ui/web";import{persistentStorage as Go,devToolsStorageKeys as jc}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as Ln}from"@buoy-gg/shared-ui/web";var Mc=[{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*("|')?(?!(?:authorization|bearer|cookie|header)\b)[^\s"',}]{6,}/gi,label:"[credential removed]"}];function oo(e){if(!e)return e;let t=e;for(let{re:o,label:r}of Mc)t=t.replace(o,r);return t}var Jo=`${jc.base}_ask_buoy_transcript`,Yo=1,On=60,qc=256e3,Fc="[not kept across a restart \u2014 read it again if you need it]";function ct(e){return e&&oo(e)}function _c(e){let t=e.streaming===true;return{...e,text:ct(e.text),streaming:false,reasoning:e.reasoning?.map(o=>({...o,text:ct(o.text)})),toolCalls:e.toolCalls.map(o=>{let r=o.params?ct(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 Uc(e){return e.map(t=>t.role==="tool-results"?{...t,results:t.results.map(o=>({...o,content:Fc}))}:t.role==="assistant"?{...t,text:ct(t.text)}:{...t,text:ct(t.text)})}function Hn(e){let t={...e,messages:e.messages.slice(-On),history:e.history.slice(-On*2)},o=JSON.stringify(t);for(;o.length>qc&&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 Kc(e){if(!e)return null;let t=e.params;if(!t)return null;let o;try{o=JSON.stringify(t)}catch{return null}return oo(o)!==o?null:{id:e.id,toolId:e.toolId,action:e.action,label:ct(e.label),description:e.description?ct(e.description):void 0,reason:ct(e.reason),params:t,targetDigest:e.targetDigest}}function Gc(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 Pn(e){if(!e?.length)return;let t=e.filter(o=>{try{let r=JSON.stringify(o);return oo(r)===r}catch{return false}});return t.length?t:void 0}function Jc(e){return Hn({v:Yo,savedAt:Date.now(),messages:e.messages.map(_c),history:Uc(e.history),answers:e.answers,usage:e.usage,pending:Kc(e.pending),ledger:Pn(e.ledger),queued:e.queued?.length?e.queued.map(t=>({id:t.id,text:ct(t.text)})):void 0})}function Yc(e){if(!e)return null;try{let t=JSON.parse(e);return t?.v!==Yo||!Array.isArray(t.messages)||t.messages.length===0?null:{v:Yo,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:Gc(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 Wn(){try{return Yc(await Go.getItem(Jo))}catch{return null}}var ko=0;async function En(e){ko+=1;try{await Go.setItem(Jo,JSON.stringify(e))}catch{}}async function Qc(e){let t=ko,o=await Wn();!o||t!==ko||await En(Hn({...o,ledger:Pn(e)}))}async function Xc(){ko+=1;try{await Go.removeItem(Jo)}catch{}}var wo=Bn("m"),Vn=400;function Zc(e){if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e);return t.length>Vn?`${t.slice(0,Vn)}\u2026`:t}catch{return}}var ed=Bn("q"),O={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},credits:null,claudeOut:false,meta:{}},Nn=null,jn=null,Qo=new Set,Xo=null,Mn=null,Zo=null;function X(e){O={...O,...e};for(let t of Qo)try{t()}catch{}}var b={getState:()=>O,subscribe(e){return Qo.add(e),()=>Qo.delete(e)},setLedger(e){e!==Xo&&(Mn?.(),Xo=e,Mn=e?e.subscribe(()=>void Qc(e.list())):null)},getLedger(){return Xo},holdSession(e,t){Zo={session:e,signature:t}},getHeldSession(){return Zo},setReporter(e){Nn=e},getReporter(){return Nn},setUsageReader(e){jn=e},getUsageReader(){return jn},setNotice(e){X({notice:e})},setConfigured(e){e!==O.configured&&X({configured:e})},setClaudeOut(e){O.claudeOut!==e&&X({claudeOut:e})},setMeta(e){Object.keys(e).every(t=>O.meta[t]===e[t])||X({meta:{...O.meta,...e}})},addUser(e){X({messages:[...O.messages,{id:wo(),role:"user",text:e,toolCalls:[],blocks:[]}],busy:true})},beginTurn(){X({busy:true})},enqueue(e){let t={id:ed(),text:e};return X({queued:[...O.queued,t]}),t},removeQueued(e){O.queued.some(t=>t.id===e)&&X({queued:O.queued.filter(t=>t.id!==e)})},shiftQueued(){let[e,...t]=O.queued;if(e)return X({queued:t}),e},takeQueuedToDraft(e){let t=O.queued.find(o=>o.id===e);t&&X({queued:O.queued.filter(o=>o.id!==e),draft:t.text})},requestStop(){!O.busy||O.stopping||X({stopping:true})},clearDraft(){O.draft!==null&&X({draft:null})},removeMessage(e){X({messages:O.messages.filter(t=>t.id!==e)})},recordAnswer(e){X({answers:{...O.answers,[e.blockId]:e},awaitingBlockId:O.awaitingBlockId===e.blockId?null:O.awaitingBlockId})},setActionState(e,t){let o={...O.actionState};t===null?delete o[e]:o[e]=t,X({actionState:o})},startAssistant(){let e=wo();return X({messages:[...O.messages,{id:e,role:"assistant",text:"",toolCalls:[],blocks:[],streaming:true,startedAt:to()}]}),e},applyEvent(e,t){if(t.type==="history-trimmed"){let r=O.messages.findIndex(a=>a.id===e),n={id:wo(),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:to()},i=[...O.messages];i.splice(r<0?i.length:r,0,n),X({messages:i});return}let o=O.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})`:t.reason==="network"?"Connection dropped \u2014 trying again":"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()}
|
|
9
9
|
|
|
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:Kc(t.params),effect:t.effect,startedAt:Zt()}]};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,...t.hosted?{errorInfo:{code:t.hosted.code,requestId:t.hosted.request_id,action:t.hosted.action,resetAt:t.hosted.reset_at,helpUrl:t.hosted.help_url}}:{}};default:return r}});X({messages:o,...t.type==="awaiting-user"?{awaitingBlockId:t.blockId}:{},...t.type==="error"&&t.hosted?.code==="claude_paused"?{claudeOut:true}:{},...t.type==="meter"&&t.frame.phase==="end"?{credits:{left:t.frame.credits_left??L.credits?.left??null,resetAt:t.frame.credits_reset??L.credits?.resetAt??null,pending:t.frame.pending===true}}:{},...t.type==="usage"?{usage:{input:L.usage.input+t.input,output:L.usage.output+t.output,requests:L.usage.requests+1}}:{}})},markStopped(e){X({messages:L.messages.map(t=>t.id===e?{...t,stopped:true}:t)})},finishAssistant(e){X({messages:L.messages.map(t=>t.id===e?{...t,streaming:false,endedAt:Zt()}:t),busy:false,stopping:false})},askApproval(e){return new Promise(t=>{X({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}`:"";X({pending:null,...r&&t&&!L.trusted.some(i=>i.key===n)?{trusted:[...L.trusted,{key:n,label:t.label}]}:{}}),t?.resolve(e)},untrust(e){Qo?.session.untrust(e),X({trusted:L.trusted.filter(t=>t.key!==e)})},restorePending(e){return L.pending||L.busy?false:(X({pending:{...e,restored:true,resolve:()=>{}}}),true)},addNote(e){X({messages:[...L.messages,{id:ko(),role:"assistant",text:e,toolCalls:[],blocks:[],endedAt:Zt()}]})},hydrate(e){return L.messages.length>0||L.busy?false:(X({messages:e.messages.map(t=>({...t,restored:true})),answers:e.answers,usage:e.usage,queued:e.queued??[]}),true)},reset(){L.pending?.resolve(false),X({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 Nn(e){return e.pending?"awaitingApproval":e.busy?e.stopping?"stopping":"running":e.awaitingBlockId?"awaitingAnswer":"idle"}function Vn(e){let t=Nn(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 Gc,hasAccountAccess as to,subscribeAccountAccess as Qc}from"@buoy-gg/shared-ui/web";import{useCallback as De,useEffect as dt,useMemo as Mn,useRef as ut,useState as Yc,useSyncExternalStore as Xc}from"react";import{dispatchToolAction as jn,listSnapshotToolIds as Zc,listToolActions as ed,readToolSnapshot as td,waitForToolRegistry as qn}from"@buoy-gg/shared-ui/web";import{answerToText as Fn,CATALOG as Yo,createAskBuoySession as od,readTargetDigest as rd,runGatedAction as _n,SNAPSHOT_ACTION as Un}from"@buoy-gg/agent-core/web";function Xo(){b.getHeldSession()?.session.reset(),b.reset(),Uc()}async function Kn(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}:(Xo(),{cleared:true,reverted:o.reverted,failed:[]})}return Xo(),{cleared:true,reverted:0,failed:[]}}var Jn="claude-haiku-5-5";function nd(e,t,o){let r=e?.hostedModels;if(!e||!r?.claude||!r.luna)return e;let n=t==="claude"&&!o?r.claude:r.luna,i=n===r.claude?r.luna:r.claude;return{...e,...n,hostedFallback:i}}var oo=typeof ao<"u"&&!ao;function id(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 Gn(){try{let e=ed();for(let t of Zc())e[t]||(e[t]=[]),e[t].includes(Un)||(e[t]=[Un,...e[t]]);return e}catch{return{}}}var ld=600;function xo(){return Xc(b.subscribe,b.getState,b.getState)}function Qn(e){let t=xo(),o=zn(),r=Mn(()=>nd(e,o,t.claudeOut),[e,o,t.claudeOut]),n=ut(r);(t.messages.length===0||!n.current)&&(n.current=r);let i=n.current,a=ut(e);a.current=e;let g=!!e?.hostedModels?.claude,u=t.messages.length===0;dt(()=>{let S=a.current?.readUsage;if(!g||o!=="claude"||!u||!S)return;let V=true;return S().then(q=>{V&&q.claude&&b.setClaudeOut(!q.claude.available)}).catch(()=>{}),()=>{V=false}},[g,o,u]);let h=Gc()(),f=ut(h);f.current=h;let T=De((...S)=>!to()||!f.current?Promise.reject(new Error("Ask Buoy requires Pro access.")):jn(...S),[]),O=ut(null),_=ut(false),ee=ut(null),ce=ut(i);ce.current=i;let pe=!!i?.endpoint&&!!i?.model,Pe=i?.persistTranscript!==false,{bypassApprovals:qe,readOnly:We}=Ot(),Xe=ut(qe);Xe.current=qe;let Ze=ut(We);Ze.current=We;let et=De(()=>Ze.current?{...i?.policy??{},readOnly:true}:i?.policy??{},[i]),[Wt,tt]=Yc(0);dt(()=>{let S=false;return qn().then(()=>{S||tt(V=>V+1)}),()=>{S=true}},[]);let Ee=Mn(()=>Gn(),[Wt]),Et=Object.keys(Ee).sort().join(",");dt(()=>{if(b.setConfigured(pe),b.setMeta({model:i?.model,protocol:i?.protocol??(i?"anthropic":void 0),appName:i?.appName,platform:we.OS,build:oo?"release":"development"}),!pe||!i){O.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=i.protocol??"anthropic";oo&&i.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(i.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(i.endpoint)?b.setNotice('This endpoint is api.anthropic.com but the protocol is "openai". Remove protocol or set it to "anthropic".'):b.setNotice(null),b.setReporter(i.reportProblem??null),b.setUsageReader(i.readUsage??null);let V=[i.endpoint,i.protocol??"anthropic",i.model].join("|"),q=b.getHeldSession();if(q&&q.signature===V){O.current=q.session,q.session.setAvailableActions(Ee),q.session.setApprovalBypass(Xe.current),q.session.setReadOnly(Ze.current),b.setLedger(q.session.ledger);return}let de=od({endpoint:i.endpoint,protocol:i.protocol??"anthropic",model:i.model,headers:i.headers,apiKey:i.apiKey,maxTokens:i.maxTokens,anthropicVersion:i.anthropicVersion,requestOverrides:i.requestOverrides,hosted:i.hosted===true,...i.hostedFallback?{fallback:i.hostedFallback,onModelSwitch:Y=>{let io=(Y==="fallback"?i.hostedFallback?.model:i.model)===Jn;b.setMeta({model:Y==="fallback"?i.hostedFallback?.model:i.model}),Y==="fallback"?(io||b.setClaudeOut(true),b.setNotice(io?"Luna is down right now, so Claude is answering.":"Claude is busy right now, so Luna is answering.")):b.setNotice(null)}}:{},catalog:i.tools?.length?[...Yo,...i.tools]:void 0,dispatch:T,readSnapshot:td,availableActions:Ee,policy:i.policy,context:i.context,isRelease:oo,appName:i.appName,platform:we.OS,requestApproval:Y=>b.askApproval(Y)});O.current=de,de.setApprovalBypass(Xe.current),de.setReadOnly(Ze.current),b.holdSession(de,V),b.setLedger(de.ledger);let Re=false;return qn().then(Y=>{Y&&!Re&&de.prime()}),Pe&&!_.current&&(_.current=true,Ln().then(Y=>{!Y||!b.hydrate({messages:Y.messages,answers:Y.answers,usage:Y.usage,queued:Y.queued})||(O.current?.restore(Y.history),Y.ledger?.length&&O.current?.ledger.restore(Y.ledger),Y.pending&&b.restorePending(Y.pending))})),()=>{Re=true}},[pe,i,Ee,Et,Pe]),dt(()=>{O.current?.setApprovalBypass(qe)},[qe]),dt(()=>{O.current?.setReadOnly(We)},[We]);let Nt=t.messages,ht=t.answers,Vt=t.usage,Ce=t.busy,gt=t.pending,Mt=t.queued;dt(()=>{if(!Pe||Nt.length===0)return;let S=()=>{On(qc({messages:Nt,history:O.current?.messages??[],answers:ht,usage:Vt,pending:gt,ledger:b.getLedger()?.list(),queued:Mt}))};if(!Ce||gt){S();return}let V=setTimeout(S,ld);return()=>clearTimeout(V)},[Pe,Ce,Nt,ht,Vt,gt,Mt]);let Dt=De(S=>{if(!to()||!f.current)return;let V=O.current;if(!V)return;b.beginTurn();let q=b.startAssistant(),de=new AbortController;ee.current=de,V.setAvailableActions(Gn());let Re=ce.current?.onEvent;(async()=>{try{for await(let Y of V.send(S,de.signal))if(b.applyEvent(q,Y),Re)try{Re(Y)}catch{}}catch(Y){de.signal.aborted||b.applyEvent(q,{type:"error",message:Y instanceof Error?Y.message:"Something went wrong talking to your AI endpoint."})}finally{de.signal.aborted&&b.markStopped(q),b.finishAssistant(q),ee.current=null}})()},[]),ot=De(S=>{if(!to()||!f.current)return;let V=S.trim();if(!O.current||!V)return;if(b.getState().busy){b.enqueue(V);return}let q=b.getState().awaitingBlockId;q&&b.recordAnswer({blockId:q,kind:"skipped"}),b.addUser(V),Dt(V)},[Dt]),vo=De(()=>{let{messages:S,busy:V}=b.getState();if(V||!O.current)return;let q=[...S].reverse().find(de=>de.role==="user");q&&Dt(q.text)},[Dt]),ft=De(()=>{b.requestStop(),b.getState().pending&&b.answerApproval(false),ee.current?.abort(),ee.current=null},[]);dt(()=>{let S=Qc(()=>{to()||ft()});return()=>{S(),ft()}},[ft]),dt(()=>{h||ft()},[h,ft]),dt(()=>{if(t.queued.length===0||Nn(t)!=="idle"||Vn(t)!==null)return;let S=b.shiftQueued();S&&ot(S.text)},[t,ot]);let So=De(S=>b.takeQueuedToDraft(S),[]),To=De(S=>b.removeQueued(S),[]),xt=De(()=>{ee.current?.abort(),ee.current=null,Xo()},[]),jt=De(()=>Kn({dispatch:jn,undoFirst:true}),[]),qt=De(async S=>{let V=b.getLedger();if(!V){b.setNotice(`${S.label} couldn't run \u2014 no active Ask Buoy session.`);return}let q=i?.tools?.length?[...Yo,...i.tools]:void 0;if(S.targetDigest){let Re=await rd({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:T,catalog:q});if(Re!==void 0&&Re!==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 de=await _n({toolId:S.toolId,action:S.action,params:S.params??{},dispatch:T,ledger:V,policy:et(),isRelease:oo,catalog:q});de.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 ${de.error}`)},[i,et]),Rt=De(S=>{let V=b.getState().pending,q=typeof S=="boolean"?S:S.approved;if(b.answerApproval(S),!!V?.restored){if(!q){b.addNote(`Skipped \u201C${V.label}\u201D. Nothing was changed.`);return}qt(V)}},[qt]),no=De(S=>{b.recordAnswer(S);let V=id(S.blockId);ot(V?`${V} \u2014 ${Fn(S)}`:Fn(S))},[ot]),Co=De(async(S,V)=>{if(!to()||!f.current){b.setNotice("Ask Buoy requires Pro access.");return}if(S.send){ot(S.send);return}if(!S.dispatch)return;let q=`${V}:${S.label}`,de=b.getLedger();if(!de){b.setNotice(`${S.label} failed \u2014 no active Ask Buoy session.`);return}b.setActionState(q,"running");let Re=await _n({toolId:S.dispatch.toolId,action:S.dispatch.action,params:S.dispatch.params??{},dispatch:T,ledger:de,policy:et(),isRelease:oo,catalog:i?.tools?.length?[...Yo,...i.tools]:void 0});Re.ok?b.setActionState(q,"done"):(b.setActionState(q,"failed"),b.setNotice(`${S.label} failed \u2014 ${Re.error}`))},[ot,i,et]);return{state:t,send:ot,stop:ft,reset:xt,undoThenReset:jt,approve:Rt,retry:vo,answer:no,runAction:Co,editQueued:So,removeQueued:To,configured:pe,toolCount:Object.keys(Ee).length,availableToolIds:Object.keys(Ee)}}import{Fragment as ad,jsx as Z,jsxs as je}from"react/jsx-runtime";function Yn(){let e=Ot(),t=xo().trusted;return je(Je,{style:U.scroll,contentContainerStyle:U.content,testID:"buoy-ask-buoy-settings",children:[Z(cd,{}),Z(ud,{}),Z(l,{style:U.section,children:"CHAT"}),Z(Wo,{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=>st.set("showThinking",o)}),Z(l,{style:U.note,children:"Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."}),Z(l,{style:U.section,children:"PERMISSIONS"}),Z(Wo,{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=>st.set("readOnly",o)}),e.readOnly?Z(l,{style:U.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,Z(Wo,{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=>st.set("bypassApprovals",o)}),e.bypassApprovals&&!e.readOnly?je(s,{style:U.warning,testID:"buoy-ask-buoy-bypass-warning",children:[Z(Ic,{size:14,color:se.color.warning}),Z(l,{style:U.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."})]}):Z(l,{style:U.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?je(s,{style:U.trustedBox,testID:"buoy-ask-buoy-trusted",children:[Z(l,{style:U.section,children:"ALLOWED WITHOUT ASKING \u2014 THIS CHAT"}),t.map(o=>je(s,{style:U.trustedRow,children:[Z(l,{style:U.trustedLabel,numberOfLines:2,children:o.label}),Z(m,{testID:`buoy-ask-buoy-untrust-${o.key}`,accessibilityRole:"button",onPress:()=>b.untrust(o.key),style:({pressed:r})=>[U.forget,r&&{opacity:.7}],hitSlop:6,children:Z(l,{style:U.forgetText,children:"Ask again"})})]},o.key))]}):null]})}function sd(e){let t=Date.parse(e.length===10?`${e}T00:00:00Z`:e);if(Number.isNaN(t))return e;let o=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r=new Date(t);return`${o[r.getUTCMonth()]} ${r.getUTCDate()}`}function cd(){let e=b.getUsageReader(),[t,o]=Cc({kind:"loading"}),r=Sc(()=>{e&&(o({kind:"loading"}),e().then(n=>{n.claude&&b.setClaudeOut(!n.claude.available),o({kind:"ok",usage:n})}).catch(n=>o({kind:"error",message:n instanceof Error?n.message:"Could not load credits."})))},[e]);return Tc(r,[r]),e?je(s,{testID:"buoy-ask-buoy-credits",children:[Z(l,{style:U.section,children:"HOSTED AI CREDITS"}),je(s,{style:U.trustedRow,children:[Z(s,{style:{flex:1,gap:2},children:t.kind==="ok"?je(ad,{children:[je(l,{style:U.trustedLabel,children:[t.usage.creditsLeft.toLocaleString()," of ",t.usage.grantCredits.toLocaleString()," credits left"]}),je(l,{style:U.note,children:[t.usage.resetAt?`Resets ${sd(t.usage.resetAt)}. `:"","That's about ",Math.floor(t.usage.creditsLeft/5).toLocaleString()," more asks, included with your plan."]})]}):t.kind==="error"?Z(l,{style:U.note,children:t.message}):Z(l,{style:U.note,children:"Loading\u2026"})}),Z(m,{testID:"buoy-ask-buoy-credits-refresh",accessibilityRole:"button",onPress:r,style:({pressed:n})=>[U.forget,n&&{opacity:.7}],hitSlop:6,children:Z(l,{style:U.forgetText,children:"Refresh"})})]})]}):null}var dd=[{id:"claude",label:"Claude Haiku 5.5",note:"The default. Answers faster."},{id:"luna",label:"GPT-6 Luna",note:"Uses fewer credits."}];function ud(){let e=zn(),{claudeOut:t}=xo();return b.getUsageReader()?je(s,{testID:"buoy-ask-buoy-model",style:{gap:6},children:[Z(l,{style:U.section,children:"MODEL"}),dd.map(o=>{let r=e===o.id;return je(m,{testID:`buoy-ask-buoy-model-${o.id}`,accessibilityRole:"radio",accessibilityState:{checked:r},onPress:()=>yo.set(o.id),style:({pressed:n})=>[U.trustedRow,r&&U.picked,n&&{opacity:.7}],children:[je(s,{style:{flex:1,gap:2},children:[Z(l,{style:U.trustedLabel,children:o.label}),Z(l,{style:U.note,children:o.note})]}),Z(l,{style:U.forgetText,children:r?"On":""})]},o.id)}),Z(l,{style:U.note,testID:"buoy-ask-buoy-model-note",children:e==="claude"&&t?"Claude is busy right now. New chats use Luna until it opens again.":"If one model is down, the other answers. A change starts with your next new chat. You can also pick it on buoy.gg, on the Ask Buoy tab."})]}):null}var U=w.create({picked:{borderColor:se.color.info},scroll:{flex:1},content:{padding:se.gutter,gap:10,paddingBottom:32},section:{color:se.color.textTertiary,fontSize:10,fontWeight:"700",letterSpacing:.6,paddingHorizontal:4,paddingTop:4},warning:{flexDirection:"row",gap:8,padding:se.cardPad,borderRadius:se.radius.card,borderWidth:w.hairlineWidth,borderColor:se.color.warning,backgroundColor:se.color.surface},warningText:{flex:1,color:se.color.warning,fontSize:se.font.micro,lineHeight:16},trustedBox:{gap:6,paddingTop:6},trustedRow:{flexDirection:"row",alignItems:"center",gap:10,padding:se.cardPad,borderRadius:se.radius.card,borderWidth:w.hairlineWidth,borderColor:se.color.border,backgroundColor:se.color.surface},trustedLabel:{flex:1,color:se.color.text,fontSize:se.font.caption,lineHeight:18},forget:{paddingHorizontal:10,paddingVertical:6,borderRadius:se.radius.row,backgroundColor:se.color.button},forgetText:{color:se.color.text,fontSize:se.font.micro,fontWeight:"600"},note:{color:se.color.textTertiary,fontSize:se.font.micro,lineHeight:16,paddingHorizontal:4}});import{monoFont as pd}from"@buoy-gg/shared-ui/web";import{ChevronRight as hd,night as Se,NightSectionLabel as gd}from"@buoy-gg/shared-ui/web";var fd=[{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"}],bd=4;function yd(e){let t=e.availableToolIds.length>0;return fd.filter(o=>o.write&&e.readOnly||o.devOnly&&e.isRelease?false:o.needs?t&&e.availableToolIds.includes(o.needs):true).slice(0,bd).map(o=>o.text)}import{jsx as Ue,jsxs as ro}from"react/jsx-runtime";var Xn=typeof ao<"u"&&!ao;function md({configured:e,onPick:t,availableToolIds:o=[],readOnly:r=false}){let n=yd({availableToolIds:o,readOnly:r,isRelease:Xn});return e?ro(s,{style:Ie.wrap,testID:"buoy-ask-buoy-empty",children:[Ue(l,{style:Ie.title,children:"Ask about this app"}),Ue(l,{style:Ie.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."}),Ue(l,{style:Ie.buildLine,testID:"buoy-ask-buoy-build-line",children:Xn?"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."}),ro(s,{style:Ie.group,children:[Ue(gd,{children:"Try asking"}),Ue(s,{style:Ie.card,children:n.map((i,a)=>Ue(kd,{text:i,onPick:t,last:a===n.length-1},i))})]})]}):ro(s,{style:Ie.wrap,testID:"buoy-ask-buoy-unconfigured",children:[Ue(l,{style:Ie.title,children:"Not set up yet"}),ro(l,{style:Ie.body,children:["Ask Buoy talks to your own company's AI endpoint \u2014 nothing goes to Buoy. A developer needs to add the ",Ue(l,{style:Ie.code,children:"askBuoy"})," prop to"," ",Ue(l,{style:Ie.code,children:"<FloatingDevTools />"})," with your team's endpoint and model."]})]})}function kd({text:e,onPick:t,last:o}){return ro(m,{testID:`buoy-ask-buoy-suggestion-${e.slice(0,12)}`,accessibilityRole:"button",onPress:()=>t(e),style:({pressed:r})=>[Ie.row,!o&&Ie.rowDivider,r&&Ie.pressed],children:[Ue(l,{style:Ie.rowText,children:e}),Ue(hd,{size:14,color:Se.color.textTertiary})]})}var Ie=w.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:Se.gutter,paddingVertical:24,gap:8},title:{color:Se.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:Se.color.textSecondary,fontSize:Se.font.body,lineHeight:20},code:{color:Se.color.text,fontFamily:we.OS==="web"?pd:"Menlo"},buildLine:{marginTop:8,color:Se.color.textTertiary,fontSize:Se.font.micro,lineHeight:15},group:{marginTop:Se.groupGap-8},card:{borderRadius:Se.radius.card,borderWidth:w.hairlineWidth,borderColor:Se.color.border,backgroundColor:Se.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:Se.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:w.hairlineWidth,borderBottomColor:Se.color.separator},rowText:{flex:1,color:Se.color.text,fontSize:Se.font.body,lineHeight:19},pressed:{backgroundColor:Se.color.fill}});import{memo as xd,useCallback as It,useEffect as wd,useRef as Zo,useState as er}from"react";import{AlertTriangle as tr,Check as Zn,ChevronDown as ei,ChevronRight as ti,Copy as vd,night as x,X as Sd}from"@buoy-gg/shared-ui/web";import{toolTitle as Td}from"@buoy-gg/agent-core/web";import{isAskBlock as Cd}from"@buoy-gg/agent-core/web";function Id({block:e,forToolCallId:t}){if(!t)return false;let o="source"in e?e.source:void 0;return o==="live"||o==="mocked"}function zd(e,t){let o=new Set(t),r=new Map,n=[],i=[];for(let a of e){if(Cd(a.block)){i.push(a);continue}if(Id(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:i}}import{useState as oi}from"react";import{Activity as Dd,ChevronDown as Rd,ChevronRight as $d,night as te}from"@buoy-gg/shared-ui/web";function or(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 ri(e){return(e.reasoning?.length??0)>0||e.toolCalls.length>0}var Ad=e=>e.status==="ok"?e.summary||"done":e.status==="running"?"running":`${e.status}${e.summary?` \u2014 ${e.summary}`:""}`;function ni(e,t=" "){let o=[];for(let r of or(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 ${Ad(i)}`),i.params&&o.push(`${t} ${i.params}`)}return o}import{Fragment as Bd,jsx as Le,jsxs as pt}from"react/jsx-runtime";function Ld({n:e,call:t}){let[o,r]=oi(false),n=t.status==="failed"||t.status==="refused";return pt(m,{onPress:()=>r(i=>!i),accessibilityRole:"button",accessibilityState:{expanded:o},style:be.step,children:[pt(s,{style:be.stepLine,children:[Le(l,{style:be.stepN,children:e}),pt(l,{style:[be.stepName,n&&be.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),t.durationMs!==void 0?pt(l,{style:be.stepMs,children:[t.durationMs,"ms"]}):null,Le(l,{style:[be.stepStatus,n&&be.stepFailed],numberOfLines:1,children:t.status==="ok"?t.summary||"done":t.status})]}),o?pt(s,{style:be.detail,children:[Le(l,{style:be.detailLabel,children:"SENT"}),Le(l,{style:be.code,selectable:true,children:t.params??"no parameters"}),t.result?pt(Bd,{children:[Le(l,{style:be.detailLabel,children:"RETURNED"}),Le(l,{style:be.code,selectable:true,children:t.result})]}):null]}):null]})}function ii({message:e}){let[t,o]=oi(false);if(!ri(e))return null;let r=or(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,g=[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 pt(s,{style:be.wrap,testID:"buoy-ask-buoy-thinking",children:[pt(m,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>o(u=>!u),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:be.head,children:[Le(Dd,{size:12,color:te.color.textTertiary}),Le(l,{style:be.headText,children:g}),t?Le(Rd,{size:12,color:te.color.textTertiary}):Le($d,{size:12,color:te.color.textTertiary})]}),t?pt(s,{style:be.body,children:[r.map((u,h)=>u.kind==="thought"?Le(l,{style:be.thought,selectable:true,children:u.text.trim()},`t${h}`):Le(Ld,{n:u.n,call:u.call},u.call.id)),i===0?Le(l,{style:be.none,children:"This model reports no reasoning \u2014 the steps above are the whole trace."}):null]}):null]})}var be=w.create({wrap:{marginTop:8,borderRadius:te.radius.badge,borderWidth:w.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:w.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 Od,useRef as Hd}from"react";import{night as Pd}from"@buoy-gg/shared-ui/web";import{jsx as li}from"react/jsx-runtime";function Wd(){let e=Hd([0,1,2].map(()=>new ue.Value(.25))).current;return Od(()=>{let t=e.map((o,r)=>ue.loop(ue.sequence([ue.delay(r*140),ue.timing(o,{toValue:1,duration:320,easing:At.inOut(At.ease),useNativeDriver:true}),ue.timing(o,{toValue:.25,duration:320,easing:At.inOut(At.ease),useNativeDriver:true}),ue.delay((2-r)*140)])));return t.forEach(o=>o.start()),()=>t.forEach(o=>o.stop())},[e]),li(s,{style:ai.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:e.map((t,o)=>li(ue.View,{style:[ai.dot,{opacity:t}]},o))})}var ai=w.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:Pd.color.textSecondary}});import{jsx as k,jsxs as ye}from"react/jsx-runtime";function si({status:e}){switch(e){case"running":return k(Jt,{size:"small",color:x.color.textSecondary});case"ok":return k(s,{style:[y.mark,y.markOk],children:k(Zn,{size:10,color:x.color.onAccent})});case"failed":return k(s,{style:[y.mark,y.markFailed],children:k(Sd,{size:10,color:x.color.text})});case"refused":return k(s,{style:[y.mark,y.markRefused],children:k(tr,{size:10,color:x.color.onAccent})});case"declined":case"stopped":return k(s,{style:[y.mark,y.markNotRun],children:k(s,{style:y.markNotRunBar})})}}function Ed(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 Nd=e=>e.status==="failed"||e.status==="refused"||e.status==="declined"||e.status==="stopped";function ci({call:e,receipts:t,last:o}){let[r,n]=er(false),i=Ed(e),a=r?ei:ti,g=e.status==="failed"&&e.summary&&e.summary!=="Failed"?e.summary:null;return ye(s,{style:[y.row,!o&&y.rowDivider],children:[ye(m,{testID:`buoy-ask-buoy-tool-${e.toolId}`,accessibilityRole:"button",accessibilityLabel:`${e.label}, ${i.text||"running"}`,accessibilityState:{expanded:r},onPress:()=>n(u=>!u),children:[ye(s,{style:y.rowLine,children:[k(s,{style:y.markSlot,children:k(si,{status:e.status})}),k(l,{style:y.rowTitle,children:e.label}),i.text?k(l,{style:[y.rowStatus,i.tone==="danger"&&y.rowStatusDanger,i.tone==="warning"&&y.rowStatusWarning,i.tone==="ok"&&y.rowStatusOk],numberOfLines:1,children:i.text}):null,k(a,{size:12,color:x.color.textTertiary})]}),r&&ye(s,{style:y.rowDetail,children:[k(l,{style:y.rowTool,children:Td(e.toolId).toUpperCase()}),e.description?k(l,{style:y.rowDescription,children:e.description}):null,g?k(l,{style:y.rowFailure,children:g}):null,e.verification?k(l,{style:[y.rowDescription,e.verification.status==="failed"&&y.rowFailure,e.verification.status==="verified"&&y.rowVerified],testID:`buoy-ask-buoy-verification-${e.verification.status}`,children:e.verification.detail}):null]})]}),r&&t.length>0&&k(s,{style:y.rowReceipts,testID:`buoy-ask-buoy-tool-receipt-${e.toolId}`,children:t.map(u=>k(go,{block:u},u.id))})]})}function Vd({label:e,count:t,calls:o,receipts:r,last:n}){let[i,a]=er(false),g=i?ei:ti;return ye(s,{style:!n&&!i&&y.rowDivider,children:[k(m,{testID:"buoy-ask-buoy-reads-group",accessibilityRole:"button",accessibilityLabel:`${e}, ${t} reads`,accessibilityState:{expanded:i},onPress:()=>a(u=>!u),style:[y.row,i&&y.rowDivider],children:ye(s,{style:y.rowLine,children:[k(s,{style:y.markSlot,children:k(si,{status:"ok"})}),k(l,{style:y.rowTitle,children:e}),ye(l,{style:y.rowStatus,numberOfLines:1,children:[t," reads"]}),k(g,{size:12,color:x.color.textTertiary})]})}),i&&k(s,{style:y.groupBody,children:o.map((u,h)=>k(ci,{call:u,receipts:r.get(u.id)??[],last:n&&h===o.length-1},u.id))})]})}function Md({calls:e,receipts:t}){let o=mc(e);return k(s,{style:y.card,testID:"buoy-ask-buoy-activity",children:o.map((r,n)=>r.kind==="reads"?k(Vd,{label:r.label,count:r.count,calls:r.calls,receipts:t,last:n===o.length-1},r.id):k(ci,{call:r.call,receipts:t.get(r.call.id)??[],last:n===o.length-1},r.call.id))})}function di({blocks:e}){return e.length===0?null:k(s,{style:y.blocks,children:e.map(({block:t})=>k(go,{block:t},t.id))})}function jd({message:e}){return k(s,{style:y.systemLine,testID:"buoy-ask-buoy-system-line",children:k(l,{style:y.systemText,children:e.text})})}function qd({message:e}){return k(s,{style:y.userWrap,children:k(s,{style:y.userBubble,children:k(l,{style:y.userText,selectable:true,children:e.text})})})}function Fd({message:e,onRetry:t,waitingOnUser:o}){let{showThinking:r}=Ot(),n=!!e.streaming&&!o,{nested:i,afterText:a,ask:g}=zd(e.blocks,e.toolCalls.map(u=>u.id));return ye(s,{style:y.assistantWrap,children:[e.toolCalls.length>0&&k(Md,{calls:e.toolCalls,receipts:i}),e.text.length>0&&k(Vr,{text:e.text,style:y.assistantText}),k(di,{blocks:a}),k(di,{blocks:g}),r&&!e.streaming&&k(ii,{message:e}),n&&ye(s,{style:y.waitingRow,children:[k(Wd,{}),e.waiting?k(l,{style:y.waitingText,testID:"buoy-ask-buoy-waiting",children:e.waiting}):null]}),e.error&&(e.errorInfo?k(Jd,{error:e.error,info:e.errorInfo,onRetry:t}):k(Ud,{error:e.error,onRetry:t})),e.stopped&&!e.error&&k(_d,{onRetry:t,changed:e.toolCalls.some(u=>u.status==="ok"&&!!u.effect&&u.effect!=="read")})]})}function _d({onRetry:e,changed:t}){return ye(s,{style:y.stoppedBox,testID:"buoy-ask-buoy-stopped",children:[k(l,{style:y.stoppedText,children:t?"Stopped. Changes already made are listed above.":"Stopped."}),e&&k(m,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:e,style:({pressed:o})=>[y.retry,o&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})})]})}function Ud({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 ye(s,{style:y.errorBox,testID:"buoy-ask-buoy-error",children:[k(tr,{size:14,color:x.color.danger}),ye(s,{style:y.errorBody,children:[k(l,{style:y.errorText,children:o}),k(l,{style:y.errorDetail,selectable:true,children:e}),t&&k(m,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:t,style:({pressed:r})=>[y.retry,r&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})})]})]})}var Kd=new Set(["credits_out","member_cap","plan_not_eligible","not_in_pilot","team_hosted_off","account_frozen","token_not_allowed","client_too_old","media_not_allowed","session_missing","session_revoked"]);function Jd({error:e,info:t,onRetry:o}){let[r,n]=er("idle"),i=`Ask Buoy error ${t.code}${t.requestId?` \xB7 request ${t.requestId}`:""} \xB7 ${new Date().toISOString()}`,{copied:a,copy:g}=uo(()=>i),u=b.getReporter(),h=It(()=>{u&&(n("sending"),u({requestId:t.requestId,code:t.code,note:"Reported from the error card."}).then(f=>n({id:f.reportId})).catch(()=>n("failed")))},[u,t.code,t.requestId]);return ye(s,{style:y.errorBox,testID:"buoy-ask-buoy-error",children:[k(tr,{size:14,color:x.color.danger}),ye(s,{style:y.errorBody,children:[k(l,{style:y.errorText,children:e}),ye(l,{style:y.errorDetail,selectable:true,testID:"buoy-ask-buoy-error-code",children:[t.code,t.requestId?` \xB7 ${t.requestId}`:""]}),ye(s,{style:y.transcriptActions,children:[o&&!Kd.has(t.code)&&k(m,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:o,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})}),k(m,{testID:"buoy-ask-buoy-error-copy",accessibilityRole:"button",accessibilityLabel:"Copy details",onPress:g,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:a?"Copied":"Copy details"})}),u&&k(m,{testID:"buoy-ask-buoy-error-report",accessibilityRole:"button",accessibilityLabel:"Report problem",disabled:r!=="idle"&&r!=="failed",onPress:h,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:r==="sending"?"Sending\u2026":r==="failed"?"Report failed. Try again":typeof r=="object"?`Reported \xB7 ${r.id}`:"Report problem"})})]})]})]})}function ui(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(...ni(r));else for(let n of r.toolCalls){let i=Nd(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 va(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 Gd({testID:e,label:t,getText:o}){let{copied:r,copy:n}=uo(o);return ye(m,{testID:e,accessibilityRole:"button",accessibilityLabel:t,onPress:n,style:({pressed:i})=>[y.copyBtn,y.iconBtn,i&&y.copyPressed],children:[r?k(Zn,{size:11,color:x.color.accent}):k(vd,{size:11,color:x.color.textSecondary}),k(l,{style:[y.copyText,r&&y.copiedText],children:r?"Copied":t})]})}function Qd({message:e}){let{showThinking:t}=Ot(),o=It(()=>ui(b.getState().messages,t),[t]),r=xc(e);return ye(s,{style:y.transcriptActions,children:[r?k(l,{style:y.turnFooter,testID:"buoy-ask-buoy-turn-footer",children:r}):null,k(Gd,{testID:"buoy-ask-buoy-copy",label:"Copy conversation",getText:o})]})}var Yd=xd(function({message:e,onRetry:t,waitingOnUser:o}){if(e.role==="user")return k(qd,{message:e});if(e.system)return k(jd,{message:e});let r=!e.streaming&&!e.error;return ye(s,{children:[k(Fd,{message:e,onRetry:t,waitingOnUser:o}),r&&k(Qd,{message:e})]})});function pi({messages:e,ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r,onRetry:n,waitingOnUser:i}){let a=Zo(null),g=Zo(true),u=Zo(false),h=It(pe=>{let{contentOffset:Pe,contentSize:qe,layoutMeasurement:We}=pe.nativeEvent,Xe=qe.height-We.height-Pe.y;g.current=Xe<80},[]),f=It(()=>{u.current=true},[]),T=It(pe=>{u.current&&h(pe)},[h]),O=It(pe=>{u.current=false,h(pe)},[h]),_=It(()=>{g.current&&(a.current?.scrollToEnd({animated:false}),requestAnimationFrame(()=>a.current?.scrollToEnd({animated:false})))},[]),ee=e[e.length-1],ce=ee?`${ee.id}:${ee.text.length}:${ee.toolCalls.length}:${ee.error??""}`:"";return wd(()=>{_()},[ce,_]),k(mr,{ref:a,testID:"buoy-ask-buoy-messages-scroll",style:y.list,contentContainerStyle:y.listContent,data:e,keyExtractor:pe=>pe.id,renderItem:({item:pe})=>k(Yd,{message:pe,onRetry:pe.id===ee?.id?n:void 0,waitingOnUser:pe.id===ee?.id?i:false}),onScroll:T,onScrollBeginDrag:f,onScrollEndDrag:O,onMomentumScrollEnd:h,scrollEventThrottle:32,onContentSizeChange:_,keyboardShouldPersistTaps:"handled",keyboardDismissMode:"interactive",ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r})}var y=w.create({list:{flex:1,backgroundColor:"transparent"},listContent:{paddingHorizontal:x.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:x.color.accentFill,borderWidth:w.hairlineWidth,borderColor:x.color.accentBorder},userText:{color:x.color.text,fontSize:x.font.row,lineHeight:21},systemLine:{alignSelf:"stretch",paddingHorizontal:12,paddingVertical:7,borderRadius:x.radius.row,backgroundColor:x.color.fill},systemText:{color:x.color.textSecondary,fontSize:x.font.micro,lineHeight:16,textAlign:"center"},assistantWrap:{alignItems:"stretch",gap:10},blocks:{gap:10},waitingRow:{flexDirection:"row",alignItems:"center",gap:8},waitingText:{color:x.color.textSecondary,fontSize:x.font.caption},assistantText:{color:x.color.text,fontSize:x.font.row,lineHeight:22,paddingHorizontal:2},card:{borderRadius:x.radius.card,borderWidth:w.hairlineWidth,borderColor:x.color.border,backgroundColor:x.color.surface,overflow:"hidden"},row:{paddingHorizontal:12,paddingVertical:10},rowDivider:{borderBottomWidth:w.hairlineWidth,borderBottomColor:x.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:x.color.accent},markFailed:{backgroundColor:x.color.danger},markRefused:{backgroundColor:x.color.warning},markNotRun:{borderWidth:1.5,borderColor:x.color.textTertiary},markNotRunBar:{width:7,height:1.5,borderRadius:1,backgroundColor:x.color.textSecondary},rowTitle:{flex:1,color:x.color.text,fontSize:x.font.body,lineHeight:19},rowStatus:{color:x.color.textTertiary,fontSize:x.font.caption,maxWidth:120},rowStatusDanger:{color:x.color.danger},rowStatusWarning:{color:x.color.warning},rowStatusOk:{color:x.color.accent},rowVerified:{color:x.color.accent},rowDetail:{paddingLeft:28,paddingTop:8,gap:4},rowTool:{color:x.color.textTertiary,fontSize:x.font.micro,fontWeight:"600",letterSpacing:.8},rowDescription:{color:x.color.textSecondary,fontSize:x.font.caption,lineHeight:18},rowFailure:{color:x.color.danger,fontSize:x.font.caption,lineHeight:18},rowReceipts:{paddingTop:10,gap:10},groupBody:{paddingLeft:14,backgroundColor:x.color.fill},stoppedBox:{alignItems:"flex-start",gap:2,paddingHorizontal:12,paddingVertical:8},stoppedText:{color:x.color.textTertiary,fontSize:x.font.caption,lineHeight:18},errorBox:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:12,paddingVertical:10,borderRadius:x.radius.row,backgroundColor:x.color.dangerSoft},errorBody:{flex:1,gap:4},errorText:{color:x.color.danger,fontSize:x.font.caption,fontWeight:"600",lineHeight:18},errorDetail:{color:x.color.textSecondary,fontSize:x.font.micro,lineHeight:15},retry:{alignSelf:"flex-start",marginTop:6,paddingHorizontal:14,paddingVertical:7,borderRadius:x.radius.row,backgroundColor:x.color.button},retryPressed:{opacity:.7},retryText:{color:x.color.accent,fontSize:x.font.caption,fontWeight:"600"},transcriptActions:{flexDirection:"row",alignItems:"center",gap:10,marginTop:8},turnFooter:{flex:1,color:x.color.textTertiary,fontSize:x.font.micro,fontVariant:["tabular-nums"]},copyBtn:{paddingHorizontal:10,paddingVertical:5,borderRadius:x.radius.badge,backgroundColor:x.color.fill},iconBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8},copyPressed:{opacity:.7},copyText:{color:x.color.textSecondary,fontSize:x.font.micro,fontWeight:"600"},copiedText:{color:x.color.accent}});import{night as Oe,X as Xd}from"@buoy-gg/shared-ui/web";import{jsx as Ht,jsxs as rr}from"react/jsx-runtime";var Zd=132;function eu({items:e,paused:t,onEdit:o,onRemove:r}){return e.length===0?null:rr(s,{style:He.wrap,testID:"buoy-ask-buoy-queued",children:[Ht(Je,{style:He.list,contentContainerStyle:He.listContent,keyboardShouldPersistTaps:"handled",children:e.map((n,i)=>rr(s,{style:[He.row,t!==null&&He.rowPaused],children:[rr(m,{testID:`buoy-ask-buoy-queue-item-${i}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${n.text}`,onPress:()=>o(n.id),style:({pressed:a})=>[He.rowBody,a&&He.pressed],children:[Ht(l,{style:He.ordinal,children:i===0?"NEXT":"THEN"}),Ht(l,{style:He.text,numberOfLines:3,children:n.text})]}),Ht(m,{testID:`buoy-ask-buoy-queue-remove-${i}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>r(n.id),hitSlop:8,style:({pressed:a})=>[He.remove,a&&He.pressed],children:Ht(Xd,{size:11,color:Oe.color.textTertiary})})]},n.id))}),Ht(l,{style:[He.hint,t!==null&&He.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes \xB7 tap to edit"})]})}var He=w.create({wrap:{paddingHorizontal:Oe.gutter,paddingTop:8,gap:6,backgroundColor:Oe.color.bg},list:{maxHeight:Zd},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:Oe.radius.row,borderWidth:w.hairlineWidth,borderColor:Oe.color.border,backgroundColor:Oe.color.surface},rowPaused:{borderColor:Oe.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:Oe.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:Oe.color.textSecondary,fontSize:Oe.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:Oe.color.textTertiary,fontSize:Oe.font.micro},hintPaused:{color:Oe.color.warning}});var tu="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 ou,jsx as he,jsxs as Pt}from"react/jsx-runtime";function nr({visible:e,onClose:t,onBack:o,onMinimize:r,persistenceKey:n,config:i}){let{state:a,send:g,stop:u,reset:h,undoThenReset:f,approve:T,retry:O,answer:_,runAction:ee,editQueued:ce,removeQueued:pe,configured:Pe,toolCount:qe,availableToolIds:We}=Qn(i),[Xe,Ze]=Io(false),et=Ke(()=>{u(),t()},[u,t]),Wt=Ke(()=>b.clearDraft(),[]),[tt,Ee]=Io(false),Et=Ke(()=>Ee(false),[]),Nt=Ke(()=>Ee(true),[]),ht=!e,Vt=!!a.pending||!!a.awaitingBlockId,Ce=a.messages[a.messages.length-1],gt=_t(false),Mt=_t(a.busy);Ft(()=>{ht&&Mt.current&&!a.busy&&(gt.current=true),ht||(gt.current=false),Mt.current=a.busy},[ht,a.busy]),Ft(()=>{if(!ht){Bt("ask-buoy",null);return}Vt?Bt("ask-buoy",{kind:"needsInput",label:a.pending?"Needs your approval":"Has a question for you"}):gt.current&&Ce?.role==="assistant"&&Ce.error?Bt("ask-buoy",{kind:"failed",label:"The last turn failed"}):gt.current&&!a.busy?Bt("ask-buoy",{kind:"done",label:"Finished"}):Bt("ask-buoy",null)},[ht,Vt,a.busy,a.pending,Ce]),Ft(()=>()=>Bt("ask-buoy",null),[]),Ft(()=>{a.pending&&tt&&Ee(false)},[a.pending,tt]);let Dt=Cl({minBottom:16}),[ot,vo]=Io("bottomSheet"),ft=ot==="floating"?0:Dt.bottom,So=Ke(()=>{let J=b.getLedger();J&&(async()=>{let ne=await J.revertAll(vl);if(ne.failed.length===0){b.setNotice(null);return}let $t=ne.failed.map(lo=>`${lo.label} (${lo.error})`).join("; ");b.setNotice(`Couldn't undo ${ne.failed.length} change${ne.failed.length===1?"":"s"} \u2014 ${$t}`)})()},[]),To=Ke(()=>Ze(J=>!J),[]),xt=_t(new ue.Value(560)).current,jt=_t(false),qt=Ke(()=>{jt.current||(jt.current=true,xt.stopAnimation(J=>{let ne=typeof J=="number"&&J>200?J:560;ue.timing(xt,{toValue:120,duration:220,useNativeDriver:false}).start(()=>{setTimeout(()=>{ue.spring(xt,{toValue:ne,friction:9,useNativeDriver:false}).start(()=>{jt.current=false})},2500)})}))},[xt]),Rt=so(()=>{let J=a.messages[a.messages.length-1];if(!J||J.role!=="assistant")return"";let ne=J.blocks.filter($t=>$t.block.kind==="peek").length;return ne>0?`${J.id}:${ne}`:""},[a.messages]),no=_t("");Ft(()=>{Rt&&Rt!==no.current&&i?.peek!==false&&qt(),no.current=Rt},[Rt,qt,i]);let Co=Ke(()=>{let J=b.getLedger()?.list().filter(ne=>!ne.undoneAt&&wl(ne.effect)).length??0;if(J===0){h();return}Ro.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 f();if(ne.cleared)return;let $t=ne.reverted+ne.failed.length,lo=ne.failed.map(hr=>`${hr.label} (${hr.error})`).join(`
|
|
13
|
-
`);
|
|
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:Zc(t.params),effect:t.effect,startedAt:to()}]};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,...t.hosted?{errorInfo:{code:t.hosted.code,requestId:t.hosted.request_id,action:t.hosted.action,resetAt:t.hosted.reset_at,helpUrl:t.hosted.help_url}}:{}};default:return r}});X({messages:o,...t.type==="awaiting-user"?{awaitingBlockId:t.blockId}:{},...t.type==="error"&&t.hosted?.code==="claude_paused"?{claudeOut:true}:{},...t.type==="meter"&&t.frame.phase==="end"?{credits:{left:t.frame.credits_left??O.credits?.left??null,resetAt:t.frame.credits_reset??O.credits?.resetAt??null,pending:t.frame.pending===true}}:{},...t.type==="usage"?{usage:{input:O.usage.input+t.input,output:O.usage.output+t.output,requests:O.usage.requests+1}}:{}})},markStopped(e){X({messages:O.messages.map(t=>t.id===e?{...t,stopped:true}:t)})},finishAssistant(e){X({messages:O.messages.map(t=>t.id===e?{...t,streaming:false,endedAt:to()}:t),busy:false,stopping:false})},askApproval(e){return new Promise(t=>{X({pending:{...e,resolve:t}})})},answerApproval(e){let t=O.pending,o=typeof e=="boolean"?e:e.approved,r=typeof e!="boolean"&&e.trust===true&&o,n=t?`${t.toolId}.${t.action}`:"";X({pending:null,...r&&t&&!O.trusted.some(i=>i.key===n)?{trusted:[...O.trusted,{key:n,label:t.label}]}:{}}),t?.resolve(e)},untrust(e){Zo?.session.untrust(e),X({trusted:O.trusted.filter(t=>t.key!==e)})},restorePending(e){return O.pending||O.busy?false:(X({pending:{...e,restored:true,resolve:()=>{}}}),true)},addNote(e){X({messages:[...O.messages,{id:wo(),role:"assistant",text:e,toolCalls:[],blocks:[],endedAt:to()}]})},hydrate(e){return O.messages.length>0||O.busy?false:(X({messages:e.messages.map(t=>({...t,restored:true})),answers:e.answers,usage:e.usage,queued:e.queued??[]}),true)},reset(){O.pending?.resolve(false),X({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 qn(e){return e.pending?"awaitingApproval":e.busy?e.stopping?"stopping":"running":e.awaitingBlockId?"awaitingAnswer":"idle"}function Fn(e){let t=qn(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 td,hasAccountAccess as ro,subscribeAccountAccess as od}from"@buoy-gg/shared-ui/web";import{useCallback as De,useEffect as dt,useMemo as _n,useRef as ut,useState as rd,useSyncExternalStore as nd}from"react";import{dispatchToolAction as Un,listSnapshotToolIds as id,listToolActions as ld,readToolSnapshot as ad,waitForToolRegistry as Kn}from"@buoy-gg/shared-ui/web";import{answerToText as Gn,CATALOG as er,createAskBuoySession as sd,readTargetDigest as cd,runGatedAction as Jn,SNAPSHOT_ACTION as Yn}from"@buoy-gg/agent-core/web";function tr(){b.getHeldSession()?.session.reset(),b.reset(),Xc()}async function Qn(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}:(tr(),{cleared:true,reverted:o.reverted,failed:[]})}return tr(),{cleared:true,reverted:0,failed:[]}}var Xn="claude-haiku-5-5";function dd(e,t,o){let r=e?.hostedModels;if(!e||!r?.claude||!r.luna)return e;let n=t==="claude"&&!o?r.claude:r.luna,i=n===r.claude?r.luna:r.claude;return{...e,...n,hostedFallback:i}}var no=typeof co<"u"&&!co;function ud(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 Zn(){try{let e=ld();for(let t of id())e[t]||(e[t]=[]),e[t].includes(Yn)||(e[t]=[Yn,...e[t]]);return e}catch{return{}}}var pd=600;function vo(){return nd(b.subscribe,b.getState,b.getState)}function ei(e){let t=vo(),o=An(),r=_n(()=>dd(e,o,t.claudeOut),[e,o,t.claudeOut]),n=ut(r);(t.messages.length===0||!n.current)&&(n.current=r);let i=n.current,a=ut(e);a.current=e;let g=!!e?.hostedModels?.claude,d=t.messages.length===0;dt(()=>{let T=a.current?.readUsage;if(!g||o!=="claude"||!d||!T)return;let j=true;return T().then(F=>{j&&F.claude&&b.setClaudeOut(!F.claude.available)}).catch(()=>{}),()=>{j=false}},[g,o,d]);let h=td()(),f=ut(h);f.current=h;let m=De((...T)=>!ro()||!f.current?Promise.reject(new Error("Ask Buoy requires Pro access.")):Un(...T),[]),L=ut(null),V=ut(false),ee=ut(null),ce=ut(i);ce.current=i;let pe=!!i?.endpoint&&!!i?.model,Pe=i?.persistTranscript!==false,{bypassApprovals:qe,readOnly:We}=Pt(),Xe=ut(qe);Xe.current=qe;let Ze=ut(We);Ze.current=We;let et=De(()=>Ze.current?{...i?.policy??{},readOnly:true}:i?.policy??{},[i]),[Vt,tt]=rd(0);dt(()=>{let T=false;return Kn().then(()=>{T||tt(j=>j+1)}),()=>{T=true}},[]);let Ee=_n(()=>Zn(),[Vt]),Nt=Object.keys(Ee).sort().join(",");dt(()=>{if(b.setConfigured(pe),b.setMeta({model:i?.model,protocol:i?.protocol??(i?"anthropic":void 0),appName:i?.appName,platform:we.OS,build:no?"release":"development"}),!pe||!i){L.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 T=i.protocol??"anthropic";no&&i.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."):T==="anthropic"&&/^https?:\/\/api\.openai\.com\//i.test(i.endpoint)?b.setNotice('This endpoint is api.openai.com but the protocol is "anthropic". Set protocol: "openai" in the askBuoy config.'):T==="openai"&&/^https?:\/\/api\.anthropic\.com\//i.test(i.endpoint)?b.setNotice('This endpoint is api.anthropic.com but the protocol is "openai". Remove protocol or set it to "anthropic".'):b.setNotice(null),b.setReporter(i.reportProblem??null),b.setUsageReader(i.readUsage??null);let j=[i.endpoint,i.protocol??"anthropic",i.model].join("|"),F=b.getHeldSession();if(F&&F.signature===j){L.current=F.session,F.session.setAvailableActions(Ee),F.session.setApprovalBypass(Xe.current),F.session.setReadOnly(Ze.current),b.setLedger(F.session.ledger);return}let de=sd({endpoint:i.endpoint,protocol:i.protocol??"anthropic",model:i.model,headers:i.headers,apiKey:i.apiKey,maxTokens:i.maxTokens,anthropicVersion:i.anthropicVersion,requestOverrides:i.requestOverrides,hosted:i.hosted===true,...i.hostedFallback?{fallback:i.hostedFallback,onModelSwitch:Q=>{let ao=(Q==="fallback"?i.hostedFallback?.model:i.model)===Xn;b.setMeta({model:Q==="fallback"?i.hostedFallback?.model:i.model}),Q==="fallback"?(ao||b.setClaudeOut(true),b.setNotice(ao?"Luna is down right now, so Claude is answering.":"Claude is busy right now, so Luna is answering.")):b.setNotice(null)}}:{},catalog:i.tools?.length?[...er,...i.tools]:void 0,dispatch:m,readSnapshot:ad,availableActions:Ee,policy:i.policy,context:i.context,isRelease:no,appName:i.appName,platform:we.OS,requestApproval:Q=>b.askApproval(Q)});L.current=de,de.setApprovalBypass(Xe.current),de.setReadOnly(Ze.current),b.holdSession(de,j),b.setLedger(de.ledger);let $e=false;return Kn().then(Q=>{Q&&!$e&&de.prime()}),Pe&&!V.current&&(V.current=true,Wn().then(Q=>{!Q||!b.hydrate({messages:Q.messages,answers:Q.answers,usage:Q.usage,queued:Q.queued})||(L.current?.restore(Q.history),Q.ledger?.length&&L.current?.ledger.restore(Q.ledger),Q.pending&&b.restorePending(Q.pending))})),()=>{$e=true}},[pe,i,Ee,Nt,Pe]),dt(()=>{L.current?.setApprovalBypass(qe)},[qe]),dt(()=>{L.current?.setReadOnly(We)},[We]);let jt=t.messages,ht=t.answers,Mt=t.usage,Ce=t.busy,gt=t.pending,qt=t.queued;dt(()=>{if(!Pe||jt.length===0)return;let T=()=>{En(Jc({messages:jt,history:L.current?.messages??[],answers:ht,usage:Mt,pending:gt,ledger:b.getLedger()?.list(),queued:qt}))};if(!Ce||gt){T();return}let j=setTimeout(T,pd);return()=>clearTimeout(j)},[Pe,Ce,jt,ht,Mt,gt,qt]);let Dt=De(T=>{if(!ro()||!f.current)return;let j=L.current;if(!j)return;b.beginTurn();let F=b.startAssistant(),de=new AbortController;ee.current=de,j.setAvailableActions(Zn());let $e=ce.current?.onEvent;(async()=>{try{for await(let Q of j.send(T,de.signal))if(b.applyEvent(F,Q),$e)try{$e(Q)}catch{}}catch(Q){de.signal.aborted||b.applyEvent(F,{type:"error",message:Q instanceof Error?Q.message:"Something went wrong talking to your AI endpoint."})}finally{de.signal.aborted&&b.markStopped(F),b.finishAssistant(F),ee.current=null}})()},[]),ot=De(T=>{if(!ro()||!f.current)return;let j=T.trim();if(!L.current||!j)return;if(b.getState().busy){b.enqueue(j);return}let F=b.getState().awaitingBlockId;F&&b.recordAnswer({blockId:F,kind:"skipped"}),b.addUser(j),Dt(j)},[Dt]),To=De(()=>{let{messages:T,busy:j}=b.getState();if(j||!L.current)return;let F=[...T].reverse().find(de=>de.role==="user");F&&Dt(F.text)},[Dt]),ft=De(()=>{b.requestStop(),b.getState().pending&&b.answerApproval(false),ee.current?.abort(),ee.current=null},[]);dt(()=>{let T=od(()=>{ro()||ft()});return()=>{T(),ft()}},[ft]),dt(()=>{h||ft()},[h,ft]),dt(()=>{if(t.queued.length===0||qn(t)!=="idle"||Fn(t)!==null)return;let T=b.shiftQueued();T&&ot(T.text)},[t,ot]);let Co=De(T=>b.takeQueuedToDraft(T),[]),Io=De(T=>b.removeQueued(T),[]),kt=De(()=>{ee.current?.abort(),ee.current=null,tr()},[]),Ft=De(()=>Qn({dispatch:Un,undoFirst:true}),[]),_t=De(async T=>{let j=b.getLedger();if(!j){b.setNotice(`${T.label} couldn't run \u2014 no active Ask Buoy session.`);return}let F=i?.tools?.length?[...er,...i.tools]:void 0;if(T.targetDigest){let $e=await cd({toolId:T.toolId,action:T.action,params:T.params??{},dispatch:m,catalog:F});if($e!==void 0&&$e!==T.targetDigest){b.addNote(`\u201C${T.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 de=await Jn({toolId:T.toolId,action:T.action,params:T.params??{},dispatch:m,ledger:j,policy:et(),isRelease:no,catalog:F});de.ok?b.addNote(`Applied \u201C${T.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(`${T.label} failed \u2014 ${de.error}`)},[i,et]),Rt=De(T=>{let j=b.getState().pending,F=typeof T=="boolean"?T:T.approved;if(b.answerApproval(T),!!j?.restored){if(!F){b.addNote(`Skipped \u201C${j.label}\u201D. Nothing was changed.`);return}_t(j)}},[_t]),lo=De(T=>{b.recordAnswer(T);let j=ud(T.blockId);ot(j?`${j} \u2014 ${Gn(T)}`:Gn(T))},[ot]),zo=De(async(T,j)=>{if(!ro()||!f.current){b.setNotice("Ask Buoy requires Pro access.");return}if(T.send){ot(T.send);return}if(!T.dispatch)return;let F=`${j}:${T.label}`,de=b.getLedger();if(!de){b.setNotice(`${T.label} failed \u2014 no active Ask Buoy session.`);return}b.setActionState(F,"running");let $e=await Jn({toolId:T.dispatch.toolId,action:T.dispatch.action,params:T.dispatch.params??{},dispatch:m,ledger:de,policy:et(),isRelease:no,catalog:i?.tools?.length?[...er,...i.tools]:void 0});$e.ok?b.setActionState(F,"done"):(b.setActionState(F,"failed"),b.setNotice(`${T.label} failed \u2014 ${$e.error}`))},[ot,i,et]);return{state:t,send:ot,stop:ft,reset:kt,undoThenReset:Ft,approve:Rt,retry:To,answer:lo,runAction:zo,editQueued:Co,removeQueued:Io,configured:pe,toolCount:Object.keys(Ee).length,availableToolIds:Object.keys(Ee)}}import{Fragment as hd,jsx as Z,jsxs as Me}from"react/jsx-runtime";function ti(){let e=Pt(),t=vo().trusted;return Me(Ke,{style:U.scroll,contentContainerStyle:U.content,testID:"buoy-ask-buoy-settings",children:[Z(fd,{}),Z(yd,{}),Z(l,{style:U.section,children:"CHAT"}),Z(No,{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=>st.set("showThinking",o)}),Z(l,{style:U.note,children:"Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."}),Z(l,{style:U.section,children:"PERMISSIONS"}),Z(No,{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=>st.set("readOnly",o)}),e.readOnly?Z(l,{style:U.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,Z(No,{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=>st.set("bypassApprovals",o)}),e.bypassApprovals&&!e.readOnly?Me(s,{style:U.warning,testID:"buoy-ask-buoy-bypass-warning",children:[Z(Bc,{size:14,color:se.color.warning}),Z(l,{style:U.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."})]}):Z(l,{style:U.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?Me(s,{style:U.trustedBox,testID:"buoy-ask-buoy-trusted",children:[Z(l,{style:U.section,children:"ALLOWED WITHOUT ASKING \u2014 THIS CHAT"}),t.map(o=>Me(s,{style:U.trustedRow,children:[Z(l,{style:U.trustedLabel,numberOfLines:2,children:o.label}),Z(x,{testID:`buoy-ask-buoy-untrust-${o.key}`,accessibilityRole:"button",onPress:()=>b.untrust(o.key),style:({pressed:r})=>[U.forget,r&&{opacity:.7}],hitSlop:6,children:Z(l,{style:U.forgetText,children:"Ask again"})})]},o.key))]}):null]})}function gd(e){let t=Date.parse(e.length===10?`${e}T00:00:00Z`:e);if(Number.isNaN(t))return e;let o=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r=new Date(t);return`${o[r.getUTCMonth()]} ${r.getUTCDate()}`}function fd(){let e=b.getUsageReader(),[t,o]=Ac({kind:"loading"}),r=Rc(()=>{e&&(o({kind:"loading"}),e().then(n=>{n.claude&&b.setClaudeOut(!n.claude.available),o({kind:"ok",usage:n})}).catch(n=>o({kind:"error",message:n instanceof Error?n.message:"Could not load credits."})))},[e]);return $c(r,[r]),e?Me(s,{testID:"buoy-ask-buoy-credits",children:[Z(l,{style:U.section,children:"HOSTED AI CREDITS"}),Me(s,{style:U.trustedRow,children:[Z(s,{style:{flex:1,gap:2},children:t.kind==="ok"?Me(hd,{children:[Me(l,{style:U.trustedLabel,children:[t.usage.creditsLeft.toLocaleString()," of ",t.usage.grantCredits.toLocaleString()," credits left"]}),Me(l,{style:U.note,children:[t.usage.resetAt?`Resets ${gd(t.usage.resetAt)}. `:"","That's about ",Math.floor(t.usage.creditsLeft/5).toLocaleString()," more asks, included with your plan."]})]}):t.kind==="error"?Z(l,{style:U.note,children:t.message}):Z(l,{style:U.note,children:"Loading\u2026"})}),Z(x,{testID:"buoy-ask-buoy-credits-refresh",accessibilityRole:"button",onPress:r,style:({pressed:n})=>[U.forget,n&&{opacity:.7}],hitSlop:6,children:Z(l,{style:U.forgetText,children:"Refresh"})})]})]}):null}var bd=[{id:"claude",label:"Claude Haiku 5.5",note:"The default. Answers faster."},{id:"luna",label:"GPT-6 Luna",note:"Uses fewer credits."}];function yd(){let e=An(),{claudeOut:t}=vo();return b.getUsageReader()?Me(s,{testID:"buoy-ask-buoy-model",style:{gap:6},children:[Z(l,{style:U.section,children:"MODEL"}),bd.map(o=>{let r=e===o.id;return Me(x,{testID:`buoy-ask-buoy-model-${o.id}`,accessibilityRole:"radio",accessibilityState:{checked:r},onPress:()=>xo.set(o.id),style:({pressed:n})=>[U.trustedRow,r&&U.picked,n&&{opacity:.7}],children:[Me(s,{style:{flex:1,gap:2},children:[Z(l,{style:U.trustedLabel,children:o.label}),Z(l,{style:U.note,children:o.note})]}),Z(l,{style:U.forgetText,children:r?"On":""})]},o.id)}),Z(l,{style:U.note,testID:"buoy-ask-buoy-model-note",children:e==="claude"&&t?"Claude is busy right now. New chats use Luna until it opens again.":"If one model is down, the other answers. A change starts with your next new chat. You can also pick it on buoy.gg, on the Ask Buoy tab."})]}):null}var U=v.create({picked:{borderColor:se.color.info},scroll:{flex:1},content:{padding:se.gutter,gap:10,paddingBottom:32},section:{color:se.color.textTertiary,fontSize:10,fontWeight:"700",letterSpacing:.6,paddingHorizontal:4,paddingTop:4},warning:{flexDirection:"row",gap:8,padding:se.cardPad,borderRadius:se.radius.card,borderWidth:v.hairlineWidth,borderColor:se.color.warning,backgroundColor:se.color.surface},warningText:{flex:1,color:se.color.warning,fontSize:se.font.micro,lineHeight:16},trustedBox:{gap:6,paddingTop:6},trustedRow:{flexDirection:"row",alignItems:"center",gap:10,padding:se.cardPad,borderRadius:se.radius.card,borderWidth:v.hairlineWidth,borderColor:se.color.border,backgroundColor:se.color.surface},trustedLabel:{flex:1,color:se.color.text,fontSize:se.font.caption,lineHeight:18},forget:{paddingHorizontal:10,paddingVertical:6,borderRadius:se.radius.row,backgroundColor:se.color.button},forgetText:{color:se.color.text,fontSize:se.font.micro,fontWeight:"600"},note:{color:se.color.textTertiary,fontSize:se.font.micro,lineHeight:16,paddingHorizontal:4}});import{monoFont as md}from"@buoy-gg/shared-ui/web";import{ChevronRight as xd,night as Se,NightSectionLabel as kd}from"@buoy-gg/shared-ui/web";var wd=[{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"}],vd=4;function Sd(e){let t=e.availableToolIds.length>0;return wd.filter(o=>o.write&&e.readOnly||o.devOnly&&e.isRelease?false:o.needs?t&&e.availableToolIds.includes(o.needs):true).slice(0,vd).map(o=>o.text)}import{jsx as Qe,jsxs as io}from"react/jsx-runtime";var oi=typeof co<"u"&&!co;function Td({configured:e,onPick:t,availableToolIds:o=[],readOnly:r=false}){let n=Sd({availableToolIds:o,readOnly:r,isRelease:oi});return e?io(s,{style:Re.wrap,testID:"buoy-ask-buoy-empty",children:[Qe(l,{style:Re.title,children:"Ask about this app"}),Qe(l,{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."}),Qe(l,{style:Re.buildLine,testID:"buoy-ask-buoy-build-line",children:oi?"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."}),io(s,{style:Re.group,children:[Qe(kd,{children:"Try asking"}),Qe(s,{style:Re.card,children:n.map((i,a)=>Qe(Cd,{text:i,onPick:t,last:a===n.length-1},i))})]})]}):io(s,{style:Re.wrap,testID:"buoy-ask-buoy-unconfigured",children:[Qe(l,{style:Re.title,children:"Not set up yet"}),io(l,{style:Re.body,children:["Ask Buoy talks to your own company's AI endpoint. Nothing goes to Buoy. A developer needs to add the ",Qe(l,{style:Re.code,children:"askBuoy"})," setting where the app sets up Buoy. It needs your team's endpoint and model."]})]})}function Cd({text:e,onPick:t,last:o}){return io(x,{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:[Qe(l,{style:Re.rowText,children:e}),Qe(xd,{size:14,color:Se.color.textTertiary})]})}var Re=v.create({wrap:{flex:1,justifyContent:"center",paddingHorizontal:Se.gutter,paddingVertical:24,gap:8},title:{color:Se.color.text,fontSize:22,fontWeight:"700",letterSpacing:-.3},body:{color:Se.color.textSecondary,fontSize:Se.font.body,lineHeight:20},code:{color:Se.color.text,fontFamily:we.OS==="web"?md:"Menlo"},buildLine:{marginTop:8,color:Se.color.textTertiary,fontSize:Se.font.micro,lineHeight:15},group:{marginTop:Se.groupGap-8},card:{borderRadius:Se.radius.card,borderWidth:v.hairlineWidth,borderColor:Se.color.border,backgroundColor:Se.color.surface,overflow:"hidden"},row:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:Se.rowPadH,paddingVertical:13},rowDivider:{borderBottomWidth:v.hairlineWidth,borderBottomColor:Se.color.separator},rowText:{flex:1,color:Se.color.text,fontSize:Se.font.body,lineHeight:19},pressed:{backgroundColor:Se.color.fill}});import{memo as Id,useCallback as It,useEffect as zd,useRef as or,useState as rr}from"react";import{AlertTriangle as nr,Check as ri,ChevronDown as ni,ChevronRight as ii,Copy as Dd,night as w,X as Rd}from"@buoy-gg/shared-ui/web";import{toolTitle as $d}from"@buoy-gg/agent-core/web";import{isAskBlock as Ad}from"@buoy-gg/agent-core/web";function Bd({block:e,forToolCallId:t}){if(!t)return false;let o="source"in e?e.source:void 0;return o==="live"||o==="mocked"}function Ld(e,t){let o=new Set(t),r=new Map,n=[],i=[];for(let a of e){if(Ad(a.block)){i.push(a);continue}if(Bd(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:i}}import{useState as li}from"react";import{Activity as Od,ChevronDown as Hd,ChevronRight as Pd,night as te}from"@buoy-gg/shared-ui/web";function ir(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 ai(e){return(e.reasoning?.length??0)>0||e.toolCalls.length>0}var Wd=e=>e.status==="ok"?e.summary||"done":e.status==="running"?"running":`${e.status}${e.summary?` \u2014 ${e.summary}`:""}`;function si(e,t=" "){let o=[];for(let r of ir(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 ${Wd(i)}`),i.params&&o.push(`${t} ${i.params}`)}return o}import{Fragment as Ed,jsx as Le,jsxs as pt}from"react/jsx-runtime";function Vd({n:e,call:t}){let[o,r]=li(false),n=t.status==="failed"||t.status==="refused";return pt(x,{onPress:()=>r(i=>!i),accessibilityRole:"button",accessibilityState:{expanded:o},style:be.step,children:[pt(s,{style:be.stepLine,children:[Le(l,{style:be.stepN,children:e}),pt(l,{style:[be.stepName,n&&be.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),t.durationMs!==void 0?pt(l,{style:be.stepMs,children:[t.durationMs,"ms"]}):null,Le(l,{style:[be.stepStatus,n&&be.stepFailed],numberOfLines:1,children:t.status==="ok"?t.summary||"done":t.status})]}),o?pt(s,{style:be.detail,children:[Le(l,{style:be.detailLabel,children:"SENT"}),Le(l,{style:be.code,selectable:true,children:t.params??"no parameters"}),t.result?pt(Ed,{children:[Le(l,{style:be.detailLabel,children:"RETURNED"}),Le(l,{style:be.code,selectable:true,children:t.result})]}):null]}):null]})}function ci({message:e}){let[t,o]=li(false);if(!ai(e))return null;let r=ir(e),n=r.filter(d=>d.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,g=[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 pt(s,{style:be.wrap,testID:"buoy-ask-buoy-thinking",children:[pt(x,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>o(d=>!d),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:be.head,children:[Le(Od,{size:12,color:te.color.textTertiary}),Le(l,{style:be.headText,children:g}),t?Le(Hd,{size:12,color:te.color.textTertiary}):Le(Pd,{size:12,color:te.color.textTertiary})]}),t?pt(s,{style:be.body,children:[r.map((d,h)=>d.kind==="thought"?Le(l,{style:be.thought,selectable:true,children:d.text.trim()},`t${h}`):Le(Vd,{n:d.n,call:d.call},d.call.id)),i===0?Le(l,{style:be.none,children:"This model reports no reasoning \u2014 the steps above are the whole trace."}):null]}):null]})}var be=v.create({wrap:{marginTop:8,borderRadius:te.radius.badge,borderWidth:v.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:v.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 Nd,useRef as jd}from"react";import{night as Md}from"@buoy-gg/shared-ui/web";import{jsx as di}from"react/jsx-runtime";function qd(){let e=jd([0,1,2].map(()=>new ue.Value(.25))).current;return Nd(()=>{let t=e.map((o,r)=>ue.loop(ue.sequence([ue.delay(r*140),ue.timing(o,{toValue:1,duration:320,easing:At.inOut(At.ease),useNativeDriver:true}),ue.timing(o,{toValue:.25,duration:320,easing:At.inOut(At.ease),useNativeDriver:true}),ue.delay((2-r)*140)])));return t.forEach(o=>o.start()),()=>t.forEach(o=>o.stop())},[e]),di(s,{style:ui.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:e.map((t,o)=>di(ue.View,{style:[ui.dot,{opacity:t}]},o))})}var ui=v.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:Md.color.textSecondary}});import{jsx as k,jsxs as ye}from"react/jsx-runtime";function pi({status:e}){switch(e){case"running":return k(Yt,{size:"small",color:w.color.textSecondary});case"ok":return k(s,{style:[y.mark,y.markOk],children:k(ri,{size:10,color:w.color.onAccent})});case"failed":return k(s,{style:[y.mark,y.markFailed],children:k(Rd,{size:10,color:w.color.text})});case"refused":return k(s,{style:[y.mark,y.markRefused],children:k(nr,{size:10,color:w.color.onAccent})});case"declined":case"stopped":return k(s,{style:[y.mark,y.markNotRun],children:k(s,{style:y.markNotRunBar})})}}function Fd(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 _d=e=>e.status==="failed"||e.status==="refused"||e.status==="declined"||e.status==="stopped";function hi({call:e,receipts:t,last:o}){let[r,n]=rr(false),i=Fd(e),a=r?ni:ii,g=e.status==="failed"&&e.summary&&e.summary!=="Failed"?e.summary:null;return ye(s,{style:[y.row,!o&&y.rowDivider],children:[ye(x,{testID:`buoy-ask-buoy-tool-${e.toolId}`,accessibilityRole:"button",accessibilityLabel:`${e.label}, ${i.text||"running"}`,accessibilityState:{expanded:r},onPress:()=>n(d=>!d),children:[ye(s,{style:y.rowLine,children:[k(s,{style:y.markSlot,children:k(pi,{status:e.status})}),k(l,{style:y.rowTitle,children:e.label}),i.text?k(l,{style:[y.rowStatus,i.tone==="danger"&&y.rowStatusDanger,i.tone==="warning"&&y.rowStatusWarning,i.tone==="ok"&&y.rowStatusOk],numberOfLines:1,children:i.text}):null,k(a,{size:12,color:w.color.textTertiary})]}),r&&ye(s,{style:y.rowDetail,children:[k(l,{style:y.rowTool,children:$d(e.toolId).toUpperCase()}),e.description?k(l,{style:y.rowDescription,children:e.description}):null,g?k(l,{style:y.rowFailure,children:g}):null,e.verification?k(l,{style:[y.rowDescription,e.verification.status==="failed"&&y.rowFailure,e.verification.status==="verified"&&y.rowVerified],testID:`buoy-ask-buoy-verification-${e.verification.status}`,children:e.verification.detail}):null]})]}),r&&t.length>0&&k(s,{style:y.rowReceipts,testID:`buoy-ask-buoy-tool-receipt-${e.toolId}`,children:t.map(d=>k(bo,{block:d},d.id))})]})}function Ud({label:e,count:t,calls:o,receipts:r,last:n}){let[i,a]=rr(false),g=i?ni:ii;return ye(s,{style:!n&&!i&&y.rowDivider,children:[k(x,{testID:"buoy-ask-buoy-reads-group",accessibilityRole:"button",accessibilityLabel:`${e}, ${t} reads`,accessibilityState:{expanded:i},onPress:()=>a(d=>!d),style:[y.row,i&&y.rowDivider],children:ye(s,{style:y.rowLine,children:[k(s,{style:y.markSlot,children:k(pi,{status:"ok"})}),k(l,{style:y.rowTitle,children:e}),ye(l,{style:y.rowStatus,numberOfLines:1,children:[t," reads"]}),k(g,{size:12,color:w.color.textTertiary})]})}),i&&k(s,{style:y.groupBody,children:o.map((d,h)=>k(hi,{call:d,receipts:r.get(d.id)??[],last:n&&h===o.length-1},d.id))})]})}function Kd({calls:e,receipts:t}){let o=Tc(e);return k(s,{style:y.card,testID:"buoy-ask-buoy-activity",children:o.map((r,n)=>r.kind==="reads"?k(Ud,{label:r.label,count:r.count,calls:r.calls,receipts:t,last:n===o.length-1},r.id):k(hi,{call:r.call,receipts:t.get(r.call.id)??[],last:n===o.length-1},r.call.id))})}function gi({blocks:e}){return e.length===0?null:k(s,{style:y.blocks,children:e.map(({block:t})=>k(bo,{block:t},t.id))})}function Gd({message:e}){return k(s,{style:y.systemLine,testID:"buoy-ask-buoy-system-line",children:k(l,{style:y.systemText,children:e.text})})}function Jd({message:e}){return k(s,{style:y.userWrap,children:k(s,{style:y.userBubble,children:k(l,{style:y.userText,selectable:true,children:e.text})})})}function Yd({message:e,onRetry:t,waitingOnUser:o}){let{showThinking:r}=Pt(),n=!!e.streaming&&!o,{nested:i,afterText:a,ask:g}=Ld(e.blocks,e.toolCalls.map(d=>d.id));return ye(s,{style:y.assistantWrap,children:[e.toolCalls.length>0&&k(Kd,{calls:e.toolCalls,receipts:i}),e.text.length>0&&k(Fr,{text:e.text,style:y.assistantText}),k(gi,{blocks:a}),k(gi,{blocks:g}),r&&!e.streaming&&k(ci,{message:e}),n&&ye(s,{style:y.waitingRow,children:[k(qd,{}),e.waiting?k(l,{style:y.waitingText,testID:"buoy-ask-buoy-waiting",children:e.waiting}):null]}),e.error&&(e.errorInfo?k(eu,{error:e.error,info:e.errorInfo,onRetry:t}):k(Xd,{error:e.error,onRetry:t})),e.stopped&&!e.error&&k(Qd,{onRetry:t,changed:e.toolCalls.some(d=>d.status==="ok"&&!!d.effect&&d.effect!=="read")})]})}function Qd({onRetry:e,changed:t}){return ye(s,{style:y.stoppedBox,testID:"buoy-ask-buoy-stopped",children:[k(l,{style:y.stoppedText,children:t?"Stopped. Changes already made are listed above.":"Stopped."}),e&&k(x,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:e,style:({pressed:o})=>[y.retry,o&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})})]})}function Xd({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 ye(s,{style:y.errorBox,testID:"buoy-ask-buoy-error",children:[k(nr,{size:14,color:w.color.danger}),ye(s,{style:y.errorBody,children:[k(l,{style:y.errorText,children:o}),k(l,{style:y.errorDetail,selectable:true,children:e}),t&&k(x,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:t,style:({pressed:r})=>[y.retry,r&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})})]})]})}var Zd=new Set(["credits_out","member_cap","plan_not_eligible","not_in_pilot","team_hosted_off","account_frozen","token_not_allowed","client_too_old","media_not_allowed","session_missing","session_revoked"]);function eu({error:e,info:t,onRetry:o}){let[r,n]=rr("idle"),i=`Ask Buoy error ${t.code}${t.requestId?` \xB7 request ${t.requestId}`:""} \xB7 ${new Date().toISOString()}`,{copied:a,copy:g}=ho(()=>i),d=b.getReporter(),h=It(()=>{d&&(n("sending"),d({requestId:t.requestId,code:t.code,note:"Reported from the error card."}).then(f=>n({id:f.reportId})).catch(()=>n("failed")))},[d,t.code,t.requestId]);return ye(s,{style:y.errorBox,testID:"buoy-ask-buoy-error",children:[k(nr,{size:14,color:w.color.danger}),ye(s,{style:y.errorBody,children:[k(l,{style:y.errorText,children:e}),ye(l,{style:y.errorDetail,selectable:true,testID:"buoy-ask-buoy-error-code",children:[t.code,t.requestId?` \xB7 ${t.requestId}`:""]}),ye(s,{style:y.transcriptActions,children:[o&&!Zd.has(t.code)&&k(x,{testID:"buoy-ask-buoy-retry",accessibilityRole:"button",accessibilityLabel:"Try again",onPress:o,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:"Try again"})}),k(x,{testID:"buoy-ask-buoy-error-copy",accessibilityRole:"button",accessibilityLabel:"Copy details",onPress:g,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:a?"Copied":"Copy details"})}),d&&k(x,{testID:"buoy-ask-buoy-error-report",accessibilityRole:"button",accessibilityLabel:"Report problem",disabled:r!=="idle"&&r!=="failed",onPress:h,style:({pressed:f})=>[y.retry,f&&y.retryPressed],children:k(l,{style:y.retryText,children:r==="sending"?"Sending\u2026":r==="failed"?"Report failed. Try again":typeof r=="object"?`Reported \xB7 ${r.id}`:"Report problem"})})]})]})]})}function fi(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(...si(r));else for(let n of r.toolCalls){let i=_d(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 Da(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 tu({testID:e,label:t,getText:o}){let{copied:r,copy:n}=ho(o);return ye(x,{testID:e,accessibilityRole:"button",accessibilityLabel:t,onPress:n,style:({pressed:i})=>[y.copyBtn,y.iconBtn,i&&y.copyPressed],children:[r?k(ri,{size:11,color:w.color.accent}):k(Dd,{size:11,color:w.color.textSecondary}),k(l,{style:[y.copyText,r&&y.copiedText],children:r?"Copied":t})]})}function ou({message:e}){let{showThinking:t}=Pt(),o=It(()=>fi(b.getState().messages,t),[t]),r=Ic(e);return ye(s,{style:y.transcriptActions,children:[r?k(l,{style:y.turnFooter,testID:"buoy-ask-buoy-turn-footer",children:r}):null,k(tu,{testID:"buoy-ask-buoy-copy",label:"Copy conversation",getText:o})]})}var ru=Id(function({message:e,onRetry:t,waitingOnUser:o}){if(e.role==="user")return k(Jd,{message:e});if(e.system)return k(Gd,{message:e});let r=!e.streaming&&!e.error;return ye(s,{children:[k(Yd,{message:e,onRetry:t,waitingOnUser:o}),r&&k(ou,{message:e})]})});function bi({messages:e,ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r,onRetry:n,waitingOnUser:i}){let a=or(null),g=or(true),d=or(false),h=It(pe=>{let{contentOffset:Pe,contentSize:qe,layoutMeasurement:We}=pe.nativeEvent,Xe=qe.height-We.height-Pe.y;g.current=Xe<80},[]),f=It(()=>{d.current=true},[]),m=It(pe=>{d.current&&h(pe)},[h]),L=It(pe=>{d.current=false,h(pe)},[h]),V=It(()=>{g.current&&(a.current?.scrollToEnd({animated:false}),requestAnimationFrame(()=>a.current?.scrollToEnd({animated:false})))},[]),ee=e[e.length-1],ce=ee?`${ee.id}:${ee.text.length}:${ee.toolCalls.length}:${ee.error??""}`:"";return zd(()=>{V()},[ce,V]),k(wr,{ref:a,testID:"buoy-ask-buoy-messages-scroll",style:y.list,contentContainerStyle:y.listContent,data:e,keyExtractor:pe=>pe.id,renderItem:({item:pe})=>k(ru,{message:pe,onRetry:pe.id===ee?.id?n:void 0,waitingOnUser:pe.id===ee?.id?i:false}),onScroll:m,onScrollBeginDrag:f,onScrollEndDrag:L,onMomentumScrollEnd:h,scrollEventThrottle:32,onContentSizeChange:V,keyboardShouldPersistTaps:"handled",keyboardDismissMode:"interactive",ListHeaderComponent:t,ListEmptyComponent:o,ListFooterComponent:r})}var y=v.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:v.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:v.hairlineWidth,borderColor:w.color.border,backgroundColor:w.color.surface,overflow:"hidden"},row:{paddingHorizontal:12,paddingVertical:10},rowDivider:{borderBottomWidth:v.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 Oe,X as nu}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as lr}from"react/jsx-runtime";var iu=132;function lu({items:e,paused:t,onEdit:o,onRemove:r}){return e.length===0?null:lr(s,{style:He.wrap,testID:"buoy-ask-buoy-queued",children:[Wt(Ke,{style:He.list,contentContainerStyle:He.listContent,keyboardShouldPersistTaps:"handled",children:e.map((n,i)=>lr(s,{style:[He.row,t!==null&&He.rowPaused],children:[lr(x,{testID:`buoy-ask-buoy-queue-item-${i}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${n.text}`,onPress:()=>o(n.id),style:({pressed:a})=>[He.rowBody,a&&He.pressed],children:[Wt(l,{style:He.ordinal,children:i===0?"NEXT":"THEN"}),Wt(l,{style:He.text,numberOfLines:3,children:n.text})]}),Wt(x,{testID:`buoy-ask-buoy-queue-remove-${i}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>r(n.id),hitSlop:8,style:({pressed:a})=>[He.remove,a&&He.pressed],children:Wt(nu,{size:11,color:Oe.color.textTertiary})})]},n.id))}),Wt(l,{style:[He.hint,t!==null&&He.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes \xB7 tap to edit"})]})}var He=v.create({wrap:{paddingHorizontal:Oe.gutter,paddingTop:8,gap:6,backgroundColor:Oe.color.bg},list:{maxHeight:iu},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:Oe.radius.row,borderWidth:v.hairlineWidth,borderColor:Oe.color.border,backgroundColor:Oe.color.surface},rowPaused:{borderColor:Oe.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:Oe.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:Oe.color.textSecondary,fontSize:Oe.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:Oe.color.textTertiary,fontSize:Oe.font.micro},hintPaused:{color:Oe.color.warning}});var au="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 su,jsx as he,jsxs as Et}from"react/jsx-runtime";function ar({visible:e,onClose:t,onBack:o,onMinimize:r,persistenceKey:n,config:i}){let{state:a,send:g,stop:d,reset:h,undoThenReset:f,approve:m,retry:L,answer:V,runAction:ee,editQueued:ce,removeQueued:pe,configured:Pe,toolCount:qe,availableToolIds:We}=ei(i),[Xe,Ze]=Do(false),et=Ue(()=>{d(),t()},[d,t]),Vt=Ue(()=>b.clearDraft(),[]),[tt,Ee]=Do(false),Nt=Ue(()=>Ee(false),[]),jt=Ue(()=>Ee(true),[]),ht=!e,Mt=!!a.pending||!!a.awaitingBlockId,Ce=a.messages[a.messages.length-1],gt=Kt(false),qt=Kt(a.busy);Ut(()=>{ht&&qt.current&&!a.busy&&(gt.current=true),ht||(gt.current=false),qt.current=a.busy},[ht,a.busy]),Ut(()=>{if(!ht){Ot("ask-buoy",null);return}Mt?Ot("ask-buoy",{kind:"needsInput",label:a.pending?"Needs your approval":"Has a question for you"}):gt.current&&Ce?.role==="assistant"&&Ce.error?Ot("ask-buoy",{kind:"failed",label:"The last turn failed"}):gt.current&&!a.busy?Ot("ask-buoy",{kind:"done",label:"Finished"}):Ot("ask-buoy",null)},[ht,Mt,a.busy,a.pending,Ce]),Ut(()=>()=>Ot("ask-buoy",null),[]),Ut(()=>{a.pending&&tt&&Ee(false)},[a.pending,tt]);let Dt=Al({minBottom:16}),[ot,To]=Do("bottomSheet"),ft=ot==="floating"?0:Dt.bottom,Co=Ue(()=>{let G=b.getLedger();G&&(async()=>{let ne=await G.revertAll(Dl);if(ne.failed.length===0){b.setNotice(null);return}let $t=ne.failed.map(so=>`${so.label} (${so.error})`).join("; ");b.setNotice(`Couldn't undo ${ne.failed.length} change${ne.failed.length===1?"":"s"} \u2014 ${$t}`)})()},[]),Io=Ue(()=>Ze(G=>!G),[]),kt=Kt(new ue.Value(560)).current,Ft=Kt(false),_t=Ue(()=>{Ft.current||(Ft.current=true,kt.stopAnimation(G=>{let ne=typeof G=="number"&&G>200?G:560;ue.timing(kt,{toValue:120,duration:220,useNativeDriver:false}).start(()=>{setTimeout(()=>{ue.spring(kt,{toValue:ne,friction:9,useNativeDriver:false}).start(()=>{Ft.current=false})},2500)})}))},[kt]),Rt=uo(()=>{let G=a.messages[a.messages.length-1];if(!G||G.role!=="assistant")return"";let ne=G.blocks.filter($t=>$t.block.kind==="peek").length;return ne>0?`${G.id}:${ne}`:""},[a.messages]),lo=Kt("");Ut(()=>{Rt&&Rt!==lo.current&&i?.peek!==false&&_t(),lo.current=Rt},[Rt,_t,i]);let zo=Ue(()=>{let G=b.getLedger()?.list().filter(ne=>!ne.undoneAt&&zl(ne.effect)).length??0;if(G===0){h();return}Bo.alert("Undo changes first?",`Ask Buoy made ${G} change${G===1?"":"s"} that can still be undone. Clearing the conversation loses the only automatic undo for ${G===1?"it":"them"}.`,[{text:"Undo, then clear",onPress:()=>{(async()=>{let ne=await f();if(ne.cleared)return;let $t=ne.reverted+ne.failed.length,so=ne.failed.map(br=>`${br.label} (${br.error})`).join(`
|
|
13
|
+
`);Bo.alert(`Couldn't undo ${ne.failed.length} of ${$t} change${$t===1?"":"s"}`,`${so}
|
|
14
14
|
|
|
15
|
-
Still applied in the app. Clear the conversation anyway?`,[{text:"Keep conversation",style:"cancel"},{text:"Clear anyway",style:"destructive",onPress:h}])})()}},{text:"Clear anyway",style:"destructive",onPress:h},{text:"Cancel",style:"cancel"}])},[h,f]),
|
|
15
|
+
Still applied in the app. Clear the conversation anyway?`,[{text:"Keep conversation",style:"cancel"},{text:"Clear anyway",style:"destructive",onPress:h}])})()}},{text:"Clear anyway",style:"destructive",onPress:h},{text:"Cancel",style:"cancel"}])},[h,f]),T=uo(()=>{let G=a.messages[a.messages.length-1];return!G||G.role!=="assistant"||!G.streaming?null:G.toolCalls.find(ne=>ne.status==="running")?.label??null},[a.messages]),j=gn(b.getLedger()),F=uo(()=>ic(j),[j]),de=uo(()=>({answer:V,runAction:(G,ne)=>{if(G.minimize){r?.({mode:"bottomSheet"});return}return ee(G,ne)},answered:a.answers,actionState:a.actionState,busy:a.busy,supports:{openTool:false,minimize:!!r,dispatch:true},rules:F}),[V,ee,r,a.answers,a.actionState,a.busy,F]),$e=!a.busy&&Ce?.role==="assistant"&&!!Ce.error,Q=!a.busy&&Ce?.role==="assistant"&&Ce.stopped&&!Ce.error?Ce.id:null,ao=Fn(a),{showThinking:hr,readOnly:gr,claudeNoticeSeen:wi}=Pt(),fr=i?.hosted===true&&!wi,vi=Ue(()=>fi(a.messages,hr),[a.messages,hr]),Si=Ue(()=>g(au),[g]),Ti=tt?Et(Lo,{children:[he(Lo.Navigation,{onBack:Nt}),he(Lo.Content,{title:"Settings",subtitle:"Ask Buoy",testID:"buoy-ask-buoy-settings-title"})]}):he(Cn,{configured:Pe,busy:a.busy,failed:$e,activeLabel:T,awaitingApproval:!!a.pending,startedAt:Ce?.role==="assistant"&&Ce.streaming?Ce.startedAt??null:null,stopping:a.stopping,readOnly:gr,toolCount:qe,hasMessages:a.messages.length>0,onBack:o,onReset:zo,getTranscript:vi,onOpenSettings:jt,onTicket:Si});return he($l,{visible:e,onClose:et,disableScrollWrapper:true,background:false,initialHeight:560,animatedHeight:kt,header:{customContent:Ti,showToggleButton:false},onBack:o,onMinimize:r,onModeChange:To,persistenceKey:n??"buoy-ask-buoy",enablePersistence:true,children:he(Br,{value:de,children:Et(s,{style:[zt.root,{paddingBottom:ft}],children:[he(fn,{ledger:b.getLedger(),onUndoAll:Co,expanded:Xe,onToggle:Io}),fr&&Et(s,{style:zt.notice,testID:"buoy-ask-buoy-hosted-notice",children:[he(Rr,{size:14,color:Ge.color.info}),Et(s,{style:{flex:1,gap:8},children:[he(l,{style:zt.noticeText,children:"Hosted Ask Buoy (beta) sends your question, and the app data it needs to answer, to Anthropic for Claude. If Claude is down, it goes to OpenAI through OpenRouter for Luna instead. Buoy keeps the cost of each answer, never the chat. Your plan includes weekly credits."}),he(x,{testID:"buoy-ask-buoy-hosted-notice-ok",accessibilityRole:"button",onPress:()=>{st.set("claudeNoticeSeen",true),st.set("hostedNoticeSeen",true)},style:({pressed:G})=>[zt.noticeButton,G&&{opacity:.7}],children:he(l,{style:zt.noticeButtonText,children:"Got it"})})]})]}),a.notice&&Et(s,{style:zt.notice,testID:"buoy-ask-buoy-notice",children:[he(Rr,{size:14,color:Ge.color.info}),he(l,{style:zt.noticeText,children:a.notice})]}),he(gc,{children:he(Rl,{featureName:"Ask Buoy",children:tt?he(ti,{}):Et(su,{children:[he(bi,{messages:a.messages,onRetry:L,waitingOnUser:!!a.pending||!!a.awaitingBlockId,ListEmptyComponent:he(Td,{configured:Pe,onPick:g,availableToolIds:We,readOnly:gr||!!i?.policy?.readOnly})}),he(lu,{items:a.queued,paused:ao,onEdit:ce,onRemove:pe}),a.pending&&he(un,{pending:a.pending,onAnswer:m}),he(xn,{onSend:g,onStop:d,busy:a.busy,draft:a.draft,onDraftTaken:Vt,disabled:!Pe||fr,focusKey:Q,canFocus:e,placeholder:Q?"Tell it what to do differently\u2026":a.awaitingBlockId?"Pick an option above, or type\u2026":void 0})]})})})]})})})}var zt=v.create({root:{flex:1,backgroundColor:"transparent"},notice:{flexDirection:"row",alignItems:"flex-start",gap:8,paddingHorizontal:Ge.gutter,paddingVertical:10,backgroundColor:Ge.color.infoSoft},noticeText:{flex:1,color:Ge.color.text,fontSize:Ge.font.caption,lineHeight:18},noticeButton:{alignSelf:"flex-start",paddingHorizontal:12,paddingVertical:6,borderRadius:Ge.radius.row,backgroundColor:Ge.color.button},noticeButtonText:{color:Ge.color.text,fontSize:Ge.font.caption,fontWeight:"600"}});import{AskBuoyIcon as yi,ASK_BUOY_ICON_COLOR as mi}from"@buoy-gg/floating-tools-core/web";import{jsx as xi}from"react/jsx-runtime";var So={id:"ask-buoy",name:"ASK BUOY",description:"Ask about this app in plain English",slot:"both",color:mi,icon:({size:e,slot:t})=>xi(yi,{size:t==="dial"?e*1.5:e}),component:ar};function cu(e){let{name:t,description:o,...r}=e,n=r;return{...So,name:t??So.name,description:o??So.description,component:i=>xi(ar,{...i,config:n})}}import{isReversible as sr}from"@buoy-gg/agent-core/web";var cr=1,du={version:cr,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:cr,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:oo(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=>sr(o.effect)).length,permanent:t.filter(o=>o.effect.kind!=="transient"&&!sr(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:sr(e.effect)})),undoAll:async()=>{let e=b.getLedger();return e?{ok:true,...await e.revertAll(Ln)}:{ok:false,error:"No Ask Buoy session on this device."}},reset:async()=>{let e=await Qn({dispatch:Ln,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}}}};import*as uu from"@buoy-gg/license/web";import{HOSTED_HEADERS as xt,HOSTED_PROTOCOL_VERSION as pu}from"@buoy-gg/agent-core/web";var ki="https://ai.buoy.gg/v1/chat/completions",dr="openai/gpt-6-luna",hu=10*6e4;async function ur(e=false){let t=uu.SessionManager;if(!t)return null;let o=t.getStatus();return o.state==="active"&&(e||o.grace||(o.validUntil??0)-Date.now()<hu)&&await t.refresh(true),t.getAccessToken()}function pr(e){let t=/^(https?:\/\/[^/]+)/.exec(e);return t?t[1]:e}function gu(e={}){let{endpoint:t=ki,...o}=e,r=`ask-buoy ${we.OS}`;return{...o,endpoint:t,hosted:true,protocol:"openai",model:dr,hostedModels:{luna:{endpoint:t,protocol:"openai",model:dr},claude:{endpoint:`${pr(t)}/v1/messages`,protocol:"anthropic",model:Xn}},maxTokens:8192,headers:async n=>{let i=await ur((n?.attempt??1)>1);return{...i?{[xt.session]:i}:{},[xt.ask]:n?.askId??"ask_unknown000",[xt.round]:String(n?.round??1),[xt.attempt]:String(n?.attempt??1),[xt.protocol]:String(pu),[xt.client]:r}},readUsage:async()=>{let n=await ur();if(!n)throw new Error("Sign in to see hosted credits.");let i=await fetch(`${pr(t)}/v1/usage`,{headers:{[xt.session]:n}});if(!i.ok)throw new Error(`usage HTTP ${i.status}`);let a=await i.json();return{creditsLeft:a.creditsLeft??0,grantCredits:a.grantCredits??0,spentCredits:a.spentCredits??0,resetAt:a.resetAt??null,...a.claude?{claude:{available:a.claude.available===true,reason:typeof a.claude.reason=="string"?a.claude.reason:null}}:{}}},reportProblem:async({requestId:n,code:i,note:a})=>{let g=await ur(),d=await fetch(`${pr(t)}/v1/report`,{method:"POST",headers:{"Content-Type":"application/json",...g?{[xt.session]:g}:{}},body:JSON.stringify({request_id:n,code:i,note:a,client:r})});if(!d.ok)throw new Error(`report HTTP ${d.status}`);let h=await d.json();if(!h.report_id)throw new Error("report: no id");return{reportId:h.report_id}}}}export{cr as ASK_BUOY_ADAPTER_VERSION,mi as ASK_BUOY_ICON_COLOR,un as ApprovalCard,Cn as AskBuoyHeader,yi as AskBuoyIcon,ar as AskBuoyModal,ti as AskBuoySettings,Ne as BlockActionRow,W as BlockCard,Br as BlockHandlersProvider,bo as BlockRenderer,fn as ChangesBar,xn as Composer,Xs as EditableUserBubble,Gs as ElapsedRow,ki as HOSTED_ENDPOINT,dr as HOSTED_MODEL,sn as LivePill,Fr as Markdown,Us as MessageActions,bi as MessageList,Er as ProvenanceBadge,Js as QueuedComposer,Ks as ReasoningStrip,Ys as ReloadDivider,ci as ThinkingStrip,Qs as Timestamp,st as askBuoySettings,b as askBuoyStore,du as askBuoySyncAdapter,So as askBuoyToolPreset,cu as createAskBuoyTool,ai as hasTrace,gu as hostedAskBuoy,oo as redactForWire,ir as traceEntries,si as traceToText,ei as useAskBuoy,Pt as useAskBuoySettings,vo as useAskBuoyState,oe as useBlockHandlers};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/ask-buoy",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.75",
|
|
4
4
|
"description": "In-app AI chat for supported Buoy inspection and action tools, using a configured model endpoint.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"buoy"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@buoy-gg/agent-core": "^7.0.
|
|
29
|
-
"@buoy-gg/floating-tools-core": "^7.0.
|
|
30
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
28
|
+
"@buoy-gg/agent-core": "^7.0.75",
|
|
29
|
+
"@buoy-gg/floating-tools-core": "^7.0.75",
|
|
30
|
+
"@buoy-gg/shared-ui": "^7.0.75"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@buoy-gg/license": "7.0.
|
|
33
|
+
"@buoy-gg/license": "7.0.75",
|
|
34
34
|
"react": "*"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"@types/react": "^19.1.0",
|
|
52
52
|
"@types/react-native": "^0.73.0",
|
|
53
53
|
"typescript": "~5.8.3",
|
|
54
|
-
"@buoy-gg/license": "^7.0.
|
|
55
|
-
"@buoy-gg/core": "^7.0.
|
|
54
|
+
"@buoy-gg/license": "^7.0.75",
|
|
55
|
+
"@buoy-gg/core": "^7.0.75"
|
|
56
56
|
},
|
|
57
57
|
"react-native-builder-bob": {
|
|
58
58
|
"source": "src",
|