@buoy-gg/ask-buoy 7.0.35 → 7.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +35 -8
  2. package/lib/commonjs/blocks/BlockRenderer.js +13 -1
  3. package/lib/commonjs/blocks/BlockRenderer.js.map +1 -1
  4. package/lib/commonjs/blocks/DataBlocks.js +126 -33
  5. package/lib/commonjs/blocks/DataBlocks.js.map +1 -1
  6. package/lib/commonjs/blocks/ExtraBlocks.js +12 -6
  7. package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -1
  8. package/lib/commonjs/blocks/MediaBlocks.js +22 -6
  9. package/lib/commonjs/blocks/MediaBlocks.js.map +1 -1
  10. package/lib/commonjs/blocks/blockText.js +60 -0
  11. package/lib/commonjs/blocks/blockText.js.map +1 -0
  12. package/lib/commonjs/blocks/blockText.test.js +53 -0
  13. package/lib/commonjs/blocks/blockText.test.js.map +1 -0
  14. package/lib/commonjs/blocks/primitives.js +58 -2
  15. package/lib/commonjs/blocks/primitives.js.map +1 -1
  16. package/lib/commonjs/components/ApprovalCard.js +111 -7
  17. package/lib/commonjs/components/ApprovalCard.js.map +1 -1
  18. package/lib/commonjs/components/AskBuoyHeader.js +36 -4
  19. package/lib/commonjs/components/AskBuoyHeader.js.map +1 -1
  20. package/lib/commonjs/components/AskBuoyModal.js +160 -34
  21. package/lib/commonjs/components/AskBuoyModal.js.map +1 -1
  22. package/lib/commonjs/components/AskBuoySettings.js +50 -0
  23. package/lib/commonjs/components/AskBuoySettings.js.map +1 -1
  24. package/lib/commonjs/components/Composer.js +94 -14
  25. package/lib/commonjs/components/Composer.js.map +1 -1
  26. package/lib/commonjs/components/EmptyState.js +12 -5
  27. package/lib/commonjs/components/EmptyState.js.map +1 -1
  28. package/lib/commonjs/components/KeyboardPad.js +80 -0
  29. package/lib/commonjs/components/KeyboardPad.js.map +1 -0
  30. package/lib/commonjs/components/Markdown.js +148 -90
  31. package/lib/commonjs/components/Markdown.js.map +1 -1
  32. package/lib/commonjs/components/MessageList.js +339 -92
  33. package/lib/commonjs/components/MessageList.js.map +1 -1
  34. package/lib/commonjs/components/QueuedMessages.js +145 -0
  35. package/lib/commonjs/components/QueuedMessages.js.map +1 -0
  36. package/lib/commonjs/components/markdownParse.js +131 -0
  37. package/lib/commonjs/components/markdownParse.js.map +1 -0
  38. package/lib/commonjs/components/markdownParse.test.js +99 -0
  39. package/lib/commonjs/components/markdownParse.test.js.map +1 -0
  40. package/lib/commonjs/store/activityGroups.js +110 -0
  41. package/lib/commonjs/store/activityGroups.js.map +1 -0
  42. package/lib/commonjs/store/activityGroups.test.js +78 -0
  43. package/lib/commonjs/store/activityGroups.test.js.map +1 -0
  44. package/lib/commonjs/store/askBuoySettings.js +7 -2
  45. package/lib/commonjs/store/askBuoySettings.js.map +1 -1
  46. package/lib/commonjs/store/askBuoyStore.js +192 -10
  47. package/lib/commonjs/store/askBuoyStore.js.map +1 -1
  48. package/lib/commonjs/store/blockPlacement.js +64 -0
  49. package/lib/commonjs/store/blockPlacement.js.map +1 -0
  50. package/lib/commonjs/store/blockPlacement.test.js +123 -0
  51. package/lib/commonjs/store/blockPlacement.test.js.map +1 -0
  52. package/lib/commonjs/store/queue.test.js +150 -0
  53. package/lib/commonjs/store/queue.test.js.map +1 -0
  54. package/lib/commonjs/store/resetConversation.js +77 -0
  55. package/lib/commonjs/store/resetConversation.js.map +1 -0
  56. package/lib/commonjs/store/restorePending.test.js +63 -0
  57. package/lib/commonjs/store/restorePending.test.js.map +1 -0
  58. package/lib/commonjs/store/suggestions.js +54 -0
  59. package/lib/commonjs/store/suggestions.js.map +1 -0
  60. package/lib/commonjs/store/suggestions.test.js +58 -0
  61. package/lib/commonjs/store/suggestions.test.js.map +1 -0
  62. package/lib/commonjs/store/systemLine.test.js +77 -0
  63. package/lib/commonjs/store/systemLine.test.js.map +1 -0
  64. package/lib/commonjs/store/ticketPrompt.js +17 -0
  65. package/lib/commonjs/store/ticketPrompt.js.map +1 -0
  66. package/lib/commonjs/store/transcriptPersistence.js +92 -3
  67. package/lib/commonjs/store/transcriptPersistence.js.map +1 -1
  68. package/lib/commonjs/store/transcriptPersistence.test.js +148 -0
  69. package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -1
  70. package/lib/commonjs/store/turnRendering.test.js +151 -0
  71. package/lib/commonjs/store/turnRendering.test.js.map +1 -0
  72. package/lib/commonjs/store/useAskBuoy.js +271 -49
  73. package/lib/commonjs/store/useAskBuoy.js.map +1 -1
  74. package/lib/commonjs/sync/askBuoySyncAdapter.js +25 -4
  75. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +1 -1
  76. package/lib/module/blocks/BlockRenderer.js +13 -1
  77. package/lib/module/blocks/BlockRenderer.js.map +1 -1
  78. package/lib/module/blocks/DataBlocks.js +128 -35
  79. package/lib/module/blocks/DataBlocks.js.map +1 -1
  80. package/lib/module/blocks/ExtraBlocks.js +12 -6
  81. package/lib/module/blocks/ExtraBlocks.js.map +1 -1
  82. package/lib/module/blocks/MediaBlocks.js +22 -6
  83. package/lib/module/blocks/MediaBlocks.js.map +1 -1
  84. package/lib/module/blocks/blockText.js +55 -0
  85. package/lib/module/blocks/blockText.js.map +1 -0
  86. package/lib/module/blocks/blockText.test.js +53 -0
  87. package/lib/module/blocks/blockText.test.js.map +1 -0
  88. package/lib/module/blocks/primitives.js +58 -2
  89. package/lib/module/blocks/primitives.js.map +1 -1
  90. package/lib/module/components/ApprovalCard.js +113 -9
  91. package/lib/module/components/ApprovalCard.js.map +1 -1
  92. package/lib/module/components/AskBuoyHeader.js +37 -5
  93. package/lib/module/components/AskBuoyHeader.js.map +1 -1
  94. package/lib/module/components/AskBuoyModal.js +163 -37
  95. package/lib/module/components/AskBuoyModal.js.map +1 -1
  96. package/lib/module/components/AskBuoySettings.js +52 -2
  97. package/lib/module/components/AskBuoySettings.js.map +1 -1
  98. package/lib/module/components/Composer.js +95 -15
  99. package/lib/module/components/Composer.js.map +1 -1
  100. package/lib/module/components/EmptyState.js +12 -5
  101. package/lib/module/components/EmptyState.js.map +1 -1
  102. package/lib/module/components/KeyboardPad.js +75 -0
  103. package/lib/module/components/KeyboardPad.js.map +1 -0
  104. package/lib/module/components/Markdown.js +149 -90
  105. package/lib/module/components/Markdown.js.map +1 -1
  106. package/lib/module/components/MessageList.js +341 -94
  107. package/lib/module/components/MessageList.js.map +1 -1
  108. package/lib/module/components/QueuedMessages.js +140 -0
  109. package/lib/module/components/QueuedMessages.js.map +1 -0
  110. package/lib/module/components/markdownParse.js +125 -0
  111. package/lib/module/components/markdownParse.js.map +1 -0
  112. package/lib/module/components/markdownParse.test.js +98 -0
  113. package/lib/module/components/markdownParse.test.js.map +1 -0
  114. package/lib/module/store/activityGroups.js +103 -0
  115. package/lib/module/store/activityGroups.js.map +1 -0
  116. package/lib/module/store/activityGroups.test.js +77 -0
  117. package/lib/module/store/activityGroups.test.js.map +1 -0
  118. package/lib/module/store/askBuoySettings.js +7 -2
  119. package/lib/module/store/askBuoySettings.js.map +1 -1
  120. package/lib/module/store/askBuoyStore.js +190 -10
  121. package/lib/module/store/askBuoyStore.js.map +1 -1
  122. package/lib/module/store/blockPlacement.js +59 -0
  123. package/lib/module/store/blockPlacement.js.map +1 -0
  124. package/lib/module/store/blockPlacement.test.js +122 -0
  125. package/lib/module/store/blockPlacement.test.js.map +1 -0
  126. package/lib/module/store/queue.test.js +149 -0
  127. package/lib/module/store/queue.test.js.map +1 -0
  128. package/lib/module/store/resetConversation.js +72 -0
  129. package/lib/module/store/resetConversation.js.map +1 -0
  130. package/lib/module/store/restorePending.test.js +62 -0
  131. package/lib/module/store/restorePending.test.js.map +1 -0
  132. package/lib/module/store/suggestions.js +49 -0
  133. package/lib/module/store/suggestions.js.map +1 -0
  134. package/lib/module/store/suggestions.test.js +57 -0
  135. package/lib/module/store/suggestions.test.js.map +1 -0
  136. package/lib/module/store/systemLine.test.js +76 -0
  137. package/lib/module/store/systemLine.test.js.map +1 -0
  138. package/lib/module/store/ticketPrompt.js +13 -0
  139. package/lib/module/store/ticketPrompt.js.map +1 -0
  140. package/lib/module/store/transcriptPersistence.js +92 -3
  141. package/lib/module/store/transcriptPersistence.js.map +1 -1
  142. package/lib/module/store/transcriptPersistence.test.js +148 -0
  143. package/lib/module/store/transcriptPersistence.test.js.map +1 -1
  144. package/lib/module/store/turnRendering.test.js +150 -0
  145. package/lib/module/store/turnRendering.test.js.map +1 -0
  146. package/lib/module/store/useAskBuoy.js +275 -53
  147. package/lib/module/store/useAskBuoy.js.map +1 -1
  148. package/lib/module/sync/askBuoySyncAdapter.js +25 -4
  149. package/lib/module/sync/askBuoySyncAdapter.js.map +1 -1
  150. package/lib/typescript/blocks/BlockRenderer.d.ts.map +1 -1
  151. package/lib/typescript/blocks/DataBlocks.d.ts +11 -0
  152. package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -1
  153. package/lib/typescript/blocks/ExtraBlocks.d.ts +18 -2
  154. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -1
  155. package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -1
  156. package/lib/typescript/blocks/blockText.d.ts +14 -0
  157. package/lib/typescript/blocks/blockText.d.ts.map +1 -0
  158. package/lib/typescript/blocks/blockText.test.d.ts +2 -0
  159. package/lib/typescript/blocks/blockText.test.d.ts.map +1 -0
  160. package/lib/typescript/blocks/primitives.d.ts +16 -1
  161. package/lib/typescript/blocks/primitives.d.ts.map +1 -1
  162. package/lib/typescript/components/ApprovalCard.d.ts.map +1 -1
  163. package/lib/typescript/components/AskBuoyHeader.d.ts +31 -1
  164. package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -1
  165. package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -1
  166. package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -1
  167. package/lib/typescript/components/Composer.d.ts +16 -1
  168. package/lib/typescript/components/Composer.d.ts.map +1 -1
  169. package/lib/typescript/components/EmptyState.d.ts +5 -1
  170. package/lib/typescript/components/EmptyState.d.ts.map +1 -1
  171. package/lib/typescript/components/KeyboardPad.d.ts +33 -0
  172. package/lib/typescript/components/KeyboardPad.d.ts.map +1 -0
  173. package/lib/typescript/components/Markdown.d.ts +0 -10
  174. package/lib/typescript/components/Markdown.d.ts.map +1 -1
  175. package/lib/typescript/components/MessageList.d.ts +7 -2
  176. package/lib/typescript/components/MessageList.d.ts.map +1 -1
  177. package/lib/typescript/components/QueuedMessages.d.ts +10 -0
  178. package/lib/typescript/components/QueuedMessages.d.ts.map +1 -0
  179. package/lib/typescript/components/markdownParse.d.ts +49 -0
  180. package/lib/typescript/components/markdownParse.d.ts.map +1 -0
  181. package/lib/typescript/components/markdownParse.test.d.ts +2 -0
  182. package/lib/typescript/components/markdownParse.test.d.ts.map +1 -0
  183. package/lib/typescript/store/activityGroups.d.ts +29 -0
  184. package/lib/typescript/store/activityGroups.d.ts.map +1 -0
  185. package/lib/typescript/store/activityGroups.test.d.ts +2 -0
  186. package/lib/typescript/store/activityGroups.test.d.ts.map +1 -0
  187. package/lib/typescript/store/askBuoySettings.d.ts +22 -0
  188. package/lib/typescript/store/askBuoySettings.d.ts.map +1 -1
  189. package/lib/typescript/store/askBuoyStore.d.ts +142 -5
  190. package/lib/typescript/store/askBuoyStore.d.ts.map +1 -1
  191. package/lib/typescript/store/blockPlacement.d.ts +30 -0
  192. package/lib/typescript/store/blockPlacement.d.ts.map +1 -0
  193. package/lib/typescript/store/blockPlacement.test.d.ts +2 -0
  194. package/lib/typescript/store/blockPlacement.test.d.ts.map +1 -0
  195. package/lib/typescript/store/queue.test.d.ts +2 -0
  196. package/lib/typescript/store/queue.test.d.ts.map +1 -0
  197. package/lib/typescript/store/resetConversation.d.ts +38 -0
  198. package/lib/typescript/store/resetConversation.d.ts.map +1 -0
  199. package/lib/typescript/store/restorePending.test.d.ts +2 -0
  200. package/lib/typescript/store/restorePending.test.d.ts.map +1 -0
  201. package/lib/typescript/store/suggestions.d.ts +32 -0
  202. package/lib/typescript/store/suggestions.d.ts.map +1 -0
  203. package/lib/typescript/store/suggestions.test.d.ts +2 -0
  204. package/lib/typescript/store/suggestions.test.d.ts.map +1 -0
  205. package/lib/typescript/store/systemLine.test.d.ts +2 -0
  206. package/lib/typescript/store/systemLine.test.d.ts.map +1 -0
  207. package/lib/typescript/store/ticketPrompt.d.ts +11 -0
  208. package/lib/typescript/store/ticketPrompt.d.ts.map +1 -0
  209. package/lib/typescript/store/transcriptPersistence.d.ts +41 -2
  210. package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -1
  211. package/lib/typescript/store/turnRendering.test.d.ts +2 -0
  212. package/lib/typescript/store/turnRendering.test.d.ts.map +1 -0
  213. package/lib/typescript/store/useAskBuoy.d.ts +23 -1
  214. package/lib/typescript/store/useAskBuoy.d.ts.map +1 -1
  215. package/lib/typescript/sync/askBuoySyncAdapter.d.ts +26 -6
  216. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +1 -1
  217. package/package.json +9 -9
