@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
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_vitest","require","_askBuoyStore","_transcriptPersistence","beforeEach","askBuoyStore","reset","describe","it","addUser","id","startAssistant","applyEvent","type","droppedRounds","delta","roles","getState","messages","map","m","system","role","expect","toEqual","line","text","toMatch","payload","buildPayload","toolCalls","blocks","history","answers","usage","input","output","requests","pending","toolId","action","label","reason","params","storeName","state","qty","targetDigest","resolve","json","JSON","stringify","toContain","back","parsePayload","toBe"],"sourceRoot":"../../../src","sources":["store/systemLine.test.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TICKET_PROMPT = void 0;
7
+ /**
8
+ * The "Summarize for a ticket" request, sent as an ordinary user message.
9
+ *
10
+ * One button, one canned sentence, because the machinery already exists: the
11
+ * prompt teaches the `finding` block and the renderer draws it. What was
12
+ * missing was a way to ASK for one without knowing the word, and a Copy that
13
+ * includes it (see blockText.ts). Facts and inference are separated in the
14
+ * ask, nothing is re-run to produce it, and nothing is submitted anywhere.
15
+ */
16
+ const TICKET_PROMPT = exports.TICKET_PROMPT = "Summarize this conversation as a bug ticket, using one buoy_ui finding block and nothing else. " + "Title it with the problem in one line. Evidence rows, in this order: Steps (what we did), Expected, Observed, " + "Build (dev or release, platform), Evidence (the exact requests, statuses, logs or values you actually saw this conversation), " + "Still applied (overrides or changes from your changes list that are still live, or 'none'). " + "Only facts you observed in this conversation; write 'unknown' where you don't know rather than guessing, and put anything " + "you inferred rather than saw in a final row labelled Inference. Do not run any tool or change anything to produce this.";
17
+ //# sourceMappingURL=ticketPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TICKET_PROMPT","exports"],"sourceRoot":"../../../src","sources":["store/ticketPrompt.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GACxB,iGAAiG,GACjG,gHAAgH,GAChH,gIAAgI,GAChI,8FAA8F,GAC9F,4HAA4H,GAC5H,yHAAyH","ignoreList":[]}
@@ -38,7 +38,14 @@ var _wire = require("../sync/wire");
38
38
  /** `@react_buoy` prefix, so the Storage tool treats it as one of its own. */
39
39
  const TRANSCRIPT_KEY = exports.TRANSCRIPT_KEY = `${_sharedUi.devToolsStorageKeys.base}_ask_buoy_transcript`;
40
40
 
41
- /** Bumped when the saved shape changes; an older payload is dropped, not parsed. */
41
+ /**
42
+ * Bumped when the saved shape changes; an older payload is dropped, not parsed.
43
+ *
44
+ * Purely ADDITIVE optional fields do not bump it — `pending` reads back as
45
+ * absent from a v1 file written before it existed, and throwing away someone's
46
+ * conversation to add a field they did not have is a worse trade than the one
47
+ * this version number exists to make.
48
+ */
42
49
  const VERSION = 1;
43
50
 
44
51
  /** Newest N bubbles. Beyond this a reader is scrolling history, not testing. */
@@ -53,6 +60,16 @@ const MAX_BYTES = 256_000;
53
60
 
54
61
  /** What replaces a tool result. Addressed to the model, which will read it. */
55
62
  const DROPPED_RESULT = "[not kept across a restart — read it again if you need it]";
63
+
64
+ /**
65
+ * An approval the user never answered.
66
+ *
67
+ * Saved with the conversation because an unanswered question is exactly the
68
+ * state a reload must not quietly resolve for them: nothing was tapped, so the
69
+ * change is still pending as far as they know. `params` is the real call —
70
+ * after a restart there is no turn left to resume, so Allow re-dispatches it.
71
+ */
72
+
56
73
  function scrub(text) {
57
74
  return text ? (0, _wire.redactForWire)(text) : text;
58
75
  }
@@ -149,6 +166,69 @@ function fitToCaps(payload) {
149
166
  }
150
167
  return out;
151
168
  }
