@belonguniverseai/react-sdk 0.6.31 → 0.6.33

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 (125) hide show
  1. package/dist/api/account-connectors.d.ts +2 -2
  2. package/dist/api/client.d.ts +1126 -63
  3. package/dist/api/goals.d.ts +4 -4
  4. package/dist/api/guide.d.ts +15 -0
  5. package/dist/api/query-keys.d.ts +6 -5
  6. package/dist/api/quota-refusal.d.ts +49 -0
  7. package/dist/api/secret-paste.d.ts +5 -0
  8. package/dist/api/suggestions.d.ts +18 -0
  9. package/dist/api/task-schedule-sharing.d.ts +13 -1
  10. package/dist/api/task-schedules.d.ts +33 -4
  11. package/dist/api/vault.d.ts +49 -0
  12. package/dist/app/dock-story-data.d.ts +6 -0
  13. package/dist/component/{abnfDiagram-N423BO3Z-C_vMQSL0.js → abnfDiagram-N423BO3Z-CK4wvzwz.js} +4 -4
  14. package/dist/component/{architectureDiagram-T3A2C74G-dvNbgSIj.js → architectureDiagram-T3A2C74G-DoljsqqO.js} +6 -6
  15. package/dist/component/{blockDiagram-VBNYF7ZC-CRm9PRRf.js → blockDiagram-VBNYF7ZC-Ie7SErpH.js} +8 -8
  16. package/dist/component/{c4Diagram-5PPSVZJV-B1PMAZEg.js → c4Diagram-5PPSVZJV-rfEof5mj.js} +4 -4
  17. package/dist/component/{channel-Boj1wmAa.js → channel-C5ABP6lE.js} +2 -2
  18. package/dist/component/{chunk-2GRJ4B5K-CBAw5kla.js → chunk-2GRJ4B5K-CWOCv67u.js} +2 -2
  19. package/dist/component/{chunk-3NCLNEKW-BuxgmuBS.js → chunk-3NCLNEKW-BJYANBvv.js} +2 -2
  20. package/dist/component/{chunk-4I5QYGJK-CDPqoPOq.js → chunk-4I5QYGJK-C29OfER5.js} +2 -2
  21. package/dist/component/{chunk-5RXB4S5H-fv_mFlec.js → chunk-5RXB4S5H-D__NH4Op.js} +6 -6
  22. package/dist/component/{chunk-6Q2QTUOP-RU5jVXsd.js → chunk-6Q2QTUOP-BgSQgII8.js} +3 -3
  23. package/dist/component/{chunk-7Z6QIM7H-BgV4nQ80.js → chunk-7Z6QIM7H-vNexNF_V.js} +8 -8
  24. package/dist/component/{chunk-GF5L2VYU-CSROQiBr.js → chunk-GF5L2VYU-D3vxqomE.js} +6 -6
  25. package/dist/component/{chunk-I66GZJ75-CGsmSAKB.js → chunk-I66GZJ75-Dkw1ISGd.js} +2 -2
  26. package/dist/component/{chunk-J7OUQ5F2-D0GPh9LA.js → chunk-J7OUQ5F2-dC67pJWg.js} +7 -7
  27. package/dist/component/{chunk-JQJVKLGR-D4zeU7rQ.js → chunk-JQJVKLGR-Djj9TdhH.js} +8 -8
  28. package/dist/component/{chunk-KBJHAD2P-_EJQ1rNN.js → chunk-KBJHAD2P-dwIA6Vmi.js} +2 -2
  29. package/dist/component/{chunk-NSK5VX7P-dusZw8pp.js → chunk-NSK5VX7P-thQxjtNK.js} +2 -2
  30. package/dist/component/{chunk-QR6OTTB3-Bb0pFQ-m.js → chunk-QR6OTTB3-OMd-rgNj.js} +7 -7
  31. package/dist/component/{chunk-UBXNYLIW-CJHU4Dfa.js → chunk-UBXNYLIW-D26S6zO6.js} +3 -3
  32. package/dist/component/{chunk-W5SLKNZC-CRG_NQXu.js → chunk-W5SLKNZC-DLV7M8by.js} +2 -2
  33. package/dist/component/{chunk-WRU74C26-D8hrtupL.js → chunk-WRU74C26-13bvIAgD.js} +4 -4
  34. package/dist/component/{classDiagram-JCYQIIEL-CIgvdG3B.js → classDiagram-JCYQIIEL-BFQ72AZA.js} +13 -13
  35. package/dist/component/{classDiagram-v2-OCEON4UE-CyMNFCrX.js → classDiagram-v2-OCEON4UE-UFfArXpP.js} +13 -13
  36. package/dist/component/{component-CtEw7QuU.js → component-Bhs6PFPY.js} +42587 -40222
  37. package/dist/component/{cynefinDiagram-MW4NZA55-M_mUz7fS.js → cynefinDiagram-MW4NZA55-Bgfw8c41.js} +4 -4
  38. package/dist/component/{dagre-VZM6K2ZE-Co5UZ6ZI.js → dagre-VZM6K2ZE-CQoUcF3S.js} +9 -9
  39. package/dist/component/{diagram-7IWD3JNH-Bfgrgw1x.js → diagram-7IWD3JNH-C8-mvAEv.js} +5 -5
  40. package/dist/component/{diagram-B4RE2ZJO-On8y3Dsu.js → diagram-B4RE2ZJO-BATqCIx3.js} +3 -3
  41. package/dist/component/{diagram-LBJQPF4R-CzDYf7jJ.js → diagram-LBJQPF4R-DwRMRXWz.js} +4 -4
  42. package/dist/component/{diagram-Q27KOJAE-D2MlvnqP.js → diagram-Q27KOJAE-D6gO0LTm.js} +6 -6
  43. package/dist/component/{diagram-UB23O5K3-Bl3kdzTb.js → diagram-UB23O5K3-4nOrWHql.js} +4 -4
  44. package/dist/component/{ebnfDiagram-BXEA7PRR-CyKWxoNI.js → ebnfDiagram-BXEA7PRR-DCO-Nj3k.js} +4 -4
  45. package/dist/component/{erDiagram-JOGREHBK-B2DjPQI6.js → erDiagram-JOGREHBK-hWtImhPN.js} +12 -12
  46. package/dist/component/flowDiagram-UKHOOZJN-8qLgX2Wv.js +19 -0
  47. package/dist/component/{ganttDiagram-PKOTCBZU-Do3-h4U7.js → ganttDiagram-PKOTCBZU-BE8Mqoej.js} +3 -3
  48. package/dist/component/{gitGraphDiagram-DS77QQ5N-CRyn9FyP.js → gitGraphDiagram-DS77QQ5N-DURS7rAN.js} +3 -3
  49. package/dist/component/index.js +2 -2
  50. package/dist/component/{infoDiagram-6WML65LV-BvRo6Umd.js → infoDiagram-6WML65LV-BqBxR6YB.js} +3 -3
  51. package/dist/component/{ishikawaDiagram-WSZJBQD7-DNxrL1bn.js → ishikawaDiagram-WSZJBQD7-CnYZd1Dq.js} +4 -4
  52. package/dist/component/{journeyDiagram-NVQOT4AX-Cvzr6jFA.js → journeyDiagram-NVQOT4AX-Cgkpx4Qx.js} +3 -3
  53. package/dist/component/{kanban-definition-27J2QSJJ-CWjHCc6Q.js → kanban-definition-27J2QSJJ-CJSdhT0i.js} +9 -9
  54. package/dist/component/{line-qLTHZib7.js → line-BBEHlpsV.js} +2 -2
  55. package/dist/component/{mindmap-definition-FAOFIHXS-CTrxLLMf.js → mindmap-definition-FAOFIHXS-DgHouLA-.js} +11 -11
  56. package/dist/component/{pegDiagram-VL7TDLO6-DKquwTLr.js → pegDiagram-VL7TDLO6-B_iGQ6sI.js} +4 -4
  57. package/dist/component/{pieDiagram-7S7Q4E2Y-B9mrWWER.js → pieDiagram-7S7Q4E2Y-g7GxM0JA.js} +4 -4
  58. package/dist/component/{quadrantDiagram-CIZ2JOQS-CLMlPfFg.js → quadrantDiagram-CIZ2JOQS-Bp7z4raq.js} +2 -2
  59. package/dist/component/{railroadDiagram-AXF67PYL-DBRxaZy0.js → railroadDiagram-AXF67PYL-CYx3PP5o.js} +4 -4
  60. package/dist/component/{requirementDiagram-LRYGKXZP-DFbNp-NQ.js → requirementDiagram-LRYGKXZP-BJNRJceo.js} +11 -11
  61. package/dist/component/{sankeyDiagram-W5VNT64P-Ba10c9Ya.js → sankeyDiagram-W5VNT64P-Cf0tVHbW.js} +2 -2
  62. package/dist/component/{sequenceDiagram-SI44F4Z6-CakxF9z5.js → sequenceDiagram-SI44F4Z6-BsAsKMRH.js} +4 -4
  63. package/dist/component/{stateDiagram-OKZ733FA-DpwaZHAD.js → stateDiagram-OKZ733FA-Bpk0vtTK.js} +14 -14
  64. package/dist/component/{stateDiagram-v2-UEYNNEHI-CXLHj_sq.js → stateDiagram-v2-UEYNNEHI-CJFoUvD2.js} +13 -13
  65. package/dist/component/{swimlanes-SLNWSIFB-CLLLQ7CI.js → swimlanes-SLNWSIFB-Be5A0lwq.js} +9 -9
  66. package/dist/component/{swimlanesDiagram-ULZ7WXOC-B1LbGSCS.js → swimlanesDiagram-ULZ7WXOC-J8VNaPhM.js} +13 -13
  67. package/dist/component/{timeline-definition-Z64GVDOM-BsifI4rA.js → timeline-definition-Z64GVDOM-CU9PEkPY.js} +4 -4
  68. package/dist/component/{vennDiagram-T6HMQDX7-zuVcjY9p.js → vennDiagram-T6HMQDX7-Cno78tFK.js} +4 -4
  69. package/dist/component/{wardleyDiagram-T6FBY63Y-B9DV6RwN.js → wardleyDiagram-T6FBY63Y-BEb1Rn5J.js} +4 -4
  70. package/dist/component/{xychartDiagram-ELKLHX3M-FyZaGaUV.js → xychartDiagram-ELKLHX3M-BwjMczCl.js} +7 -7
  71. package/dist/components/ai-elements/dock-link.d.ts +14 -1
  72. package/dist/components/ai-elements/message.d.ts +8 -1
  73. package/dist/components/embed/EmbedRail.d.ts +8 -1
  74. package/dist/components/embed/NextStepCard.d.ts +6 -0
  75. package/dist/components/embed/QuotaNoticeCard.d.ts +4 -0
  76. package/dist/components/embed/SessionSwitcher.d.ts +6 -1
  77. package/dist/components/embed/quota-notice-copy.d.ts +3 -0
  78. package/dist/components/guide/GuideArticleView.d.ts +7 -0
  79. package/dist/components/guide/GuideHub.d.ts +9 -0
  80. package/dist/components/guide/GuideSettings.d.ts +23 -0
  81. package/dist/components/guide/figures/ComposerIndicatorsFigure.d.ts +16 -0
  82. package/dist/components/guide/figures/SharedTaskCopiesFigure.d.ts +12 -0
  83. package/dist/components/guide/figures/index.d.ts +3 -0
  84. package/dist/components/guide/guide-fixtures.d.ts +3 -0
  85. package/dist/components/guide/guide-icons.d.ts +3 -0
  86. package/dist/components/guide/guide-link.d.ts +12 -0
  87. package/dist/components/guide/guide-search.d.ts +15 -0
  88. package/dist/components/scheduled/schedule-dialog-model.d.ts +2 -1
  89. package/dist/components/scheduled/schedule-format.d.ts +4 -1
  90. package/dist/components/ui/button.d.ts +1 -1
  91. package/dist/components/ui/input-group.d.ts +1 -1
  92. package/dist/components/vault/SecretPasteFeedback.d.ts +6 -0
  93. package/dist/components/vault/SecretsPanel.d.ts +23 -0
  94. package/dist/components/vault/vault-open.d.ts +3 -0
  95. package/dist/embed/goal-edit-command.d.ts +6 -1
  96. package/dist/embed/quota-notice.d.ts +9 -0
  97. package/dist/embed/theme.d.ts +10 -0
  98. package/dist/embed/voice/agent-spawn.d.ts +12 -2
  99. package/dist/embed/voice-call.d.ts +4 -1
  100. package/dist/i18n/messages/en.d.ts +85 -0
  101. package/dist/i18n/messages/surfaces/guide.d.ts +131 -0
  102. package/dist/i18n/messages/surfaces/quota.d.ts +69 -0
  103. package/dist/i18n/messages/surfaces/scheduled.d.ts +32 -0
  104. package/dist/i18n/messages/surfaces/settings.d.ts +16 -0
  105. package/dist/i18n/messages/surfaces/stream.d.ts +4 -0
  106. package/dist/i18n/messages/surfaces/vault.d.ts +120 -0
  107. package/dist/lib/use-tab-leadership.d.ts +1 -0
  108. package/dist/routes/chat/history-cache.d.ts +5 -0
  109. package/dist/routes/chat/question-parts.d.ts +26 -0
  110. package/dist/routes/chat/queued-delivery.d.ts +20 -0
  111. package/dist/routes/chat/queued-messages.d.ts +15 -0
  112. package/dist/routes/chat/session-api.d.ts +52 -0
  113. package/dist/routes/chat/session-history-api.d.ts +9 -0
  114. package/dist/routes/chat/transcript-update.d.ts +45 -0
  115. package/dist/routes/chat/use-catch-up-on-return.d.ts +7 -0
  116. package/dist/routes/chat/use-next-step-suggestion.d.ts +38 -0
  117. package/dist/routes/chat/use-quota-notice.d.ts +29 -0
  118. package/dist/routes/chat/use-quota-stop-refresh.d.ts +27 -0
  119. package/dist/routes/chat/use-session-goal.d.ts +6 -0
  120. package/dist/routes/chat.d.ts +9 -15
  121. package/dist/stream/belong-chat-transport.d.ts +17 -2
  122. package/dist/stream/belong-data-parts.d.ts +31 -1
  123. package/dist/stream/provider-blocked.d.ts +16 -0
  124. package/package.json +1 -1
  125. package/dist/component/flowDiagram-UKHOOZJN-CjSeviPw.js +0 -19