@@ -12,11 +12,14 @@ var _blocks = require("../blocks");
12
12
  var _ApprovalCard = require("./ApprovalCard");
13
13
  var _ChangesBar = require("./ChangesBar");
14
14
  var _Composer = require("./Composer");
15
+ var _KeyboardPad = require("./KeyboardPad");
15
16
  var _AskBuoyHeader = require("./AskBuoyHeader");
16
17
  var _AskBuoySettings = require("./AskBuoySettings");
17
18
  var _EmptyState = require("./EmptyState");
18
19
  var _MessageList = require("./MessageList");
20
+ var _QueuedMessages = require("./QueuedMessages");
19
21
  var _askBuoyStore = require("../store/askBuoyStore");
22
+ var _ticketPrompt = require("../store/ticketPrompt");
20
23
  var _useAskBuoy = require("../store/useAskBuoy");
21
24
  var _useAskBuoySettings = require("../store/useAskBuoySettings");
22
25
  var _jsxRuntime = require("react/jsx-runtime");
@@ -52,20 +55,122 @@ function AskBuoyModal({
52
55
  send,
53
56
  stop,
54
57
  reset,
58
+ undoThenReset,
55
59
  approve,
56
60
  retry,
57
61
  answer,
58
62
  runAction,
63
+ editQueued,
64
+ removeQueued,
59
65
  configured,
60
- toolCount
66
+ toolCount,
67
+ availableToolIds
61
68
  } = (0, _useAskBuoy.useAskBuoy)(config);
62
69
  const [changesOpen, setChangesOpen] = (0, _react.useState)(false);
70
+
71
+ /**
72
+ * Closing the sheet stops the turn.
73
+ *
74
+ * It did not, and the turn had no Stop left once the window was gone: closed
75
+ * mid-answer, the agent ran on invisibly — finishing tool calls and writing
76
+ * a full reply into a transcript nobody was watching. Dismissing the chat is
77
+ * the most natural "make it stop" gesture there is, and tool calls CHANGE
78
+ * THE APP, so a turn nobody can see or halt is the wrong thing to leave
79
+ * running. Minimise is the affordance for "keep going while I look" — that
80
+ * one deliberately does not stop anything.
81
+ */
82
+ const closeAndStop = (0, _react.useCallback)(() => {
83
+ stop();
84
+ onClose();
85
+ }, [stop, onClose]);
86
+ const takeDraft = (0, _react.useCallback)(() => _askBuoyStore.askBuoyStore.clearDraft(), []);
87
+
88
+ /**
89
+ * Settings replaces the transcript in place rather than opening over it. The
90
+ * sheet's own back arrow is the way out, and the conversation is untouched
91
+ * underneath — a toggle you flip here should be visible the moment you go
92
+ * back, not after dismissing something.
93
+ */
94
+ const [showSettings, setShowSettings] = (0, _react.useState)(false);
95
+ const closeSettings = (0, _react.useCallback)(() => setShowSettings(false), []);
96
+ const openSettings = (0, _react.useCallback)(() => setShowSettings(true), []);
97
+
98
+ /**
99
+ * An approval that arrives while the sheet is hidden HOLDS, and the rail says
100
+ * so.
101
+ *
102
+ * It used to auto-decline: minimised, the card was simply not on screen —
103
+ * the host keeps this component mounted with `visible={false}` — so the turn
104
+ * parked on a promise nobody could answer, and failing safe meant declining
105
+ * the change and ending the turn. Which made minimise mean "stop", the
106
+ * opposite of what it is for ("keep going while I look at the app").
107
+ *
108
+ * Now the chip in the minimised rail gets a badge — "!" for needs-input, a
109
+ * dot for finished or failed — through the `setToolAttention` seam, and
110
+ * tapping the chip is the existing restore path, so the card is one tap
111
+ * away rather than gone. The approval wait is already excluded from the
112
+ * turn's deadline, so holding costs nothing. Closing the sheet still stops.
113
+ *
114
+ * The settings view hides the card while `visible` stays true, so a question
115
+ * arriving there flips back to the chat: a card you cannot see is the
116
+ * original bug in a different coat.
117
+ */
118
+ const hidden = !visible;
119
+ const awaitingUser = !!state.pending || !!state.awaitingBlockId;
120
+ const lastMessage = state.messages[state.messages.length - 1];
121
+ const finishedWhileHidden = (0, _react.useRef)(false);
122
+ const wasBusy = (0, _react.useRef)(state.busy);
123
+ (0, _react.useEffect)(() => {
124
+ if (hidden && wasBusy.current && !state.busy) finishedWhileHidden.current = true;
125
+ if (!hidden) finishedWhileHidden.current = false;
126
+ wasBusy.current = state.busy;
127
+ }, [hidden, state.busy]);
128
+ (0, _react.useEffect)(() => {
129
+ if (!hidden) {
130
+ (0, _sharedUi.setToolAttention)("ask-buoy", null);
131
+ return;
132
+ }
133
+ if (awaitingUser) {
134
+ (0, _sharedUi.setToolAttention)("ask-buoy", {
135
+ kind: "needsInput",
136
+ label: state.pending ? "Needs your approval" : "Has a question for you"
137
+ });
138
+ } else if (finishedWhileHidden.current && lastMessage?.role === "assistant" && lastMessage.error) {
139
+ (0, _sharedUi.setToolAttention)("ask-buoy", {
140
+ kind: "failed",
141
+ label: "The last turn failed"
142
+ });
143
+ } else if (finishedWhileHidden.current && !state.busy) {
144
+ (0, _sharedUi.setToolAttention)("ask-buoy", {
145
+ kind: "done",
146
+ label: "Finished"
147
+ });
148
+ } else {
149
+ (0, _sharedUi.setToolAttention)("ask-buoy", null);
150
+ }
151
+ }, [hidden, awaitingUser, state.busy, state.pending, lastMessage]);
152
+ (0, _react.useEffect)(() => () => (0, _sharedUi.setToolAttention)("ask-buoy", null), []);
153
+ (0, _react.useEffect)(() => {
154
+ if (state.pending && showSettings) setShowSettings(false);
155
+ }, [state.pending, showSettings]);
63
156
  // A hardcoded device map, not the native library — an unmapped phone
64
157
  // silently returns bottom: 0, which is how footers ended up sitting on the
65
158
  // home indicator.
66
159
  const insets = (0, _sharedUi.useSafeAreaInsets)({
67
160
  minBottom: 16
68
161
  });
162
+ /**
163
+ * The safe-area inset is for the HOME INDICATOR, and only a bottom sheet
164
+ * touches it. A floating window is positioned away from the screen edge and
165
+ * clips its own rounded corner, so the same padding is just a band of dead
166
+ * space under the composer in the smallest layout the tool has.
167
+ *
168
+ * JsModal owns the mode (it restores a persisted one on mount and reports it
169
+ * here), so this mirrors rather than decides. Default matches JsModal's own:
170
+ * a sheet until told otherwise.
171
+ */
172
+ const [mode, setMode] = (0, _react.useState)("bottomSheet");
173
+ const bottomInset = mode === "floating" ? 0 : insets.bottom;
69
174
 
70
175
  /**
71
176
  * `dispatchToolAction` is imported STATICALLY at the top of this file, not
@@ -144,6 +249,12 @@ function AskBuoyModal({
144
249
  * New conversation, guarded. Clearing the session clears the ledger — the
145
250
  * ONLY undo surface — while the agent's changes stay live in the app, so
146
251
  * with reversible changes outstanding the user chooses their fate first.
252
+ *
253
+ * "Undo, then clear" reads the outcome. It did not: two of five reverts
254
+ * would fail (a key changed since) and the conversation cleared anyway,
255
+ * leaving two changes live with no record. Now a failed undo keeps the
256
+ * conversation and names what is still applied; clearing is a second,
257
+ * explicit tap. See resetConversation.ts.
147
258
  */
148
259
  const confirmReset = (0, _react.useCallback)(() => {
149
260
  const ledger = _askBuoyStore.askBuoyStore.getLedger();
@@ -156,9 +267,18 @@ function AskBuoyModal({
156
267
  text: "Undo, then clear",
157
268
  onPress: () => {
158
269
  void (async () => {
159
- const l = _askBuoyStore.askBuoyStore.getLedger();
160
- if (l) await l.revertAll(_sharedUi.dispatchToolAction);
161
- reset();
270
+ const outcome = await undoThenReset();
271
+ if (outcome.cleared) return;
272
+ const total = outcome.reverted + outcome.failed.length;
273
+ const stillApplied = outcome.failed.map(f => `${f.label} (${f.error})`).join("\n");
274
+ _reactNative.Alert.alert(`Couldn't undo ${outcome.failed.length} of ${total} change${total === 1 ? "" : "s"}`, `${stillApplied}\n\nStill applied in the app. Clear the conversation anyway?`, [{
275
+ text: "Keep conversation",
276
+ style: "cancel"
277
+ }, {
278
+ text: "Clear anyway",
279
+ style: "destructive",
280
+ onPress: reset
281
+ }]);
162
282
  })();
163
283
  }
164
284
  }, {
@@ -169,7 +289,7 @@ function AskBuoyModal({
169
289
  text: "Cancel",
170
290
  style: "cancel"
171
291
  }]);
172
- }, [reset]);
292
+ }, [reset, undoThenReset]);
173
293
 
