@belonguniverseai/react-sdk 0.1.8 → 0.2.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.
Files changed (60) hide show
  1. package/README.md +18 -0
  2. package/dist/api/client.d.ts +73 -0
  3. package/dist/app/CallScreen.d.ts +6 -0
  4. package/dist/component/{arc-BZj9pfle.js → arc-RUGz6lZa.js} +2 -2
  5. package/dist/component/{architectureDiagram-3BPJPVTR-DYVPejo6.js → architectureDiagram-3BPJPVTR-BX7ivAYH.js} +3 -3
  6. package/dist/component/{blockDiagram-GPEHLZMM-Cqht4SXD.js → blockDiagram-GPEHLZMM-DkloXJvD.js} +4 -4
  7. package/dist/component/{c4Diagram-AAUBKEIU-Dw8BtNVv.js → c4Diagram-AAUBKEIU-DpMkd-hu.js} +3 -3
  8. package/dist/component/{channel-BcdBKo26.js → channel-CMrJ5FvL.js} +2 -2
  9. package/dist/component/{chunk-2J33WTMH-j6gfAyGs.js → chunk-2J33WTMH-BQFG3l5m.js} +2 -2
  10. package/dist/component/{chunk-4BX2VUAB-DiX7q4eX.js → chunk-4BX2VUAB-DIgdkfba.js} +2 -2
  11. package/dist/component/{chunk-55IACEB6-CgTvaBsI.js → chunk-55IACEB6-kiI_RN43.js} +2 -2
  12. package/dist/component/{chunk-727SXJPM-Bfq_QRBE.js → chunk-727SXJPM-B_3F8LLK.js} +6 -6
  13. package/dist/component/{chunk-AQP2D5EJ-ClrornzZ.js → chunk-AQP2D5EJ-nUpTDfR9.js} +4 -4
  14. package/dist/component/{chunk-FMBD7UC4-WZfa6aDS.js → chunk-FMBD7UC4-C666L1vx.js} +2 -2
  15. package/dist/component/{chunk-ND2GUHAM-Cto8_209.js → chunk-ND2GUHAM-BG3KaNNT.js} +2 -2
  16. package/dist/component/{chunk-QZHKN3VN-CM6Lx0p-.js → chunk-QZHKN3VN-BekfxLxF.js} +2 -2
  17. package/dist/component/{classDiagram-4FO5ZUOK-BdDf650t.js → classDiagram-4FO5ZUOK-BvcPz5Jy.js} +3 -3
  18. package/dist/component/{classDiagram-v2-Q7XG4LA2-BdDf650t.js → classDiagram-v2-Q7XG4LA2-BvcPz5Jy.js} +3 -3
  19. package/dist/component/{cose-bilkent-S5V4N54A-BTkoGwqd.js → cose-bilkent-S5V4N54A-CWpudsgn.js} +2 -2
  20. package/dist/component/{dagre-BM42HDAG-Cm9Q4GTR.js → dagre-BM42HDAG-COUBqMeu.js} +2 -2
  21. package/dist/component/{diagram-2AECGRRQ-BG7WS0_C.js → diagram-2AECGRRQ-Bj90e4r1.js} +3 -3
  22. package/dist/component/{diagram-5GNKFQAL-bAlneREF.js → diagram-5GNKFQAL-D50SBQ3H.js} +4 -4
  23. package/dist/component/{diagram-KO2AKTUF-By1LuXMT.js → diagram-KO2AKTUF-rdkH6sIq.js} +3 -3
  24. package/dist/component/{diagram-LMA3HP47-COR5m3x6.js → diagram-LMA3HP47-BM-uSIwY.js} +3 -3
  25. package/dist/component/{diagram-OG6HWLK6-hxRK9G9i.js → diagram-OG6HWLK6-BYeMl-HB.js} +4 -4
  26. package/dist/component/{erDiagram-TEJ5UH35-8VyxgLye.js → erDiagram-TEJ5UH35-DFEfLVvR.js} +5 -5
  27. package/dist/component/{flowDiagram-I6XJVG4X-GL0-g_NL.js → flowDiagram-I6XJVG4X-C785atDH.js} +7 -7
  28. package/dist/component/{ganttDiagram-6RSMTGT7-CY-pvQs9.js → ganttDiagram-6RSMTGT7-C5H-60U2.js} +3 -3
  29. package/dist/component/{gitGraphDiagram-PVQCEYII-C-banevz.js → gitGraphDiagram-PVQCEYII-ceA5NW8c.js} +4 -4
  30. package/dist/component/{highlighted-body-OFNGDK62-DoKWOEyS.js → highlighted-body-OFNGDK62-CshfJCgW.js} +2 -2
  31. package/dist/component/index.js +2 -2
  32. package/dist/component/{infoDiagram-5YYISTIA-BxrYTrgH.js → infoDiagram-5YYISTIA-C3KMuwje.js} +2 -2
  33. package/dist/component/{ishikawaDiagram-YF4QCWOH-D_ZdaanN.js → ishikawaDiagram-YF4QCWOH-BZFrHmHT.js} +2 -2
  34. package/dist/component/{journeyDiagram-JHISSGLW-CJUxH22Z.js → journeyDiagram-JHISSGLW-BJOlgfUi.js} +5 -5
  35. package/dist/component/{kanban-definition-UN3LZRKU-BYcx0C0k.js → kanban-definition-UN3LZRKU-CfMReYx4.js} +3 -3
  36. package/dist/component/{linear-DXA6Ni38.js → linear-DUkCqmPt.js} +2 -2
  37. package/dist/component/{mermaid-GHXKKRXX-BP0EPCnA.js → mermaid-GHXKKRXX-BOTLFr14.js} +29832 -27959
  38. package/dist/component/{mindmap-definition-RKZ34NQL-DnvW0LPZ.js → mindmap-definition-RKZ34NQL-Bal8oXYU.js} +4 -4
  39. package/dist/component/{pieDiagram-4H26LBE5-DA_l8HVF.js → pieDiagram-4H26LBE5-CCy9iJeT.js} +4 -4
  40. package/dist/component/{quadrantDiagram-W4KKPZXB-CJH3QV2I.js → quadrantDiagram-W4KKPZXB-CZi1MEAc.js} +3 -3
  41. package/dist/component/{requirementDiagram-4Y6WPE33-RQu1NwhU.js → requirementDiagram-4Y6WPE33-irn_x5lf.js} +4 -4
  42. package/dist/component/{sankeyDiagram-5OEKKPKP-DaQ-xlau.js → sankeyDiagram-5OEKKPKP-CX2rM6Rj.js} +2 -2
  43. package/dist/component/{sequenceDiagram-3UESZ5HK-DVuPvNoe.js → sequenceDiagram-3UESZ5HK-DmHw71eT.js} +4 -4
  44. package/dist/component/{stateDiagram-AJRCARHV-CUhrYhQ-.js → stateDiagram-AJRCARHV-3u6GXMEg.js} +3 -3
  45. package/dist/component/{stateDiagram-v2-BHNVJYJU-DJwdiVQa.js → stateDiagram-v2-BHNVJYJU-CbUih_UR.js} +3 -3
  46. package/dist/component/{timeline-definition-PNZ67QCA-vxoNetpl.js → timeline-definition-PNZ67QCA-BAW-94RV.js} +3 -3
  47. package/dist/component/{vennDiagram-CIIHVFJN-B23Eo4r8.js → vennDiagram-CIIHVFJN-IF4AwJuP.js} +2 -2
  48. package/dist/component/{wardleyDiagram-YWT4CUSO-CHPIaRL_.js → wardleyDiagram-YWT4CUSO-Bn-uAkHk.js} +3 -3
  49. package/dist/component/{xychartDiagram-2RQKCTM6-gaiGaKCA.js → xychartDiagram-2RQKCTM6-CvPY-qXp.js} +3 -3
  50. package/dist/embed/approval-bus.d.ts +3 -0
  51. package/dist/embed/voice/line-dispatch.d.ts +20 -0
  52. package/dist/embed/voice/line-run-reader.d.ts +42 -0
  53. package/dist/embed/voice/realtime-call.d.ts +51 -0
  54. package/dist/embed/voice-bus.d.ts +2 -1
  55. package/dist/embed/voice-call-lines.d.ts +31 -0
  56. package/dist/embed/voice-call-pacing.d.ts +80 -0
  57. package/dist/embed/voice-call.d.ts +210 -0
  58. package/dist/i18n/messages/en.d.ts +64 -0
  59. package/dist/types/public.d.ts +23 -0
  60. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ import { AgentLineStatus } from './voice-call-lines.ts';