169
+
170
+ /**
171
+ * The pending approval, if it is safe to bring back.
172
+ *
173
+ * Params are NOT scrubbed on the way out, and that is the point of the check:
174
+ * a redacted token written back into the call is no longer the change the user
175
+ * was asked about, so re-running it would apply something they never saw. A
176
+ * call the wire scrubber touches at all is therefore not persisted — an action
177
+ * carrying a credential is precisely the one that should not come back after a
178
+ * restart and run itself. The card is lost in that case, which is the same
179
+ * behaviour as before this existed.
180
+ */
181
+ function storableApproval(pending) {
182
+ // A RESTORED card is saved again too: reloading twice without answering must
183
+ // not be the thing that finally loses the question.
184
+ if (!pending) return null;
185
+ const params = pending.params;
186
+ if (!params) return null;
187
+ let json;
188
+ try {
189
+ json = JSON.stringify(params);
190
+ } catch {
191
+ return null;
192
+ }
193
+ if ((0, _wire.redactForWire)(json) !== json) return null;
194
+ return {
195
+ id: pending.id,
196
+ toolId: pending.toolId,
197
+ action: pending.action,
198
+ label: scrub(pending.label),
199
+ description: pending.description ? scrub(pending.description) : undefined,
200
+ reason: scrub(pending.reason),
201
+ params,
202
+ targetDigest: pending.targetDigest
203
+ };
204
+ }
205
+ function isStoredApproval(value) {
206
+ if (typeof value !== "object" || value === null) return false;
207
+ const v = value;
208
+ return typeof v.id === "string" && typeof v.toolId === "string" && typeof v.action === "string" && typeof v.label === "string" && typeof v.reason === "string" && typeof v.params === "object" && v.params !== null;
209
+ }
210
+
211
+ /**
212
+ * Ledger entries safe to write.
213
+ *
214
+ * Same rule as `storableApproval`: an entry the wire scrubber would touch
215
+ * carries a credential in the value it is holding for the undo, and scrubbing
216
+ * it would make the undo restore a redacted string over the real one. Such an
217
+ * entry is dropped rather than rewritten — losing an undo is recoverable,
218
+ * writing "[redacted]" into the user's storage is not.
219
+ */
220
+ function storableLedger(entries) {
221
+ if (!entries?.length) return undefined;
222
+ const kept = entries.filter(e => {
223
+ try {
224
+ const json = JSON.stringify(e);
225
+ return (0, _wire.redactForWire)(json) === json;
226
+ } catch {
227
+ return false;
228
+ }
229
+ });
230
+ return kept.length ? kept : undefined;
231
+ }
152
232
  function buildPayload(input) {
153
233
  return fitToCaps({
154
234
  v: VERSION,
@@ -156,7 +236,13 @@ function buildPayload(input) {
156
236
  messages: input.messages.map(settle),
157
237
  history: withoutResults(input.history),
158
238
  answers: input.answers,
159
- usage: input.usage
239
+ usage: input.usage,
240
+ pending: storableApproval(input.pending),
241
+ ledger: storableLedger(input.ledger),
242
+ queued: input.queued?.length ? input.queued.map(q => ({
243
+ id: q.id,
244
+ text: scrub(q.text)
245
+ })) : undefined
160
246
  });
161
247
  }
162
248
 
@@ -177,7 +263,10 @@ function parsePayload(raw) {
177
263
  input: 0,
178
264
  output: 0,
179
265
  requests: 0
180
- }
266
+ },
267
+ pending: isStoredApproval(parsed.pending) ? parsed.pending : null,
268
+ ledger: Array.isArray(parsed.ledger) ? parsed.ledger.filter(e => typeof e === "object" && e !== null && typeof e.id === "string") : undefined,
269
+ queued: Array.isArray(parsed.queued) ? parsed.queued.filter(q => typeof q === "object" && q !== null && typeof q.id === "string" && typeof q.text === "string") : undefined
181
270
  };