174
294
  // The header's live status: the title of whichever tool call is in flight.
175
295
  const activeLabel = (0, _react.useMemo)(() => {
@@ -206,25 +326,24 @@ function AskBuoyModal({
206
326
 
207
327
  // The last assistant turn carrying an error is the only "it went wrong"
208
328
  // signal the header can read; it clears as soon as the next send starts.
209
- const lastMessage = state.messages[state.messages.length - 1];
210
329
  const failed = !state.busy && lastMessage?.role === "assistant" && !!lastMessage.error;
330
+ /**
331
+ * Stop invites a redirect. The turn just ended because the user said so;
332
+ * the likeliest next move is "do this instead", not "do that again" — so
333
+ * the composer takes focus with that prompt. Keyed by the stopped message so
334
+ * it happens once per stop, and only while the sheet is on screen.
335
+ */
336
+ const redirectKey = !state.busy && lastMessage?.role === "assistant" && lastMessage.stopped && !lastMessage.error ? lastMessage.id : null;
337
+ const queuePaused = (0, _askBuoyStore.queuePauseReason)(state);
211
338
 
212
339
  // Built on press, not on render — a streaming answer would otherwise rebuild
213
340
  // the whole transcript on every frame for a button nobody tapped.
214
341
  const {
215
- showThinking
342
+ showThinking,
343
+ readOnly
216
344
  } = (0, _useAskBuoySettings.useAskBuoySettings)();
217
345
  const getTranscript = (0, _react.useCallback)(() => (0, _MessageList.transcriptToText)(state.messages, showThinking), [state.messages, showThinking]);
218
-
219
- /**
220
- * Settings replaces the transcript in place rather than opening over it. The
221
- * sheet's own back arrow is the way out, and the conversation is untouched
222
- * underneath — a toggle you flip here should be visible the moment you go
223
- * back, not after dismissing something.
224
- */
225
- const [showSettings, setShowSettings] = (0, _react.useState)(false);
226
- const closeSettings = (0, _react.useCallback)(() => setShowSettings(false), []);
227
- const openSettings = (0, _react.useCallback)(() => setShowSettings(true), []);
346
+ const requestTicket = (0, _react.useCallback)(() => send(_ticketPrompt.TICKET_PROMPT), [send]);
228
347
  const header = showSettings ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
229
348
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
230
349
  onBack: closeSettings
@@ -238,16 +357,21 @@ function AskBuoyModal({
238
357
  busy: state.busy,
239
358
  failed: failed,
240
359
  activeLabel: activeLabel,
360
+ awaitingApproval: !!state.pending,
361
+ startedAt: lastMessage?.role === "assistant" && lastMessage.streaming ? lastMessage.startedAt ?? null : null,
362
+ stopping: state.stopping,
363
+ readOnly: readOnly,
241
364
  toolCount: toolCount,
242
365
  hasMessages: state.messages.length > 0,
243
366
  onBack: onBack,
244
367
  onReset: confirmReset,
245
368
  getTranscript: getTranscript,
246
- onOpenSettings: openSettings
369
+ onOpenSettings: openSettings,
370
+ onTicket: requestTicket
247
371
  });
248
372
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.JsModal, {
249
373
  visible: visible,
250
- onClose: onClose
374
+ onClose: closeAndStop
251
375
  // The message list is the only scroller. JsModal's default wrapper is
252
376
  // flexGrow:1, which makes a nested flex:1 scroller resolve against the
253
377
  // content and never scroll at all.
@@ -266,13 +390,14 @@ function AskBuoyModal({
266
390
  },
267
391
  onBack: onBack,
268
392
  onMinimize: onMinimize,
393
+ onModeChange: setMode,
269
394
  persistenceKey: persistenceKey ?? "buoy-ask-buoy",
270
395
  enablePersistence: true,
271
396
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blocks.BlockHandlersProvider, {
272
397
  value: blockHandlers,
273
398
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
274
399
  style: [styles.root, {
275
- paddingBottom: insets.bottom
400
+ paddingBottom: bottomInset
276
401
  }],
277
402
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChangesBar.ChangesBar, {
278
403
  ledger: _askBuoyStore.askBuoyStore.getLedger(),
@@ -289,25 +414,25 @@ function AskBuoyModal({
289
414
  style: styles.noticeText,
290
415
  children: state.notice
291
416
  })]
292
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.KeyboardAvoidingView, {
293
- style: styles.flex
294
- // iOS only: Android's default softwareKeyboardLayoutMode is "resize",
295
- // so the window shrinks and a bottom-anchored view rides up already.
296
- // Padding on both would lift the composer twice.
297
- ,
298
- behavior: _reactNative.Platform.OS === "ios" ? "padding" : undefined,
299
- enabled: _reactNative.Platform.OS === "ios",
300
- keyboardVerticalOffset: insets.bottom,
417
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyboardPad.KeyboardPad, {
301
418
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.FeatureGate, {
302
419
  featureName: "Ask Buoy",
303
420
  children: showSettings ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_AskBuoySettings.AskBuoySettings, {}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
304
421
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_MessageList.MessageList, {
305
422
  messages: state.messages,
306
423
  onRetry: retry,
424
+ waitingOnUser: !!state.pending || !!state.awaitingBlockId,
307
425
  ListEmptyComponent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_EmptyState.EmptyState, {
308
426
  configured: configured,
309
- onPick: send
427
+ onPick: send,
428
+ availableToolIds: availableToolIds,
429
+ readOnly: readOnly || !!config?.policy?.readOnly
310
430
  })
431
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_QueuedMessages.QueuedMessages, {
432
+ items: state.queued,
433
+ paused: queuePaused,
434
+ onEdit: editQueued,
435
+ onRemove: removeQueued
311
436
  }), state.pending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ApprovalCard.ApprovalCard, {
312
437
  pending: state.pending,
313
438
  onAnswer: approve
@@ -315,8 +440,12 @@ function AskBuoyModal({
315
440
  onSend: send,
316
441
  onStop: stop,
317
442
  busy: state.busy,
443
+ draft: state.draft,
444
+ onDraftTaken: takeDraft,
318
445
  disabled: !configured,
319
- placeholder: state.queued ? "Queued — sends when this turn finishes" : state.awaitingBlockId ? "Pick an option above, or type…" : undefined
446
+ focusKey: redirectKey,
447
+ canFocus: visible,
448
+ placeholder: redirectKey ? "Tell it what to do differently…" : state.awaitingBlockId ? "Pick an option above, or type…" : undefined
320
449
  })]
321
450
  })
322
451
  })
@@ -332,9 +461,6 @@ const styles = _reactNative.StyleSheet.create({
332
461
  flex: 1,
333
462
  backgroundColor: "transparent"
334
463
  },
335
- flex: {
336
- flex: 1
337
- },
338
464
  notice: {
339
465
  flexDirection: "row",
340
466
  alignItems: "flex-start",
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_agentCore","_sharedUi","_blocks","_ApprovalCard","_ChangesBar","_Composer","_AskBuoyHeader","_AskBuoySettings","_EmptyState","_MessageList","_askBuoyStore","_useAskBuoy","_useAskBuoySettings","_jsxRuntime","AskBuoyModal","visible","onClose","onBack","onMinimize","persistenceKey","config","state","send","stop","reset","approve","retry","answer","runAction","configured","toolCount","useAskBuoy","changesOpen","setChangesOpen","useState","insets","useSafeAreaInsets","minBottom","undoAll","useCallback","ledger","askBuoyStore","getLedger","outcome","revertAll","dispatchToolAction","failed","length","setNotice","detail","map","f","label","error","join","toggleChanges","v","sheetHeight","useRef","Animated","Value","current","peeking","runPeek","stopAnimation","from","restoreTo","timing","toValue","duration","useNativeDriver","start","setTimeout","spring","friction","peekKey","useMemo","last","messages","role","peeks","blocks","filter","p","block","kind","id","prevPeekKey","useEffect","peek","confirmReset","reversible","list","e","undoneAt","isReversible","effect","Alert","alert","text","onPress","l","style","activeLabel","streaming","toolCalls","find","c","status","blockHandlers","action","blockId","minimize","mode","answered","answers","actionState","busy","supports","openTool","dispatch","lastMessage","showThinking","useAskBuoySettings","getTranscript","transcriptToText","showSettings","setShowSettings","closeSettings","openSettings","header","jsxs","ModalHeader","children","jsx","Navigation","Content","title","subtitle","testID","AskBuoyHeader","hasMessages","onReset","onOpenSettings","JsModal","disableScrollWrapper","background","initialHeight","animatedHeight","customContent","showToggleButton","enablePersistence","BlockHandlersProvider","value","View","styles","root","paddingBottom","bottom","ChangesBar","onUndoAll","expanded","onToggle","notice","Info","size","color","night","info","Text","noticeText","KeyboardAvoidingView","flex","behavior","Platform","OS","undefined","enabled","keyboardVerticalOffset","FeatureGate","featureName","AskBuoySettings","Fragment","MessageList","onRetry","ListEmptyComponent","EmptyState","onPick","pending","ApprovalCard","onAnswer","Composer","onSend","onStop","disabled","placeholder","queued","awaitingBlockId","StyleSheet","create","backgroundColor","flexDirection","alignItems","gap","paddingHorizontal","gutter","paddingVertical","infoSoft","fontSize","font","caption","lineHeight"],"sourceRoot":"../../../src","sources":["components/AskBuoyModal.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_agentCore","_sharedUi","_blocks","_ApprovalCard","_ChangesBar","_Composer","_KeyboardPad","_AskBuoyHeader","_AskBuoySettings","_EmptyState","_MessageList","_QueuedMessages","_askBuoyStore","_ticketPrompt","_useAskBuoy","_useAskBuoySettings","_jsxRuntime","AskBuoyModal","visible","onClose","onBack","onMinimize","persistenceKey","config","state","send","stop","reset","undoThenReset","approve","retry","answer","runAction","editQueued","removeQueued","configured","toolCount","availableToolIds","useAskBuoy","changesOpen","setChangesOpen","useState","closeAndStop","useCallback","takeDraft","askBuoyStore","clearDraft","showSettings","setShowSettings","closeSettings","openSettings","hidden","awaitingUser","pending","awaitingBlockId","lastMessage","messages","length","finishedWhileHidden","useRef","wasBusy","busy","useEffect","current","setToolAttention","kind","label","role","error","insets","useSafeAreaInsets","minBottom","mode","setMode","bottomInset","bottom","undoAll","ledger","getLedger","outcome","revertAll","dispatchToolAction","failed","setNotice","detail","map","f","join","toggleChanges","v","sheetHeight","Animated","Value","peeking","runPeek","stopAnimation","from","restoreTo","timing","toValue","duration","useNativeDriver","start","setTimeout","spring","friction","peekKey","useMemo","last","peeks","blocks","filter","p","block","id","prevPeekKey","peek","confirmReset","reversible","list","e","undoneAt","isReversible","effect","Alert","alert","text","onPress","cleared","total","reverted","stillApplied","style","activeLabel","streaming","toolCalls","find","c","status","blockHandlers","action","blockId","minimize","answered","answers","actionState","supports","openTool","dispatch","redirectKey","stopped","queuePaused","queuePauseReason","showThinking","readOnly","useAskBuoySettings","getTranscript","transcriptToText","requestTicket","TICKET_PROMPT","header","jsxs","ModalHeader","children","jsx","Navigation","Content","title","subtitle","testID","AskBuoyHeader","awaitingApproval","startedAt","stopping","hasMessages","onReset","onOpenSettings","onTicket","JsModal","disableScrollWrapper","background","initialHeight","animatedHeight","customContent","showToggleButton","onModeChange","enablePersistence","BlockHandlersProvider","value","View","styles","root","paddingBottom","ChangesBar","onUndoAll","expanded","onToggle","notice","Info","size","color","night","info","Text","noticeText","KeyboardPad","FeatureGate","featureName","AskBuoySettings","Fragment","MessageList","onRetry","waitingOnUser","ListEmptyComponent","EmptyState","onPick","policy","QueuedMessages","items","queued","paused","onEdit","onRemove","ApprovalCard","onAnswer","Composer","onSend","onStop","draft","onDraftTaken","disabled","focusKey","canFocus","placeholder","undefined","StyleSheet","create","flex","backgroundColor","flexDirection","alignItems","gap","paddingHorizontal","gutter","paddingVertical","infoSoft","fontSize","font","caption","lineHeight"],"sourceRoot":"../../../src","sources":["components/AskBuoyModal.tsx"],"mappings":";;;;;;AAkBA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAYA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,SAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,gBAAA,GAAAV,OAAA;AACA,IAAAW,WAAA,GAAAX,OAAA;AACA,IAAAY,YAAA,GAAAZ,OAAA;AACA,IAAAa,eAAA,GAAAb,OAAA;AACA,IAAAc,aAAA,GAAAd,OAAA;AACA,IAAAe,aAAA,GAAAf,OAAA;AACA,IAAAgB,WAAA,GAAAhB,OAAA;AACA,IAAAiB,mBAAA,GAAAjB,OAAA;AAAiE,IAAAkB,WAAA,GAAAlB,OAAA;AApDjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgDO,SAASmB,YAAYA,CAAC;EAC3BC,OAAO;EACPC,OAAO;EACPC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC;AACiB,CAAC,EAAE;EACpB,MAAM;IACJC,KAAK;IACLC,IAAI;IACJC,IAAI;IACJC,KAAK;IACLC,aAAa;IACbC,OAAO;IACPC,KAAK;IACLC,MAAM;IACNC,SAAS;IACTC,UAAU;IACVC,YAAY;IACZC,UAAU;IACVC,SAAS;IACTC;EACF,CAAC,GAAG,IAAAC,sBAAU,EAACf,MAAM,CAAC;EACtB,MAAM,CAACgB,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;;EAErD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,YAAY,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACrCjB,IAAI,CAAC,CAAC;IACNP,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAACO,IAAI,EAAEP,OAAO,CAAC,CAAC;EAEnB,MAAMyB,SAAS,GAAG,IAAAD,kBAAW,EAAC,MAAME,0BAAY,CAACC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC;;EAElE;AACF;AACA;AACA;AACA;AACA;EACE,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAP,eAAQ,EAAC,KAAK,CAAC;EACvD,MAAMQ,aAAa,GAAG,IAAAN,kBAAW,EAAC,MAAMK,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;EACnE,MAAME,YAAY,GAAG,IAAAP,kBAAW,EAAC,MAAMK,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;EAEjE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMG,MAAM,GAAG,CAACjC,OAAO;EACvB,MAAMkC,YAAY,GAAG,CAAC,CAAC5B,KAAK,CAAC6B,OAAO,IAAI,CAAC,CAAC7B,KAAK,CAAC8B,eAAe;EAC/D,MAAMC,WAAW,GAAG/B,KAAK,CAACgC,QAAQ,CAAChC,KAAK,CAACgC,QAAQ,CAACC,MAAM,GAAG,CAAC,CAAC;EAC7D,MAAMC,mBAAmB,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EACzC,MAAMC,OAAO,GAAG,IAAAD,aAAM,EAACnC,KAAK,CAACqC,IAAI,CAAC;EAClC,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIX,MAAM,IAAIS,OAAO,CAACG,OAAO,IAAI,CAACvC,KAAK,CAACqC,IAAI,EAAEH,mBAAmB,CAACK,OAAO,GAAG,IAAI;IAChF,IAAI,CAACZ,MAAM,EAAEO,mBAAmB,CAACK,OAAO,GAAG,KAAK;IAChDH,OAAO,CAACG,OAAO,GAAGvC,KAAK,CAACqC,IAAI;EAC9B,CAAC,EAAE,CAACV,MAAM,EAAE3B,KAAK,CAACqC,IAAI,CAAC,CAAC;EACxB,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACX,MAAM,EAAE;MACX,IAAAa,0BAAgB,EAAC,UAAU,EAAE,IAAI,CAAC;MAClC;IACF;IACA,IAAIZ,YAAY,EAAE;MAChB,IAAAY,0BAAgB,EAAC,UAAU,EAAE;QAC3BC,IAAI,EAAE,YAAY;QAClBC,KAAK,EAAE1C,KAAK,CAAC6B,OAAO,GAAG,qBAAqB,GAAG;MACjD,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIK,mBAAmB,CAACK,OAAO,IAAIR,WAAW,EAAEY,IAAI,KAAK,WAAW,IAAIZ,WAAW,CAACa,KAAK,EAAE;MAChG,IAAAJ,0BAAgB,EAAC,UAAU,EAAE;QAAEC,IAAI,EAAE,QAAQ;QAAEC,KAAK,EAAE;MAAuB,CAAC,CAAC;IACjF,CAAC,MAAM,IAAIR,mBAAmB,CAACK,OAAO,IAAI,CAACvC,KAAK,CAACqC,IAAI,EAAE;MACrD,IAAAG,0BAAgB,EAAC,UAAU,EAAE;QAAEC,IAAI,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAW,CAAC,CAAC;IACnE,CAAC,MAAM;MACL,IAAAF,0BAAgB,EAAC,UAAU,EAAE,IAAI,CAAC;IACpC;EACF,CAAC,EAAE,CAACb,MAAM,EAAEC,YAAY,EAAE5B,KAAK,CAACqC,IAAI,EAAErC,KAAK,CAAC6B,OAAO,EAAEE,WAAW,CAAC,CAAC;EAClE,IAAAO,gBAAS,EAAC,MAAM,MAAM,IAAAE,0BAAgB,EAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;EAC7D,IAAAF,gBAAS,EAAC,MAAM;IACd,IAAItC,KAAK,CAAC6B,OAAO,IAAIN,YAAY,EAAEC,eAAe,CAAC,KAAK,CAAC;EAC3D,CAAC,EAAE,CAACxB,KAAK,CAAC6B,OAAO,EAAEN,YAAY,CAAC,CAAC;EACjC;EACA;EACA;EACA,MAAMsB,MAAM,GAAG,IAAAC,2BAAiB,EAAC;IAAEC,SAAS,EAAE;EAAG,CAAC,CAAC;EACnD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAhC,eAAQ,EAAY,aAAa,CAAC;EAC1D,MAAMiC,WAAW,GAAGF,IAAI,KAAK,UAAU,GAAG,CAAC,GAAGH,MAAM,CAACM,MAAM;;EAE3D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,OAAO,GAAG,IAAAjC,kBAAW,EAAC,MAAM;IAChC,MAAMkC,MAAM,GAAGhC,0BAAY,CAACiC,SAAS,CAAC,CAAC;IACvC,IAAI,CAACD,MAAM,EAAE;IACb,KAAK,CAAC,YAAY;MAChB,MAAME,OAAO,GAAG,MAAMF,MAAM,CAACG,SAAS,CAACC,4BAAkB,CAAC;MAC1D,IAAIF,OAAO,CAACG,MAAM,CAACzB,MAAM,KAAK,CAAC,EAAE;QAC/BZ,0BAAY,CAACsC,SAAS,CAAC,IAAI,CAAC;QAC5B;MACF;MACA,MAAMC,MAAM,GAAGL,OAAO,CAACG,MAAM,CAC1BG,GAAG,CAAEC,CAAC,IAAK,GAAGA,CAAC,CAACpB,KAAK,KAAKoB,CAAC,CAAClB,KAAK,GAAG,CAAC,CACrCmB,IAAI,CAAC,IAAI,CAAC;MACb1C,0BAAY,CAACsC,SAAS,CACpB,iBAAiBJ,OAAO,CAACG,MAAM,CAACzB,MAAM,UAAUsB,OAAO,CAACG,MAAM,CAACzB,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM2B,MAAM,EACpG,CAAC;IACH,CAAC,EAAE,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,aAAa,GAAG,IAAA7C,kBAAW,EAAC,MAAMH,cAAc,CAAEiD,CAAC,IAAK,CAACA,CAAC,CAAC,EAAE,EAAE,CAAC;;EAEtE;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,WAAW,GAAG,IAAA/B,aAAM,EAAC,IAAIgC,qBAAQ,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC7B,OAAO;EAC3D,MAAM8B,OAAO,GAAG,IAAAlC,aAAM,EAAC,KAAK,CAAC;EAC7B,MAAMmC,OAAO,GAAG,IAAAnD,kBAAW,EAAC,MAAM;IAChC,IAAIkD,OAAO,CAAC9B,OAAO,EAAE;IACrB8B,OAAO,CAAC9B,OAAO,GAAG,IAAI;IACtB2B,WAAW,CAACK,aAAa,CAAEC,IAAI,IAAK;MAClC,MAAMC,SAAS,GAAG,OAAOD,IAAI,KAAK,QAAQ,IAAIA,IAAI,GAAG,GAAG,GAAGA,IAAI,GAAG,GAAG;MACrEL,qBAAQ,CAACO,MAAM,CAACR,WAAW,EAAE;QAAES,OAAO,EAAE,GAAG;QAAEC,QAAQ,EAAE,GAAG;QAAEC,eAAe,EAAE;MAAM,CAAC,CAAC,CAACC,KAAK,CACzF,MAAM;QACJC,UAAU,CAAC,MAAM;UACfZ,qBAAQ,CAACa,MAAM,CAACd,WAAW,EAAE;YAC3BS,OAAO,EAAEF,SAAS;YAClBQ,QAAQ,EAAE,CAAC;YACXJ,eAAe,EAAE;UACnB,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM;YACbT,OAAO,CAAC9B,OAAO,GAAG,KAAK;UACzB,CAAC,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC;MACV,CACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC2B,WAAW,CAAC,CAAC;;EAEjB;EACA;EACA,MAAMgB,OAAO,GAAG,IAAAC,cAAO,EAAC,MAAM;IAC5B,MAAMC,IAAI,GAAGpF,KAAK,CAACgC,QAAQ,CAAChC,KAAK,CAACgC,QAAQ,CAACC,MAAM,GAAG,CAAC,CAAC;IACtD,IAAI,CAACmD,IAAI,IAAIA,IAAI,CAACzC,IAAI,KAAK,WAAW,EAAE,OAAO,EAAE;IACjD,MAAM0C,KAAK,GAAGD,IAAI,CAACE,MAAM,CAACC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAAChD,IAAI,KAAK,MAAM,CAAC,CAACR,MAAM;IACvE,OAAOoD,KAAK,GAAG,CAAC,GAAG,GAAGD,IAAI,CAACM,EAAE,IAAIL,KAAK,EAAE,GAAG,EAAE;EAC/C,CAAC,EAAE,CAACrF,KAAK,CAACgC,QAAQ,CAAC,CAAC;EACpB,MAAM2D,WAAW,GAAG,IAAAxD,aAAM,EAAC,EAAE,CAAC;EAC9B,IAAAG,gBAAS,EAAC,MAAM;IACd,IAAI4C,OAAO,IAAIA,OAAO,KAAKS,WAAW,CAACpD,OAAO,IAAIxC,MAAM,EAAE6F,IAAI,KAAK,KAAK,EAAEtB,OAAO,CAAC,CAAC;IACnFqB,WAAW,CAACpD,OAAO,GAAG2C,OAAO;EAC/B,CAAC,EAAE,CAACA,OAAO,EAAEZ,OAAO,EAAEvE,MAAM,CAAC,CAAC;;EAE9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM8F,YAAY,GAAG,IAAA1E,kBAAW,EAAC,MAAM;IACrC,MAAMkC,MAAM,GAAGhC,0BAAY,CAACiC,SAAS,CAAC,CAAC;IACvC,MAAMwC,UAAU,GACdzC,MAAM,EAAE0C,IAAI,CAAC,CAAC,CAACR,MAAM,CAAES,CAAC,IAAK,CAACA,CAAC,CAACC,QAAQ,IAAI,IAAAC,uBAAY,EAACF,CAAC,CAACG,MAAM,CAAC,CAAC,CAAClE,MAAM,IAAI,CAAC;IACjF,IAAI6D,UAAU,KAAK,CAAC,EAAE;MACpB3F,KAAK,CAAC,CAAC;MACP;IACF;IACAiG,kBAAK,CAACC,KAAK,CACT,qBAAqB,EACrB,iBAAiBP,UAAU,UAAUA,UAAU,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,0FAA0FA,UAAU,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,EAC7L,CACE;MACEQ,IAAI,EAAE,kBAAkB;MACxBC,OAAO,EAAEA,CAAA,KAAM;QACb,KAAK,CAAC,YAAY;UAChB,MAAMhD,OAAO,GAAG,MAAMnD,aAAa,CAAC,CAAC;UACrC,IAAImD,OAAO,CAACiD,OAAO,EAAE;UACrB,MAAMC,KAAK,GAAGlD,OAAO,CAACmD,QAAQ,GAAGnD,OAAO,CAACG,MAAM,CAACzB,MAAM;UACtD,MAAM0E,YAAY,GAAGpD,OAAO,CAACG,MAAM,CAACG,GAAG,CAAEC,CAAC,IAAK,GAAGA,CAAC,CAACpB,KAAK,KAAKoB,CAAC,CAAClB,KAAK,GAAG,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;UACpFqC,kBAAK,CAACC,KAAK,CACT,iBAAiB9C,OAAO,CAACG,MAAM,CAACzB,MAAM,OAAOwE,KAAK,UAAUA,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,EACpF,GAAGE,YAAY,8DAA8D,EAC7E,CACE;YAAEL,IAAI,EAAE,mBAAmB;YAAEM,KAAK,EAAE;UAAS,CAAC,EAC9C;YAAEN,IAAI,EAAE,cAAc;YAAEM,KAAK,EAAE,aAAa;YAAEL,OAAO,EAAEpG;UAAM,CAAC,CAElE,CAAC;QACH,CAAC,EAAE,CAAC;MACN;IACF,CAAC,EACD;MAAEmG,IAAI,EAAE,cAAc;MAAEM,KAAK,EAAE,aAAa;MAAEL,OAAO,EAAEpG;IAAM,CAAC,EAC9D;MAAEmG,IAAI,EAAE,QAAQ;MAAEM,KAAK,EAAE;IAAS,CAAC,CAEvC,CAAC;EACH,CAAC,EAAE,CAACzG,KAAK,EAAEC,aAAa,CAAC,CAAC;;EAE1B;EACA,MAAMyG,WAAW,GAAG,IAAA1B,cAAO,EAAC,MAAM;IAChC,MAAMC,IAAI,GAAGpF,KAAK,CAACgC,QAAQ,CAAChC,KAAK,CAACgC,QAAQ,CAACC,MAAM,GAAG,CAAC,CAAC;IACtD,IAAI,CAACmD,IAAI,IAAIA,IAAI,CAACzC,IAAI,KAAK,WAAW,IAAI,CAACyC,IAAI,CAAC0B,SAAS,EAAE,OAAO,IAAI;IACtE,OAAO1B,IAAI,CAAC2B,SAAS,CAACC,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,MAAM,KAAK,SAAS,CAAC,EAAExE,KAAK,IAAI,IAAI;EAC1E,CAAC,EAAE,CAAC1C,KAAK,CAACgC,QAAQ,CAAC,CAAC;;EAEpB;AACF;AACA;AACA;AACA;EACE,MAAMmF,aAAa,GAAG,IAAAhC,cAAO,EAC3B,OAAO;IACL5E,MAAM;IACNC,SAAS,EAAEA,CAAC4G,MAAM,EAAEC,OAAO,KAAK;MAC9B,IAAID,MAAM,CAACE,QAAQ,EAAE;QACnBzH,UAAU,GAAG;UAAEmD,IAAI,EAAE;QAAc,CAAC,CAAC;QACrC;MACF;MACA,OAAOxC,SAAS,CAAC4G,MAAM,EAAEC,OAAO,CAAC;IACnC,CAAC;IACDE,QAAQ,EAAEvH,KAAK,CAACwH,OAAO;IACvBC,WAAW,EAAEzH,KAAK,CAACyH,WAAW;IAC9BpF,IAAI,EAAErC,KAAK,CAACqC,IAAI;IAChBqF,QAAQ,EAAE;MAAEC,QAAQ,EAAE,KAAK;MAAEL,QAAQ,EAAE,CAAC,CAACzH,UAAU;MAAE+H,QAAQ,EAAE;IAAK;EACtE,CAAC,CAAC,EACF,CAACrH,MAAM,EAAEC,SAAS,EAAEX,UAAU,EAAEG,KAAK,CAACwH,OAAO,EAAExH,KAAK,CAACyH,WAAW,EAAEzH,KAAK,CAACqC,IAAI,CAC9E,CAAC;;EAED;EACA;EACA,MAAMqB,MAAM,GAAG,CAAC1D,KAAK,CAACqC,IAAI,IAAIN,WAAW,EAAEY,IAAI,KAAK,WAAW,IAAI,CAAC,CAACZ,WAAW,CAACa,KAAK;EACtF;AACF;AACA;AACA;AACA;AACA;EACE,MAAMiF,WAAW,GACf,CAAC7H,KAAK,CAACqC,IAAI,IAAIN,WAAW,EAAEY,IAAI,KAAK,WAAW,IAAIZ,WAAW,CAAC+F,OAAO,IAAI,CAAC/F,WAAW,CAACa,KAAK,GACzFb,WAAW,CAAC2D,EAAE,GACd,IAAI;EACV,MAAMqC,WAAW,GAAG,IAAAC,8BAAgB,EAAChI,KAAK,CAAC;;EAE3C;EACA;EACA,MAAM;IAAEiI,YAAY;IAAEC;EAAS,CAAC,GAAG,IAAAC,sCAAkB,EAAC,CAAC;EACvD,MAAMC,aAAa,GAAG,IAAAjH,kBAAW,EAC/B,MAAM,IAAAkH,6BAAgB,EAACrI,KAAK,CAACgC,QAAQ,EAAEiG,YAAY,CAAC,EACpD,CAACjI,KAAK,CAACgC,QAAQ,EAAEiG,YAAY,CAC/B,CAAC;EAED,MAAMK,aAAa,GAAG,IAAAnH,kBAAW,EAAC,MAAMlB,IAAI,CAACsI,2BAAa,CAAC,EAAE,CAACtI,IAAI,CAAC,CAAC;EAEpE,MAAMuI,MAAM,GAAGjH,YAAY,gBACzB,IAAA/B,WAAA,CAAAiJ,IAAA,EAAChK,SAAA,CAAAiK,WAAW;IAAAC,QAAA,gBACV,IAAAnJ,WAAA,CAAAoJ,GAAA,EAACnK,SAAA,CAAAiK,WAAW,CAACG,UAAU;MAACjJ,MAAM,EAAE6B;IAAc,CAAE,CAAC,eACjD,IAAAjC,WAAA,CAAAoJ,GAAA,EAACnK,SAAA,CAAAiK,WAAW,CAACI,OAAO;MAACC,KAAK,EAAC,UAAU;MAACC,QAAQ,EAAC,UAAU;MAACC,MAAM,EAAC;IAA8B,CAAE,CAAC;EAAA,CACvF,CAAC,gBAEd,IAAAzJ,WAAA,CAAAoJ,GAAA,EAAC7J,cAAA,CAAAmK,aAAa;IACZvI,UAAU,EAAEA,UAAW;IACvB0B,IAAI,EAAErC,KAAK,CAACqC,IAAK;IACjBqB,MAAM,EAAEA,MAAO;IACfmD,WAAW,EAAEA,WAAY;IACzBsC,gBAAgB,EAAE,CAAC,CAACnJ,KAAK,CAAC6B,OAAQ;IAClCuH,SAAS,EAAErH,WAAW,EAAEY,IAAI,KAAK,WAAW,IAAIZ,WAAW,CAAC+E,SAAS,GAAG/E,WAAW,CAACqH,SAAS,IAAI,IAAI,GAAG,IAAK;IAC7GC,QAAQ,EAAErJ,KAAK,CAACqJ,QAAS;IACzBnB,QAAQ,EAAEA,QAAS;IACnBtH,SAAS,EAAEA,SAAU;IACrB0I,WAAW,EAAEtJ,KAAK,CAACgC,QAAQ,CAACC,MAAM,GAAG,CAAE;IACvCrC,MAAM,EAAEA,MAAO;IACf2J,OAAO,EAAE1D,YAAa;IACtBuC,aAAa,EAAEA,aAAc;IAC7BoB,cAAc,EAAE9H,YAAa;IAC7B+H,QAAQ,EAAEnB;EAAc,CACzB,CACF;EAED,oBACE,IAAA9I,WAAA,CAAAoJ,GAAA,EAACnK,SAAA,CAAAiL,OAAO;IACNhK,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEuB;IACT;IACA;IACA;IAAA;IACAyI,oBAAoB;IACpB;IACA;IACA;IAAA;IACAC,UAAU,EAAE,KAAM;IAClBC,aAAa,EAAE,GAAI;IACnBC,cAAc,EAAE5F,WAAY;IAC5BsE,MAAM,EAAE;MAAEuB,aAAa,EAAEvB,MAAM;MAAEwB,gBAAgB,EAAE;IAAM,CAAE;IAC3DpK,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBoK,YAAY,EAAEhH,OAAQ;IACtBnD,cAAc,EAAEA,cAAc,IAAI,eAAgB;IAClDoK,iBAAiB;IAAAvB,QAAA,eAIjB,IAAAnJ,WAAA,CAAAoJ,GAAA,EAAClK,OAAA,CAAAyL,qBAAqB;MAACC,KAAK,EAAEjD,aAAc;MAAAwB,QAAA,eAC5C,IAAAnJ,WAAA,CAAAiJ,IAAA,EAAClK,YAAA,CAAA8L,IAAI;QAACzD,KAAK,EAAE,CAAC0D,MAAM,CAACC,IAAI,EAAE;UAAEC,aAAa,EAAEtH;QAAY,CAAC,CAAE;QAAAyF,QAAA,gBACzD,IAAAnJ,WAAA,CAAAoJ,GAAA,EAAChK,WAAA,CAAA6L,UAAU;UACTpH,MAAM,EAAEhC,0BAAY,CAACiC,SAAS,CAAC,CAAE;UACjCoH,SAAS,EAAEtH,OAAQ;UACnBuH,QAAQ,EAAE5J,WAAY;UACtB6J,QAAQ,EAAE5G;QAAc,CACzB,CAAC,EAEDhE,KAAK,CAAC6K,MAAM,iBACX,IAAArL,WAAA,CAAAiJ,IAAA,EAAClK,YAAA,CAAA8L,IAAI;UAACzD,KAAK,EAAE0D,MAAM,CAACO,MAAO;UAAC5B,MAAM,EAAC,sBAAsB;UAAAN,QAAA,gBACvD,IAAAnJ,WAAA,CAAAoJ,GAAA,EAACnK,SAAA,CAAAqM,IAAI;YAACC,IAAI,EAAE,EAAG;YAACC,KAAK,EAAEC,eAAK,CAACD,KAAK,CAACE;UAAK,CAAE,CAAC,eAC3C,IAAA1L,WAAA,CAAAoJ,GAAA,EAACrK,YAAA,CAAA4M,IAAI;YAACvE,KAAK,EAAE0D,MAAM,CAACc,UAAW;YAAAzC,QAAA,EAAE3I,KAAK,CAAC6K;UAAM,CAAO,CAAC;QAAA,CACjD,CACP,eAID,IAAArL,WAAA,CAAAoJ,GAAA,EAAC9J,YAAA,CAAAuM,WAAW;UAAA1C,QAAA,eAcV,IAAAnJ,WAAA,CAAAoJ,GAAA,EAACnK,SAAA,CAAA6M,WAAW;YAACC,WAAW,EAAC,UAAU;YAAA5C,QAAA,EAChCpH,YAAY,gBACX,IAAA/B,WAAA,CAAAoJ,GAAA,EAAC5J,gBAAA,CAAAwM,eAAe,IAAE,CAAC,gBAEnB,IAAAhM,WAAA,CAAAiJ,IAAA,EAAAjJ,WAAA,CAAAiM,QAAA;cAAA9C,QAAA,gBACE,IAAAnJ,WAAA,CAAAoJ,GAAA,EAAC1J,YAAA,CAAAwM,WAAW;gBACV1J,QAAQ,EAAEhC,KAAK,CAACgC,QAAS;gBACzB2J,OAAO,EAAErL,KAAM;gBACfsL,aAAa,EAAE,CAAC,CAAC5L,KAAK,CAAC6B,OAAO,IAAI,CAAC,CAAC7B,KAAK,CAAC8B,eAAgB;gBAC1D+J,kBAAkB,eAChB,IAAArM,WAAA,CAAAoJ,GAAA,EAAC3J,WAAA,CAAA6M,UAAU;kBACTnL,UAAU,EAAEA,UAAW;kBACvBoL,MAAM,EAAE9L,IAAK;kBACbY,gBAAgB,EAAEA,gBAAiB;kBACnCqH,QAAQ,EAAEA,QAAQ,IAAI,CAAC,CAACnI,MAAM,EAAEiM,MAAM,EAAE9D;gBAAS,CAClD;cACF,CACF,CAAC,eAEF,IAAA1I,WAAA,CAAAoJ,GAAA,EAACzJ,eAAA,CAAA8M,cAAc;gBACbC,KAAK,EAAElM,KAAK,CAACmM,MAAO;gBACpBC,MAAM,EAAErE,WAAY;gBACpBsE,MAAM,EAAE5L,UAAW;gBACnB6L,QAAQ,EAAE5L;cAAa,CACxB,CAAC,EAEDV,KAAK,CAAC6B,OAAO,iBAAI,IAAArC,WAAA,CAAAoJ,GAAA,EAACjK,aAAA,CAAA4N,YAAY;gBAAC1K,OAAO,EAAE7B,KAAK,CAAC6B,OAAQ;gBAAC2K,QAAQ,EAAEnM;cAAQ,CAAE,CAAC,eAE7E,IAAAb,WAAA,CAAAoJ,GAAA,EAAC/J,SAAA,CAAA4N,QAAQ;gBACPC,MAAM,EAAEzM,IAAK;gBACb0M,MAAM,EAAEzM,IAAK;gBACbmC,IAAI,EAAErC,KAAK,CAACqC,IAAK;gBACjBuK,KAAK,EAAE5M,KAAK,CAAC4M,KAAM;gBACnBC,YAAY,EAAEzL,SAAU;gBACxB0L,QAAQ,EAAE,CAACnM,UAAW;gBACtBoM,QAAQ,EAAElF,WAAY;gBACtBmF,QAAQ,EAAEtN,OAAQ;gBAClBuN,WAAW,EACTpF,WAAW,GACP,iCAAiC,GACjC7H,KAAK,CAAC8B,eAAe,GACnB,gCAAgC,GAChCoL;cACP,CACF,CAAC;YAAA,CACF;UACH,CACU;QAAC,CACH,CAAC;MAAA,CACV;IAAC,CACgB;EAAC,CACjB,CAAC;AAEd;AAEA,MAAM5C,MAAM,GAAG6C,uBAAU,CAACC,MAAM,CAAC;EAC/B;EACA;EACA7C,IAAI,EAAE;IAAE8C,IAAI,EAAE,CAAC;IAAEC,eAAe,EAAE;EAAc,CAAC;EACjDzC,MAAM,EAAE;IACN0C,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,YAAY;IACxBC,GAAG,EAAE,CAAC;IACNC,iBAAiB,EAAEzC,eAAK,CAAC0C,MAAM;IAC/BC,eAAe,EAAE,EAAE;IACnBN,eAAe,EAAErC,eAAK,CAACD,KAAK,CAAC6C;EAC/B,CAAC;EACDzC,UAAU,EAAE;IACViC,IAAI,EAAE,CAAC;IACPrC,KAAK,EAAEC,eAAK,CAACD,KAAK,CAAC1E,IAAI;IACvBwH,QAAQ,EAAE7C,eAAK,CAAC8C,IAAI,CAACC,OAAO;IAC5BC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -39,6 +39,41 @@ function AskBuoySettings() {
39
39
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
40
40
  style: styles.note,
41
41
  children: "Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."
42
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
43
+ style: styles.section,
44
+ children: "PERMISSIONS"
45
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToggleRow, {
46
+ testID: "buoy-ask-buoy-setting-readonly",
47
+ label: "Read only",
48
+ 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.",
49
+ value: settings.readOnly,
50
+ onValueChange: next => _askBuoySettings.askBuoySettings.set("readOnly", next)
51
+ }), settings.readOnly ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
52
+ style: styles.note,
53
+ testID: "buoy-ask-buoy-readonly-note",
54
+ 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."
55
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToggleRow, {
56
+ testID: "buoy-ask-buoy-setting-bypass",
57
+ tone: "warning",
58
+ emphasizeLabel: settings.bypassApprovals,
59
+ disabled: settings.readOnly,
60
+ label: "Skip approval prompts",
61
+ description: settings.readOnly ? "Unavailable while Read only is on — nothing can be approved." : "Runs every action the moment the agent calls it, with no Allow card — including the destructive ones that wipe or reset data.",
62
+ value: settings.bypassApprovals,
63
+ onValueChange: next => _askBuoySettings.askBuoySettings.set("bypassApprovals", next)
64
+ }), settings.bypassApprovals && !settings.readOnly ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
65
+ style: styles.warning,
66
+ testID: "buoy-ask-buoy-bypass-warning",
67
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.AlertTriangle, {
68
+ size: 14,
69
+ color: _sharedUi.night.color.warning
70
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
71
+ style: styles.warningText,
72
+ 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."
73
+ })]
74
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
75
+ style: styles.note,
76
+ children: "On by default for destructive actions only \u2014 reads and ordinary writes already run without asking, and the changes bar records them."
42
77
  })]
43
78
  });