2
+ export type CallStatus = "idle" | "connecting" | "in_call" | "error";
3
+ /**
4
+ * One row of the call's execution timeline (the CallScreen activity card):
5
+ * what the user said, what the voice agent said, each step the Belong agent
6
+ * took, and the success/completion marker. `atMs` is wall-clock; the screen
7
+ * renders it relative to `callStartedAtMs` (00:02-style).
8
+ */
9
+ export type CallTimelineEntry = {
10
+ readonly id: number;
11
+ readonly atMs: number;
12
+ readonly kind: "user" | "agent" | "step" | "success" | "error" | "skill" | "schedule";
13
+ readonly text: string;
14
+ /** Agent tag for Operator-mode rows (e.g. "A2"); absent for foreground rows. */
15
+ readonly lineTag?: string;
16
+ };
17
+ export type CallState = {
18
+ readonly status: CallStatus;
19
+ readonly muted: boolean;
20
+ /** Screen dismissed while the call keeps running (audio + timeline live on;
21
+ * the rail button restores the view). Header ✕ minimizes — it must NOT
22
+ * hang up: ✕ means "dismiss this view" everywhere else in the dock. */
23
+ readonly minimized: boolean;
24
+ /** Live caption of what the USER last said (server-side transcription). */
25
+ readonly userCaption: string;
26
+ /** Live caption of what the model is SAYING (output transcript deltas). */
27
+ readonly assistantCaption: string;
28
+ /** True from a send_to_belong_agent dispatch until its reply is delivered. */
29
+ readonly agentBusy: boolean;
30
+ /** Current tool phase of the delegated run (drives the orb's work badge). */
31
+ readonly workPhase: "coding" | "files" | "actions" | null;
32
+ /** True while the voice model is producing a spoken response. */
33
+ readonly speaking: boolean;
34
+ /** True between the user finishing an utterance and the model responding —
35
+ * the "Thinking…" window on the call screen. */
36
+ readonly thinking: boolean;
37
+ /** Wall-clock start of the current call; 0 while idle. */
38
+ readonly callStartedAtMs: number;
39
+ /** Rolling execution timeline, oldest first (capped). */
40
+ readonly timeline: readonly CallTimelineEntry[];
41
+ readonly errorMessage?: string;
42
+ };
43
+ /**
44
+ * ChatRoute pushes Belong-agent progress into the call timeline (tool-phase
45
+ * steps while a delegated run streams). No-op when no call is active.
46
+ */
47
+ export declare const pushCallStep: (text: string) => void;
48
+ /** ChatRoute surfaces call-relevant notices (skill lookup misses, catalog
49
+ * failures) on the timeline so the user can SEE why nothing ran. */
50
+ export declare const pushCallNotice: (kind: "step" | "error", text: string) => void;
51
+ /** Hard ceiling on the rendered digest — a compact recap, not a transcript. */
52
+ export declare const CONTEXT_DIGEST_MAX_CHARS = 1000;
53
+ /**
54
+ * Pure core: render the most recent `user`/`agent` timeline entries (up to
55
+ * {@link CONTEXT_DIGEST_MAX_ENTRIES}) as `User: …` / `Agent: …` lines, oldest
56
+ * first, capped at {@link CONTEXT_DIGEST_MAX_CHARS}. Each entry's text is
57
+ * already capped by `appendTimeline` (`TIMELINE_TEXT_MAX_CHARS`), so this only
58
+ * caps the JOINED digest. Returns `""` when there are no such entries.
59
+ * Exported standalone (no store dependency) so it gets a direct unit test —
60
+ * `buildCallContextDigest` below is the store's zero-arg wrapper over it.
61
+ */
62
+ export declare const buildContextDigestFromEntries: (entries: readonly CallTimelineEntry[]) => string;
63
+ /** Store wrapper: the call's own timeline, digested. line-dispatch.ts calls
64
+ * this for every background-line dispatch. */
65
+ export declare const buildCallContextDigest: () => string;
66
+ export declare const peekCallState: () => CallState;
67
+ export declare const subscribeCallState: (listener: () => void) => (() => void);
68
+ /**
69
+ * ChatRoute subscribes here: each fired request travels the normal message
70
+ * pipeline (the same path a typed turn takes), keeping runs durable and
71
+ * on-ledger. The unsubscribe teardown mirrors `subscribeTranscript`.
72
+ */
73
+ export declare const subscribeCallDelegate: (listener: (requestText: string) => void) => (() => void);
74
+ /**
75
+ * Voice approvals: the realtime model's `resolve_approval` tool fans out
76
+ * here; ChatRoute resolves the pending approval card through the SAME
77
+ * server-authoritative path the on-screen buttons use (§28 — the backend
78
+ * still validates its own preconditions).
79
+ */
80
+ export declare const subscribeCallApprovalDecision: (listener: (decision: "approved" | "rejected") => void) => (() => void);
81
+ export type CallSkillInvokeResult = {
82
+ readonly status: "dispatched";
83
+ readonly skill: string;
84
+ readonly text: string;
85
+ } | {
86
+ readonly status: "candidates";
87
+ readonly candidates: readonly {
88
+ readonly name: string;
89
+ readonly description: string;
90
+ }[];
91
+ }
92
+ /** The catalog loaded fine and is genuinely empty — a valid tenant state,
93
+ * NOT a failure ("no skills configured" ≠ "couldn't load"). */
94
+ | {
95
+ readonly status: "empty";
96
+ } | {
97
+ readonly status: "unavailable";
98
+ };
99
+ export declare const registerCallSkillResolver: (resolver: (req: {
100
+ readonly query: string;
101
+ readonly args: string;
102
+ }) => CallSkillInvokeResult) => (() => void);
103
+ export declare const registerCallScheduleDispatcher: (dispatcher: (req: {
104
+ readonly time: string;
105
+ readonly task: string;
106
+ }) => void) => (() => void);
107
+ declare let lineDispatcher: ((req: {
108
+ readonly line: number;
109
+ readonly request: string;
110
+ readonly label: string;
111
+ readonly isNewLine: boolean;
112
+ }) => void) | null;
113
+ export declare const registerCallLineDispatcher: (dispatcher: NonNullable<typeof lineDispatcher>) => (() => void);
114
+ export declare const registerCallLineViewSwitcher: (switcher: (sessionId: string) => void) => (() => void);
115
+ /**
116
+ * ChatRoute calls this when a tool-approval card appears while a call is
117
+ * live: the ask lands on the timeline and the voice model asks the user to
118
+ * approve or reject out loud.
119
+ */
120
+ export declare const notifyCallApprovalRequired: (timelineText: string) => void;
121
+ /** Live speech level, 0..1 (max of agent voice + user mic). */
122
+ export declare const peekCallAudioLevel: () => number;
123
+ /** ChatRoute reports a tool-phase change on the delegated run — the strongest
124
+ * progress signal, spoken (rate-limited) and already on the timeline. */
125
+ export declare const notifyCallProgress: (hint: string) => void;
126
+ /** ChatRoute mirrors the run's current tool phase — the orb wears it as a
127
+ * small work badge while the agent is busy. */
128
+ export declare const setCallWorkPhase: (phase: CallState["workPhase"]) => void;
129
+ /**
130
+ * Click-path twin of `show_agent_line`: the lines strip chip on CallScreen
131
+ * calls this directly (no tool-call round trip, no ack). No-op when the line
132
+ * is unknown, never bound to a session, or no view switcher is registered
133
+ * (e.g. ChatRoute hasn't mounted).
134
+ */
135
+ export declare const showLineOnScreen: (line: number) => void;
136
+ export declare const startCall: () => Promise<void>;
137
+ export declare const endCall: () => void;
138
+ export declare const toggleCallMuted: () => void;
139
+ /** Dismiss a sticky error state (the overlay's ✕). */
140
+ export declare const dismissCallError: () => void;
141
+ /** Hide the call screen without ending the call (header ✕ / Escape). */
142
+ export declare const minimizeCallScreen: () => void;
143
+ /** Bring a minimized call screen back (the rail's in-call button). */
144
+ export declare const restoreCallScreen: () => void;
145
+ /**
146
+ * ChatRoute calls this when the delegated run finishes: the assistant's final
147
+ * text rides into the call as a system message and the model narrates it.
148
+ * No-op when the call has ended meanwhile — the reply is still on screen.
149
+ */
150
+ export declare const deliverAgentReply: (text: string) => void;
151
+ /**
152
+ * ChatRoute calls this when the delegated run FAILS (stream error, run_error).
153
+ * Without it the call stays silently "Working…" forever — the voice agent
154
+ * must tell the user something went wrong and offer to retry.
155
+ */
156
+ export declare const deliverAgentFailure: (message: string) => void;
157
+ /** A background line finished: relay its final text, naming the line. */
158
+ export declare const deliverLineReply: (line: number, text: string) => void;
159
+ /**
160
+ * A background line published an artifact: OPEN it on screen, mirroring
161
+ * chat.tsx's foreground auto-open effect exactly — ALWAYS docked (a persisted
162
+ * fullscreen pref would swallow the whole app), the same closable/resizable
163
+ * panel a click on the artifact card gives. Deduped per artifactId (replays /
164
+ * reconnects re-emit the part). NO spoken response: the line's finish reply
165
+ * already narrates the result; a second voice line would double-speak.
166
+ */
167
+ export declare const deliverLineArtifact: (line: number, artifact: {
168
+ readonly artifactId: string;
169
+ readonly title: string;
170
+ readonly mimeType: string;
171
+ }) => void;
172
+ /** A background line failed: tell the user, naming the agent. */
173
+ export declare const deliverLineFailure: (line: number, message: string) => void;
174
+ /** A background line is blocked on a tool approval — steer the user to it. */
175
+ export declare const notifyLineApprovalNeeded: (line: number, timelineText: string) => void;
176
+ /** A background line advanced a phase — land a tagged row + a spoken nudge.
177
+ * Guarded like its delivery siblings: a stale phase from an ended call (there
178
+ * is no registry write here) must not touch a new call's timeline. */
179
+ export declare const notifyLinePhase: (line: number, phaseLabel: string) => void;
180
+ /** True while a call holds the audio path — ChatRoute gates TTS autoplay on it. */
181
+ export declare const isCallActive: () => boolean;
182
+ /**
183
+ * TEST-ONLY (window.belong.__forceCallState): force the call store into a
184
+ * given visual state WITHOUT any WebRTC/mic — drives the CallScreen + rail
185
+ * animations in E2E and sandboxed browsers where getUserMedia is unavailable.
186
+ * Never touches the transport; ending the forced state is `endCall()`.
187
+ */
188
+ export declare const __forceCallState: (patch: Partial<CallState>) => void;
189
+ /** TEST-ONLY companion: append a timeline row while in a forced state. */
190
+ export declare const __forceCallTimelineEntry: (kind: CallTimelineEntry["kind"], text: string, lineTag?: string) => void;
191
+ /** TEST-ONLY companion: drive the orb's audio level without Web Audio. */
192
+ export declare const __forceCallAudioLevel: (level: number) => void;
193
+ /**
194
+ * TEST-ONLY (window.belong.__forceAgentLines): force the agent-lines
195
+ * switchboard into a given state WITHOUT any HTTP dispatch — drives the
196
+ * CallScreen lines strip in E2E and sandboxed browsers. Resets the registry,
197
+ * then replays the same store calls a live Operator run makes: `openAgentLine`
198
+ * to create each background line (sequential, mirroring real dispatch),
199
+ * `bindLineSession` + `setLineStatus` to fill it in. Line 1 is the existing
200
+ * foreground line and is updated in place rather than opened. Entries are
201
+ * replayed in ascending `line` order regardless of input order, so lines 2/3
202
+ * always land on their expected slots.
203
+ */
204
+ export declare const __forceAgentLines: (forced: readonly {
205
+ line: number;
206
+ label: string;
207
+ status: AgentLineStatus;
208
+ sessionId?: string;
209
+ }[]) => void;
210
+ export {};
@@ -419,6 +419,70 @@ export declare const en: {
419
419
  readonly stopSpeaking: "Stop speaking";
420
420
  readonly micError: "Microphone error";
421
421
  };
