@opengeni/react 0.41.0 → 0.44.1

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 (58) hide show
  1. package/dist/{chunk-SJKT4TKW.js → chunk-23EJ676W.js} +3 -1
  2. package/dist/chunk-23EJ676W.js.map +1 -0
  3. package/dist/{chunk-OMCFRWHL.js → chunk-KC27K42G.js} +1443 -101
  4. package/dist/chunk-KC27K42G.js.map +1 -0
  5. package/dist/{chunk-KR2SK5GJ.js → chunk-KG5F2OKE.js} +260 -93
  6. package/dist/chunk-KG5F2OKE.js.map +1 -0
  7. package/dist/{chunk-4IJCL7YO.js → chunk-LWR4MXSS.js} +4 -1
  8. package/dist/chunk-LWR4MXSS.js.map +1 -0
  9. package/dist/{chunk-JALF5FI3.js → chunk-SRFUT2ZU.js} +2 -2
  10. package/dist/{chunk-WZT5G5OR.js → chunk-U6K24XQD.js} +5 -4
  11. package/dist/{chunk-WZT5G5OR.js.map → chunk-U6K24XQD.js.map} +1 -1
  12. package/dist/components/chat-composer.d.ts +5 -1
  13. package/dist/components/composer-transcription-control.d.ts +16 -1
  14. package/dist/components/composer.d.ts +6 -4
  15. package/dist/components/session-chrome.d.ts +1 -1
  16. package/dist/composer.d.ts +3 -1
  17. package/dist/composer.js +29 -3
  18. package/dist/hooks/use-voice-input.d.ts +25 -4
  19. package/dist/index.d.ts +4 -2
  20. package/dist/index.js +95 -20
  21. package/dist/index.js.map +1 -1
  22. package/dist/model-policy.d.ts +2 -0
  23. package/dist/model-policy.js +1 -1
  24. package/dist/realtime/realtime-control.d.ts +29 -1
  25. package/dist/realtime.d.ts +1 -1
  26. package/dist/realtime.js +269 -151
  27. package/dist/realtime.js.map +1 -1
  28. package/dist/session-ui.js +2 -2
  29. package/dist/session.js +2 -2
  30. package/dist/timeline/index.d.ts +1 -1
  31. package/dist/timeline/parsers.d.ts +13 -8
  32. package/dist/voice-recording-owner.d.ts +12 -0
  33. package/dist/voice-recording-store.d.ts +124 -0
  34. package/package.json +2 -2
  35. package/src/components/chat-composer.tsx +58 -19
  36. package/src/components/composer-transcription-control.tsx +258 -117
  37. package/src/components/composer.tsx +78 -14
  38. package/src/components/model-policy-picker.tsx +7 -2
  39. package/src/components/session-chrome.tsx +89 -78
  40. package/src/composer.ts +30 -1
  41. package/src/hooks/use-voice-input.ts +893 -67
  42. package/src/index.ts +32 -1
  43. package/src/model-policy.ts +4 -0
  44. package/src/realtime/realtime-control.tsx +307 -137
  45. package/src/realtime.ts +1 -0
  46. package/src/timeline/index.ts +2 -0
  47. package/src/timeline/parsers.ts +201 -19
  48. package/src/timeline/projection.ts +11 -0
  49. package/src/timeline/tool-renderers.tsx +7 -5
  50. package/src/timeline/turn-summary.tsx +7 -2
  51. package/src/voice-recording-owner.ts +251 -0
  52. package/src/voice-recording-store.ts +528 -0
  53. package/styles/tokens.css +8 -5
  54. package/dist/chunk-4IJCL7YO.js.map +0 -1
  55. package/dist/chunk-KR2SK5GJ.js.map +0 -1
  56. package/dist/chunk-OMCFRWHL.js.map +0 -1
  57. package/dist/chunk-SJKT4TKW.js.map +0 -1
  58. /package/dist/{chunk-JALF5FI3.js.map → chunk-SRFUT2ZU.js.map} +0 -0
package/dist/composer.js CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  Frame,
11
11
  Help,
12
12
  Hint,
13
+ IndexedDbVoiceRecordingStore,
13
14
  Input,
14
15
  ModelPicker2 as ModelPicker,
15
16
  OPEN_WORKSTREAM_CONTROL_EVENT,
