@belonguniverseai/react-sdk 0.6.23 → 0.6.25
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/dist/api/client.d.ts +363 -29
- package/dist/api/mutations.d.ts +9 -1
- package/dist/api/query-keys.d.ts +19 -0
- package/dist/api/skill-library.d.ts +81 -0
- package/dist/component/{abnfDiagram-N423BO3Z-bM1BoI0O.js → abnfDiagram-N423BO3Z-D7OrqwMe.js} +4 -4
- package/dist/component/{arc-DaSgre52.js → arc-CZN7i2F-.js} +2 -2
- package/dist/component/{architectureDiagram-T3A2C74G-avMCXzQw.js → architectureDiagram-T3A2C74G-CVX4aJSk.js} +3 -3
- package/dist/component/{blockDiagram-VBNYF7ZC-Cg6EDrdt.js → blockDiagram-VBNYF7ZC-DrT23ReK.js} +4 -4
- package/dist/component/{c4Diagram-5PPSVZJV-DhUs6wdK.js → c4Diagram-5PPSVZJV-yA6JuHOr.js} +3 -3
- package/dist/component/{channel-DlmuDpcv.js → channel-vZcyyovp.js} +2 -2
- package/dist/component/{chunk-2GRJ4B5K-Drdf-9Az.js → chunk-2GRJ4B5K-C5DL0bNM.js} +2 -2
- package/dist/component/{chunk-2Q5K7J3B-CG6mCJjr.js → chunk-2Q5K7J3B-B5BiYW__.js} +2 -2
- package/dist/component/{chunk-5RXB4S5H-DYJwqjr4.js → chunk-5RXB4S5H-wnHQNeJ5.js} +5 -5
- package/dist/component/{chunk-5VM5RSS4-B21XfkBj.js → chunk-5VM5RSS4-CdjvYb3M.js} +2 -2
- package/dist/component/{chunk-6Q2QTUOP-DZkWqf90.js → chunk-6Q2QTUOP-CNSvyjis.js} +2 -2
- package/dist/component/{chunk-GF5L2VYU-5hBEo1f5.js → chunk-GF5L2VYU-D7BI1tvK.js} +6 -6
- package/dist/component/{chunk-JWPE2WC7-DAn-TcDC.js → chunk-JWPE2WC7-CeLQPuLU.js} +2 -2
- package/dist/component/{chunk-KBJHAD2P-CEMDhN2A.js → chunk-KBJHAD2P-DgAf9tRz.js} +2 -2
- package/dist/component/{chunk-RYQCIY6F-BWL1otLK.js → chunk-RYQCIY6F-DjFej6-h.js} +2 -2
- package/dist/component/{chunk-XXDRQBXY-D0TWnqlD.js → chunk-XXDRQBXY-CkNxuLox.js} +2 -2
- package/dist/component/{classDiagram-JCYQIIEL-CjU-7xK0.js → classDiagram-JCYQIIEL-TyORp-Xl.js} +3 -3
- package/dist/component/{classDiagram-v2-OCEON4UE-CjU-7xK0.js → classDiagram-v2-OCEON4UE-TyORp-Xl.js} +3 -3
- package/dist/component/{cose-bilkent-JH36ORCC-MkPQhZKJ.js → cose-bilkent-JH36ORCC-C_lOBXUY.js} +2 -2
- package/dist/component/{cynefinDiagram-MW4NZA55-Wf-Eh_MR.js → cynefinDiagram-MW4NZA55-DqMIe0ZV.js} +3 -3
- package/dist/component/{dagre-VZM6K2ZE-D1ND11ws.js → dagre-VZM6K2ZE-B3HtBfbf.js} +3 -3
- package/dist/component/{diagram-7IWD3JNH-ChO63Ikp.js → diagram-7IWD3JNH-1uYIe-Fx.js} +4 -4
- package/dist/component/{diagram-B4RE2ZJO-CFVIZBxd.js → diagram-B4RE2ZJO-DLvDbgTV.js} +3 -3
- package/dist/component/{diagram-LBJQPF4R-BFErKt-H.js → diagram-LBJQPF4R-CdaGcjGt.js} +3 -3
- package/dist/component/{diagram-Q27KOJAE-3EA2fDKz.js → diagram-Q27KOJAE-u24QPtAZ.js} +4 -4
- package/dist/component/{diagram-UB23O5K3-D914yr1r.js → diagram-UB23O5K3-D0YnNMp3.js} +3 -3
- package/dist/component/{ebnfDiagram-BXEA7PRR-BlRDglJm.js → ebnfDiagram-BXEA7PRR-DdL9-qpf.js} +4 -4
- package/dist/component/{erDiagram-JOGREHBK-BgHUzm41.js → erDiagram-JOGREHBK-1mtJehIC.js} +5 -5
- package/dist/component/{flowDiagram-UKHOOZJN-Cf42sXVK.js → flowDiagram-UKHOOZJN-BPwuBLmT.js} +7 -7
- package/dist/component/{ganttDiagram-PKOTCBZU-Bqai8Nqw.js → ganttDiagram-PKOTCBZU-C0dhxKZn.js} +3 -3
- package/dist/component/{gitGraphDiagram-DS77QQ5N-M6yX_E4b.js → gitGraphDiagram-DS77QQ5N-9pn8I5Ww.js} +4 -4
- package/dist/component/{highlighted-body-OFNGDK62-C2rmuXAs.js → highlighted-body-OFNGDK62-BtE2oU8T.js} +2 -2
- package/dist/component/index.js +2 -2
- package/dist/component/{infoDiagram-6WML65LV-Bk4qDfY4.js → infoDiagram-6WML65LV-Un5rOho6.js} +2 -2
- package/dist/component/{ishikawaDiagram-WSZJBQD7-CQ0-i0XP.js → ishikawaDiagram-WSZJBQD7-B_Q76Ncg.js} +2 -2
- package/dist/component/{journeyDiagram-NVQOT4AX-CK9lX22d.js → journeyDiagram-NVQOT4AX-CvjCKkXJ.js} +5 -5
- package/dist/component/{kanban-definition-27J2QSJJ-CrIKfzfe.js → kanban-definition-27J2QSJJ-DTk-MzTa.js} +3 -3
- package/dist/component/{linear-CzN3Xd3g.js → linear-Bjkwtb4n.js} +2 -2
- package/dist/component/{mermaid-GHXKKRXX-B-ea5OKA.js → mermaid-GHXKKRXX-CUdhS07I.js} +51014 -48010
- package/dist/component/{mindmap-definition-FAOFIHXS-DUDsEObz.js → mindmap-definition-FAOFIHXS-NMNGkbeM.js} +4 -4
- package/dist/component/{pegDiagram-VL7TDLO6-DFJ-rOLH.js → pegDiagram-VL7TDLO6-DP8ndDG1.js} +4 -4
- package/dist/component/{pieDiagram-7S7Q4E2Y-OwliOUdN.js → pieDiagram-7S7Q4E2Y-CneShL4n.js} +4 -4
- package/dist/component/{quadrantDiagram-CIZ2JOQS-CLKxzqPi.js → quadrantDiagram-CIZ2JOQS-DwKlYHP_.js} +3 -3
- package/dist/component/{railroadDiagram-AXF67PYL-_jBOX7-D.js → railroadDiagram-AXF67PYL-D7hQRdO5.js} +4 -4
- package/dist/component/{requirementDiagram-LRYGKXZP-CxfMaDPH.js → requirementDiagram-LRYGKXZP-BLxtMc17.js} +4 -4
- package/dist/component/{sankeyDiagram-W5VNT64P-D-qOUzh7.js → sankeyDiagram-W5VNT64P-CXp6dM_4.js} +2 -2
- package/dist/component/{sequenceDiagram-SI44F4Z6-B57h29Ae.js → sequenceDiagram-SI44F4Z6-Ce7VH5G7.js} +4 -4
- package/dist/component/{sizeCapture-X5ZJPWSS-DlIoKfk1.js → sizeCapture-X5ZJPWSS-CUTOnfZv.js} +2 -2
- package/dist/component/{stateDiagram-OKZ733FA-CNNoDNwB.js → stateDiagram-OKZ733FA-Bu73CVSq.js} +3 -3
- package/dist/component/{stateDiagram-v2-UEYNNEHI-xYjW9R-s.js → stateDiagram-v2-UEYNNEHI-ktw3g3Qt.js} +3 -3
- package/dist/component/{swimlanes-SLNWSIFB-Chjr6NCU.js → swimlanes-SLNWSIFB-DBKvCdnJ.js} +4 -4
- package/dist/component/{swimlanesDiagram-ULZ7WXOC-A9mWwnCX.js → swimlanesDiagram-ULZ7WXOC-CEWTxRuN.js} +3 -3
- package/dist/component/{timeline-definition-Z64GVDOM-DldyCd1l.js → timeline-definition-Z64GVDOM-C3MMj2z6.js} +3 -3
- package/dist/component/{vennDiagram-T6HMQDX7-BGfiPWG2.js → vennDiagram-T6HMQDX7-BRuneBor.js} +2 -2
- package/dist/component/{wardleyDiagram-T6FBY63Y-Bzn9DJ27.js → wardleyDiagram-T6FBY63Y-Dyd4EEZv.js} +3 -3
- package/dist/component/{xychartDiagram-ELKLHX3M-nMaNgT12.js → xychartDiagram-ELKLHX3M-BDUULgvJ.js} +3 -3
- package/dist/components/ai-elements/markdown-repair-samples.d.ts +27 -0
- package/dist/components/ai-elements/terminal-task.d.ts +3 -1
- package/dist/components/embed/ChatTitleEditor.d.ts +17 -0
- package/dist/components/embed/ComposerContext.d.ts +7 -7
- package/dist/components/embed/EarlierMessages.d.ts +17 -0
- package/dist/components/embed/EmbedAvatar.d.ts +1 -3
- package/dist/components/embed/EmbedConversation.d.ts +6 -1
- package/dist/components/embed/EmbedHeader.d.ts +14 -2
- package/dist/components/embed/VirtualTranscript.d.ts +12 -0
- package/dist/components/embed/context-occupancy.d.ts +15 -0
- package/dist/components/embed/session-intent.d.ts +3 -0
- package/dist/components/embed/use-agent-identity.d.ts +1 -0
- package/dist/components/embed/virtual-transcript-settings.d.ts +15 -0
- package/dist/components/feedback/feedback-votes.d.ts +3 -0
- package/dist/components/feedback/message-feedback.d.ts +2 -2
- package/dist/components/skills/EditSkillDialog.d.ts +8 -0
- package/dist/components/skills/SkillsListSurface.d.ts +3 -2
- package/dist/components/skills/skill-refusal-copy.d.ts +8 -0
- package/dist/embed/conversation-scroll.d.ts +18 -0
- package/dist/embed/copy.d.ts +0 -1
- package/dist/embed/voice-call-lines.d.ts +14 -5
- package/dist/i18n/messages/en.d.ts +21 -12
- package/dist/i18n/messages/surfaces/skills.d.ts +71 -3
- package/dist/i18n/messages/surfaces/usage.d.ts +12 -44
- package/dist/i18n/messages/surfaces/workspace.d.ts +7 -5
- package/dist/lib/remembered-state.d.ts +9 -0
- package/dist/lib/use-remembered-disclosure.d.ts +2 -0
- package/dist/routes/chat/draft-updaters.d.ts +16 -0
- package/dist/routes/chat/history-cache.d.ts +47 -0
- package/dist/routes/chat/history-paging.d.ts +61 -0
- package/dist/routes/chat/kept-chats.d.ts +39 -0
- package/dist/routes/chat/live-chats.d.ts +14 -0
- package/dist/routes/chat/transcript-pins.d.ts +4 -0
- package/dist/routes/chat/transcript-row.d.ts +49 -0
- package/dist/routes/chat/use-session-goal.d.ts +6 -1
- package/dist/routes/chat.d.ts +8 -21
- package/dist/stream/activity-items.d.ts +2 -0
- package/dist/stream/agent-deliverable-path.d.ts +1 -0
- package/dist/stream/ai-sdk-part-renderers.d.ts +14 -1
- package/dist/stream/belong-chat-transport.d.ts +23 -1
- package/dist/stream/belong-data-parts.d.ts +13 -0
- package/dist/stream/dispatch-once.d.ts +12 -0
- package/dist/stream/sandbox-output-store.d.ts +14 -0
- package/dist/stream/sandbox-output.d.ts +8 -3
- package/dist/stream/select-session-usage.d.ts +15 -1
- package/dist/stream/tool-call-detail.d.ts +16 -0
- package/dist/types/public.d.ts +11 -0
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ export declare const en: {
|
|
|
3
3
|
readonly newItem: "New: {{title}}";
|
|
4
4
|
readonly close: "Close";
|
|
5
5
|
readonly download: "Download";
|
|
6
|
-
readonly
|
|
6
|
+
readonly shownBy: "Shown by {{name}}";
|
|
7
7
|
readonly openedByYou: "You opened this";
|
|
8
8
|
readonly planTitle: "Plan";
|
|
9
9
|
readonly subagentsFilterAll: "All {{count}}";
|
|
@@ -15,22 +15,12 @@ export declare const en: {
|
|
|
15
15
|
readonly usage: {
|
|
16
16
|
readonly expandComposer: "Expand message input";
|
|
17
17
|
readonly collapseComposer: "Compact message input";
|
|
18
|
-
readonly filesShort_one: "{{count}} file";
|
|
19
|
-
readonly filesShort_other: "{{count}} files";
|
|
20
18
|
readonly contextTitle: "Context for this message";
|
|
21
|
-
readonly filesToSend: "Files to send";
|
|
22
|
-
readonly attachedFiles_one: "{{count}} file attached";
|
|
23
|
-
readonly attachedFiles_other: "{{count}} files attached";
|
|
24
|
-
readonly filesNote: "These files will be sent with your next message.";
|
|
25
|
-
readonly emptyFiles: "Attach files to include them in your next message.";
|
|
26
19
|
readonly pageNote: "Page label only; this control does not attach page contents.";
|
|
27
20
|
readonly removeFile: "Remove {{name}}";
|
|
28
21
|
readonly closeContext: "Close context";
|
|
29
22
|
readonly currentPage: "Current page";
|
|
30
|
-
readonly tooltip: "Auto-compacts at {{chars}} chars; {{tokens}} tokens used this session";
|
|
31
23
|
readonly windowTooltip: "Context window: {{used}} of {{window}} tokens used ({{pct}}%)";
|
|
32
|
-
readonly context: "Context {{pct}}%";
|
|
33
|
-
readonly tokens: "{{count}} tokens";
|
|
34
24
|
readonly inOut: "Input {{in}} · output {{out}}";
|
|
35
25
|
readonly turnsThisSessionOne: "{{count}} turn this session";
|
|
36
26
|
readonly turnsThisSessionOther: "{{count}} turns this session";
|
|
@@ -45,10 +35,12 @@ export declare const en: {
|
|
|
45
35
|
};
|
|
46
36
|
readonly freeSpace: "Free space";
|
|
47
37
|
readonly estimateNote: "Breakdown is estimated; the total is as reported by the model.";
|
|
48
|
-
readonly sessionTokens: "{{tokens}} tokens this session";
|
|
49
38
|
readonly cacheLine: "Cache: {{read}} read · {{write}} written";
|
|
50
39
|
readonly autoCompact: "Auto-compact: {{pct}}% of budget";
|
|
51
40
|
};
|
|
41
|
+
readonly compactionLabel: "Auto-compact: {{used}} of {{limit}} characters used ({{pct}}%)";
|
|
42
|
+
readonly chatTotal: "Used in this chat: {{tokens}} tokens";
|
|
43
|
+
readonly chatTotalNote: "Each reply re-reads the chat, so this grows faster than the context window.";
|
|
52
44
|
};
|
|
53
45
|
readonly stream: {
|
|
54
46
|
readonly toolExecutionError: "The tool could not complete. Please try again.";
|
|
@@ -306,6 +298,22 @@ export declare const en: {
|
|
|
306
298
|
readonly deleteDescription: "{{name}} will be removed, and the assistant will stop using it in this workspace.";
|
|
307
299
|
readonly deleteConfirm: "Delete";
|
|
308
300
|
readonly deleting: "Deleting…";
|
|
301
|
+
readonly viewEdit: "View and edit";
|
|
302
|
+
readonly editIntro: "The instructions the assistant follows. Changing the name at the top renames the skill.";
|
|
303
|
+
readonly editTextAria: "Instructions for {{name}}";
|
|
304
|
+
readonly editFiles: "Also in this skill:";
|
|
305
|
+
readonly editLoading: "Opening this skill…";
|
|
306
|
+
readonly editLoadError: "Couldn't open this skill.";
|
|
307
|
+
readonly editSave: "Save";
|
|
308
|
+
readonly editSaving: "Saving…";
|
|
309
|
+
readonly editStale: "This skill changed since you opened it. Reload to get the latest version — your unsaved changes will be lost.";
|
|
310
|
+
readonly editContentReserved: "These instructions copy one of your company's skills, so they can't be saved as your own.";
|
|
311
|
+
readonly editReload: "Reload";
|
|
312
|
+
readonly editNameTaken: "You already have a skill named {{name}}.";
|
|
313
|
+
readonly editRenameHint: "Change the name at the top and try again.";
|
|
314
|
+
readonly editInvalid: "This isn't a valid skill yet — check the name and description lines at the top.";
|
|
315
|
+
readonly editTooLong: "These instructions are too long. Shorten them and try again.";
|
|
316
|
+
readonly editFailed: "Couldn't save your changes. Try again.";
|
|
309
317
|
};
|
|
310
318
|
readonly settings: {
|
|
311
319
|
title: string;
|
|
@@ -1119,6 +1127,7 @@ export declare const en: {
|
|
|
1119
1127
|
readonly thinking: "Thinking…";
|
|
1120
1128
|
readonly followerBanner: "This conversation is open in another tab";
|
|
1121
1129
|
readonly historyUnavailable: "Couldn't load this conversation — try reopening it.";
|
|
1130
|
+
readonly showEarlierMessages: "Show earlier messages";
|
|
1122
1131
|
};
|
|
1123
1132
|
readonly compaction: {
|
|
1124
1133
|
readonly compacted: "Compacted {{count}} earlier messages into a summary.";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skills rail surface (skill library spec §11): the list, the inline on/off
|
|
3
|
-
* switch, download/delete, and the
|
|
3
|
+
* switch, download/delete, the upload dialog, and the View / Edit dialog.
|
|
4
4
|
*
|
|
5
5
|
* Copy names the PRODUCT only (§42): never SKILL.md, bundle, sandbox,
|
|
6
6
|
* frontmatter, archive or workspace plumbing. File extensions are the one
|
|
@@ -10,8 +10,12 @@
|
|
|
10
10
|
* Keep navigation, the `/` menu, dialogs and activity labels consistent.
|
|
11
11
|
*
|
|
12
12
|
* Nothing here is phrased as breakage: a failed toggle, download or delete is
|
|
13
|
-
* an ordinary moment rendered orange (§42); only a refused upload
|
|
14
|
-
* dialog is red.
|
|
13
|
+
* an ordinary moment rendered orange (§42); only a refused upload or edit
|
|
14
|
+
* inside its dialog is red.
|
|
15
|
+
*
|
|
16
|
+
* The edit copy points at the lines the user can SEE in the editor: in es/pt/it
|
|
17
|
+
* the `name` / `description` line keys stay in English, because that is what
|
|
18
|
+
* the instructions literally say.
|
|
15
19
|
*/
|
|
16
20
|
export declare const skillsEn: {
|
|
17
21
|
readonly skills: {
|
|
@@ -82,6 +86,22 @@ export declare const skillsEn: {
|
|
|
82
86
|
readonly deleteDescription: "{{name}} will be removed, and the assistant will stop using it in this workspace.";
|
|
83
87
|
readonly deleteConfirm: "Delete";
|
|
84
88
|
readonly deleting: "Deleting…";
|
|
89
|
+
readonly viewEdit: "View and edit";
|
|
90
|
+
readonly editIntro: "The instructions the assistant follows. Changing the name at the top renames the skill.";
|
|
91
|
+
readonly editTextAria: "Instructions for {{name}}";
|
|
92
|
+
readonly editFiles: "Also in this skill:";
|
|
93
|
+
readonly editLoading: "Opening this skill…";
|
|
94
|
+
readonly editLoadError: "Couldn't open this skill.";
|
|
95
|
+
readonly editSave: "Save";
|
|
96
|
+
readonly editSaving: "Saving…";
|
|
97
|
+
readonly editStale: "This skill changed since you opened it. Reload to get the latest version — your unsaved changes will be lost.";
|
|
98
|
+
readonly editContentReserved: "These instructions copy one of your company's skills, so they can't be saved as your own.";
|
|
99
|
+
readonly editReload: "Reload";
|
|
100
|
+
readonly editNameTaken: "You already have a skill named {{name}}.";
|
|
101
|
+
readonly editRenameHint: "Change the name at the top and try again.";
|
|
102
|
+
readonly editInvalid: "This isn't a valid skill yet — check the name and description lines at the top.";
|
|
103
|
+
readonly editTooLong: "These instructions are too long. Shorten them and try again.";
|
|
104
|
+
readonly editFailed: "Couldn't save your changes. Try again.";
|
|
85
105
|
};
|
|
86
106
|
};
|
|
87
107
|
export declare const skillsEs: {
|
|
@@ -153,6 +173,22 @@ export declare const skillsEs: {
|
|
|
153
173
|
deleteDescription: string;
|
|
154
174
|
deleteConfirm: string;
|
|
155
175
|
deleting: string;
|
|
176
|
+
viewEdit: string;
|
|
177
|
+
editIntro: string;
|
|
178
|
+
editTextAria: string;
|
|
179
|
+
editFiles: string;
|
|
180
|
+
editLoading: string;
|
|
181
|
+
editLoadError: string;
|
|
182
|
+
editSave: string;
|
|
183
|
+
editSaving: string;
|
|
184
|
+
editStale: string;
|
|
185
|
+
editContentReserved: string;
|
|
186
|
+
editReload: string;
|
|
187
|
+
editNameTaken: string;
|
|
188
|
+
editRenameHint: string;
|
|
189
|
+
editInvalid: string;
|
|
190
|
+
editTooLong: string;
|
|
191
|
+
editFailed: string;
|
|
156
192
|
};
|
|
157
193
|
};
|
|
158
194
|
export declare const skillsPt: {
|
|
@@ -224,6 +260,22 @@ export declare const skillsPt: {
|
|
|
224
260
|
deleteDescription: string;
|
|
225
261
|
deleteConfirm: string;
|
|
226
262
|
deleting: string;
|
|
263
|
+
viewEdit: string;
|
|
264
|
+
editIntro: string;
|
|
265
|
+
editTextAria: string;
|
|
266
|
+
editFiles: string;
|
|
267
|
+
editLoading: string;
|
|
268
|
+
editLoadError: string;
|
|
269
|
+
editSave: string;
|
|
270
|
+
editSaving: string;
|
|
271
|
+
editStale: string;
|
|
272
|
+
editContentReserved: string;
|
|
273
|
+
editReload: string;
|
|
274
|
+
editNameTaken: string;
|
|
275
|
+
editRenameHint: string;
|
|
276
|
+
editInvalid: string;
|
|
277
|
+
editTooLong: string;
|
|
278
|
+
editFailed: string;
|
|
227
279
|
};
|
|
228
280
|
};
|
|
229
281
|
export declare const skillsIt: {
|
|
@@ -295,5 +347,21 @@ export declare const skillsIt: {
|
|
|
295
347
|
deleteDescription: string;
|
|
296
348
|
deleteConfirm: string;
|
|
297
349
|
deleting: string;
|
|
350
|
+
viewEdit: string;
|
|
351
|
+
editIntro: string;
|
|
352
|
+
editTextAria: string;
|
|
353
|
+
editFiles: string;
|
|
354
|
+
editLoading: string;
|
|
355
|
+
editLoadError: string;
|
|
356
|
+
editSave: string;
|
|
357
|
+
editSaving: string;
|
|
358
|
+
editStale: string;
|
|
359
|
+
editContentReserved: string;
|
|
360
|
+
editReload: string;
|
|
361
|
+
editNameTaken: string;
|
|
362
|
+
editRenameHint: string;
|
|
363
|
+
editInvalid: string;
|
|
364
|
+
editTooLong: string;
|
|
365
|
+
editFailed: string;
|
|
298
366
|
};
|
|
299
367
|
};
|
|
@@ -3,22 +3,12 @@ export declare const usageEn: {
|
|
|
3
3
|
readonly usage: {
|
|
4
4
|
readonly expandComposer: "Expand message input";
|
|
5
5
|
readonly collapseComposer: "Compact message input";
|
|
6
|
-
readonly filesShort_one: "{{count}} file";
|
|
7
|
-
readonly filesShort_other: "{{count}} files";
|
|
8
6
|
readonly contextTitle: "Context for this message";
|
|
9
|
-
readonly filesToSend: "Files to send";
|
|
10
|
-
readonly attachedFiles_one: "{{count}} file attached";
|
|
11
|
-
readonly attachedFiles_other: "{{count}} files attached";
|
|
12
|
-
readonly filesNote: "These files will be sent with your next message.";
|
|
13
|
-
readonly emptyFiles: "Attach files to include them in your next message.";
|
|
14
7
|
readonly pageNote: "Page label only; this control does not attach page contents.";
|
|
15
8
|
readonly removeFile: "Remove {{name}}";
|
|
16
9
|
readonly closeContext: "Close context";
|
|
17
10
|
readonly currentPage: "Current page";
|
|
18
|
-
readonly tooltip: "Auto-compacts at {{chars}} chars; {{tokens}} tokens used this session";
|
|
19
11
|
readonly windowTooltip: "Context window: {{used}} of {{window}} tokens used ({{pct}}%)";
|
|
20
|
-
readonly context: "Context {{pct}}%";
|
|
21
|
-
readonly tokens: "{{count}} tokens";
|
|
22
12
|
readonly inOut: "Input {{in}} · output {{out}}";
|
|
23
13
|
readonly turnsThisSessionOne: "{{count}} turn this session";
|
|
24
14
|
readonly turnsThisSessionOther: "{{count}} turns this session";
|
|
@@ -33,32 +23,24 @@ export declare const usageEn: {
|
|
|
33
23
|
};
|
|
34
24
|
readonly freeSpace: "Free space";
|
|
35
25
|
readonly estimateNote: "Breakdown is estimated; the total is as reported by the model.";
|
|
36
|
-
readonly sessionTokens: "{{tokens}} tokens this session";
|
|
37
26
|
readonly cacheLine: "Cache: {{read}} read · {{write}} written";
|
|
38
27
|
readonly autoCompact: "Auto-compact: {{pct}}% of budget";
|
|
39
28
|
};
|
|
29
|
+
readonly compactionLabel: "Auto-compact: {{used}} of {{limit}} characters used ({{pct}}%)";
|
|
30
|
+
readonly chatTotal: "Used in this chat: {{tokens}} tokens";
|
|
31
|
+
readonly chatTotalNote: "Each reply re-reads the chat, so this grows faster than the context window.";
|
|
40
32
|
};
|
|
41
33
|
};
|
|
42
34
|
export declare const usageEs: {
|
|
43
35
|
usage: {
|
|
44
36
|
expandComposer: string;
|
|
45
37
|
collapseComposer: string;
|
|
46
|
-
filesShort_one: string;
|
|
47
|
-
filesShort_other: string;
|
|
48
38
|
contextTitle: string;
|
|
49
|
-
filesToSend: string;
|
|
50
|
-
attachedFiles_one: string;
|
|
51
|
-
attachedFiles_other: string;
|
|
52
|
-
filesNote: string;
|
|
53
|
-
emptyFiles: string;
|
|
54
39
|
pageNote: string;
|
|
55
40
|
removeFile: string;
|
|
56
41
|
closeContext: string;
|
|
57
42
|
currentPage: string;
|
|
58
|
-
tooltip: string;
|
|
59
43
|
windowTooltip: string;
|
|
60
|
-
context: string;
|
|
61
|
-
tokens: string;
|
|
62
44
|
inOut: string;
|
|
63
45
|
turnsThisSessionOne: string;
|
|
64
46
|
turnsThisSessionOther: string;
|
|
@@ -73,32 +55,24 @@ export declare const usageEs: {
|
|
|
73
55
|
};
|
|
74
56
|
freeSpace: string;
|
|
75
57
|
estimateNote: string;
|
|
76
|
-
sessionTokens: string;
|
|
77
58
|
cacheLine: string;
|
|
78
59
|
autoCompact: string;
|
|
79
60
|
};
|
|
61
|
+
compactionLabel: string;
|
|
62
|
+
chatTotal: string;
|
|
63
|
+
chatTotalNote: string;
|
|
80
64
|
};
|
|
81
65
|
};
|
|
82
66
|
export declare const usagePt: {
|
|
83
67
|
usage: {
|
|
84
68
|
expandComposer: string;
|
|
85
69
|
collapseComposer: string;
|
|
86
|
-
filesShort_one: string;
|
|
87
|
-
filesShort_other: string;
|
|
88
70
|
contextTitle: string;
|
|
89
|
-
filesToSend: string;
|
|
90
|
-
attachedFiles_one: string;
|
|
91
|
-
attachedFiles_other: string;
|
|
92
|
-
filesNote: string;
|
|
93
|
-
emptyFiles: string;
|
|
94
71
|
pageNote: string;
|
|
95
72
|
removeFile: string;
|
|
96
73
|
closeContext: string;
|
|
97
74
|
currentPage: string;
|
|
98
|
-
tooltip: string;
|
|
99
75
|
windowTooltip: string;
|
|
100
|
-
context: string;
|
|
101
|
-
tokens: string;
|
|
102
76
|
inOut: string;
|
|
103
77
|
turnsThisSessionOne: string;
|
|
104
78
|
turnsThisSessionOther: string;
|
|
@@ -113,32 +87,24 @@ export declare const usagePt: {
|
|
|
113
87
|
};
|
|
114
88
|
freeSpace: string;
|
|
115
89
|
estimateNote: string;
|
|
116
|
-
sessionTokens: string;
|
|
117
90
|
cacheLine: string;
|
|
118
91
|
autoCompact: string;
|
|
119
92
|
};
|
|
93
|
+
compactionLabel: string;
|
|
94
|
+
chatTotal: string;
|
|
95
|
+
chatTotalNote: string;
|
|
120
96
|
};
|
|
121
97
|
};
|
|
122
98
|
export declare const usageIt: {
|
|
123
99
|
usage: {
|
|
124
100
|
expandComposer: string;
|
|
125
101
|
collapseComposer: string;
|
|
126
|
-
filesShort_one: string;
|
|
127
|
-
filesShort_other: string;
|
|
128
102
|
contextTitle: string;
|
|
129
|
-
filesToSend: string;
|
|
130
|
-
attachedFiles_one: string;
|
|
131
|
-
attachedFiles_other: string;
|
|
132
|
-
filesNote: string;
|
|
133
|
-
emptyFiles: string;
|
|
134
103
|
pageNote: string;
|
|
135
104
|
removeFile: string;
|
|
136
105
|
closeContext: string;
|
|
137
106
|
currentPage: string;
|
|
138
|
-
tooltip: string;
|
|
139
107
|
windowTooltip: string;
|
|
140
|
-
context: string;
|
|
141
|
-
tokens: string;
|
|
142
108
|
inOut: string;
|
|
143
109
|
turnsThisSessionOne: string;
|
|
144
110
|
turnsThisSessionOther: string;
|
|
@@ -153,9 +119,11 @@ export declare const usageIt: {
|
|
|
153
119
|
};
|
|
154
120
|
freeSpace: string;
|
|
155
121
|
estimateNote: string;
|
|
156
|
-
sessionTokens: string;
|
|
157
122
|
cacheLine: string;
|
|
158
123
|
autoCompact: string;
|
|
159
124
|
};
|
|
125
|
+
compactionLabel: string;
|
|
126
|
+
chatTotal: string;
|
|
127
|
+
chatTotalNote: string;
|
|
160
128
|
};
|
|
161
129
|
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/** Fullscreen workspace pane strings (spec 2026-09-02). §42: the copy names the
|
|
2
|
-
* product only
|
|
2
|
+
* product only, never the pane or the dock. `shownBy`'s `{{name}}` is the
|
|
3
|
+
* tenant's agent identity (`useAgentIdentity`: "Simetrik agent", "Belong
|
|
4
|
+
* agent", or a custom brand), so a Simetrik user is never told "Belong". */
|
|
3
5
|
export declare const workspaceEn: {
|
|
4
6
|
readonly workspace: {
|
|
5
7
|
readonly newItem: "New: {{title}}";
|
|
6
8
|
readonly close: "Close";
|
|
7
9
|
readonly download: "Download";
|
|
8
|
-
readonly
|
|
10
|
+
readonly shownBy: "Shown by {{name}}";
|
|
9
11
|
readonly openedByYou: "You opened this";
|
|
10
12
|
readonly planTitle: "Plan";
|
|
11
13
|
readonly subagentsFilterAll: "All {{count}}";
|
|
@@ -20,7 +22,7 @@ export declare const workspaceEs: {
|
|
|
20
22
|
newItem: string;
|
|
21
23
|
close: string;
|
|
22
24
|
download: string;
|
|
23
|
-
|
|
25
|
+
shownBy: string;
|
|
24
26
|
openedByYou: string;
|
|
25
27
|
planTitle: string;
|
|
26
28
|
subagentsFilterAll: string;
|
|
@@ -35,7 +37,7 @@ export declare const workspacePt: {
|
|
|
35
37
|
newItem: string;
|
|
36
38
|
close: string;
|
|
37
39
|
download: string;
|
|
38
|
-
|
|
40
|
+
shownBy: string;
|
|
39
41
|
openedByYou: string;
|
|
40
42
|
planTitle: string;
|
|
41
43
|
subagentsFilterAll: string;
|
|
@@ -50,7 +52,7 @@ export declare const workspaceIt: {
|
|
|
50
52
|
newItem: string;
|
|
51
53
|
close: string;
|
|
52
54
|
download: string;
|
|
53
|
-
|
|
55
|
+
shownBy: string;
|
|
54
56
|
openedByYou: string;
|
|
55
57
|
planTitle: string;
|
|
56
58
|
subagentsFilterAll: string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type RememberedState<T> = {
|
|
2
|
+
/** `useState`, remembered under `key` across unmounts. */
|
|
3
|
+
readonly useRemembered: (key: string | undefined, initial: T) => readonly [T, (next: T) => void];
|
|
4
|
+
readonly peek: (key: string) => T | undefined;
|
|
5
|
+
readonly set: (key: string, value: T) => void;
|
|
6
|
+
readonly reset: () => void;
|
|
7
|
+
};
|
|
8
|
+
/** One typed store. `maxEntries` bounds a long page's memory; the oldest go first. */
|
|
9
|
+
export declare const createRememberedState: <T>(maxEntries?: number) => RememberedState<T>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setDraft` updaters for ChatRoute's programmatic draft writers, moved out of
|
|
3
|
+
* `routes/chat.tsx` verbatim (decomposition ratchet: the route file must not
|
|
4
|
+
* grow). Module-level so the route's callbacks stay within the
|
|
5
|
+
* function-nesting limit.
|
|
6
|
+
*
|
|
7
|
+
* (BEL-255 note: these writers used to be seed-aware, stripping an untouched
|
|
8
|
+
* welcome seed before appending. The welcome question is now a GHOST
|
|
9
|
+
* suggestion the composer paints over an EMPTY draft — it never lives in the
|
|
10
|
+
* draft string — so every programmatic writer composes onto user text only.)
|
|
11
|
+
*/
|
|
12
|
+
/** BEL-144 — appends recalled queued-message texts under whatever the user
|
|
13
|
+
* already typed, newline-separated (handleStop's restore). */
|
|
14
|
+
export declare const appendTextsToDraft: (texts: readonly string[]) => (prev: string) => string;
|
|
15
|
+
/** Dictation append (open surface + closed-surface confirm mode). */
|
|
16
|
+
export declare const appendDictationToDraft: (text: string) => (prev: string) => string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { BelongUIMessage } from '../../stream/belong-data-parts.ts';
|
|
3
|
+
import { HistoryPageRead } from './history-paging.ts';
|
|
4
|
+
export type LoadedHistoryPage = HistoryPageRead<BelongUIMessage>;
|
|
5
|
+
export type HistoryPageResult = ({
|
|
6
|
+
readonly ok: true;
|
|
7
|
+
} & LoadedHistoryPage) | {
|
|
8
|
+
readonly ok: false;
|
|
9
|
+
readonly reason: "network" | "bad_status" | "bad_body" | "not_found";
|
|
10
|
+
};
|
|
11
|
+
/** Which chat a page belongs to. `workspaceKey`: the scoped id, or "". */
|
|
12
|
+
export type HistoryScope = {
|
|
13
|
+
readonly workspaceKey: string;
|
|
14
|
+
readonly sessionId: string;
|
|
15
|
+
};
|
|
16
|
+
/** A newest page read this recently is still good for a prefetch. */
|
|
17
|
+
export declare const PREFETCHED_PAGE_MAX_AGE_MS = 30000;
|
|
18
|
+
/**
|
|
19
|
+
* A page read this recently is the server's answer already: a chat opened
|
|
20
|
+
* right after the Chats list read it ahead (the pointer rested on its row)
|
|
21
|
+
* isn't read twice.
|
|
22
|
+
*/
|
|
23
|
+
export declare const JUST_READ_MS = 2000;
|
|
24
|
+
/**
|
|
25
|
+
* Read one page through the cache: the newest (`before` undefined) or the one
|
|
26
|
+
* `before` names. `maxAgeMs` is how old a cached copy may be and still be
|
|
27
|
+
* returned without asking the server; 0 always asks, sharing a read already in
|
|
28
|
+
* flight.
|
|
29
|
+
*/
|
|
30
|
+
export declare const readHistoryPage: (client: QueryClient, scope: HistoryScope, before: string | undefined, load: () => Promise<HistoryPageResult>, maxAgeMs: number) => Promise<HistoryPageResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Read the newest page from the server now, never joining a read already in
|
|
33
|
+
* flight (it may predate what the caller is waiting for: a turn that just
|
|
34
|
+
* ended), and keep what it returns.
|
|
35
|
+
*/
|
|
36
|
+
export declare const refreshNewestHistoryPage: (client: QueryClient, scope: HistoryScope, load: () => Promise<HistoryPageResult>) => Promise<HistoryPageResult>;
|
|
37
|
+
/**
|
|
38
|
+
* The newest page as the cache holds it, when it may be painted: read before,
|
|
39
|
+
* and not marked stale by a turn that finished since.
|
|
40
|
+
*/
|
|
41
|
+
export declare const peekNewestHistoryPage: (client: QueryClient, scope: HistoryScope) => LoadedHistoryPage | null;
|
|
42
|
+
/** A turn finished: the cached newest page no longer holds the chat's end. */
|
|
43
|
+
export declare const markNewestHistoryPageStale: (client: QueryClient, scope: HistoryScope) => void;
|
|
44
|
+
/** Drop every cached page of one chat (deleted), in any workspace. */
|
|
45
|
+
export declare const forgetSessionHistory: (client: QueryClient, sessionId: string) => void;
|
|
46
|
+
/** Drop every cached page (sign-out). */
|
|
47
|
+
export declare const forgetHistoryCache: (client: QueryClient) => void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SessionUsageBaseline } from '../../stream/select-session-usage.ts';
|
|
2
|
+
/** Turns per history page: a few screens, and a small read even when tool-heavy. */
|
|
3
|
+
export declare const HISTORY_PAGE_MESSAGES = 30;
|
|
4
|
+
export type HistoryPaging = {
|
|
5
|
+
/** A loaded page's first message id → the cursor of the page before it. */
|
|
6
|
+
readonly olderCursorByFirstMessageId: ReadonlyMap<string, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Messages an OLDER page brought in (scrolled to, not opened on). What they
|
|
9
|
+
* hold is history to read: an unanswered question there must not re-arm the
|
|
10
|
+
* question card mid-scroll — it stays answerable from its record.
|
|
11
|
+
*/
|
|
12
|
+
readonly olderPageMessageIds: ReadonlySet<string>;
|
|
13
|
+
/**
|
|
14
|
+
* The chat's usage total from the latest NEWEST-page read — the baseline
|
|
15
|
+
* `selectSessionUsage` adds live turns to. Undefined until a read carried one
|
|
16
|
+
* (an older server never does).
|
|
17
|
+
*/
|
|
18
|
+
readonly sessionUsage: SessionUsageBaseline | null | undefined;
|
|
19
|
+
};
|
|
20
|
+
export declare const NO_HISTORY_PAGING: HistoryPaging;
|
|
21
|
+
export type HistoryPageRead<T extends {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
} = {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
}> = {
|
|
26
|
+
readonly messages: readonly T[];
|
|
27
|
+
/** The next older page's cursor; null once this page reached the start. */
|
|
28
|
+
readonly before: string | null;
|
|
29
|
+
readonly sessionUsage: SessionUsageBaseline | null | undefined;
|
|
30
|
+
};
|
|
31
|
+
/** Remember a page just read; `newest` reads also refresh the usage baseline. */
|
|
32
|
+
export declare const recordHistoryPage: (paging: HistoryPaging, page: HistoryPageRead, newest: boolean) => HistoryPaging;
|
|
33
|
+
/** The conversation without what older pages brought in (see `olderPageMessageIds`). */
|
|
34
|
+
export declare const withoutOlderPages: <T extends {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
}>(paging: HistoryPaging, messages: readonly T[]) => readonly T[];
|
|
37
|
+
/** The cursor of the page before the first message on screen, if there is one. */
|
|
38
|
+
export declare const olderHistoryCursor: (paging: HistoryPaging, messages: readonly {
|
|
39
|
+
readonly id: string;
|
|
40
|
+
}[]) => string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* What a newest-page re-read must leave alone: the older pages the reader
|
|
43
|
+
* scrolled in ABOVE it. Found by the page's first row id; nothing when the
|
|
44
|
+
* page does not line up with the screen (then it is merged as a whole).
|
|
45
|
+
*/
|
|
46
|
+
export declare const splitOlderPrefix: <T extends {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
}>(loaded: readonly {
|
|
49
|
+
readonly id: string;
|
|
50
|
+
}[], current: readonly T[]) => {
|
|
51
|
+
readonly older: readonly T[];
|
|
52
|
+
readonly rest: readonly T[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Put an older page above the conversation. Unless the conversation changed
|
|
56
|
+
* while it was fetched (a clear, a re-read that no longer lines up): then the
|
|
57
|
+
* page is dropped, and the next scroll-up fetches the right one.
|
|
58
|
+
*/
|
|
59
|
+
export declare const prependHistoryPage: <T extends {
|
|
60
|
+
readonly id: string;
|
|
61
|
+
}>(older: readonly T[], current: T[], expectedFirstId: string) => T[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Chat } from '@ai-sdk/react';
|
|
2
|
+
import { DataUIPart } from 'ai';
|
|
3
|
+
import { BelongChatTransport } from '../../stream/belong-chat-transport.ts';
|
|
4
|
+
import { BelongDataParts, BelongUIMessage } from '../../stream/belong-data-parts.ts';
|
|
5
|
+
import { HistoryPaging } from './history-paging.ts';
|
|
6
|
+
/** What the mount showing a chat does with its events. */
|
|
7
|
+
export type LiveChatHandlers = {
|
|
8
|
+
readonly onError: (error: Error) => void;
|
|
9
|
+
readonly onData: (part: DataUIPart<BelongDataParts>) => void;
|
|
10
|
+
};
|
|
11
|
+
export type LiveChat = {
|
|
12
|
+
readonly chat: Chat<BelongUIMessage>;
|
|
13
|
+
readonly transport: BelongChatTransport;
|
|
14
|
+
/**
|
|
15
|
+
* Route the chat's events to the mount showing it, until the returned
|
|
16
|
+
* release. Errors with no mount to show them are dropped: the chat keeps its
|
|
17
|
+
* `error` state for the next mount. Data parts keep reaching the last mount's
|
|
18
|
+
* handler, so a schedule a background turn creates still refreshes the list.
|
|
19
|
+
*/
|
|
20
|
+
readonly show: (handlers: LiveChatHandlers) => () => void;
|
|
21
|
+
readonly isShown: () => boolean;
|
|
22
|
+
/** The older pages the chat's messages hold, so a mount taking it back keeps scrolling up from there. */
|
|
23
|
+
readonly paging: () => HistoryPaging;
|
|
24
|
+
readonly keepPaging: (paging: HistoryPaging) => void;
|
|
25
|
+
/**
|
|
26
|
+
* When each live message was first seen: its clock until history carries
|
|
27
|
+
* one. Kept with the chat so taking it back doesn't restamp every live turn.
|
|
28
|
+
*/
|
|
29
|
+
readonly seenAtMs: Map<string, number>;
|
|
30
|
+
};
|
|
31
|
+
/** The chat kept for a session, whatever state it is in. */
|
|
32
|
+
export declare const peekKeptChat: (workspaceKey: string, sessionId: string) => LiveChat | null;
|
|
33
|
+
/** Keep `live` as the session's chat, the most recently used. */
|
|
34
|
+
export declare const keepLiveChat: (workspaceKey: string, sessionId: string, live: LiveChat) => void;
|
|
35
|
+
/** Drop a session's kept chat (deleted, or cleared elsewhere), in any workspace. */
|
|
36
|
+
export declare const forgetLiveChat: (sessionId: string) => void;
|
|
37
|
+
/** Drop every kept chat (sign-out, or the dock unmounting). */
|
|
38
|
+
export declare const forgetLiveChats: () => void;
|
|
39
|
+
export declare const __resetKeptChatsForTest: () => void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BelongChatTransport } from '../../stream/belong-chat-transport.ts';
|
|
2
|
+
import { BelongUIMessage } from '../../stream/belong-data-parts.ts';
|
|
3
|
+
import { HistoryPaging } from './history-paging.ts';
|
|
4
|
+
import { LiveChat } from './kept-chats.ts';
|
|
5
|
+
export declare const createLiveChat: (input: {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly transport: BelongChatTransport;
|
|
8
|
+
readonly messages?: readonly BelongUIMessage[];
|
|
9
|
+
readonly paging?: HistoryPaging;
|
|
10
|
+
/** A request finished (a turn ended, or its stream closed). */
|
|
11
|
+
readonly onFinish: () => void;
|
|
12
|
+
}) => LiveChat;
|
|
13
|
+
/** The chat kept for a session, when it can be shown as it is. Reads only — safe during render. */
|
|
14
|
+
export declare const findLiveChat: (workspaceKey: string, sessionId: string) => LiveChat | null;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
import { BelongUIMessage } from '../../stream/belong-data-parts.ts';
|
|
3
|
+
import { MessageParts } from '../../stream/message-parts.tsx';
|
|
4
|
+
import { PartRendererExtraPropsInput } from './part-renderer-extra-props.ts';
|
|
5
|
+
/** Separates the part keys in {@link TranscriptRowProps.goalSetPartKeys}. */
|
|
6
|
+
export declare const GOAL_SET_KEY_SEPARATOR = "\n";
|
|
7
|
+
/**
|
|
8
|
+
* The route-level wiring every row shares. `ChatRoute` memoizes it, and each
|
|
9
|
+
* field is stable while nothing it describes changes — a streamed chunk or a
|
|
10
|
+
* keystroke leaves it untouched, so settled rows skip their render.
|
|
11
|
+
*/
|
|
12
|
+
export type TranscriptRowWiring = {
|
|
13
|
+
/** A run is streaming (any message) — gates the plan/goal CTAs. */
|
|
14
|
+
readonly isStreaming: boolean;
|
|
15
|
+
readonly lastUserMessageIndex: number;
|
|
16
|
+
/** The session the feedback route is scoped to; `null` hides the feedback row. */
|
|
17
|
+
readonly feedbackSessionId: string | null;
|
|
18
|
+
/** The message's display time (server-stamped, or first seen live). */
|
|
19
|
+
readonly messageTime: (message: BelongUIMessage) => number;
|
|
20
|
+
readonly onFollowContinuation: ComponentProps<typeof MessageParts>["onFollowContinuation"];
|
|
21
|
+
readonly continueConnectorFor: PartRendererExtraPropsInput["continueConnectorFor"];
|
|
22
|
+
readonly onExecutePlan: () => void;
|
|
23
|
+
readonly hasLiveGoal: boolean;
|
|
24
|
+
readonly goalDoor: PartRendererExtraPropsInput["goalDoor"];
|
|
25
|
+
readonly onOpenGoalView: (() => void) | undefined;
|
|
26
|
+
readonly goalFileCount: number;
|
|
27
|
+
readonly onGoalSchedule: (command: string) => void;
|
|
28
|
+
readonly onGoalGetFiles: (() => void) | undefined;
|
|
29
|
+
readonly onGoalStartAnother: () => void;
|
|
30
|
+
};
|
|
31
|
+
export type TranscriptRowProps = {
|
|
32
|
+
readonly message: BelongUIMessage;
|
|
33
|
+
/** This message's index in the FULL conversation (not the render window). */
|
|
34
|
+
readonly index: number;
|
|
35
|
+
/** The run is streaming into THIS message. */
|
|
36
|
+
readonly streaming: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* This message's "Goal set" receipt keys (`<messageId>:<partId>`), joined by
|
|
39
|
+
* {@link GOAL_SET_KEY_SEPARATOR}: a string, so an unchanged receipt keeps
|
|
40
|
+
* the memo even though the session-wide set is rebuilt on every update.
|
|
41
|
+
*/
|
|
42
|
+
readonly goalSetPartKeys: string;
|
|
43
|
+
/** The user message that started the session's goal ("Sent as goal"). */
|
|
44
|
+
readonly sentAsGoal: boolean;
|
|
45
|
+
/** The refused `/goal` card — only on the message it answers, else `null`. */
|
|
46
|
+
readonly goalRefusalCard: ReactNode;
|
|
47
|
+
readonly wiring: TranscriptRowWiring;
|
|
48
|
+
};
|
|
49
|
+
export declare const TranscriptRow: import('react').NamedExoticComponent<TranscriptRowProps>;
|
|
@@ -38,7 +38,12 @@ export type StartGoalInput = {
|
|
|
38
38
|
* which is normally one the user already settled. Prefer an explicitly pending
|
|
39
39
|
* card; otherwise take the last.
|
|
40
40
|
*/
|
|
41
|
-
export declare const scrollAndFocusPendingCard: (kind: PendingCardKind
|
|
41
|
+
export declare const scrollAndFocusPendingCard: (kind: PendingCardKind,
|
|
42
|
+
/**
|
|
43
|
+
* Where to look: the dock's root. In production that is a SHADOW root,
|
|
44
|
+
* which `document.querySelectorAll` cannot see into.
|
|
45
|
+
*/
|
|
46
|
+
root?: ParentNode) => void;
|
|
42
47
|
/** Every prop `<GoalComposeSheet>` takes — named once so `composeSheet` and
|
|
43
48
|
* `goalDoor.composeSheet` below don't have to repeat the shape. */
|
|
44
49
|
type GoalComposeSheetProps = {
|