@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.
- package/README.md +2 -2
- package/lib/commonjs/blocks/DataBlocks.js +217 -74
- package/lib/commonjs/blocks/DataBlocks.js.map +1 -1
- package/lib/commonjs/blocks/ExtraBlocks.js +53 -20
- package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -1
- package/lib/commonjs/blocks/MediaBlocks.js +2 -2
- package/lib/commonjs/blocks/MediaBlocks.js.map +1 -1
- package/lib/commonjs/blocks/ReceiptBlocks.js +35 -45
- package/lib/commonjs/blocks/ReceiptBlocks.js.map +1 -1
- package/lib/commonjs/blocks/listRow.test.js +55 -0
- package/lib/commonjs/blocks/listRow.test.js.map +1 -0
- package/lib/commonjs/blocks/pageState.js +34 -0
- package/lib/commonjs/blocks/pageState.js.map +1 -0
- package/lib/commonjs/blocks/pageState.test.js +57 -0
- package/lib/commonjs/blocks/pageState.test.js.map +1 -0
- package/lib/commonjs/blocks/primitives.js +113 -24
- package/lib/commonjs/blocks/primitives.js.map +1 -1
- package/lib/commonjs/blocks/primitivesIndex.js +8 -2
- package/lib/commonjs/blocks/primitivesIndex.js.map +1 -1
- package/lib/commonjs/components/AskBuoyHeader.js +42 -5
- package/lib/commonjs/components/AskBuoyHeader.js.map +1 -1
- package/lib/commonjs/components/AskBuoyModal.js +51 -20
- package/lib/commonjs/components/AskBuoyModal.js.map +1 -1
- package/lib/commonjs/components/AskBuoySettings.js +69 -0
- package/lib/commonjs/components/AskBuoySettings.js.map +1 -0
- package/lib/commonjs/components/MessageList.js +89 -54
- package/lib/commonjs/components/MessageList.js.map +1 -1
- package/lib/commonjs/components/ThinkingStrip.js +223 -0
- package/lib/commonjs/components/ThinkingStrip.js.map +1 -0
- package/lib/commonjs/components/useCopyAction.js +50 -0
- package/lib/commonjs/components/useCopyAction.js.map +1 -0
- package/lib/commonjs/index.js +47 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/preset.js +1 -1
- package/lib/commonjs/store/askBuoySettings.js +67 -0
- package/lib/commonjs/store/askBuoySettings.js.map +1 -0
- package/lib/commonjs/store/askBuoyStore.js +97 -11
- package/lib/commonjs/store/askBuoyStore.js.map +1 -1
- package/lib/commonjs/store/restoredIds.test.js +47 -0
- package/lib/commonjs/store/restoredIds.test.js.map +1 -0
- package/lib/commonjs/store/traceText.js +81 -0
- package/lib/commonjs/store/traceText.js.map +1 -0
- package/lib/commonjs/store/traceText.test.js +112 -0
- package/lib/commonjs/store/traceText.test.js.map +1 -0
- package/lib/commonjs/store/transcriptPersistence.js +208 -0
- package/lib/commonjs/store/transcriptPersistence.js.map +1 -0
- package/lib/commonjs/store/transcriptPersistence.test.js +185 -0
- package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -0
- package/lib/commonjs/store/useAskBuoy.js +102 -1
- package/lib/commonjs/store/useAskBuoy.js.map +1 -1
- package/lib/commonjs/store/useAskBuoySettings.js +14 -0
- package/lib/commonjs/store/useAskBuoySettings.js.map +1 -0
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js +6 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +1 -1
- package/lib/module/blocks/DataBlocks.js +217 -75
- package/lib/module/blocks/DataBlocks.js.map +1 -1
- package/lib/module/blocks/ExtraBlocks.js +55 -22
- package/lib/module/blocks/ExtraBlocks.js.map +1 -1
- package/lib/module/blocks/MediaBlocks.js +3 -3
- package/lib/module/blocks/MediaBlocks.js.map +1 -1
- package/lib/module/blocks/ReceiptBlocks.js +37 -47
- package/lib/module/blocks/ReceiptBlocks.js.map +1 -1
- package/lib/module/blocks/listRow.test.js +56 -0
- package/lib/module/blocks/listRow.test.js.map +1 -0
- package/lib/module/blocks/pageState.js +30 -0
- package/lib/module/blocks/pageState.js.map +1 -0
- package/lib/module/blocks/pageState.test.js +56 -0
- package/lib/module/blocks/pageState.test.js.map +1 -0
- package/lib/module/blocks/primitives.js +112 -24
- package/lib/module/blocks/primitives.js.map +1 -1
- package/lib/module/blocks/primitivesIndex.js +1 -1
- package/lib/module/blocks/primitivesIndex.js.map +1 -1
- package/lib/module/components/AskBuoyHeader.js +43 -6
- package/lib/module/components/AskBuoyHeader.js.map +1 -1
- package/lib/module/components/AskBuoyModal.js +54 -23
- package/lib/module/components/AskBuoyModal.js.map +1 -1
- package/lib/module/components/AskBuoySettings.js +64 -0
- package/lib/module/components/AskBuoySettings.js.map +1 -0
- package/lib/module/components/MessageList.js +91 -56
- package/lib/module/components/MessageList.js.map +1 -1
- package/lib/module/components/ThinkingStrip.js +218 -0
- package/lib/module/components/ThinkingStrip.js.map +1 -0
- package/lib/module/components/useCopyAction.js +46 -0
- package/lib/module/components/useCopyAction.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/preset.js +1 -1
- package/lib/module/store/askBuoySettings.js +62 -0
- package/lib/module/store/askBuoySettings.js.map +1 -0
- package/lib/module/store/askBuoyStore.js +97 -11
- package/lib/module/store/askBuoyStore.js.map +1 -1
- package/lib/module/store/restoredIds.test.js +46 -0
- package/lib/module/store/restoredIds.test.js.map +1 -0
- package/lib/module/store/traceText.js +75 -0
- package/lib/module/store/traceText.js.map +1 -0
- package/lib/module/store/traceText.test.js +111 -0
- package/lib/module/store/traceText.test.js.map +1 -0
- package/lib/module/store/transcriptPersistence.js +198 -0
- package/lib/module/store/transcriptPersistence.js.map +1 -0
- package/lib/module/store/transcriptPersistence.test.js +184 -0
- package/lib/module/store/transcriptPersistence.test.js.map +1 -0
- package/lib/module/store/useAskBuoy.js +102 -1
- package/lib/module/store/useAskBuoy.js.map +1 -1
- package/lib/module/store/useAskBuoySettings.js +9 -0
- package/lib/module/store/useAskBuoySettings.js.map +1 -0
- package/lib/module/sync/askBuoySyncAdapter.test.js +6 -1
- package/lib/module/sync/askBuoySyncAdapter.test.js.map +1 -1
- package/lib/typescript/blocks/DataBlocks.d.ts +31 -0
- package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -1
- package/lib/typescript/blocks/ExtraBlocks.d.ts +11 -0
- package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -1
- package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -1
- package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +1 -1
- package/lib/typescript/blocks/listRow.test.d.ts +2 -0
- package/lib/typescript/blocks/listRow.test.d.ts.map +1 -0
- package/lib/typescript/blocks/pageState.d.ts +23 -0
- package/lib/typescript/blocks/pageState.d.ts.map +1 -0
- package/lib/typescript/blocks/pageState.test.d.ts +2 -0
- package/lib/typescript/blocks/pageState.test.d.ts.map +1 -0
- package/lib/typescript/blocks/primitives.d.ts +39 -9
- package/lib/typescript/blocks/primitives.d.ts.map +1 -1
- package/lib/typescript/blocks/primitivesIndex.d.ts +2 -1
- package/lib/typescript/blocks/primitivesIndex.d.ts.map +1 -1
- package/lib/typescript/components/AskBuoyHeader.d.ts +11 -1
- package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -1
- package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -1
- package/lib/typescript/components/AskBuoySettings.d.ts +2 -0
- package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -0
- package/lib/typescript/components/MessageList.d.ts +12 -5
- package/lib/typescript/components/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/ThinkingStrip.d.ts +5 -0
- package/lib/typescript/components/ThinkingStrip.d.ts.map +1 -0
- package/lib/typescript/components/useCopyAction.d.ts +5 -0
- package/lib/typescript/components/useCopyAction.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +5 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/preset.d.ts +1 -1
- package/lib/typescript/store/askBuoySettings.d.ts +22 -0
- package/lib/typescript/store/askBuoySettings.d.ts.map +1 -0
- package/lib/typescript/store/askBuoyStore.d.ts +74 -13
- package/lib/typescript/store/askBuoyStore.d.ts.map +1 -1
- package/lib/typescript/store/restoredIds.test.d.ts +2 -0
- package/lib/typescript/store/restoredIds.test.d.ts.map +1 -0
- package/lib/typescript/store/traceText.d.ts +33 -0
- package/lib/typescript/store/traceText.d.ts.map +1 -0
- package/lib/typescript/store/traceText.test.d.ts +2 -0
- package/lib/typescript/store/traceText.test.d.ts.map +1 -0
- package/lib/typescript/store/transcriptPersistence.d.ts +40 -0
- package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -0
- package/lib/typescript/store/transcriptPersistence.test.d.ts +2 -0
- package/lib/typescript/store/transcriptPersistence.test.d.ts.map +1 -0
- package/lib/typescript/store/useAskBuoy.d.ts.map +1 -1
- package/lib/typescript/store/useAskBuoySettings.d.ts +3 -0
- package/lib/typescript/store/useAskBuoySettings.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +24 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +8 -8
package/lib/commonjs/index.js
CHANGED
|
@@ -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":"
|
|
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":[]}
|
package/lib/commonjs/preset.js
CHANGED
|
@@ -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-
|
|
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
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
-
|
|
24
|
-
|
|
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":["
|
|
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":"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","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":[]}
|