@@ -20,11 +21,23 @@ import {
20
21
  SendButton,
21
22
  Status,
22
23
  Surface,
24
+ VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
25
+ VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS,
26
+ VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
27
+ VOICE_RECORDING_TIMESLICE_MILLISECONDS,
28
+ VoiceRecordingChunkConflictError,
29
+ VoiceRecordingChunkSequenceError,
30
+ VoiceRecordingNotFoundError,
31
+ VoiceRecordingOwnedError,
32
+ VoiceRecordingStorageUnavailableError,
33
+ createVoiceRecordingManifest,
23
34
  defaultChatComposerMessages,
35
+ planVoiceRecordingChunkCommit,
36
+ prepareVoiceRecordingChunk,
24
37
  useChatComposer,
25
38
  useChatComposerController,
26
39
  useVoiceInput
27
- } from "./chunk-OMCFRWHL.js";
40
+ } from "./chunk-KC27K42G.js";
28
41
  import "./chunk-Q2NCKWTK.js";
29
42
  import "./chunk-EB67J347.js";
30
43
  import {
@@ -35,9 +48,9 @@ import {
35
48
  PickerBackHeader,
36
49
  PickerNavRow,
37
50
  defaultModelPolicyPickerMessages
38
- } from "./chunk-WZT5G5OR.js";
51
+ } from "./chunk-U6K24XQD.js";
39
52
  import "./chunk-EKZH6IDG.js";
40
- import "./chunk-SJKT4TKW.js";
53
+ import "./chunk-23EJ676W.js";
41
54
  import "./chunk-ATSTR5P3.js";
42
55
  import "./chunk-LAKLF4PA.js";
43
56
  import "./chunk-TK7G6XLT.js";