422
+ readonly callOverlay: {
423
+ readonly connecting: "Calling…";
424
+ readonly live: "Live call";
425
+ readonly agentWorking: "Belong agent is working…";
426
+ readonly mute: "Mute microphone";
427
+ readonly unmute: "Unmute microphone";
428
+ readonly endCall: "End call";
429
+ readonly dismiss: "Dismiss";
430
+ readonly startCall: "Start voice call";
431
+ };
432
+ readonly callScreen: {
433
+ readonly title: "Voice call";
434
+ readonly connecting: "Connecting the call…";
435
+ readonly listening: "Listening";
436
+ readonly speaking: "Speaking";
437
+ readonly working: "Working on it…";
438
+ readonly muted: "Mic muted";
439
+ readonly youSaid: "You said";
440
+ readonly agentSaid: "Agent";
441
+ readonly step: "Working";
442
+ readonly done: "Done";
443
+ readonly failed: "Failed";
444
+ readonly speakHint: "Speak to the agent…";
445
+ readonly readyHint: "I'm listening — speak when you're ready.";
446
+ readonly thinkingHint: "Thinking…";
447
+ readonly speakingHint: "Speaking…";
448
+ readonly workingWithBelong: "Working with the Belong agent…";
449
+ readonly close: "Hide call view";
450
+ readonly returnToCall: "Return to call";
451
+ readonly retry: "Call again";
452
+ readonly viewChat: "View chat";
453
+ readonly approvalNeeded: "Approval needed — say approve or reject";
454
+ readonly approvedByVoice: "Approved by voice";
455
+ readonly rejectedByVoice: "Rejected by voice";
456
+ readonly openedArtifact: "Opened {{title}} on screen";
457
+ readonly skill: "Skill";
458
+ readonly schedule: "Scheduled";
459
+ readonly skillNotFound: "No exact skill match for “{{query}}”";
460
+ readonly skillCatalogUnavailable: "Skill catalog unavailable — retrying";
461
+ readonly noSkillsConfigured: "No skills configured in this workspace";
462
+ readonly phaseCoding: "Writing code";
463
+ readonly phaseFiles: "Working with files";
464
+ readonly phaseActions: "Taking actions";
465
+ readonly lines: "Agents";
466
+ readonly lineLabel: "Agent {{line}}";
467
+ readonly mainAgentLabel: "Main agent";
468
+ readonly lineNeedsApproval: "needs approval";
469
+ readonly lineWorking: "working";
470
+ readonly lineReady: "ready";
471
+ readonly lineFailed: "failed";
472
+ readonly ambientTypingCode: "Typing code…";
473
+ readonly ambientReviewingDiff: "Reviewing the diff…";
474
+ readonly ambientRunningChecks: "Running checks…";
475
+ readonly ambientSearchingFiles: "Searching files…";
476
+ readonly ambientReadingDocuments: "Reading documents…";
477
+ readonly ambientOrganizingResults: "Organizing results…";
478
+ readonly ambientClickingThrough: "Clicking through…";
479
+ readonly ambientFillingDetails: "Filling in details…";
480
+ readonly ambientCheckingResult: "Checking the result…";
481
+ readonly ambientThinkingItThrough: "Thinking it through…";
482
+ readonly ambientSearching: "Searching…";
483
+ readonly ambientTyping: "Typing…";
484
+ readonly ambientDoubleChecking: "Double-checking…";
485
+ };
422
486
  readonly chat: {
423
487
  readonly queued: "Queued";
424
488
  readonly notDelivered: "Not delivered — please resend";
@@ -234,6 +234,29 @@ export type BelongGlobal = {
234
234
  readonly registerUiAction: <I, O>(name: string, handler: UiActionHandler<I, O>) => void;
235
235
  /** TEST-ONLY: inject a final voice transcript as if spoken. */
236
236
  readonly __pushVoiceTranscript?: (text: string) => void;
237
+ /** TEST-ONLY: force the live-call visual state (no WebRTC/mic involved). */
238
+ readonly __forceCallState?: (patch: {
239
+ status?: "idle" | "connecting" | "in_call" | "error";
240
+ muted?: boolean;
241
+ userCaption?: string;
242
+ assistantCaption?: string;
243
+ agentBusy?: boolean;
244
+ workPhase?: "coding" | "files" | "actions" | null;
245
+ speaking?: boolean;
246
+ thinking?: boolean;
247
+ errorMessage?: string;
248
+ }) => void;
249
+ /** TEST-ONLY: append a live-call timeline row. */
250
+ readonly __forceCallTimelineEntry?: (kind: "user" | "agent" | "step" | "success" | "error" | "skill" | "schedule", text: string, lineTag?: string) => void;
251
+ /** TEST-ONLY: drive the call orb's audio level (0..1) without Web Audio. */
252
+ readonly __forceCallAudioLevel?: (level: number) => void;
253
+ /** TEST-ONLY: force the agent-lines switchboard state without HTTP dispatch. */
254
+ readonly __forceAgentLines?: (lines: readonly {
255
+ line: number;
256
+ label: string;
257
+ status: "working" | "ready" | "failed" | "needs_approval";
258
+ sessionId?: string;
259
+ }[]) => void;
237
260
  };
238
261
  declare global {
239
262
  var belong: BelongGlobal | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@belonguniverseai/react-sdk",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "Belong — embeddable React AI assistant dock. Mount <BelongWidget> in your app tree with getToken dependency-injection auth.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",