44
79
  }
@@ -59,6 +94,21 @@ const styles = _reactNative.StyleSheet.create({
59
94
  paddingHorizontal: 4,
60
95
  paddingTop: 4
61
96
  },
97
+ warning: {
98
+ flexDirection: "row",
99
+ gap: 8,
100
+ padding: _sharedUi.night.cardPad,
101
+ borderRadius: _sharedUi.night.radius.card,
102
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
103
+ borderColor: _sharedUi.night.color.warning,
104
+ backgroundColor: _sharedUi.night.color.surface
105
+ },
106
+ warningText: {
107
+ flex: 1,
108
+ color: _sharedUi.night.color.warning,
109
+ fontSize: _sharedUi.night.font.micro,
110
+ lineHeight: 16
111
+ },
62
112
  note: {
63
113
  color: _sharedUi.night.color.textTertiary,
64
114
  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","StyleSheet","create","flex","padding","night","gutter","gap","paddingBottom","color","textTertiary","fontSize","fontWeight","letterSpacing","paddingHorizontal","paddingTop","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;AAA2D,IAAAI,WAAA,GAAAJ,OAAA;AAf3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,SAASK,eAAeA,CAAA,EAAG;EAChC,MAAMC,QAAQ,GAAG,IAAAC,sCAAkB,EAAC,CAAC;EACrC,oBACE,IAAAH,WAAA,CAAAI,IAAA,EAACT,YAAA,CAAAU,UAAU;IACTC,KAAK,EAAEC,MAAM,CAACC,MAAO;IACrBC,qBAAqB,EAAEF,MAAM,CAACG,OAAQ;IACtCC,MAAM,EAAC,wBAAwB;IAAAC,QAAA,gBAE/B,IAAAZ,WAAA,CAAAa,GAAA,EAAClB,YAAA,CAAAmB,IAAI;MAACR,KAAK,EAAEC,MAAM,CAACQ,OAAQ;MAAAH,QAAA,EAAC;IAAI,CAAM,CAAC,eACxC,IAAAZ,WAAA,CAAAa,GAAA,EAAChB,SAAA,CAAAmB,SAAS;MACRL,MAAM,EAAC,gCAAgC;MACvCM,KAAK,EAAC,qBAAqB;MAC3BC,WAAW,EAAC,+OAA+O;MAC3PC,KAAK,EAAEjB,QAAQ,CAACkB,YAAa;MAC7BC,aAAa,EAAGC,IAAI,IAAKC,gCAAe,CAACC,GAAG,CAAC,cAAc,EAAEF,IAAI;IAAE,CACpE,CAAC,eACF,IAAAtB,WAAA,CAAAa,GAAA,EAAClB,YAAA,CAAAmB,IAAI;MAACR,KAAK,EAAEC,MAAM,CAACkB,IAAK;MAAAb,QAAA,EAAC;IAG1B,CAAM,CAAC;EAAA,CACG,CAAC;AAEjB;AAEA,MAAML,MAAM,GAAGmB,uBAAU,CAACC,MAAM,CAAC;EAC/BnB,MAAM,EAAE;IAAEoB,IAAI,EAAE;EAAE,CAAC;EACnBlB,OAAO,EAAE;IAAEmB,OAAO,EAAEC,eAAK,CAACC,MAAM;IAAEC,GAAG,EAAE,EAAE;IAAEC,aAAa,EAAE;EAAG,CAAC;EAC9DlB,OAAO,EAAE;IACPmB,KAAK,EAAEJ,eAAK,CAACI,KAAK,CAACC,YAAY;IAC/BC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE,GAAG;IAClBC,iBAAiB,EAAE,CAAC;IACpBC,UAAU,EAAE;EACd,CAAC;EACDf,IAAI,EAAE;IACJS,KAAK,EAAEJ,eAAK,CAACI,KAAK,CAACC,YAAY;IAC/BC,QAAQ,EAAEN,eAAK,CAACW,IAAI,CAACC,KAAK;IAC1BC,UAAU,EAAE,EAAE;IACdJ,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC","ignoreList":[]}
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":"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","ignoreList":[]}
@@ -19,10 +19,13 @@ var _jsxRuntime = require("react/jsx-runtime");
19
19
  * comments and pin their inputs to the TOP of the screen. A chat cannot.
20
20
  *
21
21
  * What makes it work:
22
- * - `KeyboardAvoidingView` with `behavior="padding"`, iOS only. On Android
23
- * Expo's default `softwareKeyboardLayoutMode: "resize"` shrinks the window
24
- * and a bottom-anchored view rides up for free; adding padding there would
25
- * lift it twice.
22
+ * - `KeyboardPad` (see that file), iOS only. `KeyboardAvoidingView` looked
23
+ * right here and did nothing: it measures its frame relative to its PARENT
24
+ * and compares that with the keyboard's SCREEN position, which never
25
+ * overlap inside a bottom-anchored sheet. On Android Expo's default
26
+ * `softwareKeyboardLayoutMode: "resize"` shrinks the window and a
27
+ * bottom-anchored view rides up for free; adding padding there would lift
28
+ * it twice.
26
29
  * - The parent list carries `keyboardShouldPersistTaps="handled"`. Without it
27
30
  * the first tap after typing only dismisses the keyboard and Send never
28
31
  * fires — a real shipped bug in Time Machine, and invisible to Detox because
@@ -36,14 +39,39 @@ var _jsxRuntime = require("react/jsx-runtime");
36
39
  * looked like a disabled control and gave no hint it was tappable.
37
40
  */
38
41
 
42
+ /**
43
+ * One line of input, and the height of the send/stop button beside it — the
44
+ * row only reads as level while those two agree.
45
+ */
46
+ const MIN_INPUT_HEIGHT = 40;
47
+ /** ~5 lines, then it scrolls instead of eating the transcript. */
48
+ const MAX_INPUT_HEIGHT = 120;
49
+ const INPUT_PAD_V = _reactNative.Platform.OS === "ios" ? 10 : 6;
50
+ const INPUT_PAD_H = 16;
39
51
  function Composer({
40
52
  onSend,
41
53
  onStop,
42
54
  busy,
55
+ draft,
56
+ onDraftTaken,
43
57
  disabled,
44
- placeholder
58
+ placeholder,
59
+ focusKey,
60
+ canFocus = true
45
61
  }) {
46
62
  const [text, setText] = (0, _react.useState)("");
63
+ const inputRef = (0, _react.useRef)(null);
64
+ (0, _react.useEffect)(() => {
65
+ if (!focusKey || !canFocus || disabled) return;
66
+ inputRef.current?.focus();
67
+ }, [focusKey, canFocus, disabled]);
68
+ (0, _react.useEffect)(() => {
69
+ if (!draft) return;
70
+ // Appended, not assigned: they may have started typing something else in
71
+ // the moment between pressing Stop and this landing.
72
+ setText(current => current ? `${current} ${draft}` : draft);
73
+ onDraftTaken?.();
74
+ }, [draft, onDraftTaken]);
47
75
  const submit = (0, _react.useCallback)(() => {
48
76
  const value = text.trim();
49
77
  if (!value) return;
@@ -51,13 +79,37 @@ function Composer({
51
79
  onSend(value);
52
80
  }, [text, onSend]);
53
81
  const canSend = text.trim().length > 0 && !busy && !disabled;
82
+ /**
83
+ * Typed something while a turn is running.
84
+ *
85
+ * `send` parks it and flushes it when the turn ends — but the only button on
86
+ * screen while busy was Stop, so the sole way to reach that was the
87
+ * keyboard's return key, and the "Queued" placeholder that explains it only
88
+ * appears AFTER you have managed it. The button is the affordance.
89
+ */
90
+ const canQueue = text.trim().length > 0 && busy && !disabled;
54
91
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
55
92
  style: styles.wrap,
56
93
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
57
94
  style: [styles.field, disabled && styles.fieldDisabled],
58
95
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
59
- testID: "buoy-ask-buoy-input",
60
- style: styles.input,
96
+ ref: inputRef,
97
+ testID: "buoy-ask-buoy-input"
98
+ /*
99
+ * Empty means one line, always.
100
+ *
101
+ * The box is otherwise auto-height, and an iOS multiline TextInput
102
+ * grows with the text but never shrinks back: sending a two-line
103
+ * message cleared the text and left a two-line box standing over
104
+ * the 40pt round button beside it. Nothing on the native side
105
+ * reports the shrink either — on Fabric `onContentSizeChange` is
106
+ * emitted from `updateLayoutMetrics` (a LAYOUT change), not from a
107
+ * text change — so the height it last grew to is the height it
108
+ * keeps. Pinning the empty case is the whole fix: it is the only
109
+ * state that has to line up with the button, and it is exactly the
110
+ * state a send or a new conversation lands in.
111
+ */,
112
+ style: [styles.input, text.length === 0 && styles.inputEmpty],
61
113
  value: text,
62
114
  onChangeText: setText,
63
115
  placeholder: placeholder ?? (disabled ? "Ask Buoy isn't set up yet" : "Ask, or tell it what to change…"),
@@ -77,6 +129,20 @@ function Composer({
77
129
  returnKeyType: "send",
78
130
  maxLength: 4000
79
131
  })
132
+ }), canQueue && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
133
+ testID: "buoy-ask-buoy-queue",
134
+ accessibilityRole: "button",
135
+ accessibilityLabel: "Queue message",
136
+ onPress: submit,
137
+ style: ({
138
+ pressed
139
+ }) => [styles.button, styles.queue, pressed && styles.pressed],
140
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
141
+ style: [styles.sendGlyph, {
142
+ color: _sharedUi.night.color.accent
143
+ }],
144
+ children: "\u2191"
145
+ })
80
146
  }), busy ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