182
271
  } catch {
183
272
  return null;
@@ -1 +1 @@
1
- {"version":3,"names":["_sharedUi","require","_wire","TRANSCRIPT_KEY","exports","devToolsStorageKeys","base","VERSION","MAX_MESSAGES","MAX_BYTES","DROPPED_RESULT","scrub","text","redactForWire","settle","m","cutOff","streaming","reasoning","map","r","toolCalls","c","params","undefined","result","_dropped","rest","status","summary","error","withoutResults","history","role","results","content","fitToCaps","payload","out","messages","slice","json","JSON","stringify","length","Math","min","buildPayload","input","v","savedAt","Date","now","answers","usage","parsePayload","raw","parsed","parse","Array","isArray","output","requests","readTranscript","persistentStorage","getItem","writeTranscript","setItem","clearTranscript","removeItem"],"sourceRoot":"../../../src","sources":["store/transcriptPersistence.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_sharedUi","require","_wire","TRANSCRIPT_KEY","exports","devToolsStorageKeys","base","VERSION","MAX_MESSAGES","MAX_BYTES","DROPPED_RESULT","scrub","text","redactForWire","settle","m","cutOff","streaming","reasoning","map","r","toolCalls","c","params","undefined","result","_dropped","rest","status","summary","error","withoutResults","history","role","results","content","fitToCaps","payload","out","messages","slice","json","JSON","stringify","length","Math","min","storableApproval","pending","id","toolId","action","label","description","reason","targetDigest","isStoredApproval","value","v","storableLedger","entries","kept","filter","e","buildPayload","input","savedAt","Date","now","answers","usage","ledger","queued","q","parsePayload","raw","parsed","parse","Array","isArray","output","requests","readTranscript","persistentStorage","getItem","writeTranscript","setItem","clearTranscript","removeItem"],"sourceRoot":"../../../src","sources":["store/transcriptPersistence.ts"],"mappings":"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","ignoreList":[]}
@@ -182,4 +182,152 @@ const build = (messages, history = []) => (0, _transcriptPersistence.buildPayloa
182
182
  (0, _vitest.expect)(back?.messages.map(m => m.text)).toEqual(["hi", "hello"]);
183
183
  });
184
184
  });
