@buoy-gg/ask-buoy 7.0.36 → 7.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -27
- package/lib/commonjs/components/ApprovalCard.js +56 -3
- package/lib/commonjs/components/ApprovalCard.js.map +1 -1
- package/lib/commonjs/components/AskBuoySettings.js +63 -1
- package/lib/commonjs/components/AskBuoySettings.js.map +1 -1
- package/lib/commonjs/components/MessageList.js +42 -2
- package/lib/commonjs/components/MessageList.js.map +1 -1
- package/lib/commonjs/components/QueuedMessages.js +1 -1
- package/lib/commonjs/components/QueuedMessages.js.map +1 -1
- package/lib/commonjs/preset.js +4 -3
- package/lib/commonjs/preset.js.map +1 -1
- package/lib/commonjs/store/askBuoyStore.js +46 -4
- package/lib/commonjs/store/askBuoyStore.js.map +1 -1
- package/lib/commonjs/store/useAskBuoy.js +36 -7
- package/lib/commonjs/store/useAskBuoy.js.map +1 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.js +13 -0
- package/lib/commonjs/sync/askBuoySyncAdapter.js.map +1 -1
- package/lib/module/components/ApprovalCard.js +57 -4
- package/lib/module/components/ApprovalCard.js.map +1 -1
- package/lib/module/components/AskBuoySettings.js +64 -2
- package/lib/module/components/AskBuoySettings.js.map +1 -1
- package/lib/module/components/MessageList.js +42 -2
- package/lib/module/components/MessageList.js.map +1 -1
- package/lib/module/components/QueuedMessages.js +1 -1
- package/lib/module/components/QueuedMessages.js.map +1 -1
- package/lib/module/preset.js +4 -3
- package/lib/module/preset.js.map +1 -1
- package/lib/module/store/askBuoyStore.js +46 -4
- package/lib/module/store/askBuoyStore.js.map +1 -1
- package/lib/module/store/useAskBuoy.js +36 -6
- package/lib/module/store/useAskBuoy.js.map +1 -1
- package/lib/module/sync/askBuoySyncAdapter.js +13 -0
- package/lib/module/sync/askBuoySyncAdapter.js.map +1 -1
- package/lib/typescript/components/ApprovalCard.d.ts +9 -1
- package/lib/typescript/components/ApprovalCard.d.ts.map +1 -1
- package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -1
- package/lib/typescript/components/MessageList.d.ts.map +1 -1
- package/lib/typescript/preset.d.ts +4 -2
- package/lib/typescript/preset.d.ts.map +1 -1
- package/lib/typescript/store/askBuoyStore.d.ts +32 -4
- package/lib/typescript/store/askBuoyStore.d.ts.map +1 -1
- package/lib/typescript/store/useAskBuoy.d.ts +3 -2
- package/lib/typescript/store/useAskBuoy.d.ts.map +1 -1
- package/lib/typescript/sync/askBuoySyncAdapter.d.ts +3 -0
- package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
# @buoy-gg/ask-buoy
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Ask Buoy adds an AI chat to your React Native app. It can inspect and act through installed Buoy tools, subject to your policy and each tool’s integration.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
For example, a tester can ask it to simulate a failed checkout request when Network overrides are configured. It reports the actions it took and exposes available undo operations. Some changes cannot be undone.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
You configure the model endpoint and authentication. Requests go from the app to that endpoint. Use an authenticated gateway that validates the caller and keeps provider secrets on the server.
|
|
8
8
|
|
|
9
9
|
## Setup
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npm install @buoy-gg/ask-buoy
|
|
12
|
+
npm install @buoy-gg/core @buoy-gg/ask-buoy
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
## Account and configuration
|
|
16
|
+
|
|
17
|
+
Ask Buoy requires Pro access. Use a development build with `@buoy-gg/core` and configure your Buoy account key. From your app’s directory, sign in:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx --package=@buoy-gg/core buoy login
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For Expo, initialize Buoy before rendering the menu:
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { Buoy } from "@buoy-gg/core";
|
|
27
|
+
|
|
28
|
+
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The login command writes the Expo key to `.env.local`. For React Native CLI, pass the key from your app’s environment configuration; React Native does not load `.env.local` automatically. Mount `FloatingDevTools` inside the same providers as your screens and restart the development server after installation. The [Quick Start](https://buoy.gg/buoy/latest/docs/quick-start) shows the complete root component setup.
|
|
32
|
+
|
|
33
|
+
This configuration fragment uses your existing `auth.getToken()` implementation. Your gateway must validate that token. Replace the endpoint and model with values your gateway supports.
|
|
34
|
+
|
|
15
35
|
```tsx
|
|
16
36
|
import { FloatingDevTools } from "@buoy-gg/core";
|
|
17
37
|
|
|
@@ -19,11 +39,9 @@ import { FloatingDevTools } from "@buoy-gg/core";
|
|
|
19
39
|
askBuoy={{
|
|
20
40
|
endpoint: "https://ai.acme.com/v1/messages",
|
|
21
41
|
protocol: "anthropic", // or "openai" — Azure, Gemini-compat, most gateways
|
|
22
|
-
model: "
|
|
23
|
-
maxTokens: 8192, // raise it on a thinking model; reasoning bills against this
|
|
42
|
+
model: "YOUR_MODEL_ID",
|
|
24
43
|
|
|
25
44
|
// Called before every request, so short-lived tokens work.
|
|
26
|
-
// This is the whole auth story: your credential, your gateway.
|
|
27
45
|
headers: async () => ({
|
|
28
46
|
Authorization: `Bearer ${await auth.getToken()}`,
|
|
29
47
|
}),
|
|
@@ -31,44 +49,57 @@ import { FloatingDevTools } from "@buoy-gg/core";
|
|
|
31
49
|
/>
|
|
32
50
|
```
|
|
33
51
|
|
|
34
|
-
|
|
52
|
+
Open Ask Buoy and ask it to read a known captured request. Confirm that it reports the actual request before trying a write. Available actions depend on installed tools and policy. Start with `policy: { readOnly: true }` in the `askBuoy` configuration if you want to validate reads first.
|
|
35
53
|
|
|
36
|
-
|
|
54
|
+
Keep package versions compatible with their declared peer dependencies, especially `@buoy-gg/license`. Check package-manager peer warnings when upgrading.
|
|
37
55
|
|
|
38
56
|
### Teach it your data
|
|
39
57
|
|
|
40
|
-
|
|
58
|
+
Buoy discovers routes, query keys, store names and storage keys by watching the app run, and reads the item shape of every non-empty list it can see — what it can't know is what any of that *means*, or the shape of a collection that is currently empty.
|
|
59
|
+
|
|
60
|
+
Add `context` inside the `askBuoy` configuration. For example:
|
|
41
61
|
|
|
42
62
|
```tsx
|
|
43
|
-
context
|
|
63
|
+
const context = {
|
|
44
64
|
notes: ["Prices are integer cents everywhere. `/api/*` ids are prefixed — ord_, usr_, itm_."],
|
|
45
65
|
types: { CartLine: "{ lineId: string; itemId: string; qty: number; unitPrice: number }" },
|
|
46
|
-
}
|
|
66
|
+
};
|
|
47
67
|
```
|
|
48
68
|
|
|
49
69
|
The docs carry a prompt you can paste into a coding agent to draft both from your repo.
|
|
50
70
|
|
|
51
|
-
|
|
71
|
+
Tasks that aren't guessable from the app — *"reproduce the pricing glitch"*, *"put this account in the expired state"* — go in `context.procedures`: an `id`, a one-line `summary` (the only part in every prompt), and a `body` with the steps, loaded when a request matches. A tester types **"run the expired-subscription check"** and the agent opens the playbook first instead of asking what that means. A procedure guides; it grants nothing.
|
|
72
|
+
|
|
73
|
+
## Permissions and verification
|
|
74
|
+
|
|
75
|
+
The changes bar lists undoable and permanent changes. Supported storage and query-cache writes capture the prior value for undo. Changes without a captured prior value are marked permanent.
|
|
76
|
+
|
|
77
|
+
Destructive actions require approval by default. Configure `policy` to require more approvals, allow or deny actions, limit steps, or enable read-only access. An approval note is passed to the model. **Allow for this chat** waives approval for that action during the conversation; it does not override read-only mode, deny rules, or release restrictions. Review or revoke these waivers in Settings.
|
|
78
|
+
|
|
79
|
+
Supported writes have outcome checks. The activity row reports **Verified**, **Done · not yet visible**, or **Done · check failed**. Inspect the affected screen or state when a result is unverified. Actions requiring development hooks are refused in release builds.
|
|
80
|
+
|
|
81
|
+
Credential redaction uses field names and value patterns. SecureStore values require `policy.secureReads`. Review the data your tools expose; redaction cannot establish that arbitrary app data is safe to send to a model.
|
|
82
|
+
|
|
83
|
+
## Sessions and debugging
|
|
84
|
+
|
|
85
|
+
- Saved sessions can restore the transcript, agent memory, and pending approvals. Set `persistTranscript: false` to disable transcript persistence. Saved transcripts omit tool results.
|
|
86
|
+
- Large, redacted results remain in memory for the conversation. The agent can retrieve fields or sections omitted from the model’s initial result. This evidence store is not persisted across restarts.
|
|
87
|
+
- Eligible rate-limit and overload responses are retried when no output was generated. Oversized requests can trim history and retry. The sheet reports retry activity.
|
|
88
|
+
- Answers can include tables, choices, diffs, images, receipts, and approval cards. Messages sent during a turn queue for later processing.
|
|
89
|
+
- **Settings → Chat → Show agent thinking** exposes available reasoning and step payloads, results, timing, and token counts. Inspect the result as well as the step status when diagnosing a failed action.
|
|
90
|
+
- A ticket summary can collect steps, expected and observed behavior, build information, and available evidence without running new actions.
|
|
91
|
+
|
|
92
|
+
## Desktop and custom integrations
|
|
52
93
|
|
|
53
|
-
|
|
54
|
-
- **Destructive actions wait for a tap** by default; everything else auto-runs behind the bar. Tunable with `policy` — `requireApproval`, `requireApprovalFor`, `allow`, `deny`, `maxSteps`, down to `readOnly: true` for a look-but-don't-touch support seat. **Settings → Permissions** exposes **Read only** and **Skip approval prompts** on the device, without a rebuild.
|
|
55
|
-
- **Release-build honesty**: the 24 actions that can't work outside a dev build are refused before dispatch with an explanation, never silently "succeed".
|
|
56
|
-
- **Credential redaction** by field name and value shape before anything reaches your model; the agent's own traffic is invisible to it; SecureStore *values* need `policy.secureReads`; the saved transcript keeps what was said but never a tool result (`persistTranscript: false` turns saving off entirely).
|
|
57
|
-
- **Show your work**: **Settings → Chat → Show agent thinking** adds a collapsed strip to every answer — `2 steps · 1 thought · 3.2s · 6210 tokens` — that opens into the model's reasoning and each step's exact payload and result. A step whose status is `ok` and whose result is `{"ok": false}` looks like a working step until you can see it.
|
|
94
|
+
Desktop can mirror the conversation and expose supported remote undo. There is no remote composer. Mirroring requires external sync and account admission; your app still controls authorization.
|
|
58
95
|
|
|
59
|
-
|
|
96
|
+
Custom tools need a sync adapter and a `ToolDescriptor` passed through `tools`. They use the same parameter validation and policy checks as built-in actions.
|
|
60
97
|
|
|
61
|
-
|
|
62
|
-
- **Rich answers, not walls of text** — tables, choices, diffs, image grids, receipts and approval cards, from a closed block catalog the model authors against.
|
|
63
|
-
- **Keep typing while it works** — messages you send mid-turn park above the composer and send one at a time.
|
|
64
|
-
- **Summarize for a ticket** — one card with steps, expected, observed, build and the evidence it actually saw. Nothing is run or changed to produce it.
|
|
65
|
-
- **Watch it from Buoy Desktop** — the desk gets a read-only mirror of the conversation, what the agent changed and what it spent, plus remote undo. There is no remote composer on purpose: the broker has no auth.
|
|
66
|
-
- **Your own tools too** — a custom tool with a sync adapter is dispatchable as `custom:<id>`; hand Ask Buoy a `ToolDescriptor` for it via `tools` and the agent can drive it with the same validation, policy gates and release-truth refusals as a built-in.
|
|
67
|
-
- **`onEvent`** streams every engine event — tool starts and results, blocks, approvals, errors, per-request token usage — so you can log agent activity to your own systems and meter cost per seat.
|
|
98
|
+
Use `onEvent` to observe tool calls, outcome checks, approvals, retries, errors, and token usage. Each `done` event includes a `stopReason`.
|
|
68
99
|
|
|
69
100
|
## Docs
|
|
70
101
|
|
|
71
|
-
|
|
102
|
+
For gateway requirements, model configuration, data sent to the model, and policy options, see **[buoy.gg/docs/tools/ask-buoy](https://buoy.gg/buoy/latest/docs/tools/ask-buoy)**
|
|
72
103
|
|
|
73
104
|
The headless engine (catalog, providers, turn loop, effect ledger, blocks) lives in [`@buoy-gg/agent-core`](https://www.npmjs.com/package/@buoy-gg/agent-core).
|
|
74
105
|
|
|
@@ -36,6 +36,7 @@ function ApprovalCard({
|
|
|
36
36
|
pending,
|
|
37
37
|
onAnswer
|
|
38
38
|
}) {
|
|
39
|
+
const [note, setNote] = (0, _react.useState)("");
|
|
39
40
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
40
41
|
style: styles.card,
|
|
41
42
|
testID: "buoy-ask-buoy-approval",
|
|
@@ -60,12 +61,24 @@ function ApprovalCard({
|
|
|
60
61
|
children: pending.reason
|
|
61
62
|
}), pending.description ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ApprovalDetails, {
|
|
62
63
|
text: pending.description
|
|
63
|
-
}) : null, /*#__PURE__*/(0, _jsxRuntime.
|
|
64
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
65
|
+
testID: "buoy-ask-buoy-approval-note",
|
|
66
|
+
value: note,
|
|
67
|
+
onChangeText: setNote,
|
|
68
|
+
placeholder: "Add a note for the agent (optional)",
|
|
69
|
+
placeholderTextColor: _sharedUi.night.color.textTertiary,
|
|
70
|
+
style: styles.note,
|
|
71
|
+
returnKeyType: "done",
|
|
72
|
+
blurOnSubmit: true
|
|
73
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
64
74
|
style: styles.actions,
|
|
65
75
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
66
76
|
testID: "buoy-ask-buoy-approve",
|
|
67
77
|
accessibilityRole: "button",
|
|
68
|
-
onPress: () => onAnswer(
|
|
78
|
+
onPress: () => onAnswer({
|
|
79
|
+
approved: true,
|
|
80
|
+
reason: note
|
|
81
|
+
}),
|
|
69
82
|
style: ({
|
|
70
83
|
pressed
|
|
71
84
|
}) => [styles.button, styles.approve, pressed && styles.pressed],
|
|
@@ -73,10 +86,28 @@ function ApprovalCard({
|
|
|
73
86
|
style: styles.approveText,
|
|
74
87
|
children: "Allow"
|
|
75
88
|
})
|
|
89
|
+
}), pending.restored ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
90
|
+
testID: "buoy-ask-buoy-approve-trust",
|
|
91
|
+
accessibilityRole: "button",
|
|
92
|
+
onPress: () => onAnswer({
|
|
93
|
+
approved: true,
|
|
94
|
+
reason: note,
|
|
95
|
+
trust: true
|
|
96
|
+
}),
|
|
97
|
+
style: ({
|
|
98
|
+
pressed
|
|
99
|
+
}) => [styles.button, styles.trust, pressed && styles.pressed],
|
|
100
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
101
|
+
style: styles.trustText,
|
|
102
|
+
children: "Allow for this chat"
|
|
103
|
+
})
|
|
76
104
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
77
105
|
testID: "buoy-ask-buoy-reject",
|
|
78
106
|
accessibilityRole: "button",
|
|
79
|
-
onPress: () => onAnswer(
|
|
107
|
+
onPress: () => onAnswer({
|
|
108
|
+
approved: false,
|
|
109
|
+
reason: note
|
|
110
|
+
}),
|
|
80
111
|
style: ({
|
|
81
112
|
pressed
|
|
82
113
|
}) => [styles.button, styles.reject, pressed && styles.pressed],
|
|
@@ -212,8 +243,20 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
212
243
|
detailContent: {
|
|
213
244
|
paddingBottom: 2
|
|
214
245
|
},
|
|
246
|
+
note: {
|
|
247
|
+
color: _sharedUi.night.color.text,
|
|
248
|
+
fontSize: _sharedUi.night.font.caption,
|
|
249
|
+
paddingHorizontal: 10,
|
|
250
|
+
paddingVertical: 7,
|
|
251
|
+
borderRadius: _sharedUi.night.radius.row,
|
|
252
|
+
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
253
|
+
borderColor: _sharedUi.night.color.border,
|
|
254
|
+
backgroundColor: _sharedUi.night.color.button,
|
|
255
|
+
marginTop: 2
|
|
256
|
+
},
|
|
215
257
|
actions: {
|
|
216
258
|
flexDirection: "row",
|
|
259
|
+
flexWrap: "wrap",
|
|
217
260
|
gap: 8,
|
|
218
261
|
marginTop: 6
|
|
219
262
|
},
|
|
@@ -230,6 +273,16 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
230
273
|
fontWeight: "600",
|
|
231
274
|
fontSize: _sharedUi.night.font.caption
|
|
232
275
|
},
|
|
276
|
+
trust: {
|
|
277
|
+
backgroundColor: _sharedUi.night.color.button,
|
|
278
|
+
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
279
|
+
borderColor: _sharedUi.night.color.accentBorderStrong
|
|
280
|
+
},
|
|
281
|
+
trustText: {
|
|
282
|
+
color: _sharedUi.night.color.accent,
|
|
283
|
+
fontWeight: "600",
|
|
284
|
+
fontSize: _sharedUi.night.font.caption
|
|
285
|
+
},
|
|
233
286
|
reject: {
|
|
234
287
|
backgroundColor: _sharedUi.night.color.button
|
|
235
288
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_sharedUi","_jsxRuntime","ApprovalCard","pending","onAnswer","jsxs","View","style","styles","card","testID","children","titleRow","jsx","AlertTriangle","size","color","night","warning","Text","title","restored","label","reason","description","ApprovalDetails","text","actions","Pressable","accessibilityRole","onPress","pressed","button","approve","approveText","reject","rejectText","open","setOpen","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_sharedUi","_jsxRuntime","ApprovalCard","pending","onAnswer","note","setNote","useState","jsxs","View","style","styles","card","testID","children","titleRow","jsx","AlertTriangle","size","color","night","warning","Text","title","restored","label","reason","description","ApprovalDetails","text","TextInput","value","onChangeText","placeholder","placeholderTextColor","textTertiary","returnKeyType","blurOnSubmit","actions","Pressable","accessibilityRole","onPress","approved","pressed","button","approve","approveText","trust","trustText","reject","rejectText","open","setOpen","accessibilityState","expanded","prev","disclosure","hitSlop","chevronOpen","chevronClosed","ChevronDown","disclosureText","ScrollView","detail","contentContainerStyle","detailContent","nestedScrollEnabled","StyleSheet","create","marginHorizontal","gutter","marginBottom","padding","cardPad","borderRadius","radius","borderWidth","hairlineWidth","borderColor","accentBorderStrong","backgroundColor","surface","gap","flexDirection","alignItems","fontSize","font","caption","fontWeight","row","lineHeight","textSecondary","info","infoSoft","micro","paddingHorizontal","paddingVertical","transform","rotate","maxHeight","marginTop","paddingBottom","border","flexWrap","accent","onAccent","opacity"],"sourceRoot":"../../../src","sources":["components/ApprovalCard.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,8 @@ var _reactNative = require("react-native");
|
|
|
8
8
|
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
9
9
|
var _useAskBuoySettings = require("../store/useAskBuoySettings");
|
|
10
10
|
var _askBuoySettings = require("../store/askBuoySettings");
|
|
11
|
+
var _askBuoyStore = require("../store/askBuoyStore");
|
|
12
|
+
var _useAskBuoy = require("../store/useAskBuoy");
|
|
11
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
14
|
/**
|
|
13
15
|
* The sheet's settings, reached from the header.
|
|
@@ -23,6 +25,7 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
23
25
|
|
|
24
26
|
function AskBuoySettings() {
|
|
25
27
|
const settings = (0, _useAskBuoySettings.useAskBuoySettings)();
|
|
28
|
+
const trusted = (0, _useAskBuoy.useAskBuoyState)().trusted;
|
|
26
29
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
|
|
27
30
|
style: styles.scroll,
|
|
28
31
|
contentContainerStyle: styles.content,
|
|
@@ -74,7 +77,35 @@ function AskBuoySettings() {
|
|
|
74
77
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
75
78
|
style: styles.note,
|
|
76
79
|
children: "On by default for destructive actions only \u2014 reads and ordinary writes already run without asking, and the changes bar records them."
|
|
77
|
-
})
|
|
80
|
+
}), trusted.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
81
|
+
style: styles.trustedBox,
|
|
82
|
+
testID: "buoy-ask-buoy-trusted",
|
|
83
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
84
|
+
style: styles.section,
|
|
85
|
+
children: "ALLOWED WITHOUT ASKING \u2014 THIS CHAT"
|
|
86
|
+
}), trusted.map(t => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
87
|
+
style: styles.trustedRow,
|
|
88
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
89
|
+
style: styles.trustedLabel,
|
|
90
|
+
numberOfLines: 2,
|
|
91
|
+
children: t.label
|
|
92
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
93
|
+
testID: `buoy-ask-buoy-untrust-${t.key}`,
|
|
94
|
+
accessibilityRole: "button",
|
|
95
|
+
onPress: () => _askBuoyStore.askBuoyStore.untrust(t.key),
|
|
96
|
+
style: ({
|
|
97
|
+
pressed
|
|
98
|
+
}) => [styles.forget, pressed && {
|
|
99
|
+
opacity: 0.7
|
|
100
|
+
}],
|
|
101
|
+
hitSlop: 6,
|
|
102
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
103
|
+
style: styles.forgetText,
|
|
104
|
+
children: "Ask again"
|
|
105
|
+
})
|
|
106
|
+
})]
|
|
107
|
+
}, t.key))]
|
|
108
|
+
}) : null]
|
|
78
109
|
});
|
|
79
110
|
}
|
|
80
111
|
const styles = _reactNative.StyleSheet.create({
|
|
@@ -109,6 +140,37 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
109
140
|
fontSize: _sharedUi.night.font.micro,
|
|
110
141
|
lineHeight: 16
|
|
111
142
|
},
|
|
143
|
+
trustedBox: {
|
|
144
|
+
gap: 6,
|
|
145
|
+
paddingTop: 6
|
|
146
|
+
},
|
|
147
|
+
trustedRow: {
|
|
148
|
+
flexDirection: "row",
|
|
149
|
+
alignItems: "center",
|
|
150
|
+
gap: 10,
|
|
151
|
+
padding: _sharedUi.night.cardPad,
|
|
152
|
+
borderRadius: _sharedUi.night.radius.card,
|
|
153
|
+
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
154
|
+
borderColor: _sharedUi.night.color.border,
|
|
155
|
+
backgroundColor: _sharedUi.night.color.surface
|
|
156
|
+
},
|
|
157
|
+
trustedLabel: {
|
|
158
|
+
flex: 1,
|
|
159
|
+
color: _sharedUi.night.color.text,
|
|
160
|
+
fontSize: _sharedUi.night.font.caption,
|
|
161
|
+
lineHeight: 18
|
|
162
|
+
},
|
|
163
|
+
forget: {
|
|
164
|
+
paddingHorizontal: 10,
|
|
165
|
+
paddingVertical: 6,
|
|
166
|
+
borderRadius: _sharedUi.night.radius.row,
|
|
167
|
+
backgroundColor: _sharedUi.night.color.button
|
|
168
|
+
},
|
|
169
|
+
forgetText: {
|
|
170
|
+
color: _sharedUi.night.color.text,
|
|
171
|
+
fontSize: _sharedUi.night.font.micro,
|
|
172
|
+
fontWeight: "600"
|
|
173
|
+
},
|
|
112
174
|
note: {
|
|
113
175
|
color: _sharedUi.night.color.textTertiary,
|
|
114
176
|
fontSize: _sharedUi.night.font.micro,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_sharedUi","_useAskBuoySettings","_askBuoySettings","_jsxRuntime","AskBuoySettings","settings","useAskBuoySettings","jsxs","ScrollView","style","styles","scroll","contentContainerStyle","content","testID","children","jsx","Text","section","ToggleRow","label","description","value","showThinking","onValueChange","next","askBuoySettings","set","note","readOnly","tone","emphasizeLabel","bypassApprovals","disabled","View","warning","AlertTriangle","size","color","night","warningText","StyleSheet","create","flex","padding","gutter","gap","paddingBottom","textTertiary","fontSize","fontWeight","letterSpacing","paddingHorizontal","paddingTop","flexDirection","cardPad","borderRadius","radius","card","borderWidth","hairlineWidth","borderColor","backgroundColor","surface","font","micro","lineHeight"],"sourceRoot":"../../../src","sources":["components/AskBuoySettings.tsx"],"mappings":";;;;;;AAWA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_sharedUi","_useAskBuoySettings","_askBuoySettings","_askBuoyStore","_useAskBuoy","_jsxRuntime","AskBuoySettings","settings","useAskBuoySettings","trusted","useAskBuoyState","jsxs","ScrollView","style","styles","scroll","contentContainerStyle","content","testID","children","jsx","Text","section","ToggleRow","label","description","value","showThinking","onValueChange","next","askBuoySettings","set","note","readOnly","tone","emphasizeLabel","bypassApprovals","disabled","View","warning","AlertTriangle","size","color","night","warningText","length","trustedBox","map","t","trustedRow","trustedLabel","numberOfLines","Pressable","key","accessibilityRole","onPress","askBuoyStore","untrust","pressed","forget","opacity","hitSlop","forgetText","StyleSheet","create","flex","padding","gutter","gap","paddingBottom","textTertiary","fontSize","fontWeight","letterSpacing","paddingHorizontal","paddingTop","flexDirection","cardPad","borderRadius","radius","card","borderWidth","hairlineWidth","borderColor","backgroundColor","surface","font","micro","lineHeight","alignItems","border","text","caption","paddingVertical","row","button"],"sourceRoot":"../../../src","sources":["components/AskBuoySettings.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -132,6 +132,20 @@ function statusText(call) {
|
|
|
132
132
|
text: "Not run — stopped",
|
|
133
133
|
tone: "muted"
|
|
134
134
|
};
|
|
135
|
+
// The outcome check, when the action had one: the difference between "the
|
|
136
|
+
// adapter said ok" and "the app now shows it". See agent-core engine/verify.ts.
|
|
137
|
+
if (call.verification?.status === "verified") return {
|
|
138
|
+
text: "Verified",
|
|
139
|
+
tone: "ok"
|
|
140
|
+
};
|
|
141
|
+
if (call.verification?.status === "unverified") return {
|
|
142
|
+
text: "Done · not yet visible",
|
|
143
|
+
tone: "muted"
|
|
144
|
+
};
|
|
145
|
+
if (call.verification?.status === "failed") return {
|
|
146
|
+
text: "Done · check failed",
|
|
147
|
+
tone: "warning"
|
|
148
|
+
};
|
|
135
149
|
return {
|
|
136
150
|
text: call.summary || "Done",
|
|
137
151
|
tone: "muted"
|
|
@@ -170,7 +184,7 @@ function ActivityRow({
|
|
|
170
184
|
style: styles.rowTitle,
|
|
171
185
|
children: call.label
|
|
172
186
|
}), status.text ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
173
|
-
style: [styles.rowStatus, status.tone === "danger" && styles.rowStatusDanger, status.tone === "warning" && styles.rowStatusWarning],
|
|
187
|
+
style: [styles.rowStatus, status.tone === "danger" && styles.rowStatusDanger, status.tone === "warning" && styles.rowStatusWarning, status.tone === "ok" && styles.rowStatusOk],
|
|
174
188
|
numberOfLines: 1,
|
|
175
189
|
children: status.text
|
|
176
190
|
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(Chevron, {
|
|
@@ -188,6 +202,10 @@ function ActivityRow({
|
|
|
188
202
|
}) : null, failureDetail ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
189
203
|
style: styles.rowFailure,
|
|
190
204
|
children: failureDetail
|
|
205
|
+
}) : null, call.verification ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
206
|
+
style: [styles.rowDescription, call.verification.status === "failed" && styles.rowFailure, call.verification.status === "verified" && styles.rowVerified],
|
|
207
|
+
testID: `buoy-ask-buoy-verification-${call.verification.status}`,
|
|
208
|
+
children: call.verification.detail
|
|
191
209
|
}) : null]
|
|
192
210
|
})]
|
|
193
211
|
}), open && receipts.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
@@ -364,7 +382,14 @@ function AssistantMessage({
|
|
|
364
382
|
blocks: askBlocks
|
|
365
383
|
}), showThinking && !message.streaming && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ThinkingStrip.ThinkingStrip, {
|
|
366
384
|
message: message
|
|
367
|
-
}), waiting && /*#__PURE__*/(0, _jsxRuntime.
|
|
385
|
+
}), waiting && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
386
|
+
style: styles.waitingRow,
|
|
387
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TypingDots.TypingDots, {}), message.waiting ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
388
|
+
style: styles.waitingText,
|
|
389
|
+
testID: "buoy-ask-buoy-waiting",
|
|
390
|
+
children: message.waiting
|
|
391
|
+
}) : null]
|
|
392
|
+
}), message.error && /*#__PURE__*/(0, _jsxRuntime.jsx)(ErrorNote, {
|
|
368
393
|
error: message.error,
|
|
369
394
|
onRetry: onRetry
|
|
370
395
|
}), message.stopped && !message.error && /*#__PURE__*/(0, _jsxRuntime.jsx)(StoppedNote, {
|
|
@@ -734,6 +759,15 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
734
759
|
blocks: {
|
|
735
760
|
gap: 10
|
|
736
761
|
},
|
|
762
|
+
waitingRow: {
|
|
763
|
+
flexDirection: "row",
|
|
764
|
+
alignItems: "center",
|
|
765
|
+
gap: 8
|
|
766
|
+
},
|
|
767
|
+
waitingText: {
|
|
768
|
+
color: _sharedUi.night.color.textSecondary,
|
|
769
|
+
fontSize: _sharedUi.night.font.caption
|
|
770
|
+
},
|
|
737
771
|
assistantText: {
|
|
738
772
|
color: _sharedUi.night.color.text,
|
|
739
773
|
fontSize: _sharedUi.night.font.row,
|
|
@@ -810,6 +844,12 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
810
844
|
rowStatusWarning: {
|
|
811
845
|
color: _sharedUi.night.color.warning
|
|
812
846
|
},
|
|
847
|
+
rowStatusOk: {
|
|
848
|
+
color: _sharedUi.night.color.accent
|
|
849
|
+
},
|
|
850
|
+
rowVerified: {
|
|
851
|
+
color: _sharedUi.night.color.accent
|
|
852
|
+
},
|
|
813
853
|
rowDetail: {
|
|
814
854
|
paddingLeft: 28,
|
|
815
855
|
paddingTop: 8,
|