@buoy-gg/ask-buoy 7.0.33 → 7.0.35

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 (157) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/blocks/DataBlocks.js +217 -74
  3. package/lib/commonjs/blocks/DataBlocks.js.map +1 -1
  4. package/lib/commonjs/blocks/ExtraBlocks.js +53 -20
  5. package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -1
  6. package/lib/commonjs/blocks/MediaBlocks.js +2 -2
  7. package/lib/commonjs/blocks/MediaBlocks.js.map +1 -1
  8. package/lib/commonjs/blocks/ReceiptBlocks.js +35 -45
  9. package/lib/commonjs/blocks/ReceiptBlocks.js.map +1 -1
  10. package/lib/commonjs/blocks/listRow.test.js +55 -0
  11. package/lib/commonjs/blocks/listRow.test.js.map +1 -0
  12. package/lib/commonjs/blocks/pageState.js +34 -0
  13. package/lib/commonjs/blocks/pageState.js.map +1 -0
  14. package/lib/commonjs/blocks/pageState.test.js +57 -0
  15. package/lib/commonjs/blocks/pageState.test.js.map +1 -0
  16. package/lib/commonjs/blocks/primitives.js +113 -24
  17. package/lib/commonjs/blocks/primitives.js.map +1 -1
  18. package/lib/commonjs/blocks/primitivesIndex.js +8 -2
  19. package/lib/commonjs/blocks/primitivesIndex.js.map +1 -1
  20. package/lib/commonjs/components/AskBuoyHeader.js +42 -5
  21. package/lib/commonjs/components/AskBuoyHeader.js.map +1 -1
  22. package/lib/commonjs/components/AskBuoyModal.js +51 -20
  23. package/lib/commonjs/components/AskBuoyModal.js.map +1 -1
  24. package/lib/commonjs/components/AskBuoySettings.js +69 -0
  25. package/lib/commonjs/components/AskBuoySettings.js.map +1 -0
  26. package/lib/commonjs/components/MessageList.js +89 -54
  27. package/lib/commonjs/components/MessageList.js.map +1 -1
  28. package/lib/commonjs/components/ThinkingStrip.js +223 -0
  29. package/lib/commonjs/components/ThinkingStrip.js.map +1 -0
  30. package/lib/commonjs/components/useCopyAction.js +50 -0
  31. package/lib/commonjs/components/useCopyAction.js.map +1 -0
  32. package/lib/commonjs/index.js +47 -0
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/commonjs/preset.js +1 -1
  35. package/lib/commonjs/store/askBuoySettings.js +67 -0
  36. package/lib/commonjs/store/askBuoySettings.js.map +1 -0
  37. package/lib/commonjs/store/askBuoyStore.js +97 -11
  38. package/lib/commonjs/store/askBuoyStore.js.map +1 -1
  39. package/lib/commonjs/store/restoredIds.test.js +47 -0
  40. package/lib/commonjs/store/restoredIds.test.js.map +1 -0
  41. package/lib/commonjs/store/traceText.js +81 -0
  42. package/lib/commonjs/store/traceText.js.map +1 -0
  43. package/lib/commonjs/store/traceText.test.js +112 -0
  44. package/lib/commonjs/store/traceText.test.js.map +1 -0
  45. package/lib/commonjs/store/transcriptPersistence.js +208 -0
  46. package/lib/commonjs/store/transcriptPersistence.js.map +1 -0
  47. package/lib/commonjs/store/transcriptPersistence.test.js +185 -0
  48. package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -0
  49. package/lib/commonjs/store/useAskBuoy.js +102 -1
  50. package/lib/commonjs/store/useAskBuoy.js.map +1 -1
  51. package/lib/commonjs/store/useAskBuoySettings.js +14 -0
  52. package/lib/commonjs/store/useAskBuoySettings.js.map +1 -0
  53. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +6 -1
  54. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +1 -1
  55. package/lib/module/blocks/DataBlocks.js +217 -75
  56. package/lib/module/blocks/DataBlocks.js.map +1 -1
  57. package/lib/module/blocks/ExtraBlocks.js +55 -22
  58. package/lib/module/blocks/ExtraBlocks.js.map +1 -1
  59. package/lib/module/blocks/MediaBlocks.js +3 -3
  60. package/lib/module/blocks/MediaBlocks.js.map +1 -1
  61. package/lib/module/blocks/ReceiptBlocks.js +37 -47
  62. package/lib/module/blocks/ReceiptBlocks.js.map +1 -1
  63. package/lib/module/blocks/listRow.test.js +56 -0
  64. package/lib/module/blocks/listRow.test.js.map +1 -0
  65. package/lib/module/blocks/pageState.js +30 -0
  66. package/lib/module/blocks/pageState.js.map +1 -0
  67. package/lib/module/blocks/pageState.test.js +56 -0
  68. package/lib/module/blocks/pageState.test.js.map +1 -0
  69. package/lib/module/blocks/primitives.js +112 -24
  70. package/lib/module/blocks/primitives.js.map +1 -1
  71. package/lib/module/blocks/primitivesIndex.js +1 -1
  72. package/lib/module/blocks/primitivesIndex.js.map +1 -1
  73. package/lib/module/components/AskBuoyHeader.js +43 -6
  74. package/lib/module/components/AskBuoyHeader.js.map +1 -1
  75. package/lib/module/components/AskBuoyModal.js +54 -23
  76. package/lib/module/components/AskBuoyModal.js.map +1 -1
  77. package/lib/module/components/AskBuoySettings.js +64 -0
  78. package/lib/module/components/AskBuoySettings.js.map +1 -0
  79. package/lib/module/components/MessageList.js +91 -56
  80. package/lib/module/components/MessageList.js.map +1 -1
  81. package/lib/module/components/ThinkingStrip.js +218 -0
  82. package/lib/module/components/ThinkingStrip.js.map +1 -0
  83. package/lib/module/components/useCopyAction.js +46 -0
  84. package/lib/module/components/useCopyAction.js.map +1 -0
  85. package/lib/module/index.js +5 -0
  86. package/lib/module/index.js.map +1 -1
  87. package/lib/module/preset.js +1 -1
  88. package/lib/module/store/askBuoySettings.js +62 -0
  89. package/lib/module/store/askBuoySettings.js.map +1 -0
  90. package/lib/module/store/askBuoyStore.js +97 -11
  91. package/lib/module/store/askBuoyStore.js.map +1 -1
  92. package/lib/module/store/restoredIds.test.js +46 -0
  93. package/lib/module/store/restoredIds.test.js.map +1 -0
  94. package/lib/module/store/traceText.js +75 -0
  95. package/lib/module/store/traceText.js.map +1 -0
  96. package/lib/module/store/traceText.test.js +111 -0
  97. package/lib/module/store/traceText.test.js.map +1 -0
  98. package/lib/module/store/transcriptPersistence.js +198 -0
  99. package/lib/module/store/transcriptPersistence.js.map +1 -0
  100. package/lib/module/store/transcriptPersistence.test.js +184 -0
  101. package/lib/module/store/transcriptPersistence.test.js.map +1 -0
  102. package/lib/module/store/useAskBuoy.js +102 -1
  103. package/lib/module/store/useAskBuoy.js.map +1 -1
  104. package/lib/module/store/useAskBuoySettings.js +9 -0
  105. package/lib/module/store/useAskBuoySettings.js.map +1 -0
  106. package/lib/module/sync/askBuoySyncAdapter.test.js +6 -1
  107. package/lib/module/sync/askBuoySyncAdapter.test.js.map +1 -1
  108. package/lib/typescript/blocks/DataBlocks.d.ts +31 -0
  109. package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -1
  110. package/lib/typescript/blocks/ExtraBlocks.d.ts +11 -0
  111. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -1
  112. package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -1
  113. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +1 -1
  114. package/lib/typescript/blocks/listRow.test.d.ts +2 -0
  115. package/lib/typescript/blocks/listRow.test.d.ts.map +1 -0
  116. package/lib/typescript/blocks/pageState.d.ts +23 -0
  117. package/lib/typescript/blocks/pageState.d.ts.map +1 -0
  118. package/lib/typescript/blocks/pageState.test.d.ts +2 -0
  119. package/lib/typescript/blocks/pageState.test.d.ts.map +1 -0
  120. package/lib/typescript/blocks/primitives.d.ts +39 -9
  121. package/lib/typescript/blocks/primitives.d.ts.map +1 -1
  122. package/lib/typescript/blocks/primitivesIndex.d.ts +2 -1
  123. package/lib/typescript/blocks/primitivesIndex.d.ts.map +1 -1
  124. package/lib/typescript/components/AskBuoyHeader.d.ts +11 -1
  125. package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -1
  126. package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -1
  127. package/lib/typescript/components/AskBuoySettings.d.ts +2 -0
  128. package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -0
  129. package/lib/typescript/components/MessageList.d.ts +12 -5
  130. package/lib/typescript/components/MessageList.d.ts.map +1 -1
  131. package/lib/typescript/components/ThinkingStrip.d.ts +5 -0
  132. package/lib/typescript/components/ThinkingStrip.d.ts.map +1 -0
  133. package/lib/typescript/components/useCopyAction.d.ts +5 -0
  134. package/lib/typescript/components/useCopyAction.d.ts.map +1 -0
  135. package/lib/typescript/index.d.ts +5 -0
  136. package/lib/typescript/index.d.ts.map +1 -1
  137. package/lib/typescript/preset.d.ts +1 -1
  138. package/lib/typescript/store/askBuoySettings.d.ts +22 -0
  139. package/lib/typescript/store/askBuoySettings.d.ts.map +1 -0
  140. package/lib/typescript/store/askBuoyStore.d.ts +74 -13
  141. package/lib/typescript/store/askBuoyStore.d.ts.map +1 -1
  142. package/lib/typescript/store/restoredIds.test.d.ts +2 -0
  143. package/lib/typescript/store/restoredIds.test.d.ts.map +1 -0
  144. package/lib/typescript/store/traceText.d.ts +33 -0
  145. package/lib/typescript/store/traceText.d.ts.map +1 -0
  146. package/lib/typescript/store/traceText.test.d.ts +2 -0
  147. package/lib/typescript/store/traceText.test.d.ts.map +1 -0
  148. package/lib/typescript/store/transcriptPersistence.d.ts +40 -0
  149. package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -0
  150. package/lib/typescript/store/transcriptPersistence.test.d.ts +2 -0
  151. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +1 -0
  152. package/lib/typescript/store/useAskBuoy.d.ts.map +1 -1
  153. package/lib/typescript/store/useAskBuoySettings.d.ts +3 -0
  154. package/lib/typescript/store/useAskBuoySettings.d.ts.map +1 -0
  155. package/lib/typescript/types.d.ts +24 -1
  156. package/lib/typescript/types.d.ts.map +1 -1
  157. package/package.json +8 -8
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "AskBuoyModal", {
39
39
  return _AskBuoyModal.AskBuoyModal;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "AskBuoySettings", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _AskBuoySettings.AskBuoySettings;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "BlockActionRow", {
43
49
  enumerable: true,
44
50
  get: function () {
@@ -135,12 +141,24 @@ Object.defineProperty(exports, "ReloadDivider", {
135
141
  return _blocks.ReloadDivider;
136
142
  }
137
143
  });
144
+ Object.defineProperty(exports, "ThinkingStrip", {
145
+ enumerable: true,
146
+ get: function () {
147
+ return _ThinkingStrip.ThinkingStrip;
148
+ }
149
+ });
138
150
  Object.defineProperty(exports, "Timestamp", {
139
151
  enumerable: true,
140
152
  get: function () {
141
153
  return _blocks.Timestamp;
142
154
  }
143
155
  });
156
+ Object.defineProperty(exports, "askBuoySettings", {
157
+ enumerable: true,
158
+ get: function () {
159
+ return _askBuoySettings.askBuoySettings;
160
+ }
161
+ });
144
162
  Object.defineProperty(exports, "askBuoyStore", {
145
163
  enumerable: true,
146
164
  get: function () {
@@ -165,18 +183,42 @@ Object.defineProperty(exports, "createAskBuoyTool", {
165
183
  return _preset.createAskBuoyTool;
166
184
  }
167
185
  });
186
+ Object.defineProperty(exports, "hasTrace", {
187
+ enumerable: true,
188
+ get: function () {
189
+ return _traceText.hasTrace;
190
+ }
191
+ });
168
192
  Object.defineProperty(exports, "redactForWire", {
169
193
  enumerable: true,
170
194
  get: function () {
171
195
  return _wire.redactForWire;
172
196
  }
173
197
  });
198
+ Object.defineProperty(exports, "traceEntries", {
199
+ enumerable: true,
200
+ get: function () {
201
+ return _traceText.traceEntries;
202
+ }
203
+ });
204
+ Object.defineProperty(exports, "traceToText", {
205
+ enumerable: true,
206
+ get: function () {
207
+ return _traceText.traceToText;
208
+ }
209
+ });
174
210
  Object.defineProperty(exports, "useAskBuoy", {
175
211
  enumerable: true,
176
212
  get: function () {
177
213
  return _useAskBuoy.useAskBuoy;
178
214
  }
179
215
  });
216
+ Object.defineProperty(exports, "useAskBuoySettings", {
217
+ enumerable: true,
218
+ get: function () {
219
+ return _useAskBuoySettings.useAskBuoySettings;
220
+ }
221
+ });
180
222
  Object.defineProperty(exports, "useAskBuoyState", {
181
223
  enumerable: true,
182
224
  get: function () {
@@ -199,6 +241,11 @@ var _blocks = require("./blocks");
199
241
  var _Markdown = require("./components/Markdown");
200
242
  var _MessageList = require("./components/MessageList");
201
243
  var _AskBuoyHeader = require("./components/AskBuoyHeader");
244
+ var _AskBuoySettings = require("./components/AskBuoySettings");
245
+ var _ThinkingStrip = require("./components/ThinkingStrip");
246
+ var _askBuoySettings = require("./store/askBuoySettings");
247
+ var _useAskBuoySettings = require("./store/useAskBuoySettings");
248
+ var _traceText = require("./store/traceText");
202
249
  var _Composer = require("./components/Composer");
203
250
  var _ChangesBar = require("./components/ChangesBar");
204
251
  var _ApprovalCard = require("./components/ApprovalCard");
@@ -1 +1 @@
1
- {"version":3,"names":["_AskBuoyModal","require","_preset","_askBuoySyncAdapter","_askBuoyStore","_useAskBuoy","_wire","_blocks","_Markdown","_MessageList","_AskBuoyHeader","_Composer","_ChangesBar","_ApprovalCard"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAOA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAGA,IAAAK,KAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAN,OAAA;AAKA,IAAAO,SAAA,GAAAP,OAAA;AAGA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,WAAA,GAAAX,OAAA;AACA,IAAAY,aAAA,GAAAZ,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AskBuoyModal","require","_preset","_askBuoySyncAdapter","_askBuoyStore","_useAskBuoy","_wire","_blocks","_Markdown","_MessageList","_AskBuoyHeader","_AskBuoySettings","_ThinkingStrip","_askBuoySettings","_useAskBuoySettings","_traceText","_Composer","_ChangesBar","_ApprovalCard"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAOA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAGA,IAAAK,KAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAN,OAAA;AAKA,IAAAO,SAAA,GAAAP,OAAA;AAGA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,gBAAA,GAAAV,OAAA;AACA,IAAAW,cAAA,GAAAX,OAAA;AACA,IAAAY,gBAAA,GAAAZ,OAAA;AACA,IAAAa,mBAAA,GAAAb,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AACA,IAAAe,SAAA,GAAAf,OAAA;AACA,IAAAgB,WAAA,GAAAhB,OAAA;AACA,IAAAiB,aAAA,GAAAjB,OAAA","ignoreList":[]}
@@ -65,7 +65,7 @@ const askBuoyToolPreset = exports.askBuoyToolPreset = {
65
65
  * @example
66
66
  * createAskBuoyTool({
67
67
  * endpoint: "https://ai.acme.com/v1/messages",
68
- * model: "claude-sonnet-4-5",
68
+ * model: "claude-opus-5",
69
69
  * headers: async () => ({ Authorization: `Bearer ${await auth.getToken()}` }),
70
70
  * context: { notes: ["user.rewards.points = loyalty points"] },
71
71
  * })
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.askBuoySettings = exports.DEFAULT_SETTINGS = void 0;
7
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
+ /**
9
+ * Ask Buoy's own preferences — the things a tester sets on the sheet, not the
10
+ * things a developer sets in `askBuoy={{ … }}`.
11
+ *
12
+ * Module-level and subscribable for the same reason the transcript is: the
13
+ * sheet unmounts whenever the tool is closed or minimised, and a preference
14
+ * that reset on every close would not be a preference.
15
+ */
16
+
17
+ const DEFAULT_SETTINGS = exports.DEFAULT_SETTINGS = {
18
+ showThinking: false
19
+ };
20
+ const store = (0, _sharedUi.definePersistedSetting)(`${_sharedUi.devToolsStorageKeys.base}_ask_buoy_settings`, DEFAULT_SETTINGS, {
21
+ sanitize: merged => ({
22
+ showThinking: merged.showThinking === true
23
+ })
24
+ });
25
+ let current = DEFAULT_SETTINGS;
26
+ let loaded = false;
27
+ const listeners = new Set();
28
+ function emit() {
29
+ for (const fn of listeners) {
30
+ try {
31
+ fn();
32
+ } catch {
33
+ // A throwing subscriber must not take the sheet down.
34
+ }
35
+ }
36
+ }
37
+ const askBuoySettings = exports.askBuoySettings = {
38
+ get: () => current,
39
+ subscribe(fn) {
40
+ listeners.add(fn);
41
+ // First subscriber pays for the read; everyone after gets the cached value.
42
+ if (!loaded) {
43
+ loaded = true;
44
+ void store.load().then(value => {
45
+ current = value;
46
+ emit();
47
+ });
48
+ }
49
+ return () => listeners.delete(fn);
50
+ },
51
+ set(key, value) {
52
+ if (current[key] === value) return;
53
+ current = {
54
+ ...current,
55
+ [key]: value
56
+ };
57
+ emit();
58
+ void store.save(current);
59
+ },
60
+ /** Tests only — the module cache would otherwise leak between them. */
61
+ reset() {
62
+ current = DEFAULT_SETTINGS;
63
+ loaded = false;
64
+ void store.clear();
65
+ }
66
+ };
67
+ //# sourceMappingURL=askBuoySettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sharedUi","require","DEFAULT_SETTINGS","exports","showThinking","store","definePersistedSetting","devToolsStorageKeys","base","sanitize","merged","current","loaded","listeners","Set","emit","fn","askBuoySettings","get","subscribe","add","load","then","value","delete","set","key","save","reset","clear"],"sourceRoot":"../../../src","sources":["store/askBuoySettings.ts"],"mappings":";;;;;;AAQA,IAAAA,SAAA,GAAAC,OAAA;AARA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBO,MAAMC,gBAAiC,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EAAEE,YAAY,EAAE;AAAM,CAAC;AAExE,MAAMC,KAAK,GAAG,IAAAC,gCAAsB,EAClC,GAAGC,6BAAmB,CAACC,IAAI,oBAAoB,EAC/CN,gBAAgB,EAChB;EACEO,QAAQ,EAAGC,MAAM,KAAM;IAAEN,YAAY,EAAEM,MAAM,CAACN,YAAY,KAAK;EAAK,CAAC;AACvE,CACF,CAAC;AAED,IAAIO,OAAwB,GAAGT,gBAAgB;AAC/C,IAAIU,MAAM,GAAG,KAAK;AAClB,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;AAEvC,SAASC,IAAIA,CAAA,EAAS;EACpB,KAAK,MAAMC,EAAE,IAAIH,SAAS,EAAE;IAC1B,IAAI;MACFG,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF;AAEO,MAAMC,eAAe,GAAAd,OAAA,CAAAc,eAAA,GAAG;EAC7BC,GAAG,EAAEA,CAAA,KAAuBP,OAAO;EAEnCQ,SAASA,CAACH,EAAc,EAAc;IACpCH,SAAS,CAACO,GAAG,CAACJ,EAAE,CAAC;IACjB;IACA,IAAI,CAACJ,MAAM,EAAE;MACXA,MAAM,GAAG,IAAI;MACb,KAAKP,KAAK,CAACgB,IAAI,CAAC,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAK;QAChCZ,OAAO,GAAGY,KAAK;QACfR,IAAI,CAAC,CAAC;MACR,CAAC,CAAC;IACJ;IACA,OAAO,MAAMF,SAAS,CAACW,MAAM,CAACR,EAAE,CAAC;EACnC,CAAC;EAEDS,GAAGA,CAAkCC,GAAM,EAAEH,KAAyB,EAAQ;IAC5E,IAAIZ,OAAO,CAACe,GAAG,CAAC,KAAKH,KAAK,EAAE;IAC5BZ,OAAO,GAAG;MAAE,GAAGA,OAAO;MAAE,CAACe,GAAG,GAAGH;IAAM,CAAC;IACtCR,IAAI,CAAC,CAAC;IACN,KAAKV,KAAK,CAACsB,IAAI,CAAChB,OAAO,CAAC;EAC1B,CAAC;EAED;EACAiB,KAAKA,CAAA,EAAS;IACZjB,OAAO,GAAGT,gBAAgB;IAC1BU,MAAM,GAAG,KAAK;IACd,KAAKP,KAAK,CAACwB,KAAK,CAAC,CAAC;EACpB;AACF,CAAC","ignoreList":[]}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.askBuoyStore = void 0;
7
+ var _agentCore = require("@buoy-gg/agent-core");
7
8
  /**
8
9
  * Conversation state for the sheet.
9
10
  *
@@ -12,16 +13,46 @@ exports.askBuoyStore = void 0;
12
13
  * that vanished because someone tapped away would be maddening), and the sync
13
14
  * adapter needs to read the same transcript to show it on the desktop.
14
15
  *
15
- * Deliberately NOT persisted. A transcript can contain anything the agent read
16
- * — storage values, response bodies, a customer's record — and writing that to
17
- * disk under a Buoy key would put it in the Storage tool and, from there, on
18
- * the unauthenticated broker wire. It lives for the session and no longer.
16
+ * Persisted across restarts, on purpose, with the payloads left out — see
17
+ * `transcriptPersistence.ts` for what is written and what that costs. The
18
+ * store itself stays a plain in-memory store; saving is a subscriber, and
19
+ * `hydrate` is the one way anything comes back in.
19
20
  */
20
21
 
21
22
  /** A block in a message, and (for receipts) the tool call that produced it. */
22
23
 
23
- let seq = 0;
24
- const nextId = () => `m${++seq}`;
24
+ /**
25
+ * A stretch of the model's own reasoning, and where it fell.
26
+ *
27
+ * `afterCalls` is how many tool calls this message had already made when the
28
+ * thought arrived, so the thinking view can lay reasoning and steps out in the
29
+ * order they actually happened. One assistant bubble spans every turn of a
30
+ * multi-step run, so "think, act, think, act" is the normal shape and showing
31
+ * all the thoughts in a lump at the top would misreport it.
32
+ */
33
+
34
+ /**
35
+ * Message ids carry this run's token — see agent-core's `runId`. A plain `m1`
36
+ * collided head-on with the `m1` in a restored transcript, and the message
37
+ * list keys on it.
38
+ */
39
+ const nextId = (0, _agentCore.idFactory)("m");
40
+
41
+ /**
42
+ * Params, as one readable line. Capped because a step can carry a whole
43
+ * response body or a store's full state, and this is chrome inside a chat
44
+ * bubble — the full value is a tool read away.
45
+ */
46
+ const MAX_PARAM_CHARS = 400;
47
+ function encodeParams(params) {
48
+ if (!params || Object.keys(params).length === 0) return undefined;
49
+ try {
50
+ const json = JSON.stringify(params);
51
+ return json.length > MAX_PARAM_CHARS ? `${json.slice(0, MAX_PARAM_CHARS)}…` : json;
52
+ } catch {
53
+ return undefined;
54
+ }
55
+ }
25
56
  let state = {
26
57
  messages: [],
27
58
  busy: false,
@@ -36,7 +67,8 @@ let state = {
36
67
  input: 0,
37
68
  output: 0,
38
69
  requests: 0
39
- }
70
+ },
71
+ meta: {}
40
72
  };
41
73
  const listeners = new Set();
42
74
  let ledgerRef = null;
@@ -94,6 +126,15 @@ const askBuoyStore = exports.askBuoyStore = {
94
126
  configured
95
127
  });
96
128
  },
129
+ setMeta(meta) {
130
+ const same = Object.keys(meta).every(k => state.meta[k] === meta[k]);
131
+ if (!same) set({
132
+ meta: {
133
+ ...state.meta,
134
+ ...meta
135
+ }
136
+ });
137
+ },
97
138
  addUser(text) {
98
139
  set({
99
140
  messages: [...state.messages, {
@@ -153,7 +194,8 @@ const askBuoyStore = exports.askBuoyStore = {
153
194
  text: "",
154
195
  toolCalls: [],
155
196
  blocks: [],
156
- streaming: true
197
+ streaming: true,
198
+ startedAt: Date.now()
157
199
  }]
158
200
  });
159
201
  return id;
@@ -175,6 +217,15 @@ const askBuoyStore = exports.askBuoyStore = {
175
217
  text: m.breakBeforeNextText && m.text ? `${m.text.trimEnd()}\n\n${ev.delta}` : m.text + ev.delta,
176
218
  breakBeforeNextText: false
177
219
  };
220
+ case "reasoning":
221
+ return {
222
+ ...m,
223
+ breakBeforeNextText: true,
224
+ reasoning: [...(m.reasoning ?? []), {
225
+ text: ev.text,
226
+ afterCalls: m.toolCalls.length
227
+ }]
228
+ };
178
229
  case "tool-start":
179
230
  return {
180
231
  ...m,
@@ -184,7 +235,10 @@ const askBuoyStore = exports.askBuoyStore = {
184
235
  action: ev.action,
185
236
  label: ev.label,
186
237
  description: ev.description,
187
- status: "running"
238
+ status: "running",
239
+ params: encodeParams(ev.params),
240
+ effect: ev.effect,
241
+ startedAt: Date.now()
188
242
  }]
189
243
  };
190
244
  case "tool-end":
@@ -194,7 +248,9 @@ const askBuoyStore = exports.askBuoyStore = {
194
248
  toolCalls: m.toolCalls.map(c => c.id === ev.id ? {
195
249
  ...c,
196
250
  status: !ev.ok && ev.summary === "refused" ? "refused" : ev.ok ? "ok" : "failed",
197
- summary: ev.summary
251
+ summary: ev.summary,
252
+ durationMs: ev.durationMs,
253
+ result: ev.result
198
254
  } : c)
199
255
  };
200
256
  case "block":
@@ -206,6 +262,18 @@ const askBuoyStore = exports.askBuoyStore = {
206
262
  forToolCallId: ev.forToolCallId
207
263
  }]
208
264
  };
265
+ case "usage":
266
+ // Also folded into the session total below. Per MESSAGE as well,
267
+ // because "which answer cost 40k tokens" is the question you ask
268
+ // when a bill looks wrong, and a session total cannot answer it.
269
+ return {
270
+ ...m,
271
+ usage: {
272
+ input: (m.usage?.input ?? 0) + ev.input,
273
+ output: (m.usage?.output ?? 0) + ev.output,
274
+ requests: (m.usage?.requests ?? 0) + 1
275
+ }
276
+ };
209
277
  case "error":
210
278
  return {
211
279
  ...m,
@@ -233,7 +301,8 @@ const askBuoyStore = exports.askBuoyStore = {
233
301
  set({
234
302
  messages: state.messages.map(m => m.id === messageId ? {
235
303
  ...m,
236
- streaming: false
304
+ streaming: false,
305
+ endedAt: Date.now()
237
306
  } : m),
238
307
  busy: false
239
308
  });
@@ -255,6 +324,21 @@ const askBuoyStore = exports.askBuoyStore = {
255
324
  });
256
325
  pending?.resolve(approved);
257
326
  },
327
+ /**
328
+ * Put a saved conversation back, once, at open.
329
+ *
330
+ * Refuses if anything has been said already: a slow disk read landing after
331
+ * the user has started typing must not shove an old chat in front of them.
332
+ */
333
+ hydrate(input) {
334
+ if (state.messages.length > 0 || state.busy) return false;
335
+ set({
336
+ messages: input.messages,
337
+ answers: input.answers,
338
+ usage: input.usage
339
+ });
340
+ return true;
341
+ },
258
342
  reset() {
259
343
  // Reject anything still waiting, or the turn hangs forever on a promise
260
344
  // whose only resolver just left the screen.
@@ -273,6 +357,8 @@ const askBuoyStore = exports.askBuoyStore = {
273
357
  output: 0,
274
358
  requests: 0
275
359
  }
360
+ // `meta` survives: it describes the app and the endpoint, not the
361
+ // conversation, and re-deriving it would need another render pass.
276
362
  });
277
363
  }
278
364
  };
@@ -1 +1 @@
1
- {"version":3,"names":["seq","nextId","state","messages","busy","pending","notice","configured","answers","awaitingBlockId","actionState","queued","usage","input","output","requests","listeners","Set","ledgerRef","heldSession","set","next","fn","askBuoyStore","exports","getState","subscribe","add","delete","setLedger","ledger","getLedger","holdSession","session","signature","getHeldSession","setNotice","setConfigured","addUser","text","id","role","toolCalls","blocks","beginTurn","setQueued","removeMessage","filter","m","recordAnswer","answer","blockId","setActionState","key","value","startAssistant","streaming","applyEvent","messageId","ev","map","type","breakBeforeNextText","trimEnd","delta","toolId","action","label","description","status","c","ok","summary","block","forToolCallId","error","message","finishAssistant","askApproval","Promise","resolve","answerApproval","approved","reset"],"sourceRoot":"../../../src","sources":["store/askBuoyStore.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAyEA,IAAIA,GAAG,GAAG,CAAC;AACX,MAAMC,MAAM,GAAGA,CAAA,KAAM,IAAI,EAAED,GAAG,EAAE;AAEhC,IAAIE,KAAmB,GAAG;EACxBC,QAAQ,EAAE,EAAE;EACZC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,KAAK;EACjBC,OAAO,EAAE,CAAC,CAAC;EACXC,eAAe,EAAE,IAAI;EACrBC,WAAW,EAAE,CAAC,CAAC;EACfC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE;IAAEC,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE,CAAC;IAAEC,QAAQ,EAAE;EAAE;AAC5C,CAAC;AACD,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;AACrC,IAAIC,SAA8B,GAAG,IAAI;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,WAAkE,GAAG,IAAI;AAE7E,SAASC,GAAGA,CAACC,IAA2B,EAAQ;EAC9CnB,KAAK,GAAG;IAAE,GAAGA,KAAK;IAAE,GAAGmB;EAAK,CAAC;EAC7B,KAAK,MAAMC,EAAE,IAAIN,SAAS,EAAE;IAC1B,IAAI;MACFM,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF;AAEO,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,QAAQ,EAAEA,CAAA,KAAoBvB,KAAK;EAEnCwB,SAASA,CAACJ,EAAY,EAAc;IAClCN,SAAS,CAACW,GAAG,CAACL,EAAE,CAAC;IACjB,OAAO,MAAMN,SAAS,CAACY,MAAM,CAACN,EAAE,CAAC;EACnC,CAAC;EAEDO,SAASA,CAACC,MAA2B,EAAQ;IAC3CZ,SAAS,GAAGY,MAAM;EACpB,CAAC;EACDC,SAASA,CAAA,EAAwB;IAC/B,OAAOb,SAAS;EAClB,CAAC;EAEDc,WAAWA,CAACC,OAAuB,EAAEC,SAAiB,EAAQ;IAC5Df,WAAW,GAAG;MAAEc,OAAO;MAAEC;IAAU,CAAC;EACtC,CAAC;EACDC,cAAcA,CAAA,EAA0D;IACtE,OAAOhB,WAAW;EACpB,CAAC;EAEDiB,SAASA,CAAC9B,MAAqB,EAAQ;IACrCc,GAAG,CAAC;MAAEd;IAAO,CAAC,CAAC;EACjB,CAAC;EAED+B,aAAaA,CAAC9B,UAAmB,EAAQ;IACvC,IAAIA,UAAU,KAAKL,KAAK,CAACK,UAAU,EAAEa,GAAG,CAAC;MAAEb;IAAW,CAAC,CAAC;EAC1D,CAAC;EAED+B,OAAOA,CAACC,IAAY,EAAQ;IAC1BnB,GAAG,CAAC;MACFjB,QAAQ,EAAE,CACR,GAAGD,KAAK,CAACC,QAAQ,EACjB;QAAEqC,EAAE,EAAEvC,MAAM,CAAC,CAAC;QAAEwC,IAAI,EAAE,MAAM;QAAEF,IAAI;QAAEG,SAAS,EAAE,EAAE;QAAEC,MAAM,EAAE;MAAG,CAAC,CAChE;MACDvC,IAAI,EAAE;IACR,CAAC,CAAC;EACJ,CAAC;EAED;EACAwC,SAASA,CAAA,EAAS;IAChBxB,GAAG,CAAC;MAAEhB,IAAI,EAAE;IAAK,CAAC,CAAC;EACrB,CAAC;EAED;EACAyC,SAASA,CAACN,IAAmB,EAAQ;IACnCnB,GAAG,CAAC;MAAET,MAAM,EAAE4B;IAAK,CAAC,CAAC;EACvB,CAAC;EAED;EACAO,aAAaA,CAACN,EAAU,EAAQ;IAC9BpB,GAAG,CAAC;MAAEjB,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAAC4C,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACR,EAAE,KAAKA,EAAE;IAAE,CAAC,CAAC;EAC9D,CAAC;EAED;EACAS,YAAYA,CAACC,MAAmB,EAAQ;IACtC9B,GAAG,CAAC;MACFZ,OAAO,EAAE;QAAE,GAAGN,KAAK,CAACM,OAAO;QAAE,CAAC0C,MAAM,CAACC,OAAO,GAAGD;MAAO,CAAC;MACvDzC,eAAe,EAAEP,KAAK,CAACO,eAAe,KAAKyC,MAAM,CAACC,OAAO,GAAG,IAAI,GAAGjD,KAAK,CAACO;IAC3E,CAAC,CAAC;EACJ,CAAC;EAED2C,cAAcA,CAACC,GAAW,EAAEC,KAA2C,EAAQ;IAC7E,MAAMjC,IAAI,GAAG;MAAE,GAAGnB,KAAK,CAACQ;IAAY,CAAC;IACrC,IAAI4C,KAAK,KAAK,IAAI,EAAE,OAAOjC,IAAI,CAACgC,GAAG,CAAC,CAAC,KAChChC,IAAI,CAACgC,GAAG,CAAC,GAAGC,KAAK;IACtBlC,GAAG,CAAC;MAAEV,WAAW,EAAEW;IAAK,CAAC,CAAC;EAC5B,CAAC;EAED;EACAkC,cAAcA,CAAA,EAAW;IACvB,MAAMf,EAAE,GAAGvC,MAAM,CAAC,CAAC;IACnBmB,GAAG,CAAC;MACFjB,QAAQ,EAAE,CACR,GAAGD,KAAK,CAACC,QAAQ,EACjB;QAAEqC,EAAE;QAAEC,IAAI,EAAE,WAAW;QAAEF,IAAI,EAAE,EAAE;QAAEG,SAAS,EAAE,EAAE;QAAEC,MAAM,EAAE,EAAE;QAAEa,SAAS,EAAE;MAAK,CAAC;IAEnF,CAAC,CAAC;IACF,OAAOhB,EAAE;EACX,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEiB,UAAUA,CAACC,SAAiB,EAAEC,EAAa,EAAQ;IACjD,MAAMxD,QAAQ,GAAGD,KAAK,CAACC,QAAQ,CAACyD,GAAG,CAAEZ,CAAC,IAAK;MACzC,IAAIA,CAAC,CAACR,EAAE,KAAKkB,SAAS,EAAE,OAAOV,CAAC;MAChC,QAAQW,EAAE,CAACE,IAAI;QACb,KAAK,MAAM;UACT,OAAO;YACL,GAAGb,CAAC;YACJT,IAAI,EACFS,CAAC,CAACc,mBAAmB,IAAId,CAAC,CAACT,IAAI,GAC3B,GAAGS,CAAC,CAACT,IAAI,CAACwB,OAAO,CAAC,CAAC,OAAOJ,EAAE,CAACK,KAAK,EAAE,GACpChB,CAAC,CAACT,IAAI,GAAGoB,EAAE,CAACK,KAAK;YACvBF,mBAAmB,EAAE;UACvB,CAAC;QACH,KAAK,YAAY;UACf,OAAO;YACL,GAAGd,CAAC;YACJN,SAAS,EAAE,CACT,GAAGM,CAAC,CAACN,SAAS,EACd;cACEF,EAAE,EAAEmB,EAAE,CAACnB,EAAE;cACTyB,MAAM,EAAEN,EAAE,CAACM,MAAM;cACjBC,MAAM,EAAEP,EAAE,CAACO,MAAM;cACjBC,KAAK,EAAER,EAAE,CAACQ,KAAK;cACfC,WAAW,EAAET,EAAE,CAACS,WAAW;cAC3BC,MAAM,EAAE;YACV,CAAC;UAEL,CAAC;QACH,KAAK,UAAU;UACb,OAAO;YACL,GAAGrB,CAAC;YACJc,mBAAmB,EAAE,IAAI;YACzBpB,SAAS,EAAEM,CAAC,CAACN,SAAS,CAACkB,GAAG,CAAEU,CAAC,IAC3BA,CAAC,CAAC9B,EAAE,KAAKmB,EAAE,CAACnB,EAAE,GACV;cACE,GAAG8B,CAAC;cACJD,MAAM,EAAE,CAACV,EAAE,CAACY,EAAE,IAAIZ,EAAE,CAACa,OAAO,KAAK,SAAS,GACrC,SAAS,GACVb,EAAE,CAACY,EAAE,GACF,IAAI,GACJ,QAAkB;cACzBC,OAAO,EAAEb,EAAE,CAACa;YACd,CAAC,GACDF,CACN;UACF,CAAC;QACH,KAAK,OAAO;UACV,OAAO;YACL,GAAGtB,CAAC;YACJc,mBAAmB,EAAE,IAAI;YACzBnB,MAAM,EAAE,CAAC,GAAGK,CAAC,CAACL,MAAM,EAAE;cAAE8B,KAAK,EAAEd,EAAE,CAACc,KAAK;cAAEC,aAAa,EAAEf,EAAE,CAACe;YAAc,CAAC;UAC5E,CAAC;QACH,KAAK,OAAO;UACV,OAAO;YAAE,GAAG1B,CAAC;YAAE2B,KAAK,EAAEhB,EAAE,CAACiB;UAAQ,CAAC;QACpC;UACE,OAAO5B,CAAC;MACZ;IACF,CAAC,CAAC;IACF5B,GAAG,CAAC;MACFjB,QAAQ;MACR,IAAIwD,EAAE,CAACE,IAAI,KAAK,eAAe,GAAG;QAAEpD,eAAe,EAAEkD,EAAE,CAACR;MAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;MACvE,IAAIQ,EAAE,CAACE,IAAI,KAAK,OAAO,GACnB;QACEjD,KAAK,EAAE;UACLC,KAAK,EAAEX,KAAK,CAACU,KAAK,CAACC,KAAK,GAAG8C,EAAE,CAAC9C,KAAK;UACnCC,MAAM,EAAEZ,KAAK,CAACU,KAAK,CAACE,MAAM,GAAG6C,EAAE,CAAC7C,MAAM;UACtCC,QAAQ,EAAEb,KAAK,CAACU,KAAK,CAACG,QAAQ,GAAG;QACnC;MACF,CAAC,GACD,CAAC,CAAC;IACR,CAAC,CAAC;EACJ,CAAC;EAED8D,eAAeA,CAACnB,SAAiB,EAAQ;IACvCtC,GAAG,CAAC;MACFjB,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAACyD,GAAG,CAAEZ,CAAC,IAC7BA,CAAC,CAACR,EAAE,KAAKkB,SAAS,GAAG;QAAE,GAAGV,CAAC;QAAEQ,SAAS,EAAE;MAAM,CAAC,GAAGR,CACpD,CAAC;MACD5C,IAAI,EAAE;IACR,CAAC,CAAC;EACJ,CAAC;EAED0E,WAAWA,CAACjE,KAAuC,EAAoB;IACrE,OAAO,IAAIkE,OAAO,CAAWC,OAAO,IAAK;MACvC5D,GAAG,CAAC;QAAEf,OAAO,EAAE;UAAE,GAAGQ,KAAK;UAAEmE;QAAQ;MAAE,CAAC,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC;EAEDC,cAAcA,CAACC,QAAiB,EAAQ;IACtC,MAAM7E,OAAO,GAAGH,KAAK,CAACG,OAAO;IAC7Be,GAAG,CAAC;MAAEf,OAAO,EAAE;IAAK,CAAC,CAAC;IACtBA,OAAO,EAAE2E,OAAO,CAACE,QAAQ,CAAC;EAC5B,CAAC;EAEDC,KAAKA,CAAA,EAAS;IACZ;IACA;IACAjF,KAAK,CAACG,OAAO,EAAE2E,OAAO,CAAC,KAAK,CAAC;IAC7B5D,GAAG,CAAC;MACFjB,QAAQ,EAAE,EAAE;MACZC,IAAI,EAAE,KAAK;MACXC,OAAO,EAAE,IAAI;MACbC,MAAM,EAAE,IAAI;MACZE,OAAO,EAAE,CAAC,CAAC;MACXC,eAAe,EAAE,IAAI;MACrBC,WAAW,EAAE,CAAC,CAAC;MACfC,MAAM,EAAE,IAAI;MACZC,KAAK,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,QAAQ,EAAE;MAAE;IAC5C,CAAC,CAAC;EACJ;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_agentCore","require","nextId","idFactory","MAX_PARAM_CHARS","encodeParams","params","Object","keys","length","undefined","json","JSON","stringify","slice","state","messages","busy","pending","notice","configured","answers","awaitingBlockId","actionState","queued","usage","input","output","requests","meta","listeners","Set","ledgerRef","heldSession","set","next","fn","askBuoyStore","exports","getState","subscribe","add","delete","setLedger","ledger","getLedger","holdSession","session","signature","getHeldSession","setNotice","setConfigured","setMeta","same","every","k","addUser","text","id","role","toolCalls","blocks","beginTurn","setQueued","removeMessage","filter","m","recordAnswer","answer","blockId","setActionState","key","value","startAssistant","streaming","startedAt","Date","now","applyEvent","messageId","ev","map","type","breakBeforeNextText","trimEnd","delta","reasoning","afterCalls","toolId","action","label","description","status","effect","c","ok","summary","durationMs","result","block","forToolCallId","error","message","finishAssistant","endedAt","askApproval","Promise","resolve","answerApproval","approved","hydrate","reset"],"sourceRoot":"../../../src","sources":["store/askBuoyStore.ts"],"mappings":";;;;;;AAaA,IAAAA,UAAA,GAAAC,OAAA;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmFA;AACA;AACA;AACA;AACA;AACA,MAAMC,MAAM,GAAG,IAAAC,oBAAS,EAAC,GAAG,CAAC;;AAE7B;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,GAAG;AAE3B,SAASC,YAAYA,CAACC,MAA+B,EAAsB;EACzE,IAAI,CAACA,MAAM,IAAIC,MAAM,CAACC,IAAI,CAACF,MAAM,CAAC,CAACG,MAAM,KAAK,CAAC,EAAE,OAAOC,SAAS;EACjE,IAAI;IACF,MAAMC,IAAI,GAAGC,IAAI,CAACC,SAAS,CAACP,MAAM,CAAC;IACnC,OAAOK,IAAI,CAACF,MAAM,GAAGL,eAAe,GAAG,GAAGO,IAAI,CAACG,KAAK,CAAC,CAAC,EAAEV,eAAe,CAAC,GAAG,GAAGO,IAAI;EACpF,CAAC,CAAC,MAAM;IACN,OAAOD,SAAS;EAClB;AACF;AAEA,IAAIK,KAAmB,GAAG;EACxBC,QAAQ,EAAE,EAAE;EACZC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,KAAK;EACjBC,OAAO,EAAE,CAAC,CAAC;EACXC,eAAe,EAAE,IAAI;EACrBC,WAAW,EAAE,CAAC,CAAC;EACfC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE;IAAEC,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE,CAAC;IAAEC,QAAQ,EAAE;EAAE,CAAC;EAC3CC,IAAI,EAAE,CAAC;AACT,CAAC;AACD,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;AACrC,IAAIC,SAA8B,GAAG,IAAI;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,WAAkE,GAAG,IAAI;AAE7E,SAASC,GAAGA,CAACC,IAA2B,EAAQ;EAC9CpB,KAAK,GAAG;IAAE,GAAGA,KAAK;IAAE,GAAGoB;EAAK,CAAC;EAC7B,KAAK,MAAMC,EAAE,IAAIN,SAAS,EAAE;IAC1B,IAAI;MACFM,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF;AAEO,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,QAAQ,EAAEA,CAAA,KAAoBxB,KAAK;EAEnCyB,SAASA,CAACJ,EAAY,EAAc;IAClCN,SAAS,CAACW,GAAG,CAACL,EAAE,CAAC;IACjB,OAAO,MAAMN,SAAS,CAACY,MAAM,CAACN,EAAE,CAAC;EACnC,CAAC;EAEDO,SAASA,CAACC,MAA2B,EAAQ;IAC3CZ,SAAS,GAAGY,MAAM;EACpB,CAAC;EACDC,SAASA,CAAA,EAAwB;IAC/B,OAAOb,SAAS;EAClB,CAAC;EAEDc,WAAWA,CAACC,OAAuB,EAAEC,SAAiB,EAAQ;IAC5Df,WAAW,GAAG;MAAEc,OAAO;MAAEC;IAAU,CAAC;EACtC,CAAC;EACDC,cAAcA,CAAA,EAA0D;IACtE,OAAOhB,WAAW;EACpB,CAAC;EAEDiB,SAASA,CAAC/B,MAAqB,EAAQ;IACrCe,GAAG,CAAC;MAAEf;IAAO,CAAC,CAAC;EACjB,CAAC;EAEDgC,aAAaA,CAAC/B,UAAmB,EAAQ;IACvC,IAAIA,UAAU,KAAKL,KAAK,CAACK,UAAU,EAAEc,GAAG,CAAC;MAAEd;IAAW,CAAC,CAAC;EAC1D,CAAC;EAEDgC,OAAOA,CAACvB,IAAiB,EAAQ;IAC/B,MAAMwB,IAAI,GAAI9C,MAAM,CAACC,IAAI,CAACqB,IAAI,CAAC,CAA2ByB,KAAK,CAC5DC,CAAC,IAAKxC,KAAK,CAACc,IAAI,CAAC0B,CAAC,CAAC,KAAK1B,IAAI,CAAC0B,CAAC,CACjC,CAAC;IACD,IAAI,CAACF,IAAI,EAAEnB,GAAG,CAAC;MAAEL,IAAI,EAAE;QAAE,GAAGd,KAAK,CAACc,IAAI;QAAE,GAAGA;MAAK;IAAE,CAAC,CAAC;EACtD,CAAC;EAED2B,OAAOA,CAACC,IAAY,EAAQ;IAC1BvB,GAAG,CAAC;MACFlB,QAAQ,EAAE,CACR,GAAGD,KAAK,CAACC,QAAQ,EACjB;QAAE0C,EAAE,EAAExD,MAAM,CAAC,CAAC;QAAEyD,IAAI,EAAE,MAAM;QAAEF,IAAI;QAAEG,SAAS,EAAE,EAAE;QAAEC,MAAM,EAAE;MAAG,CAAC,CAChE;MACD5C,IAAI,EAAE;IACR,CAAC,CAAC;EACJ,CAAC;EAED;EACA6C,SAASA,CAAA,EAAS;IAChB5B,GAAG,CAAC;MAAEjB,IAAI,EAAE;IAAK,CAAC,CAAC;EACrB,CAAC;EAED;EACA8C,SAASA,CAACN,IAAmB,EAAQ;IACnCvB,GAAG,CAAC;MAAEV,MAAM,EAAEiC;IAAK,CAAC,CAAC;EACvB,CAAC;EAED;EACAO,aAAaA,CAACN,EAAU,EAAQ;IAC9BxB,GAAG,CAAC;MAAElB,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAACiD,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACR,EAAE,KAAKA,EAAE;IAAE,CAAC,CAAC;EAC9D,CAAC;EAED;EACAS,YAAYA,CAACC,MAAmB,EAAQ;IACtClC,GAAG,CAAC;MACFb,OAAO,EAAE;QAAE,GAAGN,KAAK,CAACM,OAAO;QAAE,CAAC+C,MAAM,CAACC,OAAO,GAAGD;MAAO,CAAC;MACvD9C,eAAe,EAAEP,KAAK,CAACO,eAAe,KAAK8C,MAAM,CAACC,OAAO,GAAG,IAAI,GAAGtD,KAAK,CAACO;IAC3E,CAAC,CAAC;EACJ,CAAC;EAEDgD,cAAcA,CAACC,GAAW,EAAEC,KAA2C,EAAQ;IAC7E,MAAMrC,IAAI,GAAG;MAAE,GAAGpB,KAAK,CAACQ;IAAY,CAAC;IACrC,IAAIiD,KAAK,KAAK,IAAI,EAAE,OAAOrC,IAAI,CAACoC,GAAG,CAAC,CAAC,KAChCpC,IAAI,CAACoC,GAAG,CAAC,GAAGC,KAAK;IACtBtC,GAAG,CAAC;MAAEX,WAAW,EAAEY;IAAK,CAAC,CAAC;EAC5B,CAAC;EAED;EACAsC,cAAcA,CAAA,EAAW;IACvB,MAAMf,EAAE,GAAGxD,MAAM,CAAC,CAAC;IACnBgC,GAAG,CAAC;MACFlB,QAAQ,EAAE,CACR,GAAGD,KAAK,CAACC,QAAQ,EACjB;QACE0C,EAAE;QACFC,IAAI,EAAE,WAAW;QACjBF,IAAI,EAAE,EAAE;QACRG,SAAS,EAAE,EAAE;QACbC,MAAM,EAAE,EAAE;QACVa,SAAS,EAAE,IAAI;QACfC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC;MACtB,CAAC;IAEL,CAAC,CAAC;IACF,OAAOnB,EAAE;EACX,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEoB,UAAUA,CAACC,SAAiB,EAAEC,EAAa,EAAQ;IACjD,MAAMhE,QAAQ,GAAGD,KAAK,CAACC,QAAQ,CAACiE,GAAG,CAAEf,CAAC,IAAK;MACzC,IAAIA,CAAC,CAACR,EAAE,KAAKqB,SAAS,EAAE,OAAOb,CAAC;MAChC,QAAQc,EAAE,CAACE,IAAI;QACb,KAAK,MAAM;UACT,OAAO;YACL,GAAGhB,CAAC;YACJT,IAAI,EACFS,CAAC,CAACiB,mBAAmB,IAAIjB,CAAC,CAACT,IAAI,GAC3B,GAAGS,CAAC,CAACT,IAAI,CAAC2B,OAAO,CAAC,CAAC,OAAOJ,EAAE,CAACK,KAAK,EAAE,GACpCnB,CAAC,CAACT,IAAI,GAAGuB,EAAE,CAACK,KAAK;YACvBF,mBAAmB,EAAE;UACvB,CAAC;QACH,KAAK,WAAW;UACd,OAAO;YACL,GAAGjB,CAAC;YACJiB,mBAAmB,EAAE,IAAI;YACzBG,SAAS,EAAE,CACT,IAAIpB,CAAC,CAACoB,SAAS,IAAI,EAAE,CAAC,EACtB;cAAE7B,IAAI,EAAEuB,EAAE,CAACvB,IAAI;cAAE8B,UAAU,EAAErB,CAAC,CAACN,SAAS,CAACnD;YAAO,CAAC;UAErD,CAAC;QACH,KAAK,YAAY;UACf,OAAO;YACL,GAAGyD,CAAC;YACJN,SAAS,EAAE,CACT,GAAGM,CAAC,CAACN,SAAS,EACd;cACEF,EAAE,EAAEsB,EAAE,CAACtB,EAAE;cACT8B,MAAM,EAAER,EAAE,CAACQ,MAAM;cACjBC,MAAM,EAAET,EAAE,CAACS,MAAM;cACjBC,KAAK,EAAEV,EAAE,CAACU,KAAK;cACfC,WAAW,EAAEX,EAAE,CAACW,WAAW;cAC3BC,MAAM,EAAE,SAAkB;cAC1BtF,MAAM,EAAED,YAAY,CAAC2E,EAAE,CAAC1E,MAAM,CAAC;cAC/BuF,MAAM,EAAEb,EAAE,CAACa,MAAM;cACjBlB,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC;YACtB,CAAC;UAEL,CAAC;QACH,KAAK,UAAU;UACb,OAAO;YACL,GAAGX,CAAC;YACJiB,mBAAmB,EAAE,IAAI;YACzBvB,SAAS,EAAEM,CAAC,CAACN,SAAS,CAACqB,GAAG,CAAEa,CAAC,IAC3BA,CAAC,CAACpC,EAAE,KAAKsB,EAAE,CAACtB,EAAE,GACV;cACE,GAAGoC,CAAC;cACJF,MAAM,EAAE,CAACZ,EAAE,CAACe,EAAE,IAAIf,EAAE,CAACgB,OAAO,KAAK,SAAS,GACrC,SAAS,GACVhB,EAAE,CAACe,EAAE,GACF,IAAI,GACJ,QAAkB;cACzBC,OAAO,EAAEhB,EAAE,CAACgB,OAAO;cACnBC,UAAU,EAAEjB,EAAE,CAACiB,UAAU;cACzBC,MAAM,EAAElB,EAAE,CAACkB;YACb,CAAC,GACDJ,CACN;UACF,CAAC;QACH,KAAK,OAAO;UACV,OAAO;YACL,GAAG5B,CAAC;YACJiB,mBAAmB,EAAE,IAAI;YACzBtB,MAAM,EAAE,CAAC,GAAGK,CAAC,CAACL,MAAM,EAAE;cAAEsC,KAAK,EAAEnB,EAAE,CAACmB,KAAK;cAAEC,aAAa,EAAEpB,EAAE,CAACoB;YAAc,CAAC;UAC5E,CAAC;QACH,KAAK,OAAO;UACV;UACA;UACA;UACA,OAAO;YACL,GAAGlC,CAAC;YACJzC,KAAK,EAAE;cACLC,KAAK,EAAE,CAACwC,CAAC,CAACzC,KAAK,EAAEC,KAAK,IAAI,CAAC,IAAIsD,EAAE,CAACtD,KAAK;cACvCC,MAAM,EAAE,CAACuC,CAAC,CAACzC,KAAK,EAAEE,MAAM,IAAI,CAAC,IAAIqD,EAAE,CAACrD,MAAM;cAC1CC,QAAQ,EAAE,CAACsC,CAAC,CAACzC,KAAK,EAAEG,QAAQ,IAAI,CAAC,IAAI;YACvC;UACF,CAAC;QACH,KAAK,OAAO;UACV,OAAO;YAAE,GAAGsC,CAAC;YAAEmC,KAAK,EAAErB,EAAE,CAACsB;UAAQ,CAAC;QACpC;UACE,OAAOpC,CAAC;MACZ;IACF,CAAC,CAAC;IACFhC,GAAG,CAAC;MACFlB,QAAQ;MACR,IAAIgE,EAAE,CAACE,IAAI,KAAK,eAAe,GAAG;QAAE5D,eAAe,EAAE0D,EAAE,CAACX;MAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;MACvE,IAAIW,EAAE,CAACE,IAAI,KAAK,OAAO,GACnB;QACEzD,KAAK,EAAE;UACLC,KAAK,EAAEX,KAAK,CAACU,KAAK,CAACC,KAAK,GAAGsD,EAAE,CAACtD,KAAK;UACnCC,MAAM,EAAEZ,KAAK,CAACU,KAAK,CAACE,MAAM,GAAGqD,EAAE,CAACrD,MAAM;UACtCC,QAAQ,EAAEb,KAAK,CAACU,KAAK,CAACG,QAAQ,GAAG;QACnC;MACF,CAAC,GACD,CAAC,CAAC;IACR,CAAC,CAAC;EACJ,CAAC;EAED2E,eAAeA,CAACxB,SAAiB,EAAQ;IACvC7C,GAAG,CAAC;MACFlB,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAACiE,GAAG,CAAEf,CAAC,IAC7BA,CAAC,CAACR,EAAE,KAAKqB,SAAS,GAAG;QAAE,GAAGb,CAAC;QAAEQ,SAAS,EAAE,KAAK;QAAE8B,OAAO,EAAE5B,IAAI,CAACC,GAAG,CAAC;MAAE,CAAC,GAAGX,CACzE,CAAC;MACDjD,IAAI,EAAE;IACR,CAAC,CAAC;EACJ,CAAC;EAEDwF,WAAWA,CAAC/E,KAAuC,EAAoB;IACrE,OAAO,IAAIgF,OAAO,CAAWC,OAAO,IAAK;MACvCzE,GAAG,CAAC;QAAEhB,OAAO,EAAE;UAAE,GAAGQ,KAAK;UAAEiF;QAAQ;MAAE,CAAC,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC;EAEDC,cAAcA,CAACC,QAAiB,EAAQ;IACtC,MAAM3F,OAAO,GAAGH,KAAK,CAACG,OAAO;IAC7BgB,GAAG,CAAC;MAAEhB,OAAO,EAAE;IAAK,CAAC,CAAC;IACtBA,OAAO,EAAEyF,OAAO,CAACE,QAAQ,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,OAAOA,CAACpF,KAIP,EAAW;IACV,IAAIX,KAAK,CAACC,QAAQ,CAACP,MAAM,GAAG,CAAC,IAAIM,KAAK,CAACE,IAAI,EAAE,OAAO,KAAK;IACzDiB,GAAG,CAAC;MAAElB,QAAQ,EAAEU,KAAK,CAACV,QAAQ;MAAEK,OAAO,EAAEK,KAAK,CAACL,OAAO;MAAEI,KAAK,EAAEC,KAAK,CAACD;IAAM,CAAC,CAAC;IAC7E,OAAO,IAAI;EACb,CAAC;EAEDsF,KAAKA,CAAA,EAAS;IACZ;IACA;IACAhG,KAAK,CAACG,OAAO,EAAEyF,OAAO,CAAC,KAAK,CAAC;IAC7BzE,GAAG,CAAC;MACFlB,QAAQ,EAAE,EAAE;MACZC,IAAI,EAAE,KAAK;MACXC,OAAO,EAAE,IAAI;MACbC,MAAM,EAAE,IAAI;MACZE,OAAO,EAAE,CAAC,CAAC;MACXC,eAAe,EAAE,IAAI;MACrBC,WAAW,EAAE,CAAC,CAAC;MACfC,MAAM,EAAE,IAAI;MACZC,KAAK,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,QAAQ,EAAE;MAAE;MAC1C;MACA;IACF,CAAC,CAAC;EACJ;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _agentCore = require("@buoy-gg/agent-core");
5
+ /**
6
+ * Ids from a RESTORED transcript must never collide with a fresh run's.
7
+ *
8
+ * The bug this covers, in full: every id counter restarted at 1 with the
9
+ * process, which was harmless until the transcript started outliving a reload.
10
+ * A restored conversation came back holding `rc1`, `ui1` and `m1`; the next
11
+ * turn minted `rc1` again; React saw two children with one key and rendered
12
+ * one of them twice while dropping the other. On screen that was the same
13
+ * store card appearing twice after a reload.
14
+ *
15
+ * Simulating a restart in one process is the whole difficulty — the module
16
+ * caches its counter. `idFactory` is the seam: a second factory stands in for
17
+ * the second run, and the shared RUN_ID is what has to differ between them.
18
+ */
19
+
20
+ (0, _vitest.describe)("ids across a restart", () => {
21
+ (0, _vitest.it)("never reissues an id a restored transcript already holds", () => {
22
+ // What a saved transcript carries, from a previous launch.
23
+ const restored = ["rcOLDRUN-1", "rcOLDRUN-2", "uiOLDRUN-1", "mOLDRUN-1"];
24
+ const rc = (0, _agentCore.idFactory)("rc");
25
+ const ui = (0, _agentCore.idFactory)("ui");
26
+ const m = (0, _agentCore.idFactory)("m");
27
+ const fresh = [rc(), rc(), ui(), m()];
28
+ for (const id of fresh) (0, _vitest.expect)(restored).not.toContain(id);
29
+ });
30
+ (0, _vitest.it)("still counts up within one run", () => {
31
+ // The counter is what keeps two blocks in the SAME turn apart.
32
+ const rc = (0, _agentCore.idFactory)("rc");
33
+ const ids = [rc(), rc(), rc()];
34
+ (0, _vitest.expect)(new Set(ids).size).toBe(3);
35
+ });
36
+ (0, _vitest.it)("keeps two prefixes apart even at the same count", () => {
37
+ const rc = (0, _agentCore.idFactory)("rc");
38
+ const ui = (0, _agentCore.idFactory)("ui");
39
+ (0, _vitest.expect)(rc()).not.toBe(ui());
40
+ });
41
+ (0, _vitest.it)("stamps a run token that is not a fixed string", () => {
42
+ // A constant here would put every install back where it started.
43
+ (0, _vitest.expect)(_agentCore.RUN_ID).toMatch(/^[a-z0-9]{4,8}$/);
44
+ (0, _vitest.expect)((0, _agentCore.idFactory)("rc")()).toBe(`rc${_agentCore.RUN_ID}-1`);
45
+ });
46
+ });
47
+ //# sourceMappingURL=restoredIds.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_vitest","require","_agentCore","describe","it","restored","rc","idFactory","ui","m","fresh","id","expect","not","toContain","ids","Set","size","toBe","RUN_ID","toMatch"],"sourceRoot":"../../../src","sources":["store/restoredIds.test.ts"],"mappings":";;AAcA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,IAAAE,gBAAQ,EAAC,sBAAsB,EAAE,MAAM;EACrC,IAAAC,UAAE,EAAC,0DAA0D,EAAE,MAAM;IACnE;IACA,MAAMC,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC;IACxE,MAAMC,EAAE,GAAG,IAAAC,oBAAS,EAAC,IAAI,CAAC;IAC1B,MAAMC,EAAE,GAAG,IAAAD,oBAAS,EAAC,IAAI,CAAC;IAC1B,MAAME,CAAC,GAAG,IAAAF,oBAAS,EAAC,GAAG,CAAC;IACxB,MAAMG,KAAK,GAAG,CAACJ,EAAE,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEE,EAAE,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,MAAME,EAAE,IAAID,KAAK,EAAE,IAAAE,cAAM,EAACP,QAAQ,CAAC,CAACQ,GAAG,CAACC,SAAS,CAACH,EAAE,CAAC;EAC5D,CAAC,CAAC;EAEF,IAAAP,UAAE,EAAC,gCAAgC,EAAE,MAAM;IACzC;IACA,MAAME,EAAE,GAAG,IAAAC,oBAAS,EAAC,IAAI,CAAC;IAC1B,MAAMQ,GAAG,GAAG,CAACT,EAAE,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAAM,cAAM,EAAC,IAAII,GAAG,CAACD,GAAG,CAAC,CAACE,IAAI,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC;EAEF,IAAAd,UAAE,EAAC,iDAAiD,EAAE,MAAM;IAC1D,MAAME,EAAE,GAAG,IAAAC,oBAAS,EAAC,IAAI,CAAC;IAC1B,MAAMC,EAAE,GAAG,IAAAD,oBAAS,EAAC,IAAI,CAAC;IAC1B,IAAAK,cAAM,EAACN,EAAE,CAAC,CAAC,CAAC,CAACO,GAAG,CAACK,IAAI,CAACV,EAAE,CAAC,CAAC,CAAC;EAC7B,CAAC,CAAC;EAEF,IAAAJ,UAAE,EAAC,+CAA+C,EAAE,MAAM;IACxD;IACA,IAAAQ,cAAM,EAACO,iBAAM,CAAC,CAACC,OAAO,CAAC,iBAAiB,CAAC;IACzC,IAAAR,cAAM,EAAC,IAAAL,oBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAACW,IAAI,CAAC,KAAKC,iBAAM,IAAI,CAAC;EACjD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hasTrace = hasTrace;
7
+ exports.traceEntries = traceEntries;
8
+ exports.traceToText = traceToText;
9
+ /**
10
+ * The agent's work for one answer, laid out in the order it happened.
11
+ *
12
+ * `traceEntries` is the ordering, shared by the collapsible strip in the chat
13
+ * and by the JSON export — the two must agree, because the point of the export
14
+ * is reading elsewhere the run you were just looking at. `traceToText` is the
15
+ * plain-text rendering, kept for a quick paste into Slack; the debugging
16
+ * artefact is `sessionExport.ts`.
17
+ *
18
+ * Reasoning and steps INTERLEAVE. One assistant bubble spans every turn of a
19
+ * multi-step run, so the real shape is "think, act, think, act"; lumping the
20
+ * thoughts at the top would misreport when the model knew what.
21
+ */
22
+
23
+ function traceEntries(message) {
24
+ const thoughts = [...(message.reasoning ?? [])].sort((a, b) => a.afterCalls - b.afterCalls);
25
+ const out = [];
26
+ let t = 0;
27
+ const drainTo = calls => {
28
+ while (t < thoughts.length && thoughts[t].afterCalls <= calls) {
29
+ out.push({
30
+ kind: "thought",
31
+ text: thoughts[t].text
32
+ });
33
+ t += 1;
34
+ }
35
+ };
36
+ message.toolCalls.forEach((call, i) => {
37
+ drainTo(i);
38
+ out.push({
39
+ kind: "step",
40
+ n: i + 1,
41
+ call
42
+ });
43
+ });
44
+ // Anything the model thought after its last tool call — usually the reasoning
45
+ // behind the answer itself, which is the most useful line in the trace.
46
+ drainTo(message.toolCalls.length);
47
+ return out;
48
+ }
49
+
50
+ /** Has this message anything to show? Drives whether the strip renders at all. */
51
+ function hasTrace(message) {
52
+ return (message.reasoning?.length ?? 0) > 0 || message.toolCalls.length > 0;
53
+ }
54
+ const statusWord = call => call.status === "ok" ? call.summary || "done" : call.status === "running" ? "running" : `${call.status}${call.summary ? ` — ${call.summary}` : ""}`;
55
+
56
+ /**
57
+ * The trace as plain text, for the clipboard.
58
+ *
59
+ * Indented under the answer it belongs to so a pasted session still reads as a
60
+ * conversation rather than a log dump.
61
+ */
62
+ function traceToText(message, indent = " ") {
63
+ const lines = [];
64
+ for (const entry of traceEntries(message)) {
65
+ if (entry.kind === "thought") {
66
+ lines.push(`${indent}[thinking]`);
67
+ for (const line of entry.text.trim().split("\n")) {
68
+ lines.push(`${indent} ${line}`);
69
+ }
70
+ } else {
71
+ const {
72
+ n,
73
+ call
74
+ } = entry;
75
+ lines.push(`${indent}[${n}] ${call.toolId}.${call.action} — ${statusWord(call)}`);
76
+ if (call.params) lines.push(`${indent} ${call.params}`);
77
+ }
78
+ }
79
+ return lines;
80
+ }
81
+ //# sourceMappingURL=traceText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["traceEntries","message","thoughts","reasoning","sort","a","b","afterCalls","out","t","drainTo","calls","length","push","kind","text","toolCalls","forEach","call","i","n","hasTrace","statusWord","status","summary","traceToText","indent","lines","entry","line","trim","split","toolId","action","params"],"sourceRoot":"../../../src","sources":["store/traceText.ts"],"mappings":"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","ignoreList":[]}