@lostgradient/cinder 0.8.0 → 0.9.0
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/CHANGELOG.md +9 -0
- package/README.md +2 -2
- package/components.json +59 -15
- package/dist/components/_internal/command-list-context.d.ts +3 -3
- package/dist/components/_internal/create-command-list-state.svelte.d.ts +11 -11
- package/dist/components/access-gate/index.js +201 -126
- package/dist/components/approval-card/approval-card-actions.svelte.d.ts +16 -0
- package/dist/components/approval-card/approval-card-state.d.ts +65 -0
- package/dist/components/approval-card/approval-card.css +269 -92
- package/dist/components/approval-card/approval-card.schema.js +10 -31
- package/dist/components/approval-card/approval-card.svelte.d.ts +3 -3
- package/dist/components/approval-card/approval-card.types.d.ts +14 -28
- package/dist/components/approval-card/index.d.ts +1 -1
- package/dist/components/approval-card/index.js +4268 -2884
- package/dist/components/card/card.css +5 -0
- package/dist/components/card/card.schema.js +2 -2
- package/dist/components/card/card.types.d.ts +2 -2
- package/dist/components/card/index.js +2 -1
- package/dist/components/chat/chat.schema.js +44 -2
- package/dist/components/chat/chat.svelte.d.ts +4 -2
- package/dist/components/chat/chat.types.d.ts +34 -3
- package/dist/components/chat/container/chat.svelte.d.ts +4 -2
- package/dist/components/chat/index.d.ts +3 -3
- package/dist/components/chat/index.js +2485 -6279
- package/dist/components/chat/input/chat-attachment-serialization.d.ts +9 -0
- package/dist/components/chat/input/chat-input.svelte.d.ts +22 -1
- package/dist/components/chat/input/index.d.ts +1 -0
- package/dist/components/chat-composer-popover/chat-composer-popover-filter.d.ts +11 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.css +7 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.css.d.ts +1 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.schema.d.ts +3 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.schema.js +150 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.svelte.d.ts +46 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.types.d.ts +77 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.variables.d.ts +2 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.variables.js +61 -0
- package/dist/components/chat-composer-popover/index.d.ts +6 -0
- package/dist/components/chat-composer-popover/index.js +3285 -0
- package/dist/components/chat-conversation-header/index.js +1627 -5600
- package/dist/components/chat-conversation-list/index.js +15 -3988
- package/dist/components/code-block/code-block.schema.js +5 -1
- package/dist/components/code-block/code-block.types.d.ts +6 -0
- package/dist/components/code-block/index.js +4 -4
- package/dist/components/command-item/index.js +7 -6
- package/dist/components/command-menu/command-menu.schema.js +5 -1
- package/dist/components/command-menu/command-menu.types.d.ts +2 -0
- package/dist/components/command-menu/index.js +48 -19
- package/dist/components/command-palette/index.js +40 -14
- package/dist/components/event-stream-viewer/index.js +44 -44
- package/dist/components/experimental/json-viewer/index.js +44 -44
- package/dist/components/json-schema-editor/index.js +5 -2
- package/dist/components/json-viewer/index.js +44 -44
- package/dist/components/json-viewer/json-viewer.css +10 -6
- package/dist/components/payload-inspector/index.d.ts +1 -1
- package/dist/components/payload-inspector/index.js +306 -1422
- package/dist/components/payload-inspector/payload-inspector.css +15 -75
- package/dist/components/payload-inspector/payload-inspector.schema.js +5 -41
- package/dist/components/payload-inspector/payload-inspector.svelte.d.ts +5 -5
- package/dist/components/payload-inspector/payload-inspector.types.d.ts +10 -56
- package/dist/components/tab/index.js +5 -2
- package/dist/components/tab/tab.schema.js +7 -3
- package/dist/components/tab/tab.svelte.d.ts +2 -1
- package/dist/components/tab/tab.types.d.ts +8 -2
- package/dist/components/tabs/index.js +5 -2
- package/dist/components/team-section/index.js +2 -1
- package/dist/components/testimonial-section/index.js +2 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +23711 -27432
- package/dist/server/components/access-gate/index.js +2 -1
- package/dist/server/components/accordion/index.js +2 -2
- package/dist/server/components/alert-dialog/index.js +2 -2
- package/dist/server/components/approval-card/index.js +15 -19
- package/dist/server/components/autocomplete/index.js +7 -7
- package/dist/server/components/avatar-group/index.js +5 -5
- package/dist/server/components/button-group/index.js +3 -5
- package/dist/server/components/card/index.js +2 -2
- package/dist/server/components/chat/index.js +14 -11
- package/dist/server/components/chat-composer-popover/index.js +26 -0
- package/dist/server/components/chat-conversation-header/index.js +9 -10
- package/dist/server/components/chat-conversation-list/index.js +4 -5
- package/dist/server/components/checkbox/index.js +3 -3
- package/dist/server/components/choice-grid/index.js +2 -2
- package/dist/server/components/code-block/index.js +2 -2
- package/dist/server/components/color-field/index.js +3 -3
- package/dist/server/components/combobox/index.js +6 -6
- package/dist/server/components/command-item/index.js +5 -3
- package/dist/server/components/command-menu/index.js +6 -4
- package/dist/server/components/command-palette/index.js +2 -2
- package/dist/server/components/confirm-dialog/index.js +2 -2
- package/dist/server/components/context-menu/index.js +5 -5
- package/dist/server/components/data-table/index.js +5 -5
- package/dist/server/components/date-picker/index.js +6 -6
- package/dist/server/components/date-range-field/index.js +7 -7
- package/dist/server/components/description-list/index.js +3 -5
- package/dist/server/components/diff-viewer/index.js +7 -7
- package/dist/server/components/drawer/index.js +3 -3
- package/dist/server/components/dropdown/index.js +4 -4
- package/dist/server/components/event-stream-viewer/index.js +2 -2
- package/dist/server/components/experimental/json-viewer/index.js +2 -2
- package/dist/server/components/faceted-filter-bar/index.js +1 -1
- package/dist/server/components/hover-card/index.js +1 -1
- package/dist/server/components/input/index.js +3 -3
- package/dist/server/components/json-schema-editor/index.js +22 -22
- package/dist/server/components/json-viewer/index.js +2 -2
- package/dist/server/components/markdown-editor/index.js +13 -13
- package/dist/server/components/modal/index.js +1 -1
- package/dist/server/components/multi-select/index.js +1 -1
- package/dist/server/components/newsletter-section/index.js +3 -3
- package/dist/server/components/payload-inspector/index.js +4 -16
- package/dist/server/components/popover/index.js +5 -5
- package/dist/server/components/review-editor/index.js +25 -25
- package/dist/server/components/run-step-timeline/index.js +2 -2
- package/dist/server/components/schema-form/index.js +4 -4
- package/dist/server/components/secret-value-field/index.js +3 -5
- package/dist/server/components/segment/index.js +3 -3
- package/dist/server/components/segmented-control/index.js +4 -4
- package/dist/server/components/selection-popover/index.js +4 -4
- package/dist/server/components/sheet/index.js +2 -2
- package/dist/server/components/sidebar/index.js +3 -3
- package/dist/server/components/tab/index.js +2 -2
- package/dist/server/components/table/index.js +3 -3
- package/dist/server/components/tabs/index.js +4 -4
- package/dist/server/components/tag-input/index.js +3 -3
- package/dist/server/components/team-section/index.js +8 -8
- package/dist/server/components/testimonial-section/index.js +2 -2
- package/dist/server/components/toggle/index.js +2 -2
- package/dist/server/components/tooltip/index.js +1 -1
- package/dist/server/index.js +159 -148
- package/dist/server/{index.server-cbtg8rq5.js → index.server-0atyznp7.js} +5 -5
- package/dist/server/{index.server-20y4mdhm.js → index.server-0chhpkg7.js} +40 -14
- package/dist/server/{index.server-ecm1vs3g.js → index.server-1nq7z1qw.js} +1 -1
- package/dist/server/{index.server-jync915v.js → index.server-2dga5yzr.js} +25 -25
- package/dist/server/index.server-2hqrv7ca.js +9 -0
- package/dist/server/{index.server-69epaape.js → index.server-2qj6s2mh.js} +1 -1
- package/dist/server/{index.server-pt8b65mt.js → index.server-38aywdk1.js} +1 -1
- package/dist/server/{index.server-rermas0k.js → index.server-47v2fhp4.js} +4 -4
- package/dist/server/{index.server-9j5sym59.js → index.server-4x91gzy1.js} +2 -2
- package/dist/server/{index.server-q48q15g7.js → index.server-4y2jtvv1.js} +4 -2
- package/dist/server/index.server-67qgdypc.js +9 -0
- package/dist/server/{index.server-9jete4xx.js → index.server-6sh11ap6.js} +4 -4
- package/dist/server/{index.server-4ztq565m.js → index.server-85p4ydph.js} +1 -1
- package/dist/server/{index.server-4nk7gy0q.js → index.server-894t97kv.js} +1 -1
- package/dist/server/{index.server-1vscnped.js → index.server-8dt36sdm.js} +2 -1
- package/dist/server/{index.server-bfsbp9dz.js → index.server-8xvc73zh.js} +4 -4
- package/dist/server/{index.server-cvnw3hw9.js → index.server-9kz37z89.js} +1 -1
- package/dist/server/{index.server-kc1k02tk.js → index.server-9ykk1kbg.js} +1 -1
- package/dist/server/{index.server-g789yep6.js → index.server-aqethy0w.js} +2 -2
- package/dist/server/{index.server-wc9aggfz.js → index.server-bmxbsk4y.js} +7 -7
- package/dist/server/{index.server-j3ddzcaa.js → index.server-c6pe4kaf.js} +6 -6
- package/dist/server/{index.server-q89dz8h1.js → index.server-d3pqthtp.js} +4 -3
- package/dist/server/{index.server-qfa2rxzx.js → index.server-dg83ke3k.js} +3 -5
- package/dist/server/{index.server-jk4rx4aa.js → index.server-dmmvwy6p.js} +1 -1
- package/dist/server/{index.server-hcfnae5y.js → index.server-dwwqssey.js} +4 -4
- package/dist/server/{index.server-e8x1hgw6.js → index.server-dz1r9xw5.js} +4 -4
- package/dist/server/{index.server-wm7mk5kw.js → index.server-ez5hp0ya.js} +1 -1
- package/dist/server/{index.server-ejyf7e48.js → index.server-fy068yne.js} +1 -1
- package/dist/server/{index.server-wc8dbm5e.js → index.server-g95bk8rc.js} +4 -2
- package/dist/server/index.server-gkazv439.js +576 -0
- package/dist/server/{index.server-dp9j2kkr.js → index.server-h0cvwvhy.js} +1 -1
- package/dist/server/{index.server-pacrqvyz.js → index.server-h90pjrez.js} +1 -1
- package/dist/server/{index.server-p8d04em5.js → index.server-hcsd5gdb.js} +6 -2
- package/dist/server/{index.server-n39drzes.js → index.server-hpeavvnq.js} +1 -1
- package/dist/server/{index.server-1p3patnj.js → index.server-hx91ng7z.js} +1 -1
- package/dist/server/{index.server-jtj3r53y.js → index.server-jgb8yh5k.js} +1 -1
- package/dist/server/{index.server-w1g5q9j9.js → index.server-jtgw9d23.js} +4 -2
- package/dist/server/{index.server-mehav5vs.js → index.server-jxg42jpz.js} +4 -4
- package/dist/server/{index.server-hd8gpehd.js → index.server-jxseyx33.js} +1 -1
- package/dist/server/{index.server-kg2sepsr.js → index.server-krqvnt6p.js} +14 -15
- package/dist/server/{index.server-0e1m3agz.js → index.server-ks49bprh.js} +1 -1
- package/dist/server/{index.server-f0hma3jp.js → index.server-kt0ncrqs.js} +1 -1
- package/dist/server/index.server-m0ezemav.js +170 -0
- package/dist/server/index.server-m191rm44.js +79 -0
- package/dist/server/{index.server-f23vtaw4.js → index.server-marjz8ps.js} +6 -6
- package/dist/server/index.server-mqt1ngqw.js +250 -0
- package/dist/server/{index.server-s9khh4ry.js → index.server-mzzb7dnm.js} +3 -5
- package/dist/server/{index.server-z721a5gp.js → index.server-n82rcv0m.js} +4 -4
- package/dist/server/{index.server-rhhmdxtz.js → index.server-np3c7kx0.js} +4 -4
- package/dist/server/{index.server-hpcs7tmh.js → index.server-p56xxef1.js} +1 -1
- package/dist/server/{index.server-w83kmcrx.js → index.server-pag862vz.js} +10 -10
- package/dist/server/{index.server-gxf0d1p5.js → index.server-q7w4jw89.js} +2 -2
- package/dist/server/{index.server-v4zabrsx.js → index.server-qh9qzd5t.js} +163 -25
- package/dist/server/{index.server-pxg74pyp.js → index.server-qk1h0n02.js} +4 -4
- package/dist/server/{index.server-sh2rxejg.js → index.server-qke3ekjt.js} +1 -1
- package/dist/server/{index.server-73x2d3j3.js → index.server-rbpvcrr3.js} +1 -1
- package/dist/server/{index.server-8cxs4kya.js → index.server-rga8sc7j.js} +41 -44
- package/dist/server/{index.server-e3fnv1g6.js → index.server-sedjxt36.js} +5 -5
- package/dist/server/{index.server-pen9pxt6.js → index.server-sf3nk3j2.js} +2 -2
- package/dist/server/{index.server-7fp0epev.js → index.server-veastatv.js} +4 -4
- package/dist/server/{index.server-jeqg2d22.js → index.server-xeqtpv61.js} +1 -1
- package/dist/server/{index.server-9s4na701.js → index.server-xjnge1yw.js} +4 -4
- package/dist/server/index.server-xtjjmsyq.js +315 -0
- package/dist/server/{index.server-hhxjaeen.js → index.server-xz99aed4.js} +4 -4
- package/dist/server/{index.server-vne4rzfa.js → index.server-y4n8vc08.js} +1 -1
- package/dist/server/{index.server-5d01cn4f.js → index.server-y83kqayt.js} +4 -4
- package/dist/server/{index.server-1nh09ck7.js → index.server-yhzydqxe.js} +5 -5
- package/dist/server/{index.server-atjc1qcq.js → index.server-yz4k36cw.js} +1 -1
- package/dist/server/{index.server-w6k62afr.js → index.server-ze1ymmbw.js} +2 -2
- package/dist/server/{index.server-914v805w.js → index.server-zgd1g8mk.js} +1 -1
- package/dist/server/{index.server-aeexcxdp.js → index.server-zh3r8vfd.js} +1 -1
- package/dist/server/{index.server-10jb2jzm.js → index.server-zsjf8enc.js} +4 -4
- package/package.json +40 -6
- package/src/components/_internal/command-list-context.ts +3 -3
- package/src/components/_internal/create-command-list-state.svelte.ts +39 -13
- package/src/components/approval-card/approval-card-actions.svelte +168 -0
- package/src/components/approval-card/approval-card-state.ts +152 -1
- package/src/components/approval-card/approval-card.css +269 -92
- package/src/components/approval-card/approval-card.examples.json +3 -3
- package/src/components/approval-card/approval-card.schema.json +9 -30
- package/src/components/approval-card/approval-card.schema.ts +13 -31
- package/src/components/approval-card/approval-card.svelte +176 -470
- package/src/components/approval-card/approval-card.types.ts +15 -28
- package/src/components/approval-card/index.ts +1 -0
- package/src/components/card/card.css +5 -0
- package/src/components/card/card.schema.json +1 -1
- package/src/components/card/card.schema.ts +1 -1
- package/src/components/card/card.svelte +1 -0
- package/src/components/card/card.types.ts +2 -2
- package/src/components/chat/chat.schema.json +36 -1
- package/src/components/chat/chat.schema.ts +44 -1
- package/src/components/chat/chat.svelte +12 -0
- package/src/components/chat/chat.types.ts +35 -3
- package/src/components/chat/container/chat.svelte +73 -3
- package/src/components/chat/index.ts +15 -3
- package/src/components/chat/input/chat-attachment-serialization.ts +63 -0
- package/src/components/chat/input/chat-input.svelte +22 -5
- package/src/components/chat/input/index.ts +5 -0
- package/src/components/chat-composer-popover/chat-composer-popover-filter.ts +68 -0
- package/src/components/chat-composer-popover/chat-composer-popover.css +7 -0
- package/src/components/chat-composer-popover/chat-composer-popover.examples.json +13 -0
- package/src/components/chat-composer-popover/chat-composer-popover.schema.json +90 -0
- package/src/components/chat-composer-popover/chat-composer-popover.schema.ts +95 -0
- package/src/components/chat-composer-popover/chat-composer-popover.svelte +234 -0
- package/src/components/chat-composer-popover/chat-composer-popover.types.ts +88 -0
- package/src/components/chat-composer-popover/chat-composer-popover.variables.json +1 -0
- package/src/components/chat-composer-popover/chat-composer-popover.variables.ts +3 -0
- package/src/components/chat-composer-popover/index.ts +19 -0
- package/src/components/code-block/code-block.schema.json +4 -0
- package/src/components/code-block/code-block.schema.ts +5 -0
- package/src/components/code-block/code-block.svelte +3 -3
- package/src/components/code-block/code-block.types.ts +6 -0
- package/src/components/command-item/command-item.svelte +7 -6
- package/src/components/command-menu/command-menu.schema.json +4 -0
- package/src/components/command-menu/command-menu.schema.ts +4 -0
- package/src/components/command-menu/command-menu.svelte +16 -5
- package/src/components/command-menu/command-menu.types.ts +2 -0
- package/src/components/json-viewer/_json-viewer-node.svelte +15 -1
- package/src/components/json-viewer/json-viewer.css +10 -6
- package/src/components/payload-inspector/index.ts +0 -2
- package/src/components/payload-inspector/payload-inspector.css +15 -75
- package/src/components/payload-inspector/payload-inspector.examples.json +5 -5
- package/src/components/payload-inspector/payload-inspector.schema.json +3 -31
- package/src/components/payload-inspector/payload-inspector.schema.ts +3 -36
- package/src/components/payload-inspector/payload-inspector.svelte +46 -239
- package/src/components/payload-inspector/payload-inspector.types.ts +10 -58
- package/src/components/tab/tab.schema.json +6 -2
- package/src/components/tab/tab.schema.ts +8 -2
- package/src/components/tab/tab.svelte +9 -5
- package/src/components/tab/tab.types.ts +8 -2
- package/src/index.ts +18 -5
- package/src/styles/components.css +1 -0
- package/dist/server/index-49we2xfs.js +0 -344
- package/dist/server/index-8fhvxk30.js +0 -265
- package/dist/server/index-x2ysg8ds.js +0 -388
- package/dist/server/index.server-20j0jh30.js +0 -9
- package/dist/server/index.server-dc35kh7d.js +0 -1835
- package/dist/server/index.server-kd4b0342.js +0 -607
- package/dist/server/index.server-n5cdmsz4.js +0 -30
- package/dist/server/index.server-rjap4k7y.js +0 -1389
- package/dist/server/index.server-vt6sn9y4.js +0 -447
- package/dist/server/index.server-w63n618v.js +0 -9
- package/dist/server/index.server-y2pa1k46.js +0 -9
|
@@ -1,1389 +0,0 @@
|
|
|
1
|
-
// ../../node_modules/conversationalist/dist/message-BEjqY7Jv.js
|
|
2
|
-
function copyMultiModalContent(item) {
|
|
3
|
-
if (item.type === "text")
|
|
4
|
-
return {
|
|
5
|
-
type: "text",
|
|
6
|
-
text: item.text,
|
|
7
|
-
...item.citations !== undefined ? { citations: structuredClone(item.citations) } : {}
|
|
8
|
-
};
|
|
9
|
-
if (item.type === "thinking")
|
|
10
|
-
return {
|
|
11
|
-
type: "thinking",
|
|
12
|
-
thinking: item.thinking,
|
|
13
|
-
signature: item.signature
|
|
14
|
-
};
|
|
15
|
-
if (item.type === "redacted_thinking")
|
|
16
|
-
return {
|
|
17
|
-
type: "redacted_thinking",
|
|
18
|
-
data: item.data
|
|
19
|
-
};
|
|
20
|
-
if (item.type === "server_tool_use")
|
|
21
|
-
return {
|
|
22
|
-
type: "server_tool_use",
|
|
23
|
-
id: item.id,
|
|
24
|
-
name: item.name,
|
|
25
|
-
input: structuredClone(item.input)
|
|
26
|
-
};
|
|
27
|
-
if (item.type === "web_search_tool_result")
|
|
28
|
-
return {
|
|
29
|
-
type: "web_search_tool_result",
|
|
30
|
-
tool_use_id: item.tool_use_id,
|
|
31
|
-
content: structuredClone(item.content)
|
|
32
|
-
};
|
|
33
|
-
if (item.type === "code_execution_tool_result" || item.type === "bash_code_execution_tool_result" || item.type === "text_editor_code_execution_tool_result" || item.type === "web_fetch_tool_result")
|
|
34
|
-
return {
|
|
35
|
-
type: item.type,
|
|
36
|
-
tool_use_id: item.tool_use_id,
|
|
37
|
-
content: structuredClone(item.content)
|
|
38
|
-
};
|
|
39
|
-
if (item.type === "container_upload")
|
|
40
|
-
return {
|
|
41
|
-
type: "container_upload",
|
|
42
|
-
file_id: item.file_id
|
|
43
|
-
};
|
|
44
|
-
const image = item;
|
|
45
|
-
return {
|
|
46
|
-
type: "image",
|
|
47
|
-
url: image.url,
|
|
48
|
-
...image.mimeType !== undefined ? { mimeType: image.mimeType } : {},
|
|
49
|
-
...image.text !== undefined ? { text: image.text } : {}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
function copyContent(content) {
|
|
53
|
-
if (typeof content === "string")
|
|
54
|
-
return content;
|
|
55
|
-
return content.map(copyMultiModalContent);
|
|
56
|
-
}
|
|
57
|
-
function toReadonly(value) {
|
|
58
|
-
return value;
|
|
59
|
-
}
|
|
60
|
-
function createMessage(props) {
|
|
61
|
-
const content = typeof props.content === "string" ? props.content : toReadonly(structuredClone([...props.content]));
|
|
62
|
-
const message = {
|
|
63
|
-
id: props.id,
|
|
64
|
-
role: props.role,
|
|
65
|
-
content,
|
|
66
|
-
position: props.position,
|
|
67
|
-
createdAt: props.createdAt,
|
|
68
|
-
metadata: toReadonly({ ...props.metadata }),
|
|
69
|
-
hidden: props.hidden,
|
|
70
|
-
toolCall: props.toolCall ? toReadonly(structuredClone(props.toolCall)) : undefined,
|
|
71
|
-
toolResult: props.toolResult ? toReadonly(structuredClone(props.toolResult)) : undefined,
|
|
72
|
-
tokenUsage: props.tokenUsage ? toReadonly({ ...props.tokenUsage }) : undefined
|
|
73
|
-
};
|
|
74
|
-
if (isAssistantMessage(props))
|
|
75
|
-
return toReadonly({
|
|
76
|
-
...message,
|
|
77
|
-
role: "assistant",
|
|
78
|
-
goalCompleted: props.goalCompleted
|
|
79
|
-
});
|
|
80
|
-
return toReadonly(message);
|
|
81
|
-
}
|
|
82
|
-
function messageParts(message) {
|
|
83
|
-
if (typeof message.content === "string")
|
|
84
|
-
return message.content ? [{
|
|
85
|
-
type: "text",
|
|
86
|
-
text: message.content
|
|
87
|
-
}] : [];
|
|
88
|
-
return message.content;
|
|
89
|
-
}
|
|
90
|
-
function messageHasImages(message) {
|
|
91
|
-
return messageParts(message).some((p) => p.type === "image");
|
|
92
|
-
}
|
|
93
|
-
function isAssistantMessage(message) {
|
|
94
|
-
return message.role === "assistant";
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ../../node_modules/conversationalist/dist/schemas.js
|
|
98
|
-
import { z } from "zod";
|
|
99
|
-
var isPlainObject = (value) => {
|
|
100
|
-
if (!value || typeof value !== "object")
|
|
101
|
-
return false;
|
|
102
|
-
const prototype = Reflect.getPrototypeOf(value);
|
|
103
|
-
return prototype === Object.prototype || prototype === null;
|
|
104
|
-
};
|
|
105
|
-
var jsonValueSchema = z.lazy(() => {
|
|
106
|
-
const jsonObjectSchema = z.preprocess((value, ctx) => {
|
|
107
|
-
if (!isPlainObject(value)) {
|
|
108
|
-
ctx.addIssue({
|
|
109
|
-
code: z.ZodIssueCode.custom,
|
|
110
|
-
message: "expected a plain object"
|
|
111
|
-
});
|
|
112
|
-
return z.NEVER;
|
|
113
|
-
}
|
|
114
|
-
return value;
|
|
115
|
-
}, z.record(z.string(), jsonValueSchema));
|
|
116
|
-
return z.union([
|
|
117
|
-
z.string(),
|
|
118
|
-
z.number().refine((value) => Number.isFinite(value), { message: "expected a finite number" }),
|
|
119
|
-
z.boolean(),
|
|
120
|
-
z.null(),
|
|
121
|
-
z.array(jsonValueSchema),
|
|
122
|
-
jsonObjectSchema
|
|
123
|
-
]);
|
|
124
|
-
});
|
|
125
|
-
var multiModalContentSchema = z.discriminatedUnion("type", [
|
|
126
|
-
z.object({
|
|
127
|
-
type: z.literal("text"),
|
|
128
|
-
text: z.string(),
|
|
129
|
-
citations: jsonValueSchema.optional()
|
|
130
|
-
}),
|
|
131
|
-
z.object({
|
|
132
|
-
type: z.literal("image"),
|
|
133
|
-
url: z.string().url(),
|
|
134
|
-
mimeType: z.string().optional(),
|
|
135
|
-
text: z.string().optional()
|
|
136
|
-
}),
|
|
137
|
-
z.object({
|
|
138
|
-
type: z.literal("thinking"),
|
|
139
|
-
thinking: z.string(),
|
|
140
|
-
signature: z.string()
|
|
141
|
-
}),
|
|
142
|
-
z.object({
|
|
143
|
-
type: z.literal("redacted_thinking"),
|
|
144
|
-
data: z.string()
|
|
145
|
-
}),
|
|
146
|
-
z.object({
|
|
147
|
-
type: z.literal("server_tool_use"),
|
|
148
|
-
id: z.string(),
|
|
149
|
-
name: z.string(),
|
|
150
|
-
input: jsonValueSchema
|
|
151
|
-
}),
|
|
152
|
-
z.object({
|
|
153
|
-
type: z.literal("web_search_tool_result"),
|
|
154
|
-
tool_use_id: z.string(),
|
|
155
|
-
content: jsonValueSchema
|
|
156
|
-
}),
|
|
157
|
-
z.object({
|
|
158
|
-
type: z.enum([
|
|
159
|
-
"code_execution_tool_result",
|
|
160
|
-
"bash_code_execution_tool_result",
|
|
161
|
-
"text_editor_code_execution_tool_result",
|
|
162
|
-
"web_fetch_tool_result"
|
|
163
|
-
]),
|
|
164
|
-
tool_use_id: z.string(),
|
|
165
|
-
content: jsonValueSchema
|
|
166
|
-
}),
|
|
167
|
-
z.object({
|
|
168
|
-
type: z.literal("container_upload"),
|
|
169
|
-
file_id: z.string()
|
|
170
|
-
})
|
|
171
|
-
]).transform((value) => {
|
|
172
|
-
if (value.type === "image")
|
|
173
|
-
return {
|
|
174
|
-
type: "image",
|
|
175
|
-
url: value.url,
|
|
176
|
-
...value.mimeType !== undefined ? { mimeType: value.mimeType } : {},
|
|
177
|
-
...value.text !== undefined ? { text: value.text } : {}
|
|
178
|
-
};
|
|
179
|
-
if (value.type === "text")
|
|
180
|
-
return {
|
|
181
|
-
type: "text",
|
|
182
|
-
text: value.text,
|
|
183
|
-
...value.citations !== undefined ? { citations: value.citations } : {}
|
|
184
|
-
};
|
|
185
|
-
return value;
|
|
186
|
-
});
|
|
187
|
-
var messageRoleSchema = z.enum([
|
|
188
|
-
"user",
|
|
189
|
-
"assistant",
|
|
190
|
-
"system",
|
|
191
|
-
"developer",
|
|
192
|
-
"tool-call",
|
|
193
|
-
"tool-result",
|
|
194
|
-
"snapshot"
|
|
195
|
-
]);
|
|
196
|
-
var toolCallSchema = z.object({
|
|
197
|
-
id: z.string(),
|
|
198
|
-
name: z.string(),
|
|
199
|
-
arguments: jsonValueSchema
|
|
200
|
-
}).strict();
|
|
201
|
-
var toolCallInputSchema = z.object({
|
|
202
|
-
id: z.string().optional(),
|
|
203
|
-
name: z.string(),
|
|
204
|
-
arguments: jsonValueSchema.optional()
|
|
205
|
-
}).strict();
|
|
206
|
-
var toolErrorCategorySchema = z.enum([
|
|
207
|
-
"validation",
|
|
208
|
-
"permission",
|
|
209
|
-
"not_found",
|
|
210
|
-
"conflict",
|
|
211
|
-
"transient",
|
|
212
|
-
"timeout",
|
|
213
|
-
"cancelled",
|
|
214
|
-
"internal"
|
|
215
|
-
]);
|
|
216
|
-
var toolErrorSchema = z.object({
|
|
217
|
-
code: z.string(),
|
|
218
|
-
category: toolErrorCategorySchema,
|
|
219
|
-
retryable: z.boolean(),
|
|
220
|
-
message: z.string(),
|
|
221
|
-
details: jsonValueSchema.optional()
|
|
222
|
-
}).strict();
|
|
223
|
-
var toolActionSchema = z.object({
|
|
224
|
-
type: z.enum(["approval", "input"]),
|
|
225
|
-
message: z.string().optional(),
|
|
226
|
-
schema: jsonValueSchema.optional()
|
|
227
|
-
}).strict();
|
|
228
|
-
var toolResultSchema = z.object({
|
|
229
|
-
callId: z.string(),
|
|
230
|
-
outcome: z.enum([
|
|
231
|
-
"success",
|
|
232
|
-
"error",
|
|
233
|
-
"action_required"
|
|
234
|
-
]),
|
|
235
|
-
content: jsonValueSchema,
|
|
236
|
-
error: toolErrorSchema.optional(),
|
|
237
|
-
action: toolActionSchema.optional(),
|
|
238
|
-
inputDigest: z.string().optional(),
|
|
239
|
-
outputDigest: z.string().optional()
|
|
240
|
-
}).strict();
|
|
241
|
-
var tokenUsageSchema = z.object({
|
|
242
|
-
prompt: z.number().int().min(0),
|
|
243
|
-
completion: z.number().int().min(0),
|
|
244
|
-
total: z.number().int().min(0)
|
|
245
|
-
});
|
|
246
|
-
var messageInputSchema = z.object({
|
|
247
|
-
role: messageRoleSchema,
|
|
248
|
-
content: z.union([z.string(), z.array(multiModalContentSchema)]),
|
|
249
|
-
metadata: z.record(z.string(), jsonValueSchema).optional(),
|
|
250
|
-
hidden: z.boolean().optional(),
|
|
251
|
-
toolCall: toolCallSchema.optional(),
|
|
252
|
-
toolResult: toolResultSchema.optional(),
|
|
253
|
-
tokenUsage: tokenUsageSchema.optional(),
|
|
254
|
-
goalCompleted: z.boolean().optional()
|
|
255
|
-
}).strict();
|
|
256
|
-
var messageSchema = z.object({
|
|
257
|
-
id: z.string(),
|
|
258
|
-
role: messageRoleSchema,
|
|
259
|
-
content: z.union([z.string(), z.array(multiModalContentSchema)]),
|
|
260
|
-
position: z.number().int().min(0),
|
|
261
|
-
createdAt: z.string(),
|
|
262
|
-
metadata: z.record(z.string(), jsonValueSchema),
|
|
263
|
-
hidden: z.boolean(),
|
|
264
|
-
toolCall: toolCallSchema.optional(),
|
|
265
|
-
toolResult: toolResultSchema.optional(),
|
|
266
|
-
tokenUsage: tokenUsageSchema.optional(),
|
|
267
|
-
goalCompleted: z.boolean().optional()
|
|
268
|
-
}).strict();
|
|
269
|
-
var conversationStatusSchema = z.enum([
|
|
270
|
-
"active",
|
|
271
|
-
"archived",
|
|
272
|
-
"deleted"
|
|
273
|
-
]);
|
|
274
|
-
var conversationShape = {
|
|
275
|
-
schemaVersion: z.number().int().min(1),
|
|
276
|
-
id: z.string(),
|
|
277
|
-
title: z.string().optional(),
|
|
278
|
-
status: conversationStatusSchema,
|
|
279
|
-
metadata: z.record(z.string(), jsonValueSchema),
|
|
280
|
-
ids: z.array(z.string()),
|
|
281
|
-
messages: z.record(z.string(), messageSchema),
|
|
282
|
-
createdAt: z.string(),
|
|
283
|
-
updatedAt: z.string()
|
|
284
|
-
};
|
|
285
|
-
var conversationSchema = z.object(conversationShape).strict();
|
|
286
|
-
|
|
287
|
-
// ../../node_modules/conversationalist/dist/transient-Bk0RaCFf.js
|
|
288
|
-
function getOrderedMessages(conversation) {
|
|
289
|
-
const ordered = [];
|
|
290
|
-
for (const id of conversation.ids) {
|
|
291
|
-
const message = conversation.messages[id];
|
|
292
|
-
if (message)
|
|
293
|
-
ordered.push(message);
|
|
294
|
-
}
|
|
295
|
-
return ordered;
|
|
296
|
-
}
|
|
297
|
-
function toIdRecord(items) {
|
|
298
|
-
const record = {};
|
|
299
|
-
for (const item of items)
|
|
300
|
-
record[item.id] = item;
|
|
301
|
-
return record;
|
|
302
|
-
}
|
|
303
|
-
var ConversationalistError = class ConversationalistError2 extends Error {
|
|
304
|
-
code;
|
|
305
|
-
context;
|
|
306
|
-
cause;
|
|
307
|
-
constructor(code, message, options) {
|
|
308
|
-
super(message);
|
|
309
|
-
this.name = "ConversationalistError";
|
|
310
|
-
this.code = code;
|
|
311
|
-
this.context = options?.context;
|
|
312
|
-
this.cause = options?.cause;
|
|
313
|
-
if (Error.captureStackTrace)
|
|
314
|
-
Error.captureStackTrace(this, ConversationalistError2);
|
|
315
|
-
}
|
|
316
|
-
toDetailedString() {
|
|
317
|
-
const parts = [`[${this.code}] ${this.message}`];
|
|
318
|
-
if (this.context && Object.keys(this.context).length > 0)
|
|
319
|
-
parts.push(`Context: ${JSON.stringify(this.context, null, 2)}`);
|
|
320
|
-
if (this.cause)
|
|
321
|
-
parts.push(`Caused by: ${this.cause.message}`);
|
|
322
|
-
return parts.join(`
|
|
323
|
-
`);
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
function createInvalidPositionError(expected, actual) {
|
|
327
|
-
return new ConversationalistError("error:invalid-position", `invalid position: expected ${expected}, got ${actual}`, { context: {
|
|
328
|
-
expected,
|
|
329
|
-
actual
|
|
330
|
-
} });
|
|
331
|
-
}
|
|
332
|
-
function createInvalidToolReferenceError(callId) {
|
|
333
|
-
return new ConversationalistError("error:invalid-tool-reference", `tool result references non-existent tool-call: ${callId}`, { context: { callId } });
|
|
334
|
-
}
|
|
335
|
-
function createSerializationError(message, cause) {
|
|
336
|
-
return new ConversationalistError("error:serialization", message, { cause });
|
|
337
|
-
}
|
|
338
|
-
function createValidationError(message, context, cause) {
|
|
339
|
-
return new ConversationalistError("error:validation", message, {
|
|
340
|
-
context,
|
|
341
|
-
cause
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
function createIntegrityError(message, context) {
|
|
345
|
-
return new ConversationalistError("error:integrity", message, { context });
|
|
346
|
-
}
|
|
347
|
-
function validateConversationHistoryIntegrity(conversation) {
|
|
348
|
-
const issues = [];
|
|
349
|
-
const seenIds = /* @__PURE__ */ new Set;
|
|
350
|
-
conversation.ids.forEach((id, index) => {
|
|
351
|
-
if (seenIds.has(id))
|
|
352
|
-
issues.push({
|
|
353
|
-
code: "integrity:duplicate-message-id",
|
|
354
|
-
message: `duplicate message id in ids: ${id}`,
|
|
355
|
-
data: {
|
|
356
|
-
id,
|
|
357
|
-
position: index
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
else
|
|
361
|
-
seenIds.add(id);
|
|
362
|
-
if (!conversation.messages[id])
|
|
363
|
-
issues.push({
|
|
364
|
-
code: "integrity:missing-message",
|
|
365
|
-
message: `missing message for id ${id}`,
|
|
366
|
-
data: {
|
|
367
|
-
id,
|
|
368
|
-
position: index
|
|
369
|
-
}
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
for (const id of Object.keys(conversation.messages))
|
|
373
|
-
if (!seenIds.has(id))
|
|
374
|
-
issues.push({
|
|
375
|
-
code: "integrity:unlisted-message",
|
|
376
|
-
message: `message ${id} is not listed in ids`,
|
|
377
|
-
data: { id }
|
|
378
|
-
});
|
|
379
|
-
const toolCalls = /* @__PURE__ */ new Map;
|
|
380
|
-
conversation.ids.forEach((id, index) => {
|
|
381
|
-
const message = conversation.messages[id];
|
|
382
|
-
if (!message)
|
|
383
|
-
return;
|
|
384
|
-
if (message.role === "tool-call" && message.toolCall)
|
|
385
|
-
if (toolCalls.has(message.toolCall.id))
|
|
386
|
-
issues.push({
|
|
387
|
-
code: "integrity:duplicate-tool-call",
|
|
388
|
-
message: `duplicate toolCall.id ${message.toolCall.id}`,
|
|
389
|
-
data: {
|
|
390
|
-
toolCallId: message.toolCall.id,
|
|
391
|
-
messageId: message.id
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
else
|
|
395
|
-
toolCalls.set(message.toolCall.id, {
|
|
396
|
-
position: index,
|
|
397
|
-
messageId: message.id
|
|
398
|
-
});
|
|
399
|
-
});
|
|
400
|
-
conversation.ids.forEach((id, index) => {
|
|
401
|
-
const message = conversation.messages[id];
|
|
402
|
-
if (!message)
|
|
403
|
-
return;
|
|
404
|
-
if (message.role === "tool-result" && message.toolResult) {
|
|
405
|
-
const toolCall = toolCalls.get(message.toolResult.callId);
|
|
406
|
-
if (!toolCall)
|
|
407
|
-
issues.push({
|
|
408
|
-
code: "integrity:orphan-tool-result",
|
|
409
|
-
message: `tool-result references missing tool-call ${message.toolResult.callId}`,
|
|
410
|
-
data: {
|
|
411
|
-
callId: message.toolResult.callId,
|
|
412
|
-
messageId: message.id
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
else if (toolCall.position >= index)
|
|
416
|
-
issues.push({
|
|
417
|
-
code: "integrity:tool-result-before-call",
|
|
418
|
-
message: `tool-result ${message.toolResult.callId} occurs before tool-call`,
|
|
419
|
-
data: {
|
|
420
|
-
callId: message.toolResult.callId,
|
|
421
|
-
messageId: message.id,
|
|
422
|
-
toolCallMessageId: toolCall.messageId
|
|
423
|
-
}
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
return issues;
|
|
428
|
-
}
|
|
429
|
-
function assertConversationHistoryIntegrity(conversation) {
|
|
430
|
-
const issues = validateConversationHistoryIntegrity(conversation);
|
|
431
|
-
if (issues.length === 0)
|
|
432
|
-
return;
|
|
433
|
-
throw createIntegrityError("conversation integrity check failed", { issues });
|
|
434
|
-
}
|
|
435
|
-
function assertConversationSafe(conversation) {
|
|
436
|
-
const parsed = conversationSchema.safeParse(conversation);
|
|
437
|
-
if (!parsed.success)
|
|
438
|
-
throw createValidationError("conversation failed schema validation", { issues: parsed.error.issues });
|
|
439
|
-
assertConversationHistoryIntegrity(conversation);
|
|
440
|
-
}
|
|
441
|
-
function ensureConversationSafe(conversation) {
|
|
442
|
-
assertConversationSafe(conversation);
|
|
443
|
-
return conversation;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
// ../../node_modules/conversationalist/dist/append-l_g0hmrj.js
|
|
447
|
-
function normalizeContent(content) {
|
|
448
|
-
if (content === undefined)
|
|
449
|
-
return;
|
|
450
|
-
if (typeof content === "string")
|
|
451
|
-
return content;
|
|
452
|
-
return Array.isArray(content) ? content : [content];
|
|
453
|
-
}
|
|
454
|
-
function materializeToolCall(toolCall, options = {}) {
|
|
455
|
-
return {
|
|
456
|
-
id: toolCall.id ?? options.generateId?.() ?? crypto.randomUUID(),
|
|
457
|
-
name: toolCall.name,
|
|
458
|
-
arguments: normalizeJSONValue(toolCall.arguments ?? {})
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
function materializeToolCalls(toolCalls, options = {}) {
|
|
462
|
-
return toolCalls.map((toolCall) => materializeToolCall(toolCall, options));
|
|
463
|
-
}
|
|
464
|
-
function materializeToolResult(toolResult) {
|
|
465
|
-
if (hasStreamingPayload(toolResult))
|
|
466
|
-
throw new Error("materializeToolResult does not support streaming tool results. Use materializeToolResultAsync or materializeToolResultsAsync.");
|
|
467
|
-
return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(toolResult.content));
|
|
468
|
-
}
|
|
469
|
-
function materializeToolResults(toolResults) {
|
|
470
|
-
return toolResults.map((toolResult) => materializeToolResult(toolResult));
|
|
471
|
-
}
|
|
472
|
-
async function materializeToolResultAsync(toolResult) {
|
|
473
|
-
const streamingPayload = getStreamingPayload(toolResult);
|
|
474
|
-
if (!streamingPayload)
|
|
475
|
-
return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(toolResult.content));
|
|
476
|
-
return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(await collectAsyncIterable(streamingPayload)));
|
|
477
|
-
}
|
|
478
|
-
async function materializeToolResultsAsync(toolResults) {
|
|
479
|
-
return Promise.all(toolResults.map((toolResult) => materializeToolResultAsync(toolResult)));
|
|
480
|
-
}
|
|
481
|
-
function stripRuntimeToolResultFields(toolResult, content) {
|
|
482
|
-
return {
|
|
483
|
-
callId: toolResult.callId,
|
|
484
|
-
outcome: toolResult.outcome,
|
|
485
|
-
content,
|
|
486
|
-
...toolResult.error ? { error: {
|
|
487
|
-
code: toolResult.error.code,
|
|
488
|
-
category: toolResult.error.category,
|
|
489
|
-
retryable: toolResult.error.retryable,
|
|
490
|
-
message: toolResult.error.message,
|
|
491
|
-
...toolResult.error.details !== undefined ? { details: normalizeJSONValue(toolResult.error.details) } : {}
|
|
492
|
-
} } : {},
|
|
493
|
-
...toolResult.action ? { action: normalizeToolAction(toolResult.action) } : {},
|
|
494
|
-
...toolResult.inputDigest ? { inputDigest: toolResult.inputDigest } : {},
|
|
495
|
-
...toolResult.outputDigest ? { outputDigest: toolResult.outputDigest } : {}
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
function normalizeToolAction(action) {
|
|
499
|
-
return {
|
|
500
|
-
type: action.type,
|
|
501
|
-
...action.message ? { message: action.message } : {},
|
|
502
|
-
...action.schema !== undefined ? { schema: normalizeJSONValue(action.schema) } : {}
|
|
503
|
-
};
|
|
504
|
-
}
|
|
505
|
-
function hasStreamingPayload(toolResult) {
|
|
506
|
-
return getStreamingPayload(toolResult) !== undefined;
|
|
507
|
-
}
|
|
508
|
-
function getStreamingPayload(toolResult) {
|
|
509
|
-
if (toolResult.stream)
|
|
510
|
-
return toolResult.stream;
|
|
511
|
-
if (isAsyncIterable(toolResult.result))
|
|
512
|
-
return toolResult.result;
|
|
513
|
-
}
|
|
514
|
-
function isAsyncIterable(value) {
|
|
515
|
-
if (!value || typeof value !== "object" && typeof value !== "function")
|
|
516
|
-
return false;
|
|
517
|
-
return Symbol.asyncIterator in value;
|
|
518
|
-
}
|
|
519
|
-
function normalizeJSONValue(value) {
|
|
520
|
-
if (value === undefined)
|
|
521
|
-
return null;
|
|
522
|
-
try {
|
|
523
|
-
assertJSONValue(value, "tool materialization");
|
|
524
|
-
return value;
|
|
525
|
-
} catch {
|
|
526
|
-
try {
|
|
527
|
-
const serialized = JSON.stringify(value);
|
|
528
|
-
return serialized === undefined ? stringifyNonJSON(value) : JSON.parse(serialized);
|
|
529
|
-
} catch {
|
|
530
|
-
return stringifyNonJSON(value);
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
function stringifyNonJSON(value) {
|
|
535
|
-
return String(value);
|
|
536
|
-
}
|
|
537
|
-
function assertJSONValue(value, path) {
|
|
538
|
-
const stack = /* @__PURE__ */ new WeakSet;
|
|
539
|
-
const walk = (current, currentPath) => {
|
|
540
|
-
if (current === null)
|
|
541
|
-
return;
|
|
542
|
-
const type = typeof current;
|
|
543
|
-
if (type === "string" || type === "boolean")
|
|
544
|
-
return;
|
|
545
|
-
if (type === "number") {
|
|
546
|
-
if (Number.isFinite(current))
|
|
547
|
-
return;
|
|
548
|
-
throw new TypeError(`Non-finite number at ${currentPath}`);
|
|
549
|
-
}
|
|
550
|
-
if (type === "undefined" || type === "bigint" || type === "function" || type === "symbol")
|
|
551
|
-
throw new TypeError(`Invalid JSON value at ${currentPath}`);
|
|
552
|
-
if (Array.isArray(current)) {
|
|
553
|
-
if (stack.has(current))
|
|
554
|
-
throw new TypeError(`Circular reference detected at ${currentPath}`);
|
|
555
|
-
stack.add(current);
|
|
556
|
-
for (let index = 0;index < current.length; index += 1)
|
|
557
|
-
walk(current[index], `${currentPath}[${index}]`);
|
|
558
|
-
stack.delete(current);
|
|
559
|
-
return;
|
|
560
|
-
}
|
|
561
|
-
if (type === "object") {
|
|
562
|
-
if (!isPlainObject2(current))
|
|
563
|
-
throw new TypeError(`Non-plain object is not valid JSON at ${currentPath}`);
|
|
564
|
-
const record = current;
|
|
565
|
-
if (stack.has(record))
|
|
566
|
-
throw new TypeError(`Circular reference detected at ${currentPath}`);
|
|
567
|
-
stack.add(record);
|
|
568
|
-
for (const key of Object.keys(record))
|
|
569
|
-
walk(record[key], `${currentPath}.${key}`);
|
|
570
|
-
stack.delete(record);
|
|
571
|
-
}
|
|
572
|
-
};
|
|
573
|
-
walk(value, path);
|
|
574
|
-
}
|
|
575
|
-
function isPlainObject2(value) {
|
|
576
|
-
if (!value || typeof value !== "object")
|
|
577
|
-
return false;
|
|
578
|
-
const prototype = Reflect.getPrototypeOf(value);
|
|
579
|
-
return prototype === Object.prototype || prototype === null;
|
|
580
|
-
}
|
|
581
|
-
async function collectAsyncIterable(stream) {
|
|
582
|
-
const chunks = [];
|
|
583
|
-
for await (const chunk of stream)
|
|
584
|
-
chunks.push(chunk);
|
|
585
|
-
return chunks;
|
|
586
|
-
}
|
|
587
|
-
function pairToolCallsWithResults(messages) {
|
|
588
|
-
const isMessageArray = (value) => Array.isArray(value);
|
|
589
|
-
const ordered = isMessageArray(messages) ? messages : Object.values(messages).sort((a, b) => a.position - b.position);
|
|
590
|
-
const pairs = [];
|
|
591
|
-
const resultsMap = /* @__PURE__ */ new Map;
|
|
592
|
-
for (const msg of ordered)
|
|
593
|
-
if (msg.toolResult)
|
|
594
|
-
resultsMap.set(msg.toolResult.callId, msg.toolResult);
|
|
595
|
-
for (const msg of ordered)
|
|
596
|
-
if (msg.toolCall)
|
|
597
|
-
pairs.push({
|
|
598
|
-
call: msg.toolCall,
|
|
599
|
-
result: resultsMap.get(msg.toolCall.id)
|
|
600
|
-
});
|
|
601
|
-
return pairs;
|
|
602
|
-
}
|
|
603
|
-
function appendToolCall(conversation, toolCall, options, environment) {
|
|
604
|
-
const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(options) ? options : environment);
|
|
605
|
-
const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
|
|
606
|
-
return appendMessages(conversation, createToolCallMessageInput(materializeToolCall(toolCall, { generateId: resolvedEnvironment.randomId }), resolvedOptions), resolvedEnvironment);
|
|
607
|
-
}
|
|
608
|
-
function appendToolCalls(conversation, toolCalls, environment) {
|
|
609
|
-
if (toolCalls.length === 0)
|
|
610
|
-
return conversation;
|
|
611
|
-
const resolvedEnvironment = resolveConversationEnvironment(environment);
|
|
612
|
-
return appendMessages(conversation, ...materializeToolCalls(toolCalls, { generateId: resolvedEnvironment.randomId }).map((toolCall) => createToolCallMessageInput(toolCall, undefined)), resolvedEnvironment);
|
|
613
|
-
}
|
|
614
|
-
function appendToolResult(conversation, toolResult, options, environment) {
|
|
615
|
-
const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
|
|
616
|
-
return appendMessages(conversation, createToolResultMessageInput(materializeToolResult(toolResult), resolvedOptions), isConversationEnvironmentParameter(options) ? options : environment);
|
|
617
|
-
}
|
|
618
|
-
function appendToolResults(conversation, toolResults, environment) {
|
|
619
|
-
if (toolResults.length === 0)
|
|
620
|
-
return conversation;
|
|
621
|
-
return appendMessages(conversation, ...materializeToolResults(toolResults).map((toolResult) => createToolResultMessageInput(toolResult, undefined)), environment);
|
|
622
|
-
}
|
|
623
|
-
async function appendToolResultAsync(conversation, toolResult, options, environment) {
|
|
624
|
-
const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
|
|
625
|
-
return appendMessages(conversation, createToolResultMessageInput(await materializeToolResultAsync(toolResult), resolvedOptions), isConversationEnvironmentParameter(options) ? options : environment);
|
|
626
|
-
}
|
|
627
|
-
async function appendToolResultsAsync(conversation, toolResults, environment) {
|
|
628
|
-
if (toolResults.length === 0)
|
|
629
|
-
return conversation;
|
|
630
|
-
return appendMessages(conversation, ...(await materializeToolResultsAsync(toolResults)).map((toolResult) => createToolResultMessageInput(toolResult, undefined)), environment);
|
|
631
|
-
}
|
|
632
|
-
function getPendingToolCalls(conversation) {
|
|
633
|
-
const orderedMessages = getOrderedMessages(conversation);
|
|
634
|
-
const completedCallIdentifiers = /* @__PURE__ */ new Set;
|
|
635
|
-
for (const message of orderedMessages)
|
|
636
|
-
if (message.role === "tool-result" && message.toolResult)
|
|
637
|
-
completedCallIdentifiers.add(message.toolResult.callId);
|
|
638
|
-
const pendingToolCalls = [];
|
|
639
|
-
for (const message of orderedMessages)
|
|
640
|
-
if (message.role === "tool-call" && message.toolCall) {
|
|
641
|
-
if (!completedCallIdentifiers.has(message.toolCall.id))
|
|
642
|
-
pendingToolCalls.push(message.toolCall);
|
|
643
|
-
}
|
|
644
|
-
return pendingToolCalls;
|
|
645
|
-
}
|
|
646
|
-
function getToolInteractions(conversation) {
|
|
647
|
-
return pairToolCallsWithResults(getOrderedMessages(conversation));
|
|
648
|
-
}
|
|
649
|
-
function createToolCallMessageInput(toolCall, options) {
|
|
650
|
-
return {
|
|
651
|
-
role: "tool-call",
|
|
652
|
-
content: options?.content ?? "",
|
|
653
|
-
metadata: options?.metadata,
|
|
654
|
-
hidden: options?.hidden,
|
|
655
|
-
toolCall,
|
|
656
|
-
tokenUsage: options?.tokenUsage
|
|
657
|
-
};
|
|
658
|
-
}
|
|
659
|
-
function createToolResultMessageInput(toolResult, options) {
|
|
660
|
-
return {
|
|
661
|
-
role: "tool-result",
|
|
662
|
-
content: options?.content ?? "",
|
|
663
|
-
metadata: options?.metadata,
|
|
664
|
-
hidden: options?.hidden,
|
|
665
|
-
toolResult,
|
|
666
|
-
tokenUsage: options?.tokenUsage
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
function toSessionInfo(conversation) {
|
|
670
|
-
return {
|
|
671
|
-
id: conversation.id,
|
|
672
|
-
...conversation.title !== undefined ? { title: conversation.title } : {},
|
|
673
|
-
tags: conversation.metadata["_tags"] ?? [],
|
|
674
|
-
createdAt: conversation.createdAt,
|
|
675
|
-
updatedAt: conversation.updatedAt,
|
|
676
|
-
messageCount: conversation.ids.length
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
function partCharLength(part) {
|
|
680
|
-
switch (part.type) {
|
|
681
|
-
case "text":
|
|
682
|
-
return part.text.length + (part.citations !== undefined ? JSON.stringify(part.citations).length : 0);
|
|
683
|
-
case "image":
|
|
684
|
-
return (part.text ?? "").length + (part.url?.length ?? 0);
|
|
685
|
-
case "thinking":
|
|
686
|
-
return part.thinking.length + part.signature.length;
|
|
687
|
-
case "redacted_thinking":
|
|
688
|
-
return part.data.length;
|
|
689
|
-
case "server_tool_use":
|
|
690
|
-
return part.name.length + JSON.stringify(part.input).length;
|
|
691
|
-
case "web_search_tool_result":
|
|
692
|
-
return JSON.stringify(part.content).length;
|
|
693
|
-
case "code_execution_tool_result":
|
|
694
|
-
case "bash_code_execution_tool_result":
|
|
695
|
-
case "text_editor_code_execution_tool_result":
|
|
696
|
-
case "web_fetch_tool_result":
|
|
697
|
-
return JSON.stringify(part.content).length;
|
|
698
|
-
case "container_upload":
|
|
699
|
-
return part.file_id.length;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
function simpleTokenEstimator(message) {
|
|
703
|
-
if (typeof message.content === "string")
|
|
704
|
-
return Math.ceil(message.content.length / 4);
|
|
705
|
-
const total = messageParts(message).reduce((sum, part) => sum + partCharLength(part), 0);
|
|
706
|
-
return Math.ceil(total / 4);
|
|
707
|
-
}
|
|
708
|
-
var defaultConversationEnvironment = {
|
|
709
|
-
now: () => (/* @__PURE__ */ new Date()).toISOString(),
|
|
710
|
-
randomId: () => crypto.randomUUID(),
|
|
711
|
-
estimateTokens: simpleTokenEstimator,
|
|
712
|
-
plugins: []
|
|
713
|
-
};
|
|
714
|
-
function resolveConversationEnvironment(environment) {
|
|
715
|
-
return {
|
|
716
|
-
now: environment?.now ?? defaultConversationEnvironment.now,
|
|
717
|
-
randomId: environment?.randomId ?? defaultConversationEnvironment.randomId,
|
|
718
|
-
estimateTokens: environment?.estimateTokens ?? defaultConversationEnvironment.estimateTokens,
|
|
719
|
-
plugins: [...environment?.plugins ?? defaultConversationEnvironment.plugins],
|
|
720
|
-
...environment?.persistence ? { persistence: environment.persistence } : {},
|
|
721
|
-
...environment?.persistenceDebounceMilliseconds !== undefined ? { persistenceDebounceMilliseconds: environment.persistenceDebounceMilliseconds } : {},
|
|
722
|
-
...environment?.setTimeoutFunction ? { setTimeoutFunction: environment.setTimeoutFunction } : {},
|
|
723
|
-
...environment?.clearTimeoutFunction ? { clearTimeoutFunction: environment.clearTimeoutFunction } : {},
|
|
724
|
-
...environment?.maxHistoryDepth !== undefined ? { maxHistoryDepth: environment.maxHistoryDepth } : {}
|
|
725
|
-
};
|
|
726
|
-
}
|
|
727
|
-
function isConversationEnvironmentParameter(value) {
|
|
728
|
-
if (!value || typeof value !== "object" || value === null)
|
|
729
|
-
return false;
|
|
730
|
-
if ("role" in value)
|
|
731
|
-
return false;
|
|
732
|
-
const candidate = value;
|
|
733
|
-
return typeof candidate["now"] === "function" || typeof candidate["randomId"] === "function" || typeof candidate["estimateTokens"] === "function" || Array.isArray(candidate["plugins"]) && candidate["plugins"].length > 0 || typeof candidate["persistence"] === "object" && candidate["persistence"] !== null;
|
|
734
|
-
}
|
|
735
|
-
var buildToolUseIndex = (messages) => messages.reduce((index, message) => {
|
|
736
|
-
if (message.role === "tool-call" && message.toolCall)
|
|
737
|
-
index.set(message.toolCall.id, { name: message.toolCall.name });
|
|
738
|
-
return index;
|
|
739
|
-
}, /* @__PURE__ */ new Map);
|
|
740
|
-
var registerToolUse = (index, toolCall) => {
|
|
741
|
-
const next = new Map(index);
|
|
742
|
-
next.set(toolCall.id, { name: toolCall.name });
|
|
743
|
-
return next;
|
|
744
|
-
};
|
|
745
|
-
var assertToolReference = (index, callId) => {
|
|
746
|
-
if (!index.has(callId))
|
|
747
|
-
throw createInvalidToolReferenceError(callId);
|
|
748
|
-
};
|
|
749
|
-
function partitionAppendArgs(args) {
|
|
750
|
-
const filtered = args.filter((arg) => arg !== undefined);
|
|
751
|
-
if (filtered.length === 0)
|
|
752
|
-
return { inputs: [] };
|
|
753
|
-
const last = filtered[filtered.length - 1];
|
|
754
|
-
if (isConversationEnvironmentParameter(last))
|
|
755
|
-
return {
|
|
756
|
-
inputs: filtered.slice(0, -1),
|
|
757
|
-
environment: last
|
|
758
|
-
};
|
|
759
|
-
return { inputs: filtered };
|
|
760
|
-
}
|
|
761
|
-
function appendMessages(conversation, ...args) {
|
|
762
|
-
return appendMessagesInternal(conversation, args, true);
|
|
763
|
-
}
|
|
764
|
-
var appendMessagesInternal = (conversation, args, validate) => {
|
|
765
|
-
const { inputs, environment } = partitionAppendArgs(args);
|
|
766
|
-
const resolvedEnvironment = resolveConversationEnvironment(environment);
|
|
767
|
-
const now = resolvedEnvironment.now();
|
|
768
|
-
const startPosition = conversation.ids.length;
|
|
769
|
-
const initialToolUses = validate ? buildToolUseIndex(getOrderedMessages(conversation)) : /* @__PURE__ */ new Map;
|
|
770
|
-
const { messages } = inputs.reduce((state, input, index) => {
|
|
771
|
-
const processedInput = resolvedEnvironment.plugins.reduce((acc, plugin) => plugin(acc), input);
|
|
772
|
-
if (validate && processedInput.role === "tool-result" && processedInput.toolResult)
|
|
773
|
-
assertToolReference(state.toolUses, processedInput.toolResult.callId);
|
|
774
|
-
const normalizedContent = normalizeContent(processedInput.content);
|
|
775
|
-
const baseMessage = {
|
|
776
|
-
id: resolvedEnvironment.randomId(),
|
|
777
|
-
role: processedInput.role,
|
|
778
|
-
content: normalizedContent,
|
|
779
|
-
position: startPosition + index,
|
|
780
|
-
createdAt: now,
|
|
781
|
-
metadata: { ...processedInput.metadata ?? {} },
|
|
782
|
-
hidden: processedInput.hidden ?? false,
|
|
783
|
-
toolCall: processedInput.toolCall,
|
|
784
|
-
toolResult: processedInput.toolResult,
|
|
785
|
-
tokenUsage: processedInput.tokenUsage
|
|
786
|
-
};
|
|
787
|
-
let message;
|
|
788
|
-
if (processedInput.role === "assistant")
|
|
789
|
-
message = createMessage({
|
|
790
|
-
...baseMessage,
|
|
791
|
-
role: "assistant",
|
|
792
|
-
goalCompleted: processedInput.goalCompleted
|
|
793
|
-
});
|
|
794
|
-
else
|
|
795
|
-
message = createMessage(baseMessage);
|
|
796
|
-
let toolUses = state.toolUses;
|
|
797
|
-
if (processedInput.role === "tool-call" && processedInput.toolCall) {
|
|
798
|
-
if (validate && state.toolUses.has(processedInput.toolCall.id))
|
|
799
|
-
throw createIntegrityError("duplicate toolCall.id in conversation", {
|
|
800
|
-
toolCallId: processedInput.toolCall.id,
|
|
801
|
-
messageId: baseMessage.id
|
|
802
|
-
});
|
|
803
|
-
toolUses = validate ? registerToolUse(state.toolUses, processedInput.toolCall) : state.toolUses;
|
|
804
|
-
}
|
|
805
|
-
return {
|
|
806
|
-
toolUses,
|
|
807
|
-
messages: [...state.messages, message]
|
|
808
|
-
};
|
|
809
|
-
}, {
|
|
810
|
-
toolUses: initialToolUses,
|
|
811
|
-
messages: []
|
|
812
|
-
});
|
|
813
|
-
const messageIds = messages.map((message) => message.id);
|
|
814
|
-
const readonly = toReadonly({
|
|
815
|
-
...conversation,
|
|
816
|
-
ids: [...conversation.ids, ...messageIds],
|
|
817
|
-
messages: {
|
|
818
|
-
...conversation.messages,
|
|
819
|
-
...toIdRecord(messages)
|
|
820
|
-
},
|
|
821
|
-
updatedAt: now
|
|
822
|
-
});
|
|
823
|
-
return validate ? ensureConversationSafe(readonly) : readonly;
|
|
824
|
-
};
|
|
825
|
-
function appendUserMessage(conversation, content, metadata, environment) {
|
|
826
|
-
const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
|
|
827
|
-
return appendMessages(conversation, {
|
|
828
|
-
role: "user",
|
|
829
|
-
content,
|
|
830
|
-
metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
|
|
831
|
-
}, resolvedEnvironment);
|
|
832
|
-
}
|
|
833
|
-
function appendAssistantMessage(conversation, content, metadata, environment) {
|
|
834
|
-
const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
|
|
835
|
-
return appendMessages(conversation, {
|
|
836
|
-
role: "assistant",
|
|
837
|
-
content,
|
|
838
|
-
metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
|
|
839
|
-
}, resolvedEnvironment);
|
|
840
|
-
}
|
|
841
|
-
function appendSystemMessage(conversation, content, metadata, environment) {
|
|
842
|
-
const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
|
|
843
|
-
return appendMessages(conversation, {
|
|
844
|
-
role: "system",
|
|
845
|
-
content,
|
|
846
|
-
metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
|
|
847
|
-
}, resolvedEnvironment);
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
// ../../node_modules/conversationalist/dist/tool-results-DKQs9ZGX.js
|
|
851
|
-
function redactToolResult(toolResult, placeholder) {
|
|
852
|
-
return {
|
|
853
|
-
...toolResult,
|
|
854
|
-
content: placeholder
|
|
855
|
-
};
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
// ../../node_modules/conversationalist/dist/conversation-7sbYchzO.js
|
|
859
|
-
function createConversationHistory(options, environment) {
|
|
860
|
-
const resolvedEnvironment = resolveConversationEnvironment(environment);
|
|
861
|
-
const now = resolvedEnvironment.now();
|
|
862
|
-
return ensureConversationSafe(toReadonly({
|
|
863
|
-
schemaVersion: 4,
|
|
864
|
-
id: options?.id ?? resolvedEnvironment.randomId(),
|
|
865
|
-
title: options?.title,
|
|
866
|
-
status: options?.status ?? "active",
|
|
867
|
-
metadata: { ...options?.metadata ?? {} },
|
|
868
|
-
ids: [],
|
|
869
|
-
messages: {},
|
|
870
|
-
createdAt: now,
|
|
871
|
-
updatedAt: now
|
|
872
|
-
}));
|
|
873
|
-
}
|
|
874
|
-
function getMessages(conversation, options) {
|
|
875
|
-
const includeHidden = options?.includeHidden ?? false;
|
|
876
|
-
const ordered = getOrderedMessages(conversation);
|
|
877
|
-
return includeHidden ? ordered : ordered.filter((m) => !m.hidden);
|
|
878
|
-
}
|
|
879
|
-
function getMessageAtPosition(conversation, position) {
|
|
880
|
-
const id = conversation.ids[position];
|
|
881
|
-
return id ? conversation.messages[id] : undefined;
|
|
882
|
-
}
|
|
883
|
-
function getMessageIds(conversation) {
|
|
884
|
-
return [...conversation.ids];
|
|
885
|
-
}
|
|
886
|
-
function getMessageById(conversation, id) {
|
|
887
|
-
return conversation.messages[id];
|
|
888
|
-
}
|
|
889
|
-
function searchConversationMessages(conversation, predicate) {
|
|
890
|
-
return getOrderedMessages(conversation).filter(predicate);
|
|
891
|
-
}
|
|
892
|
-
function getStatistics(conversation) {
|
|
893
|
-
const ordered = getOrderedMessages(conversation);
|
|
894
|
-
const stats = ordered.reduce((acc, message) => {
|
|
895
|
-
return {
|
|
896
|
-
byRole: {
|
|
897
|
-
...acc.byRole,
|
|
898
|
-
[message.role]: (acc.byRole[message.role] ?? 0) + 1
|
|
899
|
-
},
|
|
900
|
-
hidden: acc.hidden + (message.hidden ? 1 : 0),
|
|
901
|
-
withImages: acc.withImages + (messageHasImages(message) ? 1 : 0)
|
|
902
|
-
};
|
|
903
|
-
}, {
|
|
904
|
-
byRole: {},
|
|
905
|
-
hidden: 0,
|
|
906
|
-
withImages: 0
|
|
907
|
-
});
|
|
908
|
-
return {
|
|
909
|
-
total: ordered.length,
|
|
910
|
-
...stats
|
|
911
|
-
};
|
|
912
|
-
}
|
|
913
|
-
function hasSystemMessage(conversation) {
|
|
914
|
-
return getOrderedMessages(conversation).some((m) => m.role === "system");
|
|
915
|
-
}
|
|
916
|
-
function getFirstSystemMessage(conversation) {
|
|
917
|
-
return getOrderedMessages(conversation).find((m) => m.role === "system");
|
|
918
|
-
}
|
|
919
|
-
function getSystemMessages(conversation) {
|
|
920
|
-
return getOrderedMessages(conversation).filter((m) => m.role === "system");
|
|
921
|
-
}
|
|
922
|
-
function prependSystemMessage(conversation, content, metadata, environment) {
|
|
923
|
-
const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
|
|
924
|
-
const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
|
|
925
|
-
const now = resolvedEnvironment.now();
|
|
926
|
-
const newMessage = createMessage({
|
|
927
|
-
id: resolvedEnvironment.randomId(),
|
|
928
|
-
role: "system",
|
|
929
|
-
content,
|
|
930
|
-
position: 0,
|
|
931
|
-
createdAt: now,
|
|
932
|
-
metadata: { ...resolvedMetadata ?? {} },
|
|
933
|
-
hidden: false,
|
|
934
|
-
toolCall: undefined,
|
|
935
|
-
toolResult: undefined,
|
|
936
|
-
tokenUsage: undefined
|
|
937
|
-
});
|
|
938
|
-
const ordered = getOrderedMessages(conversation);
|
|
939
|
-
const renumberedMessages = ordered.map((message) => createMessage({
|
|
940
|
-
id: message.id,
|
|
941
|
-
role: message.role,
|
|
942
|
-
content: copyContent(message.content),
|
|
943
|
-
position: message.position + 1,
|
|
944
|
-
createdAt: message.createdAt,
|
|
945
|
-
metadata: { ...message.metadata },
|
|
946
|
-
hidden: message.hidden,
|
|
947
|
-
toolCall: message.toolCall,
|
|
948
|
-
toolResult: message.toolResult,
|
|
949
|
-
tokenUsage: message.tokenUsage
|
|
950
|
-
}));
|
|
951
|
-
return ensureConversationSafe(toReadonly({
|
|
952
|
-
...conversation,
|
|
953
|
-
ids: [newMessage.id, ...ordered.map((message) => message.id)],
|
|
954
|
-
messages: toIdRecord([newMessage, ...renumberedMessages]),
|
|
955
|
-
updatedAt: now
|
|
956
|
-
}));
|
|
957
|
-
}
|
|
958
|
-
function replaceSystemMessage(conversation, content, metadata, environment) {
|
|
959
|
-
const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
|
|
960
|
-
const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
|
|
961
|
-
const now = resolvedEnvironment.now();
|
|
962
|
-
const ordered = getOrderedMessages(conversation);
|
|
963
|
-
const firstSystemIndex = ordered.findIndex((m) => m.role === "system");
|
|
964
|
-
if (firstSystemIndex === -1)
|
|
965
|
-
return prependSystemMessage(conversation, content, resolvedMetadata, resolvedEnvironment);
|
|
966
|
-
const original = ordered[firstSystemIndex];
|
|
967
|
-
const replaced = createMessage({
|
|
968
|
-
id: original.id,
|
|
969
|
-
role: "system",
|
|
970
|
-
content,
|
|
971
|
-
position: original.position,
|
|
972
|
-
createdAt: original.createdAt,
|
|
973
|
-
metadata: { ...resolvedMetadata ?? original.metadata },
|
|
974
|
-
hidden: original.hidden,
|
|
975
|
-
toolCall: undefined,
|
|
976
|
-
toolResult: undefined,
|
|
977
|
-
tokenUsage: undefined
|
|
978
|
-
});
|
|
979
|
-
return ensureConversationSafe(toReadonly({
|
|
980
|
-
...conversation,
|
|
981
|
-
ids: [...conversation.ids],
|
|
982
|
-
messages: {
|
|
983
|
-
...conversation.messages,
|
|
984
|
-
[replaced.id]: replaced
|
|
985
|
-
},
|
|
986
|
-
updatedAt: now
|
|
987
|
-
}));
|
|
988
|
-
}
|
|
989
|
-
function collapseSystemMessages(conversation, environment) {
|
|
990
|
-
const ordered = getOrderedMessages(conversation);
|
|
991
|
-
const systemMessages = ordered.filter((m) => m.role === "system");
|
|
992
|
-
if (systemMessages.length <= 1)
|
|
993
|
-
return ensureConversationSafe(conversation);
|
|
994
|
-
const now = resolveConversationEnvironment(environment).now();
|
|
995
|
-
const { parts } = systemMessages.reduce((state, message) => {
|
|
996
|
-
const contentStr = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
|
|
997
|
-
if (!contentStr || state.seen.has(contentStr))
|
|
998
|
-
return state;
|
|
999
|
-
const seen = new Set(state.seen);
|
|
1000
|
-
seen.add(contentStr);
|
|
1001
|
-
return {
|
|
1002
|
-
seen,
|
|
1003
|
-
parts: [...state.parts, contentStr]
|
|
1004
|
-
};
|
|
1005
|
-
}, {
|
|
1006
|
-
seen: /* @__PURE__ */ new Set,
|
|
1007
|
-
parts: []
|
|
1008
|
-
});
|
|
1009
|
-
const collapsedContent = parts.join(`
|
|
1010
|
-
`);
|
|
1011
|
-
const firstSystemMsg = systemMessages[0];
|
|
1012
|
-
const collapsed = createMessage({
|
|
1013
|
-
id: firstSystemMsg.id,
|
|
1014
|
-
role: "system",
|
|
1015
|
-
content: collapsedContent,
|
|
1016
|
-
position: firstSystemMsg.position,
|
|
1017
|
-
createdAt: firstSystemMsg.createdAt,
|
|
1018
|
-
metadata: { ...firstSystemMsg.metadata },
|
|
1019
|
-
hidden: firstSystemMsg.hidden,
|
|
1020
|
-
toolCall: undefined,
|
|
1021
|
-
toolResult: undefined,
|
|
1022
|
-
tokenUsage: undefined
|
|
1023
|
-
});
|
|
1024
|
-
const systemIdsToRemove = systemMessages.slice(1).reduce((ids, message) => {
|
|
1025
|
-
const nextIds = new Set(ids);
|
|
1026
|
-
nextIds.add(message.id);
|
|
1027
|
-
return nextIds;
|
|
1028
|
-
}, /* @__PURE__ */ new Set);
|
|
1029
|
-
const renumbered = ordered.filter((m) => !systemIdsToRemove.has(m.id)).map((m) => m.id === firstSystemMsg.id ? collapsed : m).map((message, index) => {
|
|
1030
|
-
if (message.position === index)
|
|
1031
|
-
return message;
|
|
1032
|
-
return createMessage({
|
|
1033
|
-
id: message.id,
|
|
1034
|
-
role: message.role,
|
|
1035
|
-
content: copyContent(message.content),
|
|
1036
|
-
position: index,
|
|
1037
|
-
createdAt: message.createdAt,
|
|
1038
|
-
metadata: { ...message.metadata },
|
|
1039
|
-
hidden: message.hidden,
|
|
1040
|
-
toolCall: message.toolCall,
|
|
1041
|
-
toolResult: message.toolResult,
|
|
1042
|
-
tokenUsage: message.tokenUsage
|
|
1043
|
-
});
|
|
1044
|
-
});
|
|
1045
|
-
return ensureConversationSafe(toReadonly({
|
|
1046
|
-
...conversation,
|
|
1047
|
-
ids: renumbered.map((message) => message.id),
|
|
1048
|
-
messages: toIdRecord(renumbered),
|
|
1049
|
-
updatedAt: now
|
|
1050
|
-
}));
|
|
1051
|
-
}
|
|
1052
|
-
var isRedactMessageOptions = (value) => {
|
|
1053
|
-
if (!value || typeof value !== "object")
|
|
1054
|
-
return false;
|
|
1055
|
-
const candidate = value;
|
|
1056
|
-
return "placeholder" in candidate || "redactToolArguments" in candidate || "redactToolResults" in candidate || "clearToolMetadata" in candidate;
|
|
1057
|
-
};
|
|
1058
|
-
function redactMessageAtPosition(conversation, position, placeholderOrOptions, environment) {
|
|
1059
|
-
let placeholder = "[REDACTED]";
|
|
1060
|
-
let options = {};
|
|
1061
|
-
let env = environment;
|
|
1062
|
-
if (typeof placeholderOrOptions === "string")
|
|
1063
|
-
placeholder = placeholderOrOptions;
|
|
1064
|
-
else if (placeholderOrOptions) {
|
|
1065
|
-
if (!environment && isConversationEnvironmentParameter(placeholderOrOptions))
|
|
1066
|
-
env = placeholderOrOptions;
|
|
1067
|
-
else if (isRedactMessageOptions(placeholderOrOptions)) {
|
|
1068
|
-
options = placeholderOrOptions;
|
|
1069
|
-
if (options.placeholder)
|
|
1070
|
-
placeholder = options.placeholder;
|
|
1071
|
-
}
|
|
1072
|
-
}
|
|
1073
|
-
const redactToolArguments = options.redactToolArguments ?? true;
|
|
1074
|
-
const redactToolResults = options.redactToolResults ?? true;
|
|
1075
|
-
const clearToolMetadata = options.clearToolMetadata ?? false;
|
|
1076
|
-
if (position < 0 || position >= conversation.ids.length)
|
|
1077
|
-
throw createInvalidPositionError(conversation.ids.length - 1, position);
|
|
1078
|
-
const id = conversation.ids[position];
|
|
1079
|
-
const original = id ? conversation.messages[id] : undefined;
|
|
1080
|
-
if (!original)
|
|
1081
|
-
throw createInvalidPositionError(conversation.ids.length - 1, position);
|
|
1082
|
-
let toolCall = original.toolCall ? { ...original.toolCall } : undefined;
|
|
1083
|
-
let toolResult = original.toolResult ? { ...original.toolResult } : undefined;
|
|
1084
|
-
if (clearToolMetadata) {
|
|
1085
|
-
toolCall = undefined;
|
|
1086
|
-
toolResult = undefined;
|
|
1087
|
-
} else {
|
|
1088
|
-
if (original.role === "tool-call" && toolCall)
|
|
1089
|
-
toolCall = {
|
|
1090
|
-
...toolCall,
|
|
1091
|
-
arguments: redactToolArguments ? placeholder : toolCall.arguments
|
|
1092
|
-
};
|
|
1093
|
-
if (original.role === "tool-result" && toolResult)
|
|
1094
|
-
toolResult = redactToolResults ? redactToolResult(toolResult, placeholder) : { ...toolResult };
|
|
1095
|
-
}
|
|
1096
|
-
const redacted = createMessage({
|
|
1097
|
-
id: original.id,
|
|
1098
|
-
role: original.role,
|
|
1099
|
-
content: placeholder,
|
|
1100
|
-
position: original.position,
|
|
1101
|
-
createdAt: original.createdAt,
|
|
1102
|
-
metadata: { ...original.metadata },
|
|
1103
|
-
hidden: original.hidden,
|
|
1104
|
-
toolCall,
|
|
1105
|
-
toolResult,
|
|
1106
|
-
tokenUsage: original.tokenUsage ? { ...original.tokenUsage } : undefined
|
|
1107
|
-
});
|
|
1108
|
-
const now = resolveConversationEnvironment(env).now();
|
|
1109
|
-
return ensureConversationSafe(toReadonly({
|
|
1110
|
-
...conversation,
|
|
1111
|
-
ids: [...conversation.ids],
|
|
1112
|
-
messages: {
|
|
1113
|
-
...conversation.messages,
|
|
1114
|
-
[redacted.id]: redacted
|
|
1115
|
-
},
|
|
1116
|
-
updatedAt: now
|
|
1117
|
-
}));
|
|
1118
|
-
}
|
|
1119
|
-
function normalizeLegacyToolCall(toolCall) {
|
|
1120
|
-
if (!toolCall || typeof toolCall !== "object")
|
|
1121
|
-
return toolCall;
|
|
1122
|
-
const record = { ...toolCall };
|
|
1123
|
-
if (!("arguments" in record) && "args" in record)
|
|
1124
|
-
record["arguments"] = record["args"];
|
|
1125
|
-
delete record["args"];
|
|
1126
|
-
return record;
|
|
1127
|
-
}
|
|
1128
|
-
function normalizeLegacyToolResult(toolResult) {
|
|
1129
|
-
if (!toolResult || typeof toolResult !== "object")
|
|
1130
|
-
return toolResult;
|
|
1131
|
-
const record = { ...toolResult };
|
|
1132
|
-
if (!("content" in record) && "result" in record)
|
|
1133
|
-
record["content"] = record["result"];
|
|
1134
|
-
delete record["result"];
|
|
1135
|
-
return record;
|
|
1136
|
-
}
|
|
1137
|
-
function normalizeLegacyConversationData(json) {
|
|
1138
|
-
if (!json || typeof json !== "object")
|
|
1139
|
-
return json;
|
|
1140
|
-
const conversation = { ...json };
|
|
1141
|
-
const messagesValue = conversation["messages"];
|
|
1142
|
-
if (!messagesValue || typeof messagesValue !== "object")
|
|
1143
|
-
return conversation;
|
|
1144
|
-
const normalizedMessages = {};
|
|
1145
|
-
for (const [messageId, messageValue] of Object.entries(messagesValue)) {
|
|
1146
|
-
if (!messageValue || typeof messageValue !== "object") {
|
|
1147
|
-
normalizedMessages[messageId] = messageValue;
|
|
1148
|
-
continue;
|
|
1149
|
-
}
|
|
1150
|
-
const message = { ...messageValue };
|
|
1151
|
-
if (message["role"] === "tool-use")
|
|
1152
|
-
message["role"] = "tool-call";
|
|
1153
|
-
if ("toolCall" in message)
|
|
1154
|
-
message["toolCall"] = normalizeLegacyToolCall(message["toolCall"]);
|
|
1155
|
-
if ("toolResult" in message)
|
|
1156
|
-
message["toolResult"] = normalizeLegacyToolResult(message["toolResult"]);
|
|
1157
|
-
normalizedMessages[messageId] = message;
|
|
1158
|
-
}
|
|
1159
|
-
conversation["messages"] = normalizedMessages;
|
|
1160
|
-
return conversation;
|
|
1161
|
-
}
|
|
1162
|
-
function normalizeToolResult(toolResult) {
|
|
1163
|
-
if (!toolResult)
|
|
1164
|
-
return;
|
|
1165
|
-
return {
|
|
1166
|
-
callId: toolResult.callId,
|
|
1167
|
-
outcome: toolResult.outcome,
|
|
1168
|
-
content: toolResult.content,
|
|
1169
|
-
...toolResult.error ? { error: { ...toolResult.error } } : {},
|
|
1170
|
-
...toolResult.action ? { action: { ...toolResult.action } } : {},
|
|
1171
|
-
...toolResult.inputDigest ? { inputDigest: toolResult.inputDigest } : {},
|
|
1172
|
-
...toolResult.outputDigest ? { outputDigest: toolResult.outputDigest } : {}
|
|
1173
|
-
};
|
|
1174
|
-
}
|
|
1175
|
-
function normalizeMessage(message) {
|
|
1176
|
-
const base = {
|
|
1177
|
-
id: message.id,
|
|
1178
|
-
role: message.role,
|
|
1179
|
-
content: message.content,
|
|
1180
|
-
position: message.position,
|
|
1181
|
-
createdAt: message.createdAt,
|
|
1182
|
-
metadata: message.metadata,
|
|
1183
|
-
hidden: message.hidden,
|
|
1184
|
-
toolCall: message.toolCall ? { ...message.toolCall } : undefined,
|
|
1185
|
-
toolResult: normalizeToolResult(message.toolResult),
|
|
1186
|
-
tokenUsage: message.tokenUsage ? { ...message.tokenUsage } : undefined
|
|
1187
|
-
};
|
|
1188
|
-
if (isAssistantMessage(message))
|
|
1189
|
-
return {
|
|
1190
|
-
...base,
|
|
1191
|
-
role: "assistant",
|
|
1192
|
-
goalCompleted: message.goalCompleted
|
|
1193
|
-
};
|
|
1194
|
-
return base;
|
|
1195
|
-
}
|
|
1196
|
-
function deserializeConversationHistory(json) {
|
|
1197
|
-
const parsed = conversationSchema.safeParse(normalizeLegacyConversationData(json));
|
|
1198
|
-
if (!parsed.success)
|
|
1199
|
-
throw createSerializationError("failed to deserialize conversation: invalid data");
|
|
1200
|
-
const data = parsed.data;
|
|
1201
|
-
try {
|
|
1202
|
-
const messageIds = new Set(Object.keys(data.messages));
|
|
1203
|
-
const orderedMessages = data.ids.map((id, index) => {
|
|
1204
|
-
const message = data.messages[id];
|
|
1205
|
-
if (!message)
|
|
1206
|
-
throw createSerializationError(`missing message for id ${id}`);
|
|
1207
|
-
if (message.position !== index)
|
|
1208
|
-
throw createInvalidPositionError(index, message.position);
|
|
1209
|
-
messageIds.delete(id);
|
|
1210
|
-
return normalizeMessage(message);
|
|
1211
|
-
});
|
|
1212
|
-
if (messageIds.size > 0)
|
|
1213
|
-
throw createSerializationError(`messages not listed in ids: ${[...messageIds].join(", ")}`);
|
|
1214
|
-
orderedMessages.reduce((state, message) => {
|
|
1215
|
-
if (message.role === "tool-call" && message.toolCall)
|
|
1216
|
-
return { toolUses: registerToolUse(state.toolUses, message.toolCall) };
|
|
1217
|
-
if (message.role === "tool-result" && message.toolResult)
|
|
1218
|
-
assertToolReference(state.toolUses, message.toolResult.callId);
|
|
1219
|
-
return state;
|
|
1220
|
-
}, { toolUses: /* @__PURE__ */ new Map });
|
|
1221
|
-
const messageInstances = orderedMessages.map((message) => createMessage(message));
|
|
1222
|
-
const readonly = toReadonly({
|
|
1223
|
-
schemaVersion: data.schemaVersion,
|
|
1224
|
-
id: data.id,
|
|
1225
|
-
title: data.title,
|
|
1226
|
-
status: data.status,
|
|
1227
|
-
metadata: { ...data.metadata },
|
|
1228
|
-
ids: orderedMessages.map((message) => message.id),
|
|
1229
|
-
messages: toIdRecord(messageInstances),
|
|
1230
|
-
createdAt: data.createdAt,
|
|
1231
|
-
updatedAt: data.updatedAt
|
|
1232
|
-
});
|
|
1233
|
-
assertConversationHistoryIntegrity(readonly);
|
|
1234
|
-
return readonly;
|
|
1235
|
-
} catch (error) {
|
|
1236
|
-
throw createSerializationError(`failed to deserialize conversation: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
function toChatMessages(conversation) {
|
|
1240
|
-
assertConversationSafe(conversation);
|
|
1241
|
-
const roleMap = {
|
|
1242
|
-
user: "user",
|
|
1243
|
-
assistant: "assistant",
|
|
1244
|
-
system: "system",
|
|
1245
|
-
developer: "system",
|
|
1246
|
-
"tool-call": "assistant",
|
|
1247
|
-
"tool-result": "user",
|
|
1248
|
-
snapshot: "system"
|
|
1249
|
-
};
|
|
1250
|
-
const result = [];
|
|
1251
|
-
for (const message of getOrderedMessages(conversation)) {
|
|
1252
|
-
if (message.hidden)
|
|
1253
|
-
continue;
|
|
1254
|
-
const externalRole = roleMap[message.role];
|
|
1255
|
-
result.push({
|
|
1256
|
-
role: externalRole,
|
|
1257
|
-
content: message.content
|
|
1258
|
-
});
|
|
1259
|
-
}
|
|
1260
|
-
return result;
|
|
1261
|
-
}
|
|
1262
|
-
|
|
1263
|
-
// ../../node_modules/conversationalist/dist/streaming.js
|
|
1264
|
-
var STREAMING_KEY = "__streaming";
|
|
1265
|
-
var cloneMessage = (original, overrides = {}) => {
|
|
1266
|
-
const baseMessage = {
|
|
1267
|
-
id: original.id,
|
|
1268
|
-
role: original.role,
|
|
1269
|
-
content: overrides.content ?? (typeof original.content === "string" ? original.content : [...original.content]),
|
|
1270
|
-
position: overrides.position ?? original.position,
|
|
1271
|
-
createdAt: original.createdAt,
|
|
1272
|
-
metadata: overrides.metadata ?? { ...original.metadata },
|
|
1273
|
-
hidden: original.hidden,
|
|
1274
|
-
toolCall: original.toolCall ? { ...original.toolCall } : undefined,
|
|
1275
|
-
toolResult: original.toolResult ? { ...original.toolResult } : undefined,
|
|
1276
|
-
tokenUsage: overrides.tokenUsage
|
|
1277
|
-
};
|
|
1278
|
-
if (isAssistantMessage(original))
|
|
1279
|
-
return createMessage({
|
|
1280
|
-
...baseMessage,
|
|
1281
|
-
role: "assistant",
|
|
1282
|
-
goalCompleted: original.goalCompleted
|
|
1283
|
-
});
|
|
1284
|
-
return createMessage(baseMessage);
|
|
1285
|
-
};
|
|
1286
|
-
function isStreamingMessage(message) {
|
|
1287
|
-
return message.metadata[STREAMING_KEY] === true;
|
|
1288
|
-
}
|
|
1289
|
-
function getStreamingMessage(conversation) {
|
|
1290
|
-
return getOrderedMessages(conversation).find(isStreamingMessage);
|
|
1291
|
-
}
|
|
1292
|
-
function appendStreamingMessage(conversation, role, metadata, environment) {
|
|
1293
|
-
const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
|
|
1294
|
-
const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
|
|
1295
|
-
const now = resolvedEnvironment.now();
|
|
1296
|
-
const messageId = resolvedEnvironment.randomId();
|
|
1297
|
-
const newMessage = createMessage({
|
|
1298
|
-
id: messageId,
|
|
1299
|
-
role,
|
|
1300
|
-
content: "",
|
|
1301
|
-
position: conversation.ids.length,
|
|
1302
|
-
createdAt: now,
|
|
1303
|
-
metadata: {
|
|
1304
|
-
...resolvedMetadata ?? {},
|
|
1305
|
-
[STREAMING_KEY]: true
|
|
1306
|
-
},
|
|
1307
|
-
hidden: false,
|
|
1308
|
-
toolCall: undefined,
|
|
1309
|
-
toolResult: undefined,
|
|
1310
|
-
tokenUsage: undefined
|
|
1311
|
-
});
|
|
1312
|
-
return {
|
|
1313
|
-
conversation: ensureConversationSafe(toReadonly({
|
|
1314
|
-
...conversation,
|
|
1315
|
-
ids: [...conversation.ids, messageId],
|
|
1316
|
-
messages: {
|
|
1317
|
-
...conversation.messages,
|
|
1318
|
-
[messageId]: newMessage
|
|
1319
|
-
},
|
|
1320
|
-
updatedAt: now
|
|
1321
|
-
})),
|
|
1322
|
-
messageId
|
|
1323
|
-
};
|
|
1324
|
-
}
|
|
1325
|
-
function updateStreamingMessage(conversation, messageId, content, environment) {
|
|
1326
|
-
const now = resolveConversationEnvironment(environment).now();
|
|
1327
|
-
const original = conversation.messages[messageId];
|
|
1328
|
-
if (!original)
|
|
1329
|
-
return ensureConversationSafe(conversation);
|
|
1330
|
-
const overrides = { content: typeof content === "string" ? content : [...content] };
|
|
1331
|
-
if (original.tokenUsage)
|
|
1332
|
-
overrides.tokenUsage = { ...original.tokenUsage };
|
|
1333
|
-
const updated = cloneMessage(original, overrides);
|
|
1334
|
-
return ensureConversationSafe(toReadonly({
|
|
1335
|
-
...conversation,
|
|
1336
|
-
ids: [...conversation.ids],
|
|
1337
|
-
messages: {
|
|
1338
|
-
...conversation.messages,
|
|
1339
|
-
[updated.id]: updated
|
|
1340
|
-
},
|
|
1341
|
-
updatedAt: now
|
|
1342
|
-
}));
|
|
1343
|
-
}
|
|
1344
|
-
function finalizeStreamingMessage(conversation, messageId, options, environment) {
|
|
1345
|
-
const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(options) ? options : environment);
|
|
1346
|
-
const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
|
|
1347
|
-
const now = resolvedEnvironment.now();
|
|
1348
|
-
const original = conversation.messages[messageId];
|
|
1349
|
-
if (!original)
|
|
1350
|
-
return ensureConversationSafe(conversation);
|
|
1351
|
-
const { [STREAMING_KEY]: _, ...restMetadata } = original.metadata;
|
|
1352
|
-
const finalizeOverrides = { metadata: {
|
|
1353
|
-
...restMetadata,
|
|
1354
|
-
...resolvedOptions?.metadata ?? {}
|
|
1355
|
-
} };
|
|
1356
|
-
if (resolvedOptions?.tokenUsage)
|
|
1357
|
-
finalizeOverrides.tokenUsage = { ...resolvedOptions.tokenUsage };
|
|
1358
|
-
const updated = cloneMessage(original, finalizeOverrides);
|
|
1359
|
-
return ensureConversationSafe(toReadonly({
|
|
1360
|
-
...conversation,
|
|
1361
|
-
ids: [...conversation.ids],
|
|
1362
|
-
messages: {
|
|
1363
|
-
...conversation.messages,
|
|
1364
|
-
[updated.id]: updated
|
|
1365
|
-
},
|
|
1366
|
-
updatedAt: now
|
|
1367
|
-
}));
|
|
1368
|
-
}
|
|
1369
|
-
function cancelStreamingMessage(conversation, messageId, environment) {
|
|
1370
|
-
const now = resolveConversationEnvironment(environment).now();
|
|
1371
|
-
if (!conversation.messages[messageId])
|
|
1372
|
-
return ensureConversationSafe(conversation);
|
|
1373
|
-
const messages = getOrderedMessages(conversation).filter((m) => m.id !== messageId).map((message, index) => message.position === index ? message : (() => {
|
|
1374
|
-
const overrides = { position: index };
|
|
1375
|
-
if (message.tokenUsage)
|
|
1376
|
-
overrides.tokenUsage = { ...message.tokenUsage };
|
|
1377
|
-
return cloneMessage(message, overrides);
|
|
1378
|
-
})());
|
|
1379
|
-
return ensureConversationSafe(toReadonly({
|
|
1380
|
-
...conversation,
|
|
1381
|
-
ids: messages.map((message) => message.id),
|
|
1382
|
-
messages: toIdRecord(messages),
|
|
1383
|
-
updatedAt: now
|
|
1384
|
-
}));
|
|
1385
|
-
}
|
|
1386
|
-
|
|
1387
|
-
export { copyContent, toReadonly, createMessage, isAssistantMessage, getOrderedMessages, toIdRecord, ConversationalistError, createIntegrityError, assertConversationSafe, ensureConversationSafe, pairToolCallsWithResults, appendToolCall, appendToolCalls, appendToolResult, appendToolResults, appendToolResultAsync, appendToolResultsAsync, getPendingToolCalls, getToolInteractions, toSessionInfo, simpleTokenEstimator, resolveConversationEnvironment, isConversationEnvironmentParameter, appendMessages, appendUserMessage, appendAssistantMessage, appendSystemMessage, createConversationHistory, getMessages, getMessageAtPosition, getMessageIds, getMessageById, searchConversationMessages, getStatistics, hasSystemMessage, getFirstSystemMessage, getSystemMessages, prependSystemMessage, replaceSystemMessage, collapseSystemMessages, redactMessageAtPosition, deserializeConversationHistory, toChatMessages, isStreamingMessage, getStreamingMessage, appendStreamingMessage, updateStreamingMessage, finalizeStreamingMessage, cancelStreamingMessage };
|
|
1388
|
-
|
|
1389
|
-
//# debugId=559319DDE09F498564756E2164756E21
|