81
147
  testID: "buoy-ask-buoy-stop",
82
148
  accessibilityRole: "button",
@@ -122,7 +188,7 @@ const styles = _reactNative.StyleSheet.create({
122
188
  },
123
189
  field: {
124
190
  flex: 1,
125
- minHeight: 40,
191
+ minHeight: MIN_INPUT_HEIGHT,
126
192
  justifyContent: "center",
127
193
  borderRadius: 20,
128
194
  borderWidth: _reactNative.StyleSheet.hairlineWidth,
@@ -133,13 +199,20 @@ const styles = _reactNative.StyleSheet.create({
133
199
  opacity: 0.6
134
200
  },
135
201
  input: {
136
- maxHeight: 120,
137
- paddingHorizontal: 16,
138
- paddingTop: _reactNative.Platform.OS === "ios" ? 10 : 6,
139
- paddingBottom: _reactNative.Platform.OS === "ios" ? 10 : 6,
202
+ maxHeight: MAX_INPUT_HEIGHT,
203
+ paddingHorizontal: INPUT_PAD_H,
204
+ paddingTop: INPUT_PAD_V,
205
+ paddingBottom: INPUT_PAD_V,
140
206
  color: _sharedUi.night.color.text,
141
- fontSize: _sharedUi.night.font.row,
142
- lineHeight: 20
207
+ fontSize: _sharedUi.night.font.row
208
+ // No `lineHeight` here on purpose. A multiline TextInput on iOS lays out
209
+ // with the paragraph line height AND the font's own leading, so setting
210
+ // it made a one-line box measure ~56pt instead of 40 — the pill towered
211
+ // over the 40pt send/stop button beside it and the row read as crooked.
212
+ },
213
+ // Exactly the button's height, so the two read as one level row.
214
+ inputEmpty: {
215
+ height: MIN_INPUT_HEIGHT
143
216
  },
144
217
  button: {
145
218
  width: 40,
@@ -162,6 +235,13 @@ const styles = _reactNative.StyleSheet.create({
162
235
  stop: {
163
236
  backgroundColor: _sharedUi.night.color.fillTertiary
164
237
  },
238
+ // Outlined rather than filled: it sits beside Stop, and two solid buttons
239
+ // read as one control with two halves.
240
+ queue: {
241
+ backgroundColor: "transparent",
242
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
243
+ borderColor: _sharedUi.night.color.accentBorderStrong
244
+ },
165
245
  stopGlyph: {
166
246
  width: 12,
167
247
  height: 12,