185
+
186
+ /**
187
+ * The card the user never answered.
188
+ *
189
+ * An unanswered question that disappears on reload reads as consent nobody
190
+ * gave — nothing was tapped, so as far as the user is concerned the change is
191
+ * still waiting for them.
192
+ */
193
+ (0, _vitest.describe)("an unanswered approval", () => {
194
+ const pending = {
195
+ id: "c1",
196
+ toolId: "zustand",
197
+ action: "setState",
198
+ label: "Update the Poké Mart bag store",
199
+ description: "Change a live zustand store.",
200
+ reason: "This will change the app's state.",
201
+ params: {
202
+ storeName: "bag",
203
+ data: {
204
+ lines: []
205
+ }
206
+ },
207
+ resolve: () => {}
208
+ };
209
+ const withPending = (over = {}) => (0, _transcriptPersistence.buildPayload)({
210
+ messages: [msg()],
211
+ history: [],
212
+ answers: {},
213
+ usage: {
214
+ input: 0,
215
+ output: 0,
216
+ requests: 0
217
+ },
218
+ pending: {
219
+ ...pending,
220
+ ...over
221
+ }
222
+ });
223
+ (0, _vitest.it)("survives the round trip with the exact call it asked about", () => {
224
+ const back = (0, _transcriptPersistence.parsePayload)(JSON.stringify(withPending()));
225
+ // The params are what makes the restored card answerable at all: the turn
226
+ // that asked is gone, so Allow has to re-dispatch this itself.
227
+ (0, _vitest.expect)(back?.pending).toMatchObject({
228
+ toolId: "zustand",
229
+ action: "setState",
230
+ label: "Update the Poké Mart bag store",
231
+ params: {
232
+ storeName: "bag",
233
+ data: {
234
+ lines: []
235
+ }
236
+ }
237
+ });
238
+ });
239
+ (0, _vitest.it)("is saved again after it has already been restored once", () => {
240
+ // Reloading twice without answering must not be the thing that finally
241
+ // loses the question.
242
+ (0, _vitest.expect)(withPending({
243
+ restored: true
244
+ }).pending).toBeTruthy();
245
+ });
246
+ (0, _vitest.it)("is dropped rather than scrubbed when the call carries a credential", () => {
247
+ // Scrubbing would change the call: a redacted token written back is not
248
+ // the change the user was shown. So the card is lost instead — an action
249
+ // carrying a credential is the one that must not re-run itself unattended.
250
+ const saved = withPending({
251
+ params: {
252
+ key: "auth",
253
+ value: "Bearer abcdefghijklmnop123456"
254
+ }
255
+ });
256
+ (0, _vitest.expect)(saved.pending).toBeNull();
257
+ (0, _vitest.expect)(JSON.stringify(saved)).not.toContain("abcdefghijklmnop123456");
258
+ });
259
+ (0, _vitest.it)("reads back as absent from a transcript written before it existed", () => {
260
+ const old = build([msg()]);
261
+ (0, _vitest.expect)((0, _transcriptPersistence.parsePayload)(JSON.stringify(old))?.pending).toBeNull();
262
+ });
263
+ (0, _vitest.it)("refuses a malformed one rather than restoring half a question", () => {
264
+ const raw = JSON.stringify({
265
+ ...build([msg()]),
266
+ pending: {
267
+ toolId: "zustand"
268
+ }
269
+ });
270
+ (0, _vitest.expect)((0, _transcriptPersistence.parsePayload)(raw)?.pending).toBeNull();
271
+ });
272
+ });
273
+
274
+ /**
275
+ * The undo bar, across a restart.
276
+ *
277
+ * The ledger is the ONLY undo surface and it used to die with the JS context:
278
+ * the transcript came back with its "saved" lines and receipt cards intact
279
+ * while the bar vanished and the changes stayed applied.
280
+ */
281
+ (0, _vitest.describe)("the effect ledger", () => {
282
+ const entry = {
283
+ id: "fx-1-1",
284
+ at: 1,
285
+ toolId: "storage",
286
+ action: "async.setItem",
287
+ effect: {
288
+ kind: "storage-write",
289
+ toolId: "storage",
290
+ action: "async.setItem",
291
+ label: "Save @qa/key",
292
+ key: "@qa/key",
293
+ had: true,
294
+ previous: "old value"
295
+ }
296
+ };
297
+ const withLedger = entries => (0, _transcriptPersistence.buildPayload)({
298
+ messages: [msg()],
299
+ history: [],
300
+ answers: {},
301
+ usage: {
302
+ input: 0,
303
+ output: 0,
304
+ requests: 0
305
+ },
306
+ ledger: entries
307
+ });
308
+ (0, _vitest.it)("survives the round trip with the prior value an undo needs", () => {
309
+ const back = (0, _transcriptPersistence.parsePayload)(JSON.stringify(withLedger([entry])));
310
+ (0, _vitest.expect)(back?.ledger).toHaveLength(1);
311
+ (0, _vitest.expect)(back?.ledger?.[0]).toMatchObject({
312
+ toolId: "storage",
313
+ action: "async.setItem"
314
+ });
315
+ });
316
+ (0, _vitest.it)("drops an entry holding a credential rather than rewriting it", () => {
317
+ // Scrubbing would make the undo restore "[redacted]" over the real value.
318
+ const secret = {
319
+ ...entry,
320
+ effect: {
321
+ ...entry.effect,
322
+ previous: "Bearer abcdefghijklmnop123456"
323
+ }
324
+ };
325
+ const saved = withLedger([secret]);
326
+ (0, _vitest.expect)(saved.ledger).toBeUndefined();
327
+ (0, _vitest.expect)(JSON.stringify(saved)).not.toContain("abcdefghijklmnop123456");
328
+ });
329
+ (0, _vitest.it)("reads back as absent from a transcript written before it existed", () => {
330
+ (0, _vitest.expect)((0, _transcriptPersistence.parsePayload)(JSON.stringify(build([msg()])))?.ledger).toBeUndefined();
331
+ });
332
+ });
185
333
  //# sourceMappingURL=transcriptPersistence.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_vitest","require","_transcriptPersistence","msg","over","id","role","text","toolCalls","blocks","build","messages","history","buildPayload","answers","usage","input","output","requests","describe","it","name","results","toolCallId","content","saved","json","JSON","stringify","expect","not","toContain","map","m","toEqual","toolId","action","label","status","summary","params","result","toBeUndefined","toBe","many","Array","from","length","_","i","toBeLessThanOrEqual","heavy","repeat","fitToCaps","v","savedAt","toBeGreaterThan","streaming","error","toMatch","parsePayload","toBeNull","back"],"sourceRoot":"../../../src","sources":["store/transcriptPersistence.test.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_vitest","require","_transcriptPersistence","msg","over","id","role","text","toolCalls","blocks","build","messages","history","buildPayload","answers","usage","input","output","requests","describe","it","name","results","toolCallId","content","saved","json","JSON","stringify","expect","not","toContain","map","m","toEqual","toolId","action","label","status","summary","params","result","toBeUndefined","toBe","many","Array","from","length","_","i","toBeLessThanOrEqual","heavy","repeat","fitToCaps","v","savedAt","toBeGreaterThan","streaming","error","toMatch","parsePayload","toBeNull","back","pending","description","reason","storeName","data","lines","resolve","withPending","toMatchObject","restored","toBeTruthy","key","value","old","raw","entry","at","effect","kind","had","previous","withLedger","entries","ledger","toHaveLength","secret"],"sourceRoot":"../../../src","sources":["store/transcriptPersistence.test.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _askBuoyStore = require("./askBuoyStore");
