@belonguniverseai/react-sdk 0.1.6 → 0.1.8

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 (100) hide show
  1. package/README.md +1 -1
  2. package/dist/api/agent-grants.d.ts +18 -23
  3. package/dist/api/client.d.ts +1049 -30
  4. package/dist/api/query-keys.d.ts +5 -0
  5. package/dist/api/task-schedules.d.ts +313 -0
  6. package/dist/app/dock-outlet.d.ts +18 -0
  7. package/dist/component/{arc-CTDwT0LX.js → arc-BZj9pfle.js} +2 -2
  8. package/dist/component/{architectureDiagram-3BPJPVTR-osyB2zKw.js → architectureDiagram-3BPJPVTR-DYVPejo6.js} +3 -3
  9. package/dist/component/{blockDiagram-GPEHLZMM-ChWpzkC_.js → blockDiagram-GPEHLZMM-Cqht4SXD.js} +4 -4
  10. package/dist/component/{c4Diagram-AAUBKEIU-TBt2Sr1T.js → c4Diagram-AAUBKEIU-Dw8BtNVv.js} +3 -3
  11. package/dist/component/{channel-DKYVGzgk.js → channel-BcdBKo26.js} +2 -2
  12. package/dist/component/{chunk-2J33WTMH-D-qMyfG9.js → chunk-2J33WTMH-j6gfAyGs.js} +2 -2
  13. package/dist/component/{chunk-4BX2VUAB-BYTeOCro.js → chunk-4BX2VUAB-DiX7q4eX.js} +2 -2
  14. package/dist/component/{chunk-55IACEB6-CkLaQSjG.js → chunk-55IACEB6-CgTvaBsI.js} +2 -2
  15. package/dist/component/{chunk-727SXJPM-CzkWgEIS.js → chunk-727SXJPM-Bfq_QRBE.js} +6 -6
  16. package/dist/component/{chunk-AQP2D5EJ-d-zIc-67.js → chunk-AQP2D5EJ-ClrornzZ.js} +4 -4
  17. package/dist/component/{chunk-FMBD7UC4-amGyEMTp.js → chunk-FMBD7UC4-WZfa6aDS.js} +2 -2
  18. package/dist/component/{chunk-ND2GUHAM-DjPCor9N.js → chunk-ND2GUHAM-Cto8_209.js} +2 -2
  19. package/dist/component/{chunk-QZHKN3VN-B0LrqJFz.js → chunk-QZHKN3VN-CM6Lx0p-.js} +2 -2
  20. package/dist/component/{classDiagram-4FO5ZUOK-BLW37dmc.js → classDiagram-4FO5ZUOK-BdDf650t.js} +3 -3
  21. package/dist/component/{classDiagram-v2-Q7XG4LA2-BLW37dmc.js → classDiagram-v2-Q7XG4LA2-BdDf650t.js} +3 -3
  22. package/dist/component/{cose-bilkent-S5V4N54A-BrAZZB3S.js → cose-bilkent-S5V4N54A-BTkoGwqd.js} +2 -2
  23. package/dist/component/{dagre-BM42HDAG-lt_pmFeQ.js → dagre-BM42HDAG-Cm9Q4GTR.js} +2 -2
  24. package/dist/component/{diagram-2AECGRRQ-DfMdC1rS.js → diagram-2AECGRRQ-BG7WS0_C.js} +3 -3
  25. package/dist/component/{diagram-5GNKFQAL-CORXCu1y.js → diagram-5GNKFQAL-bAlneREF.js} +4 -4
  26. package/dist/component/{diagram-KO2AKTUF-Dt8oiVky.js → diagram-KO2AKTUF-By1LuXMT.js} +3 -3
  27. package/dist/component/{diagram-LMA3HP47-Bu-XSRd6.js → diagram-LMA3HP47-COR5m3x6.js} +3 -3
  28. package/dist/component/{diagram-OG6HWLK6-DiOgJz8h.js → diagram-OG6HWLK6-hxRK9G9i.js} +4 -4
  29. package/dist/component/dock-error-boundary.d.ts +16 -0
  30. package/dist/component/{erDiagram-TEJ5UH35-DSrXX--n.js → erDiagram-TEJ5UH35-8VyxgLye.js} +5 -5
  31. package/dist/component/{flowDiagram-I6XJVG4X-D1E_ZfMU.js → flowDiagram-I6XJVG4X-GL0-g_NL.js} +7 -7
  32. package/dist/component/{ganttDiagram-6RSMTGT7-BzGCGwAi.js → ganttDiagram-6RSMTGT7-CY-pvQs9.js} +3 -3
  33. package/dist/component/{gitGraphDiagram-PVQCEYII-C6qUOG7K.js → gitGraphDiagram-PVQCEYII-C-banevz.js} +4 -4
  34. package/dist/component/{highlighted-body-OFNGDK62-D1SvZ8C_.js → highlighted-body-OFNGDK62-DoKWOEyS.js} +2 -2
  35. package/dist/component/index-Dips44uG.js +2208 -0
  36. package/dist/component/index.js +2 -2
  37. package/dist/component/{infoDiagram-5YYISTIA-D0l96um1.js → infoDiagram-5YYISTIA-BxrYTrgH.js} +2 -2
  38. package/dist/component/{ishikawaDiagram-YF4QCWOH-BDHAOBaC.js → ishikawaDiagram-YF4QCWOH-D_ZdaanN.js} +2 -2
  39. package/dist/component/{journeyDiagram-JHISSGLW-BtN73bIc.js → journeyDiagram-JHISSGLW-CJUxH22Z.js} +5 -5
  40. package/dist/component/{kanban-definition-UN3LZRKU-Dll6IAhM.js → kanban-definition-UN3LZRKU-BYcx0C0k.js} +3 -3
  41. package/dist/component/{linear-ChreRr3h.js → linear-DXA6Ni38.js} +2 -2
  42. package/dist/component/{mermaid-GHXKKRXX-C0Oq2bpl.js → mermaid-GHXKKRXX-BP0EPCnA.js} +36000 -32444
  43. package/dist/component/{mindmap-definition-RKZ34NQL-DC9K87bN.js → mindmap-definition-RKZ34NQL-DnvW0LPZ.js} +4 -4
  44. package/dist/component/{pieDiagram-4H26LBE5-BNGHaTmE.js → pieDiagram-4H26LBE5-DA_l8HVF.js} +4 -4
  45. package/dist/component/{quadrantDiagram-W4KKPZXB-D23AXzE2.js → quadrantDiagram-W4KKPZXB-CJH3QV2I.js} +3 -3
  46. package/dist/component/{requirementDiagram-4Y6WPE33-DRe6Bcy7.js → requirementDiagram-4Y6WPE33-RQu1NwhU.js} +4 -4
  47. package/dist/component/{sankeyDiagram-5OEKKPKP-Ca--29t-.js → sankeyDiagram-5OEKKPKP-DaQ-xlau.js} +2 -2
  48. package/dist/component/{sequenceDiagram-3UESZ5HK-Cv6WVN5T.js → sequenceDiagram-3UESZ5HK-DVuPvNoe.js} +4 -4
  49. package/dist/component/{stateDiagram-AJRCARHV-Ba_3WUjf.js → stateDiagram-AJRCARHV-CUhrYhQ-.js} +3 -3
  50. package/dist/component/{stateDiagram-v2-BHNVJYJU-C8G1MQa8.js → stateDiagram-v2-BHNVJYJU-DJwdiVQa.js} +3 -3
  51. package/dist/component/{timeline-definition-PNZ67QCA-Bfh6fz9g.js → timeline-definition-PNZ67QCA-vxoNetpl.js} +3 -3
  52. package/dist/component/{vennDiagram-CIIHVFJN-D1U-PuFV.js → vennDiagram-CIIHVFJN-B23Eo4r8.js} +2 -2
  53. package/dist/component/{wardleyDiagram-YWT4CUSO-DTwXmrGn.js → wardleyDiagram-YWT4CUSO-CHPIaRL_.js} +3 -3
  54. package/dist/component/{xychartDiagram-2RQKCTM6-Dy8C7cbo.js → xychartDiagram-2RQKCTM6-gaiGaKCA.js} +3 -3
  55. package/dist/components/embed/AgentGrantAutoConnect.d.ts +1 -0
  56. package/dist/components/embed/CapabilityHints.d.ts +4 -1
  57. package/dist/components/embed/EmbedConversation.d.ts +11 -11
  58. package/dist/components/embed/EmbedRail.d.ts +1 -1
  59. package/dist/components/embed/FilePreview.d.ts +7 -2
  60. package/dist/components/embed/FilePreviewDialog.d.ts +6 -2
  61. package/dist/components/embed/HtmlPreviewFrame.d.ts +7 -0
  62. package/dist/components/embed/MentionInput.d.ts +8 -1
  63. package/dist/components/embed/PreviewContent.d.ts +9 -21
  64. package/dist/components/embed/WelcomeIntro.d.ts +5 -3
  65. package/dist/components/embed/WelcomeSkills.d.ts +7 -0
  66. package/dist/components/embed/file-preview-kind.d.ts +7 -3
  67. package/dist/components/embed/onboarding-story-dock.d.ts +5 -2
  68. package/dist/components/embed/preview-content-kind.d.ts +5 -7
  69. package/dist/components/embed/use-inline-preview-url.d.ts +20 -0
  70. package/dist/components/scheduled/ConfirmDeleteScheduleDialog.d.ts +7 -0
  71. package/dist/components/scheduled/ScheduleDialog.d.ts +13 -0
  72. package/dist/components/scheduled/ScheduledDetailSurface.d.ts +8 -0
  73. package/dist/components/scheduled/ScheduledListSurface.d.ts +7 -0
  74. package/dist/components/scheduled/TimezoneCombobox.d.ts +7 -0
  75. package/dist/components/scheduled/schedule-dialog-model.d.ts +11 -0
  76. package/dist/components/scheduled/schedule-format.d.ts +38 -0
  77. package/dist/components/ui/button.d.ts +3 -2
  78. package/dist/embed/agent-grant-refresh.d.ts +7 -7
  79. package/dist/embed/composer-submit.d.ts +7 -0
  80. package/dist/embed/copy.d.ts +92 -15
  81. package/dist/embed/dock-state.d.ts +1 -1
  82. package/dist/embed/slash-commands.d.ts +20 -6
  83. package/dist/embed/task-schedule-command.d.ts +32 -0
  84. package/dist/embed/task-schedule-store.d.ts +29 -0
  85. package/dist/embed/theme-preview-params.d.ts +2 -0
  86. package/dist/embed/voice-narration.d.ts +15 -0
  87. package/dist/i18n/messages/en.d.ts +106 -22
  88. package/dist/i18n/messages/surfaces/embedMisc.d.ts +0 -12
  89. package/dist/i18n/messages/surfaces/header.d.ts +9 -0
  90. package/dist/i18n/messages/surfaces/scheduled.d.ts +253 -0
  91. package/dist/lib/use-debounced-value.d.ts +2 -0
  92. package/dist/lib/use-effect-event.d.ts +13 -0
  93. package/dist/routes/chat.d.ts +3 -2
  94. package/dist/routes/scheduled-detail.d.ts +2 -0
  95. package/dist/routes/scheduled.d.ts +2 -0
  96. package/dist/stream/stream-state-store.d.ts +9 -0
  97. package/dist/types/public.d.ts +44 -9
  98. package/package.json +3 -3
  99. package/dist/components/embed/AgentGrantCard.d.ts +0 -27
  100. package/dist/i18n/messages/surfaces/agentGrant.d.ts +0 -58