@@ -0,0 +1,6 @@
1
+ import { NextStepSuggestion } from '../../api/suggestions.ts';
2
+ export declare function NextStepCard({ suggestion, onPick, onDismiss, }: {
3
+ readonly suggestion: NextStepSuggestion;
4
+ readonly onPick: (message: string) => void;
5
+ readonly onDismiss: () => void;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { QuotaNoticeData } from '../../stream/belong-data-parts.ts';
2
+ export declare function QuotaNoticeCard({ notice }: {
3
+ readonly notice: QuotaNoticeData;
4
+ }): import("react").JSX.Element;
@@ -1,12 +1,17 @@
1
+ import { SpawnAgent } from '../../embed/voice/agent-spawn.ts';
1
2
  import { BelongTheme } from '../../types/public.ts';
2
3
  import { SessionSummary } from './EmbedSessions';
3
4
  /** A view of the real line registry. Selection never remints or reassigns a
4
5
  * session; the dock owns that boundary, including resume and unseen state. */
5
- export declare function SessionSwitcher({ layout, theme, sessions, activeId, onSelect, onClose, }: {
6
+ export declare function SessionSwitcher({ layout, theme, sessions, activeId, onSelect, onClose, spawnAgent, pendingAgentLine, }: {
6
7
  layout: "dock" | "mobile" | "sidebar";
7
8
  theme: BelongTheme;
8
9
  sessions: readonly SessionSummary[];
9
10
  activeId: string | null;
10
11
  onSelect: (sessionId: string | null) => void;
11
12
  onClose: (line: number) => void;
13
+ /** The "+". The dock passes the version that shows the new chat on the click. */
14
+ spawnAgent?: SpawnAgent;
15
+ /** The line whose new chat is on screen before its session exists. */
16
+ pendingAgentLine?: number | null;
12
17
  }): import("react").JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ import { TFunction } from 'i18next';
2
+ import { QuotaNoticeData } from '../../stream/belong-data-parts.ts';
3
+ export declare const quotaNoticeCopy: (notice: QuotaNoticeData, t: TFunction, locale: string) => string;
@@ -0,0 +1,7 @@
1
+ import { GuideArticle } from '@belong/codec/guide';
2
+ type GuideArticleViewProps = {
3
+ readonly article: GuideArticle;
4
+ readonly onBack: () => void;
5
+ };
6
+ export declare const GuideArticleView: ({ article, onBack }: GuideArticleViewProps) => import("react").JSX.Element;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ import { GuideResponse } from '@belong/codec/guide';
2
+ type GuideHubProps = {
3
+ readonly guide: GuideResponse;
4
+ readonly query: string;
5
+ readonly onQueryChange: (query: string) => void;
6
+ readonly onOpen: (articleId: string) => void;
7
+ };
8
+ export declare const GuideHub: ({ guide, query, onQueryChange, onOpen }: GuideHubProps) => import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Settings → Guide: the Simetrik agent Guide, a small help center about the
3
+ * agent in the dock's own language (spec decisions 1, 2, 11–14).
4
+ *
5
+ * The guide is fetched when this section opens (`useGuide`), already filtered
6
+ * by what the deployment has switched on. The view is the hub or one article.
7
+ * Its state lives here, above the fetch states, so a language switch refetches
8
+ * and comes back to whichever was open; an article that is no longer served
9
+ * falls back to the hub. Every hub ↔ article change calls `onNavigate`, so the
10
+ * settings panel can reset its scroll.
11
+ *
12
+ * Focus: an opened article focuses its title (`GuideArticleView`), and Back
13
+ * puts focus on the hub item that opened it — or on the search box when the
14
+ * reader got there through a `guide:` link.
15
+ *
16
+ * Quiet by design (§42): loading is one muted line, and a failed fetch is a
17
+ * calm "Couldn't load the guide" with a Retry that refetches. An older cloud
18
+ * without the route (404) says the guide isn't available here yet, with no
19
+ * Retry, since retrying could never help. Nothing here is red.
20
+ */
21
+ export declare const GuideSettings: ({ onNavigate }: {
22
+ readonly onNavigate?: () => void;
23
+ }) => import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The `composer-indicators` figure: a static drawing of the dock's message box
3
+ * with numbered callouts, placed by the `on-screen` article.
4
+ *
5
+ * 1 — the percentage ring just above the box, outside it (`UsageMeter`),
6
+ * drawn at 25%;
7
+ * 2 — the execution-mode button inside the box, in its default mode;
8
+ * 3 — the activity line in the conversation ("Working on it…").
9
+ *
10
+ * The article's numbered list follows the same order. Every label the real
11
+ * dock shows comes from the dock's OWN catalog entry — the mode name, the
12
+ * activity line, the Simetrik composer placeholder — so the drawing relabels
13
+ * with the dock and cannot drift from the screen. Theme tokens only, no red
14
+ * (§42). Presentational: one `role="img"` with a spoken description.
15
+ */
16
+ export declare const ComposerIndicatorsFigure: () => import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The `shared-task-copies` figure: why a shared scheduled task can run twice.
3
+ * The original task and the copy a second account enabled are each ACTIVE, and
4
+ * each active copy is its own schedule, so one time of day adds up to two runs.
5
+ * Placed by the `task-ran-twice` and `scheduled-tasks` articles.
6
+ *
7
+ * The status chip, the cadence line and the "Share" step read the Scheduled
8
+ * view's OWN catalog entries, and the time is formatted the way that view
9
+ * formats it, so the drawing cannot drift from the screen. Theme tokens only,
10
+ * no red (§42). Presentational: one `role="img"` with a spoken description.
11
+ */
12
+ export declare const SharedTaskCopiesFigure: () => import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { ComponentType } from 'react';
2
+ import { GuideFigureId } from '@belong/codec/guide';
3
+ export declare const GUIDE_FIGURES: Readonly<Record<GuideFigureId, ComponentType>>;
@@ -0,0 +1,3 @@
1
+ import { GuideResponse } from '@belong/codec/guide';
2
+ export declare const GUIDE_FIXTURE_EN: GuideResponse;
3
+ export declare const GUIDE_FIXTURE_ES: GuideResponse;
@@ -0,0 +1,3 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ import { GuideIconKey } from '@belong/codec/guide';
3
+ export declare const GUIDE_ICONS: Readonly<Record<GuideIconKey, LucideIcon>>;
@@ -0,0 +1,12 @@
1
+ import { StreamdownComponents } from '../ai-elements/dock-link.tsx';
2
+ /** What a guide link can open: the served article ids, and how to open one. */
3
+ export type GuideNavigation = {
4
+ readonly knownIds: ReadonlySet<string>;
5
+ readonly open: (articleId: string) => void;
6
+ };
7
+ /** Provided by the article view; `null` everywhere else (links read as text). */
8
+ export declare const GuideNavigationContext: import('react').Context<GuideNavigation | null>;
9
+ /** Rewrites each `](guide:<id>)` target to the sanitizer-safe `](#guide:<id>)`. */
10
+ export declare const withGuideLinkTargets: (markdown: string) => string;
11
+ /** Module-level, so the identity is stable across renders (Streamdown memoises on it). */
12
+ export declare const guideMarkdownComponents: StreamdownComponents;
@@ -0,0 +1,15 @@
1
+ import { GuideArticle } from '@belong/codec/guide';
2
+ /** NFD, accents dropped, lowercased, whitespace collapsed and trimmed. */
3
+ export declare const normalizeForSearch: (text: string) => string;
4
+ /**
5
+ * What a reader sees of an article body: marker comments, heading hashes,
6
+ * emphasis and code ticks, and link targets removed (the link text is kept).
7
+ * Linear in the body's length, whatever the body holds.
8
+ */
9
+ export declare const guidePlainText: (markdown: string) => string;
10
+ /**
11
+ * Articles whose title or plain-text body contains the query. Title matches
12
+ * come first, then body-only matches; each group keeps the input order. A query
13
+ * that is empty once normalized (only spaces) is no query, and finds nothing.
14
+ */
15
+ export declare const searchGuide: (articles: readonly GuideArticle[], query: string) => readonly GuideArticle[];
@@ -11,9 +11,10 @@ export type ScheduleDialogInputs = {
11
11
  /** Only meaningful when `recurrence === "interval"`; carried always so the
12
12
  * control keeps its value while the user toggles kinds. */
13
13
  readonly intervalMinutes: number;
14
+ readonly weekdays: number[];
14
15
  };
15
16
  export type ScheduleEditorValue = Pick<TaskScheduleDetail, "explicitTitle" | "message" | "anchorAt" | "timezone" | "recurrence"> & {
16
17
  readonly nextRunAt?: string | null;
17
18
  };
18
19
  export declare const scheduleDialogInputs: (schedule: ScheduleEditorValue) => ScheduleDialogInputs;
19
- export declare const scheduleTimeShapeChanged: (schedule: ScheduleEditorValue, input: Pick<ScheduleDialogInputs, "date" | "time" | "timezone" | "recurrence" | "intervalMinutes">) => boolean;
20
+ export declare const scheduleTimeShapeChanged: (schedule: ScheduleEditorValue, input: Pick<ScheduleDialogInputs, "date" | "time" | "timezone" | "recurrence" | "intervalMinutes" | "weekdays">) => boolean;
@@ -8,6 +8,8 @@ export declare const weekdayIn: (timezone: string, iso: string, locale: Locale)
8
8
  export declare const dateTimeLocal: (iso: string, locale: Locale) => string;
9
9
  /** Non-null when the schedule's zone differs from the viewer's (shown as a suffix). */
10
10
  export declare const foreignTimezone: (timezone: string) => string | null;
11
+ /** Monday-first names, independent of the viewer's timezone. */
12
+ export declare const selectedWeekdayNames: (weekdays: readonly number[], locale: Locale, width?: "short" | "long") => string[];
11
13
  /** i18n params for the recurrence summary line, keyed by kind. */
12
14
  export declare const recurrenceSummaryParams: (input: {
13
15
  readonly kind: RecurrenceKind;
@@ -17,8 +19,9 @@ export declare const recurrenceSummaryParams: (input: {
17
19
  readonly locale: Locale;
18
20
  /** Interval width — only read for the `interval` kind. */
19
21
  readonly intervalMinutes: number | null;
22
+ readonly weekdays?: readonly number[] | null;
20
23
  }) => {
21
- readonly key: `scheduled.summary${"Once" | "Daily" | "Weekdays" | "Weekly" | "Interval" | "Manual"}`;
24
+ readonly key: `scheduled.summary${"Once" | "Daily" | "Weekdays" | "Weekly" | "CustomWeekly" | "Interval" | "Manual"}`;
22
25
  readonly time: string;
23
26
  readonly day: string;
24
27
  /** Interval width for the `Interval` message (0 for other kinds). */
@@ -2,7 +2,7 @@ import { VariantProps } from 'class-variance-authority';
2
2
  import * as React from "react";
3
3
  declare const buttonVariants: (props?: ({
4
4
  variant?: "default" | "link" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
5
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
5
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  type ButtonProps = React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
8
8
  asChild?: boolean;
@@ -7,7 +7,7 @@ declare const inputGroupAddonVariants: (props?: ({
7
7
  declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): React.JSX.Element;
8
8
  declare const InputGroupButton: React.ForwardRefExoticComponent<Omit<Omit<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
9
9
  variant?: "default" | "link" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
10
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
11
11
  } & import('class-variance-authority/types').ClassProp) | undefined) => string> & {
12
12
  asChild?: boolean;
13
13
  }, "ref"> & React.RefAttributes<HTMLButtonElement>, "size"> & VariantProps<(props?: ({
@@ -0,0 +1,6 @@
1
+ export declare function SecretPasteFeedback({ text, onReplace, blocked, disabled, }: {
2
+ readonly text?: string;
3
+ readonly onReplace?: (value: string, reference: string) => void;
4
+ readonly blocked?: boolean;
5
+ readonly disabled?: boolean;
6
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,23 @@
1
+ import { VaultSecretSummary, VaultSecretKind } from '@belong/codec/vault';
2
+ type Editor = {
3
+ readonly kind: "add";
4
+ } | {
5
+ readonly kind: "replace";
6
+ readonly secret: VaultSecretSummary;
7
+ };
8
+ export declare function SecretEditor({ editor, onDone, initialSecret, inline, disabled, }: {
9
+ readonly editor: Editor;
10
+ readonly onDone: (reference?: string) => void;
11
+ readonly initialSecret?: {
12
+ readonly name: string;
13
+ readonly kind: VaultSecretKind;
14
+ readonly value: string;
15
+ };
16
+ readonly inline?: boolean;
17
+ readonly disabled?: boolean;
18
+ }): import("react").JSX.Element;
19
+ /** Metadata-only query cache; each editor owns its value until save or unmount. */
20
+ export declare function SecretsPanel({ initialAdd }: {
21
+ readonly initialAdd?: boolean;
22
+ }): import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,3 @@
1
+ /** Opens the existing account dialog at Add secret. Never carries secret text. */
2
+ export declare const requestAddSecret: () => void;
3
+ export declare const subscribeAddSecret: (listener: () => void) => (() => void);
@@ -21,6 +21,11 @@ export declare const goalEditRequestBody: (command: GoalEditCommand) => GoalEdit
21
21
  * cap that un-stalled a `budget_limited` goal) gets its own copy distinct
22
22
  * from a plain edit — see `GoalActionOutcome`'s `revived` flag — and one
23
23
  * that left the goal `budget_limited` says it is still stopped (#766).
24
+ *
25
+ * Console P1 — `statusReason` is the goal's reason AFTER the edit. A goal the
26
+ * monthly token quota keeps stopped has no cap to raise (`exhaustedBudgets`
27
+ * is empty), so "every limit it reached has to go above…" would be untrue:
28
+ * it says the plain "Goal updated." and the orange notice card explains.
24
29
  */
25
- export declare const goalEditNoticeText: (t: TFunction, outcome: GoalEditOutcome) => string;
30
+ export declare const goalEditNoticeText: (t: TFunction, outcome: GoalEditOutcome, statusReason?: string | null) => string;
26
31
  export {};
@@ -0,0 +1,9 @@
1
+ import { QuotaRefusal } from '../api/quota-refusal.ts';
2
+ /**
3
+ * Console P1 (TS-DOCK-01) — classify a failed send handed to `useChat`'s
4
+ * `onError` as a monthly-quota refusal (the body schema and its rules live in
5
+ * `api/quota-refusal.ts`). `null` when it is not one — the goal and generic
6
+ * error paths still own it. The goal classifier (`goal-cap-notice.ts`)
7
+ * returns `null` for this body, so the two never both claim one failure.
8
+ */
9
+ export declare const quotaNoticeFromError: (error: unknown) => QuotaRefusal | null;
@@ -39,6 +39,16 @@ export declare const peekCustomCssVars: () => Record<string, string>;
39
39
  export declare const activePalette: (theme: BelongTheme) => BelongThemePalette;
40
40
  /** Pick a readable foreground (near-black or white) for text on `color`. */
41
41
  export declare const contrastForeground: (color: string) => string;
42
+ /** WCAG contrast ratio of two colours, or null when either can't be parsed. */
43
+ export declare const contrastRatio: (first: string, second: string) => number | null;
44
+ /**
45
+ * The background of inline code in the user's bubble. The chip's text is the
46
+ * bubble's own, so the chip must be derived from that pair: any fixed grey goes
47
+ * unreadable on some bubble (white text on a pale chip, on a bright accent).
48
+ * A roomy pair gets a gentle tint; a tight one moves away from the text until
49
+ * the code is readable, even when the bubble's own text falls short of AA.
50
+ */
51
+ export declare const userBubbleCodeBackground: (bubble: string, foreground: string) => string;
42
52
  /** Recolor only the brand/primary family with `accent`; leave bg/text/border. */
43
53
  export declare const applyAccent: (palette: BelongThemePalette, accent: string) => BelongThemePalette;
44
54
  export declare const toggleThemeMode: () => void;
@@ -31,8 +31,18 @@ export type SpawnAgentLineResult = {
31
31
  * they got exactly that. The caller must not navigate and must not surface a
32
32
  * message. Distinct from `create_failed` precisely so it can be told apart.
33
33
  */
34
+ /**
35
+ * `superseded` is quiet too: the mint succeeded, but the user went to another
36
+ * chat while it was out. The agent keeps its chip; nothing may navigate.
37
+ */
34
38
  | {
35
39
  readonly ok: false;
36
- readonly reason: "cap_reached" | "create_failed" | "line_released";
40
+ readonly reason: "cap_reached" | "create_failed" | "line_released" | "superseded";
37
41
  };
38
- export declare const spawnAgentLine: (fetchFn?: typeof fetch) => Promise<SpawnAgentLineResult>;
42
+ /**
43
+ * `onLineReserved` runs synchronously once the line is reserved and BEFORE the
44
+ * mint's round trip, so the dock can show the new chat on the click itself. It
45
+ * does not run when the spawn is refused up front (at the cap, or no workspace).
46
+ */
47
+ export type SpawnAgent = (onLineReserved: (line: number) => void) => Promise<SpawnAgentLineResult>;
48
+ export declare const spawnAgentLine: (fetchFn?: typeof fetch, onLineReserved?: (line: number) => void) => Promise<SpawnAgentLineResult>;
@@ -273,8 +273,11 @@ export declare const deliverAgentReply: (text: string) => void;
273
273
  * ChatRoute calls this when the delegated run FAILS (stream error, run_error).
274
274
  * Without it the call stays silently "Working…" forever — the voice agent
275
275
  * must tell the user something went wrong and offer to retry.
276
+ *
277
+ * `nextStep`: what the voice offers. A refused answer (#974) is not fixed by
278
+ * asking again, so it points at a new conversation, as the dock's notice does.
276
279
  */
277
- export declare const deliverAgentFailure: (message: string) => void;
280
+ export declare const deliverAgentFailure: (message: string, nextStep?: "try_again" | "new_conversation") => void;
278
281
  /** A background line finished: converge its chip. Nothing is spoken — see
279
282
  * this section's header. */
280
283
  export declare const deliverLineReply: (line: number) => void;
@@ -239,10 +239,22 @@ export declare const en: {
239
239
  readonly reconnectingBadge: "reconnecting";
240
240
  readonly incompleteTask: "Paused — unfinished";
241
241
  readonly resumingAfterPause: "Taking longer than expected — picking it back up…";
242
+ readonly answerBlocked: "That answer was blocked before it finished. You can start a new conversation. If it keeps happening, contact support.";
242
243
  readonly open: "Open";
243
244
  readonly reconnectRateLimited: "{{provider}} is busy — trying again automatically in {{seconds}}s.";
244
245
  readonly reconnectRateLimitedStill: "{{provider}} is still busy. We'll keep trying on our own.";
245
246
  };
247
+ readonly quota: {
248
+ readonly notice: {
249
+ readonly exhausted: "You've used this month's tokens for {{product}}. They reset on {{resetDate}}. Ask your {{product}} admin if you need more.";
250
+ readonly exhaustedNoDate: "You've used this month's tokens for {{product}}. Ask your {{product}} admin if you need more.";
251
+ readonly exhaustedNoProduct: "You've used this month's tokens. They reset on {{resetDate}}. Ask your admin if you need more.";
252
+ readonly exhaustedNoProductNoDate: "You've used this month's tokens. Ask your admin if you need more.";
253
+ readonly blocked: "Your access to the agent in {{product}} is paused. Ask your {{product}} admin to turn it back on.";
254
+ readonly blockedNoProduct: "Your access to the agent is paused. Ask your admin to turn it back on.";
255
+ readonly scheduleSkipped: "Skipped: this month's tokens are used up.";
256
+ };
257
+ };
246
258
  readonly myUsage: {
247
259
  readonly thisMonth: "This month";
248
260
  readonly today: "Today";
@@ -375,8 +387,12 @@ export declare const en: {
375
387
  usageDescription: string;
376
388
  about: string;
377
389
  aboutDescription: string;
390
+ secrets: string;
391
+ secretsDescription: string;
378
392
  apiKeys: string;
379
393
  apiKeysDescription: string;
394
+ guide: string;
395
+ guideDescription: string;
380
396
  apiKeysName: string;
381
397
  apiKeysCreate: string;
382
398
  apiKeysRevoke: string;
@@ -501,10 +517,12 @@ export declare const en: {
501
517
  readonly sharedConflict: "Someone updated this task while you were editing. Your text is still here. Copy any changes you want to keep, then reopen the editor to load the latest version.";
502
518
  readonly sharedReadOnly: "You no longer have edit access. Your unsaved changes are still here.";
503
519
  readonly templateUnavailable: "The linked HTML template could not be read. Ask the owner to restore it, then resume this task.";
520
+ readonly sharedOwnerUnavailable: "This shared task is unavailable right now. Resume it when its owner's workspace is back.";
504
521
  readonly cliReconnectRequired: "Simetrik couldn't be reached during this run. It reconnects on its own the next time you open Simetrik.";
505
522
  readonly deliveryFailed: "The task ran but couldn't send its result: every message or email it tried to send failed. Check that its Slack, Teams or email connection is still connected.";
506
523
  readonly cliUnavailable: "Simetrik didn't respond during this run, so nothing could be checked and no email was sent.";
507
524
  readonly emailNotPrepared: "This run ended before it finished its check, so no email was sent. Open the run to see what stopped it.";
525
+ readonly runIncomplete: "This run stopped before it finished, so its work may be partial. Open its conversation to see where it stopped.";
508
526
  readonly viewTitle: "Scheduled";
509
527
  readonly subtitle: "Run work automatically, even when you're away";
510
528
  readonly newTask: "New task";
@@ -517,6 +535,7 @@ export declare const en: {
517
535
  readonly loading: "Loading scheduled tasks…";
518
536
  readonly empty: "No scheduled tasks yet";
519
537
  readonly emptyHint: "Create one to run a prompt later — once or on a repeating schedule.";
538
+ readonly emptyProjectHint: "Or start a project to share tasks and files with your team.";
520
539
  readonly noResults: "No matches for “{{q}}”";
521
540
  readonly loadError: "Couldn't load scheduled tasks.";
522
541
  readonly loadMore: "Load more";
@@ -571,6 +590,10 @@ export declare const en: {
571
590
  readonly summaryDaily: "Daily at {{time}}";
572
591
  readonly summaryWeekdays: "Weekdays at {{time}}";
573
592
  readonly summaryWeekly: "Every {{day}} at {{time}}";
593
+ readonly recurrenceCustomWeekly: "Custom weekly";
594
+ readonly weekdaysLabel: "Days of the week";
595
+ readonly daysRequired: "Select at least one day.";
596
+ readonly summaryCustomWeekly: "Every {{day}} at {{time}}";
574
597
  readonly summaryInterval: "Every {{minutes}} min";
575
598
  readonly summaryManual: "Manual only";
576
599
  readonly timezoneSuffix: "({{timezone}})";
@@ -629,6 +652,7 @@ export declare const en: {
629
652
  readonly runStatusNeedsAttention: "Needs attention";
630
653
  readonly runStatusCompleted: "Completed";
631
654
  readonly runStatusFailed: "Failed";
655
+ readonly runStatusStoppedEarly: "Stopped early";
632
656
  readonly runNeedsAttentionHint: "Waiting for your input.";
633
657
  readonly manualRun: "Manual run";
634
658
  readonly manualRunPaused: "Manual run while paused";
@@ -898,6 +922,34 @@ export declare const en: {
898
922
  readonly ageDays: "{{count}}d ago";
899
923
  readonly attachmentFallback: "attachment";
900
924
  };
925
+ readonly guide: {
926
+ readonly summaryTitle: "In 30 seconds";
927
+ readonly searchPlaceholder: "Search the guide";
928
+ readonly searchLabel: "Search the guide";
929
+ readonly commonQuestions: "Common questions";
930
+ readonly topics: "Topics";
931
+ readonly backToGuide: "Guide";
932
+ readonly backLabel: "Back to the guide";
933
+ readonly resultsCount_one: "{{count}} result";
934
+ readonly resultsCount_other: "{{count}} results";
935
+ readonly noResults: "Nothing in the guide matches “{{query}}”.";
936
+ readonly loading: "Loading the guide…";
937
+ readonly loadFailed: "Couldn't load the guide.";
938
+ readonly unavailable: "The guide isn't available here yet.";
939
+ readonly retry: "Try again";
940
+ readonly figures: {
941
+ readonly composer: {
942
+ readonly alt: "The message box with three numbered parts: 1, the percentage above the box; 2, the mode button; 3, the activity line in the conversation.";
943
+ };
944
+ readonly sharedTask: {
945
+ readonly alt: "The same scheduled task active in two accounts: the original and a shared copy. Each active copy runs on its own, so the task runs twice at the same time.";
946
+ readonly original: "Original task · first account";
947
+ readonly copy: "Shared copy · second account";
948
+ readonly total_one: "{{count}} run at {{time}}";
949
+ readonly total_other: "{{count}} runs at {{time}}";
950
+ };
951
+ };
952
+ };
901
953
  readonly feedback: {
902
954
  readonly goodResponse: "Good response";
903
955
  readonly badResponse: "Bad response";
@@ -1362,6 +1414,34 @@ export declare const en: {
1362
1414
  readonly nextBranch: "Next branch";
1363
1415
  readonly branchPage: "{{current}} of {{total}}";
1364
1416
  };
1417
+ readonly vault: {
1418
+ readonly title: "Secrets";
1419
+ readonly description: "Save credentials for your own use across workspaces. Only their names and references are shown to the agent.";
1420
+ readonly add: "Add secret";
1421
+ readonly empty: "No secrets saved.";
1422
+ readonly loading: "Loading secrets…";
1423
+ readonly unavailable: "Secrets are unavailable here. Remove credentials from your message before sending.";
1424
+ readonly name: "Name";
1425
+ readonly nameHint: "Use lowercase letters, numbers and hyphens. Names cannot be changed.";
1426
+ readonly kind: "Kind";
1427
+ readonly apiKey: "API key";
1428
+ readonly pem: "PEM private key";
1429
+ readonly value: "Secret value";
1430
+ readonly save: "Save";
1431
+ readonly saveSecret: "Save secret";
1432
+ readonly captureHint: "Secret detected. Save it securely; only its reference will be included in your message.";
1433
+ readonly saving: "Saving…";
1434
+ readonly cancel: "Cancel";
1435
+ readonly replace: "Replace value";
1436
+ readonly delete: "Delete";
1437
+ readonly deleteConfirm: "Delete {{name}}? Commands using this reference will no longer work.";
1438
+ readonly nameTaken: "That name is already in use.";
1439
+ readonly notFound: "This secret no longer exists. Refresh and try again.";
1440
+ readonly invalidInput: "Check the name and secret value.";
1441
+ readonly requestFailed: "Could not update secrets. Try again.";
1442
+ readonly forbidden: "You do not have access to secrets.";
1443
+ readonly pasteBlocked: "This text looks like a credential. Remove it from your message and save it as a secret.";
1444
+ };
1365
1445
  readonly common: {
1366
1446
  readonly language: "Language";
1367
1447
  readonly retry: "Retry";
@@ -1638,6 +1718,8 @@ export declare const en: {
1638
1718
  readonly newGoal: "Start a new goal";
1639
1719
  readonly newGoalHint: "Say what the new goal should get done…";
1640
1720
  readonly exit: "Exit goal mode";
1721
+ readonly quotaHeadline: "Paused";
1722
+ readonly quotaDetail: "This month's tokens are used up";
1641
1723
  };
1642
1724
  readonly composerHint: "Tell it what to try instead…";
1643
1725
  };
@@ -1769,7 +1851,10 @@ export declare const en: {
1769
1851
  };
1770
1852
  readonly chat: {
1771
1853
  readonly queued: "Queued";
1854
+ readonly nextStepLabel: "Suggested next step";
1855
+ readonly nextStepDismiss: "Dismiss suggestion";
1772
1856
  readonly notDelivered: "Not delivered — please resend";
1857
+ readonly notSent: "Not sent";
1773
1858
  readonly runFailed: "Run failed";
1774
1859
  readonly uploadFailed: "Attachment upload failed — remove it or try again.";
1775
1860
  readonly uploadRejectedType: "“{{filename}}” isn’t a file type that can be attached — remove it. Text, data, config, code, document and image files work.";
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Settings → Guide chrome (the Simetrik agent Guide): the hub's headings, the
3
+ * search box, the article back button, the loading and failure lines, and the
4
+ * labels the two figures draw that the dock has no catalog entry for yet.
5
+ *
6
+ * The articles themselves are served by belong-cloud; only chrome lives here.
7
+ * A figure label that the real dock already shows (the mode name, the activity
8
+ * line, the composer placeholder, a schedule's status and cadence) is NOT
9
+ * repeated here: the figures read the dock's own entry, so they cannot drift.
10
+ * Quiet by design (§42): the failure line is calm and offers a retry.
11
+ */
12
+ export declare const guideEn: {
13
+ readonly guide: {
14
+ readonly summaryTitle: "In 30 seconds";
15
+ readonly searchPlaceholder: "Search the guide";
16
+ readonly searchLabel: "Search the guide";
17
+ readonly commonQuestions: "Common questions";
18
+ readonly topics: "Topics";
19
+ readonly backToGuide: "Guide";
20
+ readonly backLabel: "Back to the guide";
21
+ readonly resultsCount_one: "{{count}} result";
22
+ readonly resultsCount_other: "{{count}} results";
23
+ readonly noResults: "Nothing in the guide matches “{{query}}”.";
24
+ readonly loading: "Loading the guide…";
25
+ readonly loadFailed: "Couldn't load the guide.";
26
+ readonly unavailable: "The guide isn't available here yet.";
27
+ readonly retry: "Try again";
28
+ readonly figures: {
29
+ readonly composer: {
30
+ readonly alt: "The message box with three numbered parts: 1, the percentage above the box; 2, the mode button; 3, the activity line in the conversation.";
31
+ };
32
+ readonly sharedTask: {
33
+ readonly alt: "The same scheduled task active in two accounts: the original and a shared copy. Each active copy runs on its own, so the task runs twice at the same time.";
34
+ readonly original: "Original task · first account";
35
+ readonly copy: "Shared copy · second account";
36
+ readonly total_one: "{{count}} run at {{time}}";
37
+ readonly total_other: "{{count}} runs at {{time}}";
38
+ };
39
+ };
40
+ };
41
+ };
42
+ export declare const guideEs: {
43
+ guide: {
44
+ summaryTitle: string;
45
+ searchPlaceholder: string;
46
+ searchLabel: string;
47
+ commonQuestions: string;
48
+ topics: string;
49
+ backToGuide: string;
50
+ backLabel: string;
51
+ resultsCount_one: string;
52
+ resultsCount_other: string;
53
+ noResults: string;
54
+ loading: string;
55
+ loadFailed: string;
56
+ unavailable: string;
57
+ retry: string;
58
+ figures: {
59
+ composer: {
60
+ alt: string;
61
+ };
62
+ sharedTask: {
63
+ alt: string;
64
+ original: string;
65
+ copy: string;
66
+ total_one: string;
67
+ total_other: string;
68
+ };
69
+ };
70
+ };
71
+ };
72
+ export declare const guidePt: {
73
+ guide: {
74
+ summaryTitle: string;
75
+ searchPlaceholder: string;
76
+ searchLabel: string;
77
+ commonQuestions: string;
78
+ topics: string;
79
+ backToGuide: string;
80
+ backLabel: string;
81
+ resultsCount_one: string;
82
+ resultsCount_other: string;
83
+ noResults: string;
84
+ loading: string;
85
+ loadFailed: string;
86
+ unavailable: string;
87
+ retry: string;
88
+ figures: {
89
+ composer: {
90
+ alt: string;
91
+ };
92
+ sharedTask: {
93
+ alt: string;
94
+ original: string;
95
+ copy: string;
96
+ total_one: string;
97
+ total_other: string;
98
+ };
99
+ };
100
+ };
101
+ };
102
+ export declare const guideIt: {
103
+ guide: {
104
+ summaryTitle: string;
105
+ searchPlaceholder: string;
106
+ searchLabel: string;
107
+ commonQuestions: string;
108
+ topics: string;
109
+ backToGuide: string;
110
+ backLabel: string;
111
+ resultsCount_one: string;
112
+ resultsCount_other: string;
113
+ noResults: string;
114
+ loading: string;
115
+ loadFailed: string;
116
+ unavailable: string;
117
+ retry: string;
118
+ figures: {
119
+ composer: {
120
+ alt: string;
121
+ };
122
+ sharedTask: {
123
+ alt: string;
124
+ original: string;
125
+ copy: string;
126
+ total_one: string;
127
+ total_other: string;
128
+ };
129
+ };
130
+ };
131
+ };