@@ -54,6 +67,7 @@ export {
54
67
  Frame,
55
68
  Help,
56
69
  Hint,
70
+ IndexedDbVoiceRecordingStore,
57
71
  Input,
58
72
  ModelPicker,
59
73
  ModelPolicyPicker,
@@ -69,8 +83,20 @@ export {
69
83
  SendButton,
70
84
  Status,
71
85
  Surface,
86
+ VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
87
+ VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS,
88
+ VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
89
+ VOICE_RECORDING_TIMESLICE_MILLISECONDS,
90
+ VoiceRecordingChunkConflictError,
91
+ VoiceRecordingChunkSequenceError,
92
+ VoiceRecordingNotFoundError,
93
+ VoiceRecordingOwnedError,
94
+ VoiceRecordingStorageUnavailableError,
95
+ createVoiceRecordingManifest,
72
96
  defaultChatComposerMessages,
73
97
  defaultModelPolicyPickerMessages,
98
+ planVoiceRecordingChunkCommit,
99
+ prepareVoiceRecordingChunk,
74
100
  useChatComposer,
75
101
  useChatComposerController,
76
102
  useVoiceInput
@@ -1,5 +1,6 @@
1
1
  import type { ClientVoiceInputConfig, OpenGeniClient } from "@opengeni/sdk";
2
- export type VoiceInputStatus = "idle" | "requesting-permission" | "recording" | "transcribing" | "error";
2
+ import { type VoiceRecordingStore } from "../voice-recording-store";
3
+ export type VoiceInputStatus = "idle" | "requesting-permission" | "recording" | "saving" | "transcribing" | "recovered" | "transcript-ready" | "error";
3
4
  export type UseVoiceInputOptions = {
4
5
  client: Pick<OpenGeniClient, "transcribeAudio"> | null;
5
6
  workspaceId: string;
@@ -9,6 +10,11 @@ export type UseVoiceInputOptions = {
9
10
  setValue: (value: string) => void;
10
11
  focusInput: () => void;
11
12
  disabled?: boolean | undefined;
13
+ /** Test/embed seam. Production defaults to the origin-scoped IndexedDB store. */
14
+ createRecordingStore?: (() => VoiceRecordingStore) | undefined;
15
+ createRecordingId?: (() => string) | undefined;
16
+ createOwnerId?: (() => string) | undefined;
17
+ now?: (() => Date) | undefined;
12
18
  };
13
19
  export type UseVoiceInputResult = {
14
20
  status: VoiceInputStatus;
@@ -16,10 +22,25 @@ export type UseVoiceInputResult = {
16
22
  available: boolean;
17
23
  /** Live mic stream while recording; null once stopped/cancelled. */
18
24
  stream: MediaStream | null;
25
+ recordingId: string | null;
26
+ durationSeconds: number;
27
+ locallySaved: boolean;
28
+ hasRecoverableRecording: boolean;
29
+ savedTranscript: string | null;
19
30
  start: () => Promise<boolean>;
20
- /** Stop capture and immediately upload/transcribe into the draft (no Send). */
31
+ /** Stop capture, durably settle the final chunk, then transcribe into the draft. */
21
32
  stop: () => void;
22
- /** Discard the in-flight recording or transcription; Escape also cancels. */
33
+ /** Retry finalization/transcription from the already-persisted recording. */
34
+ retry: () => void;
35
+ /** Explicitly insert a durably saved transcript whose prior handoff may be uncertain. */
36
+ insertSavedTranscript: () => Promise<void>;
37
+ /** Cancel active work. A stopped/transcribing recording remains recoverable. */
23
38
  cancel: () => void;
39
+ /** Intentionally delete the current durable recording. */
40
+ discard: () => Promise<void>;
24
41
  };
25
- export declare function useVoiceInput({ client, workspaceId, capability, enabled, value, setValue, focusInput, disabled, }: UseVoiceInputOptions): UseVoiceInputResult;
42
+ export declare const VOICE_RECORDING_TIMESLICE_MILLISECONDS = 5000;
43
+ export declare const VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS = 5000;
44
+ export declare const VOICE_RECORDING_OWNER_STALE_MILLISECONDS = 30000;
45
+ export declare const VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS = 600;
46
+ export declare function useVoiceInput({ client, workspaceId, capability, enabled, value, setValue, focusInput, disabled, createRecordingStore, createRecordingId, createOwnerId, now, }: UseVoiceInputOptions): UseVoiceInputResult;
package/dist/index.d.ts CHANGED
@@ -9,8 +9,10 @@ export { SESSION_EVENT_BROWSER_MAX_BYTES, SESSION_EVENT_BROWSER_MAX_COUNT, SESSI
9
9
  export type { BrowserSessionEventWindow, SessionEventsConnectionState, UseSessionEventsOptions, UseSessionEventsResult, } from "./hooks/use-session-events";
10
10
  export { useComposer, composeSendInput, shouldSteerOnKey, shouldSubmitOnKey, FILE_ONLY_MESSAGE_TEXT, } from "./hooks/use-composer";
11
11
  export type { ComposerSendExtras, ComposerState, UseComposerOptions } from "./hooks/use-composer";
12
- export { useVoiceInput } from "./hooks/use-voice-input";
12
+ export { VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS, VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS, VOICE_RECORDING_OWNER_STALE_MILLISECONDS, VOICE_RECORDING_TIMESLICE_MILLISECONDS, useVoiceInput, } from "./hooks/use-voice-input";
13
13
  export type { UseVoiceInputOptions, UseVoiceInputResult, VoiceInputStatus, } from "./hooks/use-voice-input";
14
+ export { IndexedDbVoiceRecordingStore, VoiceRecordingChunkConflictError, VoiceRecordingChunkSequenceError, VoiceRecordingNotFoundError, VoiceRecordingOwnedError, VoiceRecordingStorageUnavailableError, createVoiceRecordingManifest, planVoiceRecordingChunkCommit, prepareVoiceRecordingChunk, } from "./voice-recording-store";
15
+ export type { PersistVoiceRecordingChunkInput, PersistVoiceRecordingChunkResult, VoiceRecordingCaptureState, VoiceRecordingChunk, VoiceRecordingChunkUploadState, VoiceRecordingFinalizationState, VoiceRecordingManifest, VoiceRecordingStore, VoiceRecordingTranscriptionState, VoiceRecordingUploadState, } from "./voice-recording-store";
14
16
  export { COMPOSER_PAYMENT_REQUIRED_MESSAGE, composerSubmissionErrorMessage } from "./lib/format";
15
17
  export { INITIAL_TRANSCRIPTION_CONTROL_STATE, appendFinalTranscript, transitionTranscriptionControl, useTranscription, } from "./hooks/use-transcription";
16
18
  export type { TranscriptionControlAction, TranscriptionControlState, TranscriptionControlTransition, UseTranscriptionOptions, UseTranscriptionResult, } from "./hooks/use-transcription";
@@ -88,7 +90,7 @@ export { createDefaultToolRegistry, createToolRegistry, defaultToolRegistry, raw
88
90
  export type { CreateToolRegistryOptions, ToolRegistry, ToolRegistryEntry, ToolRenderer, ToolRendererProps, } from "./timeline";
89
91
  export { ActivityDisclosure, ActivityRail, BodyNote, DisclosureDefaultsProvider, LightboxProvider, MediaEmpty, MediaSkeleton, PayloadBlock, ScreenshotFigure, TermBlock, Thumbnail, TurnSummary, BUILT_IN_TURN_SUMMARY_FACET_IDS, useLightbox, useLightboxOptional, } from "./timeline";
90
92
  export type { ActivityDisclosureProps, ActivityRailProps, DisclosureChip, BuiltInTurnSummaryFacetId, TurnOutcome, TurnSummaryContext, TurnSummaryFacet, TurnSummaryFacetConfiguration, TurnSummaryFacetResult, TurnSummaryOptions, TurnSummaryProps, } from "./timeline";
91
- export { applyPatchOps, controlCaret, execTruncated, isApplyPatch, isExecSessionLostBanner, looksBinary, parseExecBannerSessionId, parseToolArgs, redactSecrets, sandboxCommandExitCode, stripExecBanner, tailPeek, unwrapMcpOutput, v4aToGitFileDiff, } from "./timeline";
93
+ export { applyPatchOps, applyPatchOpsFromToolItem, controlCaret, execTruncated, isApplyPatch, isExecSessionLostBanner, looksBinary, parseExecBannerSessionId, parseFreeformApplyPatch, parseToolArgs, redactSecrets, sandboxCommandExitCode, stripExecBanner, tailPeek, unwrapMcpOutput, v4aToGitFileDiff, } from "./timeline";
92
94
  export type { ApplyPatchOperation } from "./timeline";
93
95
  export { argHint, defaultCommands, filterCommands, firstMissingRequiredArg, hasPermission, matchCommand, parseCommandLine, } from "./commands/registry";
94
96
  export type { ParsedCommandLine } from "./commands/registry";
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ import {
52
52
  useSessionLineage,
53
53
  useSessionMcpApprovalPolicy,
54
54
  useTurnQueue
55
- } from "./chunk-JALF5FI3.js";
55
+ } from "./chunk-SRFUT2ZU.js";
56
56
  import {
57
57
  ActivityDisclosure,
58
58
  ActivityRail,
@@ -82,6 +82,7 @@ import {
82
82
  TurnSummary,
83
83
  answersFromDrafts,
84
84
  applyPatchOps,
85
+ applyPatchOpsFromToolItem,
85
86
  controlCaret,
86
87
  copyTextToClipboard,
87
88
  createDefaultToolRegistry,
@@ -94,6 +95,7 @@ import {
94
95
  isExecSessionLostBanner,
95
96
  looksBinary,
96
97
  parseExecBannerSessionId,
98
+ parseFreeformApplyPatch,
97
99
  parseToolArgs,
98
100
  rawTypeOf,
99
101
  redactSecrets,
@@ -107,7 +109,7 @@ import {
107
109
  useLightboxOptional,
108
110
  useThemeType,
109
111
  v4aToGitFileDiff
110
- } from "./chunk-KR2SK5GJ.js";
112
+ } from "./chunk-KG5F2OKE.js";
111
113
  import "./chunk-YDNWMKXO.js";
112
114
  import {
113
115
  buildTimeline,
@@ -116,7 +118,7 @@ import {
116
118
  groupTimeline,
117
119
  sessionStatusFromEvents,
118
120
  toolDisplayName
119
- } from "./chunk-4IJCL7YO.js";
121
+ } from "./chunk-LWR4MXSS.js";
120
122
  import {
121
123
  Actions,
122
124
  AttachButton,
@@ -131,6 +133,7 @@ import {
131
133
  Help,
132
134
  Hint,
133
135
  INITIAL_TRANSCRIPTION_CONTROL_STATE,
136
+ IndexedDbVoiceRecordingStore,
134
137
  Input,
135
138
  ModelPicker,
136
139
  ModelPicker2,
@@ -142,8 +145,18 @@ import {
142
145
  SendButton,
143
146
  Status,
144
147
  Surface,
148
+ VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
149
+ VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS,
150
+ VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
151
+ VOICE_RECORDING_TIMESLICE_MILLISECONDS,
152
+ VoiceRecordingChunkConflictError,
153
+ VoiceRecordingChunkSequenceError,
154
+ VoiceRecordingNotFoundError,
155
+ VoiceRecordingOwnedError,
156
+ VoiceRecordingStorageUnavailableError,
145
157
  appendFinalTranscript,
146
158
  argHint,
159
+ createVoiceRecordingManifest,
147
160
  defaultChatComposerMessages,
148
161
  defaultCommands,
149
162
  filterCommands,
@@ -151,12 +164,14 @@ import {
151
164
  hasPermission,
152
165
  matchCommand,
153
166
  parseCommandLine,
167
+ planVoiceRecordingChunkCommit,
168
+ prepareVoiceRecordingChunk,
154
169
  transitionTranscriptionControl,
155
170
  useChatComposerController,
156
171
  useSlashCommands,
157
172
  useTranscription,
158
173
  useVoiceInput
159
- } from "./chunk-OMCFRWHL.js";
174
+ } from "./chunk-KC27K42G.js";
160
175
  import {
161
176
  FILE_ONLY_MESSAGE_TEXT,
162
177
  composeSendInput,
@@ -177,7 +192,7 @@ import {
177
192
  PickerBackHeader,
178
193
  PickerNavRow,
179
194
  defaultModelPolicyPickerMessages
180
- } from "./chunk-WZT5G5OR.js";
195
+ } from "./chunk-U6K24XQD.js";
181
196
  import {
182
197
  useOpenGeni,
183
198
  useOpenGeniClient
@@ -199,7 +214,7 @@ import {
199
214
  projectPickerRows,
200
215
  runnableLatencyModesForModel,
201
216
  sortPickerRows
202
- } from "./chunk-SJKT4TKW.js";
217
+ } from "./chunk-23EJ676W.js";
203
218
  import {
204
219
  Tooltip,
205
220
  TooltipContent,
@@ -3327,6 +3342,7 @@ function ApprovalSurface({
3327
3342
  }
3328
3343
 
3329
3344
  // src/components/chat-composer.tsx
3345
+ import { LayoutGroup, motion } from "motion/react";
3330
3346
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
3331
3347
  function ChatComposer({
3332
3348
  composer,
@@ -3343,6 +3359,8 @@ function ChatComposer({
3343
3359
  actionsStart,
3344
3360
  attachButtonClassName,
3345
3361
  transcription,
3362
+ transcriptionClassName,
3363
+ transcriptionSuppressed = false,
3346
3364
  header,
3347
3365
  onPaste,
3348
3366
  attachments,
@@ -3384,20 +3402,62 @@ function ChatComposer({
3384
3402
  /* @__PURE__ */ jsx2(Attachments, {}),
3385
3403
  header,
3386
3404
  /* @__PURE__ */ jsx2(Input, { placeholder, autoFocus }),
3387
- controller.confirmState ? /* @__PURE__ */ jsx2(Confirmation, {}) : /* @__PURE__ */ jsxs2(Footer, { className: stackActions ? "flex-wrap" : void 0, children: [
3388
- hasControls ? /* @__PURE__ */ jsxs2(Controls, { className: stackActions ? "w-full sm:w-auto" : void 0, children: [
3389
- controlsLeading,
3390
- /* @__PURE__ */ jsx2(AttachButton, { className: attachButtonClassName }),
3391
- transcription ? /* @__PURE__ */ jsx2(ComposerTranscriptionControl, { ...transcription }) : null,
3392
- models ? /* @__PURE__ */ jsx2(ModelPicker2, { models, value: selectedModel, onChange: onSelectModel }) : null,
3393
- controlsStart
3394
- ] }) : /* @__PURE__ */ jsx2(Hint, { children: hint }),
3395
- /* @__PURE__ */ jsxs2(Actions, { className: stackActions ? "w-full justify-end sm:w-auto" : void 0, children: [
3396
- actionsStart,
3397
- /* @__PURE__ */ jsx2(PauseButton, {}),
3398
- /* @__PURE__ */ jsx2(SendButton, {})
3399
- ] })
3400
- ] })
3405
+ controller.confirmState ? /* @__PURE__ */ jsx2(Confirmation, {}) : /* @__PURE__ */ jsx2(Footer, { className: stackActions ? "max-sm:flex-nowrap sm:flex-wrap" : void 0, children: /* @__PURE__ */ jsxs2(LayoutGroup, { id: "og-composer-footer", children: [
3406
+ hasControls ? /* @__PURE__ */ jsxs2(
3407
+ Controls,
3408
+ {
3409
+ className: stackActions ? "min-w-0 max-sm:flex-1 sm:w-auto" : void 0,
3410
+ children: [
3411
+ controlsLeading,
3412
+ /* @__PURE__ */ jsx2(AttachButton, { className: attachButtonClassName }),
3413
+ transcription ? /* @__PURE__ */ jsx2(
3414
+ ComposerTranscriptionControl,
3415
+ {
3416
+ ...transcription,
3417
+ suppressed: transcriptionSuppressed,
3418
+ className: [transcription.className, transcriptionClassName].filter(Boolean).join(" ")
3419
+ }
3420
+ ) : null,
3421
+ models ? /* @__PURE__ */ jsx2(
3422
+ motion.span,
3423
+ {
3424
+ layout: true,
3425
+ transition: { duration: 0.36, ease: [0.22, 1, 0.36, 1] },
3426
+ className: "inline-flex min-w-0",
3427
+ children: /* @__PURE__ */ jsx2(
3428
+ ModelPicker2,
3429
+ {
3430
+ models,
3431
+ value: selectedModel,
3432
+ onChange: onSelectModel
3433
+ }
3434
+ )
3435
+ }
3436
+ ) : null,
3437
+ controlsStart ? /* @__PURE__ */ jsx2(
3438
+ motion.span,
3439
+ {
3440
+ layout: true,
3441
+ transition: { duration: 0.36, ease: [0.22, 1, 0.36, 1] },
3442
+ className: "inline-flex min-w-0 items-center gap-1.5",
3443
+ children: controlsStart
3444
+ }
3445
+ ) : null
3446
+ ]
3447
+ }
3448
+ ) : /* @__PURE__ */ jsx2(Hint, { children: hint }),
3449
+ /* @__PURE__ */ jsxs2(
3450
+ Actions,
3451
+ {
3452
+ className: stackActions ? "max-sm:shrink-0 sm:w-auto sm:justify-end" : void 0,
3453
+ children: [
3454
+ actionsStart,
3455
+ /* @__PURE__ */ jsx2(PauseButton, {}),
3456
+ /* @__PURE__ */ jsx2(SendButton, {})
3457
+ ]
3458
+ }
3459
+ )
3460
+ ] }) })
3401
3461
  ] })
3402
3462
  ] }),
3403
3463
  /* @__PURE__ */ jsx2(Help, {}),
@@ -8423,6 +8483,7 @@ export {
8423
8483
  HumanInputForm,
8424
8484
  HumanInputSurface,
8425
8485
  INITIAL_TRANSCRIPTION_CONTROL_STATE,
8486
+ IndexedDbVoiceRecordingStore,
8426
8487
  LightboxProvider,
8427
8488
  MACHINE_STATE_BADGE_META,
8428
8489
  METRICS,
@@ -8474,6 +8535,15 @@ export {
8474
8535
  TooltipProvider,
8475
8536
  TooltipTrigger,
8476
8537
  TurnSummary,
8538
+ VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
8539
+ VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS,
8540
+ VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
8541
+ VOICE_RECORDING_TIMESLICE_MILLISECONDS,
8542
+ VoiceRecordingChunkConflictError,
8543
+ VoiceRecordingChunkSequenceError,
8544
+ VoiceRecordingNotFoundError,
8545
+ VoiceRecordingOwnedError,
8546
+ VoiceRecordingStorageUnavailableError,
8477
8547
  WINDOW_LABEL,
8478
8548
  WORKBENCH_SURFACES,
8479
8549
  WORKBENCH_TAB_CHANGES,
@@ -8486,6 +8556,7 @@ export {
8486
8556
  answersFromDrafts,
8487
8557
  appendFinalTranscript,
8488
8558
  applyPatchOps,
8559
+ applyPatchOpsFromToolItem,
8489
8560
  approvalsFromRequiresAction,
8490
8561
  argHint,
8491
8562
  availabilityReasonLabel,
@@ -8502,6 +8573,7 @@ export {
8502
8573
  copyTextToClipboard,
8503
8574
  createDefaultToolRegistry,
8504
8575
  createToolRegistry,
8576
+ createVoiceRecordingManifest,
8505
8577
  creditExhaustedFromEvents,
8506
8578
  defaultApprovalSurfaceMessages,
8507
8579
  defaultChatComposerMessages,
@@ -8548,9 +8620,12 @@ export {
8548
8620
  matchCommand,
8549
8621
  parseCommandLine,
8550
8622
  parseExecBannerSessionId,
8623
+ parseFreeformApplyPatch,
8551
8624
  parseToolArgs,
8552
8625
  payerSummaryForModel,
8626
+ planVoiceRecordingChunkCommit,
8553
8627
  pointsFor,
8628
+ prepareVoiceRecordingChunk,
8554
8629
  projectClientModelRows,
8555
8630
  projectPendingApprovals,
8556
8631
  projectPendingHumanInputRequests,