@@ -1,6 +1,20 @@
1
1
  import { Locale } from './locale.ts';
2
- import { TourStep, TourStepId } from './onboarding-steps.ts';
3
- export type WelcomeCapabilityIcon = "exchange" | "command" | "microphone";
2
+ import { DockCopyOverride } from '../types/public.ts';
3
+ import { TourStep } from './onboarding-steps.ts';
4
+ /** The two copy flavors — Simetrik tenant vs any other (generic Belong) brand. */
5
+ export type DockCopyVariant = "simetrik" | "generic";
6
+ /** Resolve the copy variant from the theme brand name ("Simetrik" — the
7
+ * built-in preset brand or a host-pushed brand with the same name). */
8
+ export declare const dockCopyVariant: (brandName: string) => DockCopyVariant;
9
+ export type WelcomeCapabilityIcon = "exchange" | "command" | "microphone" | "sliders" | "files" | "pointer";
10
+ /** A welcome-card capability line; label takes the voice key label (only the
11
+ * microphone line uses it — the others ignore the argument). */
12
+ export type WelcomeCapability = {
13
+ readonly icon: WelcomeCapabilityIcon;
14
+ readonly label: (voiceKeyLabel: string) => string;
15
+ };
16
+ /** The RESOLVED welcome-card copy `OnboardingWelcome` renders — flat strings,
17
+ * produced by {@link resolveWelcomeCardCopy} from locale + variant + hotkey. */
4
18
  export type WelcomeCardCopy = {
5
19
  readonly greeting: (brandName: string) => string;
6
20
  readonly subtitle: string;
@@ -13,6 +27,16 @@ export type WelcomeCardCopy = {
13
27
  readonly close: string;
14
28
  readonly languageHint: string;
15
29
  };
30
+ /** The per-locale welcome-card CONTENT — variant-keyed, hotkey-parameterized. */
31
+ type WelcomeCardContent = {
32
+ readonly greeting: (brandName: string) => string;
33
+ readonly subtitle: Readonly<Record<DockCopyVariant, string>>;
34
+ readonly capabilities: Readonly<Record<DockCopyVariant, readonly WelcomeCapability[]>>;
35
+ readonly tourCta: string;
36
+ readonly skipCta: string;
37
+ readonly close: string;
38
+ readonly languageHint: string;
39
+ };
16
40
  export type TourLabels = {
17
41
  readonly counter: (current: number, total: number) => string;
18
42
  readonly back: string;
@@ -20,11 +44,18 @@ export type TourLabels = {
20
44
  readonly finish: string;
21
45
  readonly skip: string;
22
46
  };
47
+ type TourStepContent = {
48
+ readonly title: string;
49
+ readonly body: (voiceKeyLabel: string) => string;
50
+ };
23
51
  export type TourCopy = TourLabels & {
24
- readonly steps: Readonly<Record<TourStepId, {
25
- readonly title: string;
26
- readonly body: string;
27
- }>>;
52
+ readonly steps: {
53
+ readonly autonomy: TourStepContent;
54
+ /** The `/` step names skills for Simetrik, plain commands for everyone else. */
55
+ readonly commands: Readonly<Record<DockCopyVariant, TourStepContent>>;
56
+ readonly voice: TourStepContent;
57
+ readonly sessions: TourStepContent;
58
+ };
28
59
  };
29
60
  export type HintItem = {
30
61
  readonly keyLabel: string;
@@ -51,14 +82,33 @@ export type MenuCopy = {
51
82
  readonly customCss: string;
52
83
  readonly logOut: string;
53
84
  };
85
+ /** Copy for the empty-state skills table (Simetrik variant only — the compact
86
+ * "start from a skill" index that replaces the generic suggestion chips). */
87
+ export type SkillsPanelCopy = {
88
+ readonly heading: string;
89
+ /** Footer when the table is truncated: "+N more — type / to see all". */
90
+ readonly more: (hiddenCount: number) => string;
91
+ /** Footer when every skill fits: how to reach the full index later. */
92
+ readonly hint: string;
93
+ };
54
94
  export type DockCopy = {
55
- readonly welcomeCard: WelcomeCardCopy;
95
+ readonly welcomeCard: WelcomeCardContent;
56
96
  readonly tour: TourCopy;
57
97
  readonly hints: {
58
- readonly commands: HintItem;
98
+ /** `/` hint; label says "skills" for Simetrik, "commands" for everyone else. */
99
+ readonly commands: {
100
+ readonly keyLabel: string;
101
+ readonly label: Readonly<Record<DockCopyVariant, string>>;
102
+ };
59
103
  readonly files: HintItem;
60
- readonly voice: HintItem;
104
+ /** Voice hint label; the key label is the LIVE push-to-talk key. */
105
+ readonly voice: {
106
+ readonly label: string;
107
+ };
61
108
  };
109
+ /** Localized name for the Space key (every other code renders via
110
+ * `formatKeyCode`, which is already language-neutral). */
111
+ readonly spaceKeyLabel: string;
62
112
  readonly replayMenu: string;
63
113
  readonly language: {
64
114
  readonly label: string;
@@ -69,12 +119,13 @@ export type DockCopy = {
69
119
  readonly menu: MenuCopy;
70
120
  readonly intro: {
71
121
  readonly greeting: (brandName: string) => string;
72
- readonly body: string;
122
+ readonly body: Readonly<Record<DockCopyVariant, string>>;
73
123
  };
74
- readonly suggestions: readonly string[];
124
+ readonly skillsPanel: SkillsPanelCopy;
125
+ readonly suggestions: Readonly<Record<DockCopyVariant, readonly string[]>>;
75
126
  readonly composer: {
76
- readonly placeholderDefault: string;
77
- readonly placeholderPlan: string;
127
+ readonly placeholderDefault: Readonly<Record<DockCopyVariant, string>>;
128
+ readonly placeholderPlan: Readonly<Record<DockCopyVariant, string>>;
78
129
  readonly voiceHint: (keyLabel: string) => string;
79
130
  readonly micNotSupported: string;
80
131
  readonly micNotConfigured: string;
@@ -84,5 +135,31 @@ export type DockCopy = {
84
135
  };
85
136
  };
86
137
  export declare const DOCK_COPY: Record<Locale, DockCopy>;
87
- /** Merge the locale-independent step defs with this locale's titles/bodies. */
88
- export declare const buildTourSteps: (locale: Locale) => readonly TourStep[];
138
+ /**
139
+ * Human label for the push-to-talk key, localized where a translation exists:
140
+ * "Space" reads "Espacio"/"Espaço" in ES/PT; every other code goes through
141
+ * `formatKeyCode` ("ControlLeft" → "Left Ctrl", "KeyV" → "V", …).
142
+ */
143
+ export declare const voiceKeyLabel: (code: string, locale: Locale) => string;
144
+ /**
145
+ * Flatten the variant-keyed welcome-card content into the strings the
146
+ * presentational card renders, injecting the LIVE voice key label, then
147
+ * applying the active theme's per-locale `copy` override (BEL-135) when a
148
+ * tenant supplies one — Simetrik's preset, or a published theme.json. A
149
+ * neutral host with no override gets the variant copy as-is.
150
+ */
151
+ export declare const resolveWelcomeCardCopy: (locale: Locale, variant: DockCopyVariant, keyLabel: string, override?: DockCopyOverride) => WelcomeCardCopy;
152
+ /**
153
+ * The empty-state intro body + suggestion chips for a locale + variant,
154
+ * overridden by the active theme's per-locale `copy` when a tenant supplies
155
+ * one (BEL-135) — the same override the welcome card honors above.
156
+ */
157
+ export type ResolvedWelcomeCopy = {
158
+ readonly introBody: string;
159
+ readonly suggestions: readonly string[];
160
+ };
161
+ export declare const resolveWelcomeCopy: (locale: Locale, variant: DockCopyVariant, override: DockCopyOverride | undefined) => ResolvedWelcomeCopy;
162
+ /** Merge the locale-independent step defs with this locale's titles/bodies,
163
+ * injecting the LIVE voice key label and picking the variant's `/` step. */
164
+ export declare const buildTourSteps: (locale: Locale, keyLabel: string, variant: DockCopyVariant) => readonly TourStep[];
165
+ export {};
@@ -5,7 +5,7 @@
5
5
  * in the stream-state store; this module owns only view + size. Best-effort:
6
6
  * disabled/quota'd storage just means no cross-reload restore.
7
7
  */
8
- export type DockView = "chat" | "files";
8
+ export type DockView = "chat" | "files" | "scheduled";
9
9
  export type DockSize = "collapsed" | "expanded" | "modal";
10
10
  export type DockState = {
11
11
  readonly view: DockView;
@@ -17,14 +17,28 @@ export declare const commandOptions: (commands: readonly CommandSummary[]) => re
17
17
  * first), so keep these names out of the skill namespace.
18
18
  */
19
19
  export declare const BUILTIN_COMMANDS: readonly SkillSummary[];
20
- export type BuiltinCommandName = "compact";
20
+ export type BuiltinCommand = {
21
+ readonly type: "compact";
22
+ } | {
23
+ readonly type: "clear";
24
+ } | {
25
+ readonly type: "schedule";
26
+ readonly argumentsText: string;
27
+ } | {
28
+ readonly type: "schedule_invalid";
29
+ } | {
30
+ readonly type: "unschedule";
31
+ } | {
32
+ readonly type: "unschedule_invalid";
33
+ };
21
34
  /**
22
- * Recognize a submitted draft as a built-in command. Strict by design: the
23
- * draft (already trimmed by the caller) must be EXACTLY `/<name>` — trailing
24
- * text means "not a builtin", so `/compact please` falls through to the
25
- * skill/message handling rather than silently dropping the user's words.
35
+ * Recognize a submitted draft as a built-in command. `/compact` remains an
36
+ * exact, argument-free command, so trailing text falls through to normal
37
+ * message handling. `/schedule` and `/unschedule` claim their complete command
38
+ * token even when their arguments are invalid, preventing malformed commands
39
+ * from reaching the agent runtime as raw messages.
26
40
  */
27
- export declare const parseBuiltinCommand: (draft: string) => BuiltinCommandName | null;
41
+ export declare const parseBuiltinCommand: (draft: string) => BuiltinCommand | null;
28
42
  /**
29
43
  * The slash menu's option list: built-ins merged ahead of the skills, ranked
30
44
  * by {@link filterSkills} (prefix matches first; input order — built-ins
@@ -0,0 +1,32 @@
1
+ import { Locale } from './locale.ts';
2
+ export type ParsedTaskScheduleCommand = {
3
+ readonly ok: true;
4
+ readonly scheduledFor: Date;
5
+ readonly timeExpression: string;
6
+ readonly message: string;
7
+ readonly recurrence: "none" | "daily" | "weekdays" | "weekly";
8
+ } | {
9
+ readonly ok: false;
10
+ readonly reason: "invalid_time" | "missing_message";
11
+ };
12
+ export declare const browserTimezone: () => string;
13
+ export type WallClock = {
14
+ readonly year: number;
15
+ readonly month: number;
16
+ readonly day: number;
17
+ readonly hour: number;
18
+ readonly minute: number;
19
+ readonly second: number;
20
+ };
21
+ export declare const partsInTimezone: (instant: Date, timezone: string) => WallClock;
22
+ /** Resolve an IANA-zone wall clock at the TARGET date (including DST there).
23
+ * Repeated times choose the earlier instant; nonexistent times shift forward
24
+ * by the gap. Exported for the Scheduled dialog's date+time+timezone →
25
+ * instant conversion (the server ports the same algorithm). */
26
+ export declare const instantInTimezone: (wall: WallClock, timezone: string) => Date;
27
+ export declare const parseTaskScheduleCommand: (input: {
28
+ readonly argumentsText: string;
29
+ readonly locale: Locale;
30
+ readonly reference: Date;
31
+ readonly timezone: string;
32
+ }) => Promise<ParsedTaskScheduleCommand>;
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ declare const storedTaskScheduleSchema: z.ZodObject<{
3
+ taskScheduleId: z.ZodString;
4
+ message: z.ZodString;
5
+ scheduledFor: z.ZodString;
6
+ timezone: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ message: string;
9
+ timezone: string;
10
+ scheduledFor: string;
11
+ taskScheduleId: string;
12
+ }, {
13
+ message: string;
14
+ timezone: string;
15
+ scheduledFor: string;
16
+ taskScheduleId: string;
17
+ }>;
18
+ export type StoredTaskSchedule = z.infer<typeof storedTaskScheduleSchema>;
19
+ type TaskScheduleStoreScope = {
20
+ readonly apiBaseUrl: string;
21
+ readonly workspaceExternalId: string | null;
22
+ };
23
+ /** The most recently created pending schedule known in this account scope. */
24
+ export declare const readLatestStoredTaskSchedule: (scope: TaskScheduleStoreScope) => StoredTaskSchedule | null;
25
+ /** Remember a schedule internally. Its identifier is deliberately never rendered. */
26
+ export declare const rememberTaskSchedule: (scope: TaskScheduleStoreScope, schedule: StoredTaskSchedule) => void;
27
+ /** Drop a schedule after cancellation or once the backend reports it unavailable. */
28
+ export declare const forgetTaskSchedule: (scope: TaskScheduleStoreScope, taskScheduleId: string) => void;
29
+ export {};
@@ -0,0 +1,2 @@
1
+ import { BelongTheme } from '../types/public.ts';
2
+ export declare const themePreviewParams: (theme: BelongTheme) => string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Spoken status narration for the CLOSED chat surface (voice-presence spec §3).
3
+ * Pure: classifies a tool call into a WORK PHASE and hands out short spoken
4
+ * lines, round-robin per phase like `voice-fillers.ts`. The ChatRoute narrator
5
+ * effect decides WHEN to speak (surface hidden, speaker on, throttle); this
6
+ * module only decides WHAT to say. English by convention (spec non-goal:
7
+ * spoken phrases are not localized — fillers and plan announcements aren't).
8
+ */
9
+ export type WorkPhase = "coding" | "files" | "actions";
10
+ export declare const classifyToolPhase: (toolName: string) => WorkPhase;
11
+ /** The next spoken line for a work phase (round-robin within the phase). */
12
+ export declare const narrationLine: (phase: WorkPhase) => string;
13
+ /** The next "still working" line (round-robin). */
14
+ export declare const stillWorkingLine: () => string;
15
+ export declare const __resetNarrationForTest: () => void;
@@ -92,6 +92,88 @@ export declare const en: {
92
92
  readonly untitledSession: "Untitled session";
93
93
  readonly updated: "updated";
94
94
  };
95
+ readonly scheduled: {
96
+ readonly viewTitle: "Scheduled";
97
+ readonly subtitle: "Run work automatically, even when you're away";
98
+ readonly newTask: "New scheduled task";
99
+ readonly searchPlaceholder: "Search scheduled tasks";
100
+ readonly filterAll: "All";
101
+ readonly filterUpcoming: "Upcoming";
102
+ readonly filterCompleted: "Completed";
103
+ readonly loading: "Loading scheduled tasks…";
104
+ readonly empty: "No scheduled tasks yet";
105
+ readonly emptyHint: "Create one to run a prompt later — once or on a repeating schedule.";
106
+ readonly noResults: "No matches for “{{q}}”";
107
+ readonly loadError: "Couldn't load scheduled tasks.";
108
+ readonly loadMore: "Load more";
109
+ readonly statusActive: "Active";
110
+ readonly statusPaused: "Paused";
111
+ readonly statusCompleted: "Completed";
112
+ readonly statusUpcoming: "Upcoming";
113
+ readonly nextRun: "Next run {{time}}";
114
+ readonly nextRunIn: "Next run {{when}}";
115
+ readonly lastRun: "Last run {{time}}";
116
+ readonly dayAtTime: "{{day}} at {{time}}";
117
+ readonly pausedNotice: "Paused — runs won't start until you resume.";
118
+ readonly summaryOnce: "Once on {{time}}";
119
+ readonly summaryDaily: "Daily at {{time}}";
120
+ readonly summaryWeekdays: "Weekdays at {{time}}";
121
+ readonly summaryWeekly: "Every {{day}} at {{time}}";
122
+ readonly timezoneSuffix: "({{timezone}})";
123
+ readonly recurrenceNone: "Does not repeat";
124
+ readonly recurrenceDaily: "Daily";
125
+ readonly recurrenceWeekdays: "Weekdays (Mon–Fri)";
126
+ readonly recurrenceWeekly: "Weekly";
127
+ readonly dialogCreateTitle: "New scheduled task";
128
+ readonly dialogEditTitle: "Edit scheduled task";
129
+ readonly dialogHint: "You can change this later.";
130
+ readonly promptLabel: "What should the agent do?";
131
+ readonly promptPlaceholder: "Include everything the agent needs — each run starts a fresh conversation.";
132
+ readonly titleLabel: "Title (optional)";
133
+ readonly titlePlaceholder: "Shown in your scheduled list";
134
+ readonly whenLabel: "When";
135
+ readonly dateLabel: "Date";
136
+ readonly timeLabel: "Time";
137
+ readonly repeatLabel: "Repeat";
138
+ readonly timezoneLabel: "Timezone";
139
+ readonly timezoneSearchPlaceholder: "Search timezones…";
140
+ readonly timezoneNoMatch: "No matching timezone";
141
+ readonly create: "Create scheduled task";
142
+ readonly saveChanges: "Save changes";
143
+ readonly cancel: "Cancel";
144
+ readonly errorPromptRequired: "Write a prompt for the scheduled run.";
145
+ readonly errorPastTime: "Pick a time in the future.";
146
+ readonly errorTooFar: "Pick a time within the next year.";
147
+ readonly errorCreateFailed: "Couldn't create the schedule — try again.";
148
+ readonly errorUpdateFailed: "Couldn't save the changes — try again.";
149
+ readonly back: "Back to scheduled";
150
+ readonly pause: "Pause";
151
+ readonly resume: "Resume";
152
+ readonly resumedCompleted: "Its time already passed, so this one-time task is now completed.";
153
+ readonly runNow: "Run now";
154
+ readonly runNowStarted: "Run started — it will appear below.";
155
+ readonly edit: "Edit";
156
+ readonly delete: "Delete";
157
+ readonly deleteConfirmTitle: "Delete this scheduled task?";
158
+ readonly deleteConfirmBody: "Future runs are cancelled. Past runs and their conversations stay in your history.";
159
+ readonly deleteConfirm: "Delete";
160
+ readonly actionsMenu: "Schedule actions";
161
+ readonly actionFailed: "That didn't work — refresh and try again.";
162
+ readonly runsHeading: "Runs";
163
+ readonly runsCount_one: "{{count}} run";
164
+ readonly runsCount_other: "{{count}} runs";
165
+ readonly runsEmpty: "No runs yet — the first one appears here after it starts.";
166
+ readonly runsLoadError: "Couldn't load runs.";
167
+ readonly runStatusRunning: "Running";
168
+ readonly runStatusNeedsAttention: "Needs attention";
169
+ readonly runStatusCompleted: "Completed";
170
+ readonly runStatusFailed: "Failed";
171
+ readonly runNeedsAttentionHint: "Waiting for your input.";
172
+ readonly manualRun: "Manual run";
173
+ readonly openRun: "Open this run's conversation";
174
+ readonly detailLoadError: "Couldn't load this scheduled task.";
175
+ readonly detailGone: "This scheduled task no longer exists.";
176
+ };
95
177
  readonly plan: {
96
178
  readonly cueReady: "Plan ready — View";
97
179
  readonly fallbackTitle: "Plan";
@@ -117,12 +199,15 @@ export declare const en: {
117
199
  readonly byBelong: "by Belong";
118
200
  readonly navChat: "Chat";
119
201
  readonly navFiles: "Files";
202
+ readonly navScheduled: "Scheduled";
120
203
  readonly chatPlanRunning: "Chat — plan running, {{completed}} of {{total}} steps done";
121
204
  readonly devMode: "Dev mode";
122
205
  readonly devModeTitle: "Dev mode (belong:dev)";
123
206
  readonly muteReplies: "Mute replies";
124
207
  readonly readRepliesAloud: "Read replies aloud";
125
208
  readonly speechNotSupported: "Speech not supported";
209
+ readonly railVoiceToggle: "Voice replies on/off — hold {{key}} to talk";
210
+ readonly hotkeyHint: "Hold {{key}} to talk — chat can stay closed";
126
211
  readonly expand: "Expand";
127
212
  readonly collapse: "Collapse";
128
213
  };
@@ -210,10 +295,6 @@ export declare const en: {
210
295
  readonly micUnmuted: "Mic unmuted";
211
296
  readonly micMuted: "Mic muted";
212
297
  readonly agentWorking: "{{name}} is working…";
213
- readonly clearChat: "Clear chat";
214
- readonly clearChatTooltip: "Clear chat (the assistant keeps the full context)";
215
- readonly clear: "Clear";
216
- readonly stop: "Stop";
217
298
  };
218
299
  readonly app: {
219
300
  readonly uploadNoWorkspace: "Open the terminal once so your workspace exists, then upload.";
@@ -276,23 +357,6 @@ export declare const en: {
276
357
  readonly nextBranch: "Next branch";
277
358
  readonly branchPage: "{{current}} of {{total}}";
278
359
  };
279
- readonly agentGrant: {
280
- readonly headlineExpired: "Your agent session expired";
281
- readonly headlineRevoked: "Agent session disconnected";
282
- readonly headlineNone: "Let the {{name}} agent use the CLI in the background";
283
- readonly body: "It acts on your behalf in your current workspace — time-limited (24 h), revocable anytime.";
284
- readonly connected: "{{name}} agent connected";
285
- readonly connectedUntil: "{{name}} agent connected · until {{until}}";
286
- readonly disconnect: "Disconnect";
287
- readonly ctaAllow: "Allow";
288
- readonly ctaReconnect: "Reconnect";
289
- readonly notNow: "Not now";
290
- readonly errorNotScopeMember: "Your {{name}} user isn't a member of this workspace, so the agent can't connect here. Switch to a workspace you belong to.";
291
- readonly errorScopeSessionLimit: "This workspace is at its limit of active agent connections. We tried to free one up — reload and reconnect, or try again in a moment.";
292
- readonly errorAuthTokenAlreadyUsed: "Reconnecting needs a fresh {{name}} sign-in — the last one was just used to connect. It refreshes on your next page reload, or on its own in a few minutes.";
293
- readonly errorGrantRejected: "Simetrik declined the connection. This is usually a permissions or workspace issue — if it persists, contact Simetrik support.";
294
- readonly errorGeneric: "Couldn't connect the agent session. Try again.";
295
- };
296
360
  readonly common: {
297
361
  readonly language: "Language";
298
362
  readonly retry: "Retry";
@@ -323,6 +387,26 @@ export declare const en: {
323
387
  readonly compacting: "Compacting…";
324
388
  readonly clearSuccess: "Chat cleared — the assistant still has the full context.";
325
389
  readonly clearError: "Couldn't clear the chat — try again.";
390
+ readonly clearBusy: "Can't clear while the agent is working — try when it finishes.";
391
+ };
392
+ readonly scheduling: {
393
+ readonly scheduleUsage: "Use /schedule <time> <task>, for example: /schedule tomorrow at 9 prepare the report.";
394
+ readonly unscheduleUsage: "Use /unschedule to cancel your most recently scheduled task.";
395
+ readonly invalidTime: "I couldn't resolve that time. Include a time of day, for example: tomorrow at 9.";
396
+ readonly missingMessage: "Add the task after the time, for example: /schedule in 20 minutes prepare the report.";
397
+ readonly pending: "Scheduling…";
398
+ readonly created: "Scheduled for {{time}} ({{timezone}}).";
399
+ readonly task: "Task: {{message}}";
400
+ readonly cancel: "Cancel";
401
+ readonly interactiveWarning: "This mode may pause for your approval or input after it starts.";
402
+ readonly pendingLimit: "You already have {{count}} pending schedules. Cancel one before adding another.";
403
+ readonly serverRejectedTime: "That time is already past or more than one year away.";
404
+ readonly createError: "Couldn't schedule the task — try again.";
405
+ readonly cancelled: "Cancelled \"{{message}}\" scheduled for {{time}} ({{timezone}}).";
406
+ readonly noPendingSchedule: "There isn't a pending scheduled task to cancel here.";
407
+ readonly notFound: "That pending schedule wasn't found.";
408
+ readonly alreadyStarted: "That schedule has already started and can no longer be cancelled.";
409
+ readonly cancelError: "Couldn't cancel the schedule — try again.";
326
410
  };
327
411
  readonly voiceOverlay: {
328
412
  readonly startingMic: "Starting mic…";
@@ -340,7 +424,7 @@ export declare const en: {
340
424
  readonly notDelivered: "Not delivered — please resend";
341
425
  readonly runFailed: "Run failed";
342
426
  readonly uploadFailed: "Attachment upload failed — remove it or try again.";
343
- readonly authExpired: "Your session expired — please sign in to Simetrik again, then retry.";
427
+ readonly authExpired: "Your session expired — please sign in to {{name}} again, then retry.";
344
428
  readonly backendUnavailable: "Can't reach the assistant service — check your connection.";
345
429
  readonly streamError: "Stream error — {{message}}";
346
430
  readonly streamErrorFallback: "please retry";
@@ -43,10 +43,6 @@ export declare const embedMiscEn: {
43
43
  readonly micUnmuted: "Mic unmuted";
44
44
  readonly micMuted: "Mic muted";
45
45
  readonly agentWorking: "{{name}} is working…";
46
- readonly clearChat: "Clear chat";
47
- readonly clearChatTooltip: "Clear chat (the assistant keeps the full context)";
48
- readonly clear: "Clear";
49
- readonly stop: "Stop";
50
46
  };
51
47
  };
52
48
  export declare const embedMiscEs: {
@@ -92,10 +88,6 @@ export declare const embedMiscEs: {
92
88
  micUnmuted: string;
93
89
  micMuted: string;
94
90
  agentWorking: string;
95
- clearChat: string;
96
- clearChatTooltip: string;
97
- clear: string;
98
- stop: string;
99
91
  };
100
92
  };
101
93
  export declare const embedMiscPt: {
@@ -141,9 +133,5 @@ export declare const embedMiscPt: {
141
133
  micUnmuted: string;
142
134
  micMuted: string;
143
135
  agentWorking: string;
144
- clearChat: string;
145
- clearChatTooltip: string;
146
- clear: string;
147
- stop: string;
148
136
  };
149
137
  };
@@ -4,12 +4,15 @@ export declare const headerEn: {
4
4
  readonly byBelong: "by Belong";
5
5
  readonly navChat: "Chat";
6
6
  readonly navFiles: "Files";
7
+ readonly navScheduled: "Scheduled";
7
8
  readonly chatPlanRunning: "Chat — plan running, {{completed}} of {{total}} steps done";
8
9
  readonly devMode: "Dev mode";
9
10
  readonly devModeTitle: "Dev mode (belong:dev)";
10
11
  readonly muteReplies: "Mute replies";
11
12
  readonly readRepliesAloud: "Read replies aloud";
12
13
  readonly speechNotSupported: "Speech not supported";
14
+ readonly railVoiceToggle: "Voice replies on/off — hold {{key}} to talk";
15
+ readonly hotkeyHint: "Hold {{key}} to talk — chat can stay closed";
13
16
  readonly expand: "Expand";
14
17
  readonly collapse: "Collapse";
15
18
  };
@@ -19,12 +22,15 @@ export declare const headerEs: {
19
22
  byBelong: string;
20
23
  navChat: string;
21
24
  navFiles: string;
25
+ navScheduled: string;
22
26
  chatPlanRunning: string;
23
27
  devMode: string;
24
28
  devModeTitle: string;
25
29
  muteReplies: string;
26
30
  readRepliesAloud: string;
27
31
  speechNotSupported: string;
32
+ railVoiceToggle: string;
33
+ hotkeyHint: string;
28
34
  expand: string;
29
35
  collapse: string;
30
36
  };
@@ -34,12 +40,15 @@ export declare const headerPt: {
34
40
  byBelong: string;
35
41
  navChat: string;
36
42
  navFiles: string;
43
+ navScheduled: string;
37
44
  chatPlanRunning: string;
38
45
  devMode: string;
39
46
  devModeTitle: string;
40
47
  muteReplies: string;
41
48
  readRepliesAloud: string;
42
49
  speechNotSupported: string;
50
+ railVoiceToggle: string;
51
+ hotkeyHint: string;
43
52
  expand: string;
44
53
  collapse: string;
45
54
  };