5
+ /**
6
+ * How the store folds a turn into one bubble.
7
+ *
8
+ * Both rules here were written from a real transcript: rounds of an answer
9
+ * arriving as separate text events were concatenated into
10
+ * "…resets every launch.Here's the full picture…", and a turn the user
11
+ * stopped was reported as "Couldn't reach your AI endpoint."
12
+ */
13
+
14
+ (0, _vitest.beforeEach)(() => _askBuoyStore.askBuoyStore.reset());
15
+ const lastText = () => _askBuoyStore.askBuoyStore.getState().messages.at(-1)?.text ?? "";
16
+ (0, _vitest.describe)("round boundaries", () => {
17
+ (0, _vitest.it)("opens a paragraph when the engine says a new round began", () => {
18
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
19
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
20
+ type: "text",
21
+ delta: "Wiping storage now."
22
+ });
23
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
24
+ type: "text",
25
+ delta: "No problem — I left it alone.",
26
+ breakBefore: true
27
+ });
28
+ (0, _vitest.expect)(lastText()).toBe("Wiping storage now.\n\nNo problem — I left it alone.");
29
+ });
30
+ (0, _vitest.it)("still streams deltas within one round straight together", () => {
31
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
32
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
33
+ type: "text",
34
+ delta: "Hello"
35
+ });
36
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
37
+ type: "text",
38
+ delta: " there."
39
+ });
40
+ (0, _vitest.expect)(lastText()).toBe("Hello there.");
41
+ });
42
+ (0, _vitest.it)("never opens with a blank line", () => {
43
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
44
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
45
+ type: "text",
46
+ delta: "First words.",
47
+ breakBefore: true
48
+ });
49
+ (0, _vitest.expect)(lastText()).toBe("First words.");
50
+ });
51
+ });
52
+ (0, _vitest.describe)("a declined call", () => {
53
+ (0, _vitest.it)("keeps its row and reads as declined, not failed", () => {
54
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
55
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
56
+ type: "tool-start",
57
+ id: "c1",
58
+ toolId: "storage",
59
+ action: "clearAll",
60
+ label: "Clear all saved app data",
61
+ description: "Wipe every stored key",
62
+ params: {},
63
+ effect: "destructive"
64
+ });
65
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
66
+ type: "tool-end",
67
+ id: "c1",
68
+ ok: false,
69
+ summary: "declined",
70
+ durationMs: 0
71
+ });
72
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().messages.at(-1)?.toolCalls[0]).toMatchObject({
73
+ label: "Clear all saved app data",
74
+ status: "declined"
75
+ });
76
+ });
77
+ });
78
+ (0, _vitest.describe)("stop", () => {
79
+ (0, _vitest.it)("marks the turn stopped and leaves no error on it", () => {
80
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
81
+ _askBuoyStore.askBuoyStore.applyEvent(id, {
82
+ type: "text",
83
+ delta: "Looking…"
84
+ });
85
+ _askBuoyStore.askBuoyStore.markStopped(id);
86
+ const m = _askBuoyStore.askBuoyStore.getState().messages.at(-1);
87
+ (0, _vitest.expect)(m?.stopped).toBe(true);
88
+ (0, _vitest.expect)(m?.error).toBeUndefined();
89
+ });
90
+ });
91
+
92
+ /**
93
+ * Stop must not launch the messages parked behind it.
94
+ *
95
+ * Ending a turn is exactly what flushes the queue, so Stop used to send the
96
+ * parked message and start a NEW turn — pressing Stop made the agent start
97
+ * talking again. The queue now HOLDS after a stop (see `queuePauseReason`),
98
+ * and the words stay visible as rows rather than being dumped into the
99
+ * composer.
100
+ */
101
+ (0, _vitest.describe)("stop and the queue", () => {
102
+ (0, _vitest.it)("keeps parked messages parked, and says why", () => {
103
+ _askBuoyStore.askBuoyStore.addUser("first");
104
+ const id = _askBuoyStore.askBuoyStore.startAssistant();
105
+ _askBuoyStore.askBuoyStore.enqueue("do this next");
106
+ _askBuoyStore.askBuoyStore.requestStop();
107
+ _askBuoyStore.askBuoyStore.markStopped(id);
108
+ _askBuoyStore.askBuoyStore.finishAssistant(id);
109
+ const s = _askBuoyStore.askBuoyStore.getState();
110
+ (0, _vitest.expect)(s.queued.map(q => q.text)).toEqual(["do this next"]);
111
+ (0, _vitest.expect)((0, _askBuoyStore.queuePauseReason)(s)).toMatch(/stopped/);
112
+ });
113
+ (0, _vitest.it)("hands one parked message back to the composer to edit", () => {
114
+ const item = _askBuoyStore.askBuoyStore.enqueue("words");
115
+ _askBuoyStore.askBuoyStore.takeQueuedToDraft(item.id);
116
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().queued).toEqual([]);
117
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().draft).toBe("words");
118
+ _askBuoyStore.askBuoyStore.clearDraft();
119
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().draft).toBeNull();
120
+ });
121
+ });
122
+
123
+ /**
124
+ * A restored bubble is marked, because the MODEL does not remember it the way
125
+ * the screen does — see `ChatMessage.restored`.
126
+ */
127
+ (0, _vitest.describe)("hydrate", () => {
128
+ (0, _vitest.it)("marks what it puts back", () => {
129
+ _askBuoyStore.askBuoyStore.hydrate({
130
+ messages: [{
131
+ id: "m1",
132
+ role: "assistant",
133
+ text: "hi",
134
+ toolCalls: [],
135
+ blocks: []
136
+ }],
137
+ answers: {},
138
+ usage: {
139
+ input: 0,
140
+ output: 0,
141
+ requests: 0
142
+ }
143
+ });
144
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().messages[0]?.restored).toBe(true);
145
+ });
146
+ (0, _vitest.it)("leaves a live message unmarked", () => {
147
+ _askBuoyStore.askBuoyStore.addUser("live one");
148
+ (0, _vitest.expect)(_askBuoyStore.askBuoyStore.getState().messages[0]?.restored).toBeUndefined();
149
+ });
150
+ });
151
+ //# sourceMappingURL=turnRendering.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_vitest","require","_askBuoyStore","beforeEach","askBuoyStore","reset","lastText","getState","messages","at","text","describe","it","id","startAssistant","applyEvent","type","delta","breakBefore","expect","toBe","toolId","action","label","description","params","effect","ok","summary","durationMs","toolCalls","toMatchObject","status","markStopped","m","stopped","error","toBeUndefined","addUser","enqueue","requestStop","finishAssistant","s","queued","map","q","toEqual","queuePauseReason","toMatch","item","takeQueuedToDraft","draft","clearDraft","toBeNull","hydrate","role","blocks","answers","usage","input","output","requests","restored"],"sourceRoot":"../../../src","sources":["store/turnRendering.test.ts"],"mappings":"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","ignoreList":[]}