@belonguniverseai/react-sdk 0.6.26 → 0.6.28

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 (129) hide show
  1. package/README.md +36 -0
  2. package/dist/api/account-connectors.d.ts +2 -2
  3. package/dist/api/account-scope.d.ts +75 -0
  4. package/dist/api/artifact-actions.d.ts +29 -0
  5. package/dist/api/client-identity.d.ts +3 -1
  6. package/dist/api/client.d.ts +1972 -226
  7. package/dist/api/goals.d.ts +4 -4
  8. package/dist/api/live-artifacts.d.ts +197 -0
  9. package/dist/api/my-usage.d.ts +28 -0
  10. package/dist/api/queries.d.ts +6 -4
  11. package/dist/api/query-keys.d.ts +44 -3
  12. package/dist/api/task-schedule-sharing.d.ts +7 -4
  13. package/dist/api/task-schedules.d.ts +20 -17
  14. package/dist/app/dock-story-data.d.ts +10 -6
  15. package/dist/component/BelongWidget.d.ts +4 -1
  16. package/dist/component/{abnfDiagram-N423BO3Z-DpQ_UaNq.js → abnfDiagram-N423BO3Z-BGC_KU0K.js} +4 -4
  17. package/dist/component/{arc-BoxI9KQB.js → arc-BpIEtZvJ.js} +2 -2
  18. package/dist/component/{architectureDiagram-T3A2C74G-C0Pxx-k7.js → architectureDiagram-T3A2C74G-DYlEVfnh.js} +3 -3
  19. package/dist/component/{blockDiagram-VBNYF7ZC-CPX5VZHq.js → blockDiagram-VBNYF7ZC-BWDnhAW1.js} +4 -4
  20. package/dist/component/{c4Diagram-5PPSVZJV-6GrzIAcz.js → c4Diagram-5PPSVZJV-VKL0Shn2.js} +3 -3
  21. package/dist/component/{channel-Dp0k-SEg.js → channel-gGd0pNDR.js} +2 -2
  22. package/dist/component/{chunk-2GRJ4B5K-CTz4CZNM.js → chunk-2GRJ4B5K-CEt4y1jX.js} +2 -2
  23. package/dist/component/{chunk-2Q5K7J3B-Bg9gj6WB.js → chunk-2Q5K7J3B-Dj2wrNzr.js} +2 -2
  24. package/dist/component/{chunk-5RXB4S5H-SJVXjTS4.js → chunk-5RXB4S5H-oJQEn1bH.js} +5 -5
  25. package/dist/component/{chunk-5VM5RSS4-CCi9rnUJ.js → chunk-5VM5RSS4-DddP8MPP.js} +2 -2
  26. package/dist/component/{chunk-6Q2QTUOP-DxQKGpDM.js → chunk-6Q2QTUOP-CppUJwrF.js} +2 -2
  27. package/dist/component/{chunk-GF5L2VYU-C1soxsXo.js → chunk-GF5L2VYU--hyUlO9v.js} +6 -6
  28. package/dist/component/{chunk-JWPE2WC7-3wshSHI2.js → chunk-JWPE2WC7-CN0Ieqel.js} +2 -2
  29. package/dist/component/{chunk-KBJHAD2P-DQdZO07y.js → chunk-KBJHAD2P-BWhCQoHz.js} +2 -2
  30. package/dist/component/{chunk-RYQCIY6F-DUaZ-HUS.js → chunk-RYQCIY6F-BgNewpQe.js} +2 -2
  31. package/dist/component/{chunk-XXDRQBXY-D3NSjj_n.js → chunk-XXDRQBXY-mNH171OF.js} +2 -2
  32. package/dist/component/{classDiagram-JCYQIIEL-BVRygNRR.js → classDiagram-JCYQIIEL-UjZbWotD.js} +3 -3
  33. package/dist/component/{classDiagram-v2-OCEON4UE-BVRygNRR.js → classDiagram-v2-OCEON4UE-UjZbWotD.js} +3 -3
  34. package/dist/component/{cose-bilkent-JH36ORCC-DLTvBiOo.js → cose-bilkent-JH36ORCC-lsVWGlMj.js} +2 -2
  35. package/dist/component/{cynefinDiagram-MW4NZA55-xK50k2_4.js → cynefinDiagram-MW4NZA55-B5Ss0zoy.js} +3 -3
  36. package/dist/component/{dagre-VZM6K2ZE-DMUwiPX1.js → dagre-VZM6K2ZE-DisWRVfU.js} +3 -3
  37. package/dist/component/{diagram-7IWD3JNH-Cn6oaVgE.js → diagram-7IWD3JNH-B2QrdsOh.js} +4 -4
  38. package/dist/component/{diagram-B4RE2ZJO-Dc_LVByi.js → diagram-B4RE2ZJO-Bs8l4THz.js} +3 -3
  39. package/dist/component/{diagram-LBJQPF4R-y80jmIxC.js → diagram-LBJQPF4R-JTadtYMW.js} +3 -3
  40. package/dist/component/{diagram-Q27KOJAE-Bp6njNLR.js → diagram-Q27KOJAE-BQC33flc.js} +4 -4
  41. package/dist/component/{diagram-UB23O5K3-D3X1PDYF.js → diagram-UB23O5K3-ujC22dQx.js} +3 -3
  42. package/dist/component/{ebnfDiagram-BXEA7PRR-9Lw8nzKe.js → ebnfDiagram-BXEA7PRR-0WnF2wzt.js} +4 -4
  43. package/dist/component/{erDiagram-JOGREHBK-CcG_SaTj.js → erDiagram-JOGREHBK-CqgMsd5R.js} +5 -5
  44. package/dist/component/{flowDiagram-UKHOOZJN-BiabESAj.js → flowDiagram-UKHOOZJN-BOM0P8Mk.js} +7 -7
  45. package/dist/component/{ganttDiagram-PKOTCBZU-BAfZiFRN.js → ganttDiagram-PKOTCBZU-WeRFC1th.js} +3 -3
  46. package/dist/component/{gitGraphDiagram-DS77QQ5N-2_hBA0gy.js → gitGraphDiagram-DS77QQ5N-CS8L-BA8.js} +4 -4
  47. package/dist/component/{highlighted-body-OFNGDK62-BWKA8a2L.js → highlighted-body-OFNGDK62-CGejnMyq.js} +2 -2
  48. package/dist/component/index.js +2 -2
  49. package/dist/component/{infoDiagram-6WML65LV-C-P8lJtc.js → infoDiagram-6WML65LV-CQQhytkd.js} +2 -2
  50. package/dist/component/{ishikawaDiagram-WSZJBQD7-CkTFVaSp.js → ishikawaDiagram-WSZJBQD7-CjDo3-zt.js} +2 -2
  51. package/dist/component/{journeyDiagram-NVQOT4AX-CVW--vNB.js → journeyDiagram-NVQOT4AX-BCCoblta.js} +5 -5
  52. package/dist/component/{kanban-definition-27J2QSJJ-5EmiKkud.js → kanban-definition-27J2QSJJ-DgTIrgvB.js} +3 -3
  53. package/dist/component/{linear-CSKvOjpb.js → linear-BOaza_dp.js} +2 -2
  54. package/dist/component/{mermaid-GHXKKRXX-DJmRTUDm.js → mermaid-GHXKKRXX-BAq5-Vj8.js} +54487 -50019
  55. package/dist/component/{mindmap-definition-FAOFIHXS-D8kuCYBh.js → mindmap-definition-FAOFIHXS-D1oolR3A.js} +4 -4
  56. package/dist/component/{pegDiagram-VL7TDLO6-BTfnYOZL.js → pegDiagram-VL7TDLO6-C9UxqvBP.js} +4 -4
  57. package/dist/component/{pieDiagram-7S7Q4E2Y-CzbOJQ6u.js → pieDiagram-7S7Q4E2Y-I5IXzOZM.js} +4 -4
  58. package/dist/component/{quadrantDiagram-CIZ2JOQS-BCLm-h12.js → quadrantDiagram-CIZ2JOQS-DPDFBhEd.js} +3 -3
  59. package/dist/component/{railroadDiagram-AXF67PYL-DxjbsMsY.js → railroadDiagram-AXF67PYL-DIAkhVTf.js} +4 -4
  60. package/dist/component/{requirementDiagram-LRYGKXZP-7CT3WVcX.js → requirementDiagram-LRYGKXZP-DBEmV-Qy.js} +4 -4
  61. package/dist/component/{sankeyDiagram-W5VNT64P-P0xeL0DB.js → sankeyDiagram-W5VNT64P-BEeDyDj7.js} +2 -2
  62. package/dist/component/{sequenceDiagram-SI44F4Z6-BZwzqGo7.js → sequenceDiagram-SI44F4Z6-WYcXWUHF.js} +4 -4
  63. package/dist/component/{sizeCapture-X5ZJPWSS-BmFHn5uM.js → sizeCapture-X5ZJPWSS-BqDBRpiS.js} +2 -2
  64. package/dist/component/{stateDiagram-OKZ733FA-CVuv1e4U.js → stateDiagram-OKZ733FA-CfYfR0OH.js} +3 -3
  65. package/dist/component/{stateDiagram-v2-UEYNNEHI-D9ToaXGa.js → stateDiagram-v2-UEYNNEHI-BSa2VwcQ.js} +3 -3
  66. package/dist/component/{swimlanes-SLNWSIFB-D4imP0Ms.js → swimlanes-SLNWSIFB-C-7mrC4X.js} +4 -4
  67. package/dist/component/{swimlanesDiagram-ULZ7WXOC-BTQ985v3.js → swimlanesDiagram-ULZ7WXOC-DXcMd7U4.js} +3 -3
  68. package/dist/component/{timeline-definition-Z64GVDOM-DAHxnCB-.js → timeline-definition-Z64GVDOM-Dp65E80E.js} +3 -3
  69. package/dist/component/{vennDiagram-T6HMQDX7-K5TNKkRE.js → vennDiagram-T6HMQDX7-CRpZ12TH.js} +2 -2
  70. package/dist/component/{wardleyDiagram-T6FBY63Y-CYU76C7a.js → wardleyDiagram-T6FBY63Y-BupsM8K3.js} +3 -3
  71. package/dist/component/{xychartDiagram-ELKLHX3M-CRncQBO_.js → xychartDiagram-ELKLHX3M-CUnr8Qbu.js} +3 -3
  72. package/dist/components/artifacts/ArtifactDetailSurface.d.ts +37 -0
  73. package/dist/components/artifacts/ArtifactMeta.d.ts +10 -0
  74. package/dist/components/artifacts/ArtifactsListSurface.d.ts +11 -0
  75. package/dist/components/artifacts/BindScheduleDialog.d.ts +39 -0
  76. package/dist/components/artifacts/ConfirmDeleteArtifactDialog.d.ts +9 -0
  77. package/dist/components/artifacts/ConfirmReshareDialog.d.ts +24 -0
  78. package/dist/components/artifacts/artifact-format.d.ts +38 -0
  79. package/dist/components/artifacts/open-artifact-version.d.ts +16 -0
  80. package/dist/components/artifacts/use-artifact-actions.d.ts +32 -0
  81. package/dist/components/embed/ArtifactApprovalDialog.d.ts +8 -0
  82. package/dist/components/embed/ArtifactOperationNoticeLine.d.ts +5 -0
  83. package/dist/components/embed/EmbedComposer.d.ts +5 -1
  84. package/dist/components/embed/EmbedConversation.d.ts +4 -1
  85. package/dist/components/embed/EmbedRail.d.ts +9 -2
  86. package/dist/components/embed/MobileNavBar.d.ts +2 -1
  87. package/dist/components/embed/ResponseModeDial.d.ts +11 -0
  88. package/dist/components/embed/SessionStatsPanel.d.ts +3 -0
  89. package/dist/components/embed/UsageSettings.d.ts +11 -0
  90. package/dist/components/embed/WorkspacePolicySetting.d.ts +1 -0
  91. package/dist/components/embed/format-compact-number.d.ts +8 -0
  92. package/dist/components/embed/use-artifact-operation-notices.d.ts +20 -0
  93. package/dist/components/embed/use-inline-preview-url.d.ts +3 -1
  94. package/dist/components/scheduled/ScheduledDetailSurface.d.ts +9 -0
  95. package/dist/embed/artifact-action-bridge.d.ts +70 -0
  96. package/dist/embed/artifact-operation-notices.d.ts +45 -0
  97. package/dist/embed/artifact-remint-budget.d.ts +19 -0
  98. package/dist/embed/artifact-sandbox-hold.d.ts +10 -0
  99. package/dist/embed/dock-state.d.ts +1 -1
  100. package/dist/embed/global.d.ts +2 -0
  101. package/dist/embed/goal-row-model.d.ts +1 -1
  102. package/dist/embed/presets.d.ts +1 -0
  103. package/dist/embed/response-mode.d.ts +48 -0
  104. package/dist/embed/theme.d.ts +5 -0
  105. package/dist/embed/workspace-policy.d.ts +7 -0
  106. package/dist/i18n/messages/en.d.ts +161 -8
  107. package/dist/i18n/messages/surfaces/aiElements.d.ts +4 -0
  108. package/dist/i18n/messages/surfaces/artifacts.d.ts +304 -0
  109. package/dist/i18n/messages/surfaces/embedMisc.d.ts +84 -0
  110. package/dist/i18n/messages/surfaces/header.d.ts +4 -0
  111. package/dist/i18n/messages/surfaces/myUsage.d.ts +75 -0
  112. package/dist/i18n/messages/surfaces/scheduled.d.ts +22 -2
  113. package/dist/i18n/messages/surfaces/settings.d.ts +28 -0
  114. package/dist/i18n/messages/surfaces/stats.d.ts +4 -12
  115. package/dist/i18n/messages/surfaces/stream.d.ts +120 -0
  116. package/dist/i18n/messages/surfaces/usage.d.ts +0 -8
  117. package/dist/infrastructure/telemetry/first-response-timing.d.ts +51 -0
  118. package/dist/lib/use-now.d.ts +32 -0
  119. package/dist/routes/artifact-detail.d.ts +2 -0
  120. package/dist/routes/artifacts.d.ts +2 -0
  121. package/dist/routes/chat/transcript-row.d.ts +1 -0
  122. package/dist/stream/belong-chat-transport.d.ts +39 -7
  123. package/dist/stream/belong-data-parts.d.ts +10 -0
  124. package/dist/stream/message-parts.d.ts +3 -1
  125. package/dist/stream/queued-message-outbox.d.ts +5 -0
  126. package/dist/stream/select-session-usage.d.ts +9 -0
  127. package/dist/stream/session-stats-csv.d.ts +7 -9
  128. package/dist/types/public.d.ts +4 -4
  129. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Settings → Usage (plan 018): the signed-in user's own consumption, in
3
+ * weighted tokens — month-to-date, today, and a 30-day daily strip.
4
+ *
5
+ * One unit only. The raw input / output / cache counts never reach the dock
6
+ * (`GET /v1/usage` does not send them). Days are UTC days, and the view says so.
7
+ * Quiet by design (§42): primary-coloured bars, muted text, no red. A load
8
+ * failure is one muted line with a retry, and a cloud that predates the route
9
+ * says "not available yet" instead of failing.
10
+ */
11
+ export declare const UsageSettings: () => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function WorkspacePolicySetting(): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Locale-aware compact numbers for the Usage view (plan 018): "1.3M" in
3
+ * English, "1,3 M" in Spanish — `formatTokens` predates the dock's locales and
4
+ * always writes "." and "k". One formatter per locale, built once.
5
+ */
6
+ export declare const formatCompactNumber: (value: number, locale: string) => string;
7
+ /** A full, grouped number for tooltips and screen readers: "1,250,000". */
8
+ export declare const formatWholeNumber: (value: number, locale: string) => string;
@@ -0,0 +1,20 @@
1
+ import { ArtifactOperation } from '@belong/codec/artifact-actions';
2
+ import { ArtifactActionApi } from '../../api/artifact-actions.ts';
3
+ import { ArtifactOperationSighting } from '../../embed/artifact-action-bridge.ts';
4
+ import { ArtifactOperationNotice } from '../../embed/artifact-operation-notices.ts';
5
+ /** Re-read invocations that hold the sandbox at most this often (nothing else may be reading). */
6
+ export declare const ARTIFACT_HOLD_REFRESH_MS = 15000;
7
+ export declare const useArtifactOperationNotices: (input: {
8
+ /** Null when this preview has no actions. A new API (new artifact or workspace) starts over. */
9
+ readonly api: ArtifactActionApi | null;
10
+ /**
11
+ * Starts the dock's automatic Simetrik reconnect, or returns null when this view has no grant
12
+ * scope to reconnect.
13
+ */
14
+ readonly reconnect: (reconnectId: string) => Promise<void> | null;
15
+ }) => {
16
+ readonly notice: ArtifactOperationNotice;
17
+ readonly onOperation: (operation: ArtifactOperation, sighting: ArtifactOperationSighting) => void;
18
+ readonly onReconnectRequired: (reconnectId: string) => void;
19
+ readonly stop: () => void;
20
+ };
@@ -16,5 +16,7 @@ export type InlinePreviewUrl = {
16
16
  } | {
17
17
  readonly status: "ready";
18
18
  readonly url: string;
19
+ readonly actionEnabled?: boolean;
20
+ readonly actionBridgeKey?: string;
19
21
  };
20
- export declare const useInlinePreviewUrl: (target: InlinePreviewTarget | null) => InlinePreviewUrl;
22
+ export declare const useInlinePreviewUrl: (target: InlinePreviewTarget | null, remintSeq?: number) => InlinePreviewUrl;
@@ -2,10 +2,19 @@ import { TaskScheduleDetail, TaskScheduleRun } from '../../api/task-schedules.ts
2
2
  export declare const EmailNotificationIndicator: (props: {
3
3
  readonly notification: TaskScheduleDetail["notification"];
4
4
  readonly shared?: boolean;
5
+ readonly sharedRecipients?: readonly string[] | undefined;
5
6
  }) => import("react").JSX.Element;
6
7
  export declare const MicrosoftTeamsDeliveryIndicator: (props: {
7
8
  readonly delivery: NonNullable<TaskScheduleDetail["microsoftTeamsDelivery"]>;
8
9
  }) => import("react").JSX.Element;
10
+ /**
11
+ * #655: the stable SERIES id integrations use to trigger a schedule. It exists
12
+ * from creation, so it shows for manual and paused schedules before any
13
+ * occurrence or execution id does. Copying is read-only — it never runs work.
14
+ */
15
+ export declare const ScheduleIdField: (props: {
16
+ readonly taskScheduleId: string;
17
+ }) => import("react").JSX.Element;
9
18
  export declare const RunCard: (props: {
10
19
  readonly run: TaskScheduleRun;
11
20
  readonly scheduleTitle: string;
@@ -0,0 +1,70 @@
1
+ import { ArtifactOperation, ArtifactReview } from '@belong/codec/artifact-actions';
2
+ import { ArtifactBridgeApi } from '../api/artifact-actions.ts';
3
+ export type ArtifactApprovalRequest = {
4
+ readonly operation: ArtifactOperation;
5
+ readonly review: ArtifactReview;
6
+ };
7
+ export type ArtifactActionBridge = {
8
+ onLoad: () => void;
9
+ dispose: () => void;
10
+ };
11
+ /**
12
+ * Why a bridge asks its owner for a fresh preview mint (new token, new document key, new frame):
13
+ * `navigation` — a second document loaded in the frame (the report reloaded or navigated itself);
14
+ * `stale` — the bridge was created for a frame that already loaded, or for a key already spent.
15
+ */
16
+ export type ArtifactRemintReason = "navigation" | "stale";
17
+ /**
18
+ * How the parent learned a snapshot: `transition` = it just changed in front of this view (a
19
+ * submission, an approval decision, an observed status read); `snapshot` = a current read the
20
+ * report asked for (get, list, observe's first answer, cancel).
21
+ */
22
+ export type ArtifactOperationSighting = "transition" | "snapshot";
23
+ /** Report requests admitted per window, across every bridge one preview view creates. */
24
+ export declare const ARTIFACT_REQUESTS_PER_WINDOW = 60;
25
+ export declare const ARTIFACT_REQUEST_WINDOW_MS = 60000;
26
+ export type ArtifactRequestWindow = {
27
+ readonly admit: (nowMs: number) => boolean;
28
+ };
29
+ /** Fixed window. Owned by the preview view, so neither a reload nor a re-mint refills it. */
30
+ export declare const createArtifactRequestWindow: () => ArtifactRequestWindow;
31
+ export declare const ARTIFACT_POLL_BASE_MS = 2000;
32
+ /** Ceilings while a status stays the same. Running work changes sooner than work that waits. */
33
+ export declare const ARTIFACT_POLL_RUNNING_MAX_MS = 15000;
34
+ export declare const ARTIFACT_POLL_WAITING_MAX_MS = 30000;
35
+ type PolledStatus = ArtifactOperation["status"];
36
+ /**
37
+ * Delay before the next status read. A new status starts again at 2 s; the same pending status
38
+ * backs off by half each read (running up to 15 s, queued/approval up to 30 s); an unsettled
39
+ * unknown outcome or a failed read doubles up to 30 s.
40
+ */
41
+ export declare const nextArtifactPollDelayMs: (previous: {
42
+ readonly delayMs: number;
43
+ readonly status: PolledStatus | null;
44
+ }, read: PolledStatus | "read_failed") => number;
45
+ /**
46
+ * One bridge per minted preview document. Opaque origins require the exact frame source, a single
47
+ * challenge sent on the frame's FIRST load, and the minted document key; origin "null" is never an
48
+ * authority. The first document is the one the parent navigated the frame to; any later load is a
49
+ * document the report chose (reload or navigation), so the bridge retires and asks for a re-mint
50
+ * rather than offering that document a channel.
51
+ */
52
+ export declare const createArtifactActionBridge: (input: {
53
+ readonly frame: HTMLIFrameElement;
54
+ readonly artifactId: string;
55
+ readonly documentKey: string;
56
+ readonly api: ArtifactBridgeApi;
57
+ readonly currentScopeKey: () => string;
58
+ readonly onApproval: (request: ArtifactApprovalRequest, signal: AbortSignal) => Promise<"approved" | "rejected">;
59
+ readonly onRemint: (reason: ArtifactRemintReason) => void;
60
+ /** Every validated snapshot this bridge received, for trusted parent UI (never the report). */
61
+ readonly onOperation?: (operation: ArtifactOperation, sighting: ArtifactOperationSighting) => void;
62
+ /** An authenticated API refusal needs connection repair; never a report-requested method. */
63
+ readonly onReconnectRequired?: (reconnectId: string) => void;
64
+ /** The frame already finished a load before this bridge existed: its document is unknown. */
65
+ readonly frameAlreadyLoaded?: boolean;
66
+ readonly requestWindow?: ArtifactRequestWindow;
67
+ readonly eventTarget?: Window;
68
+ readonly nowMs?: () => number;
69
+ }) => ArtifactActionBridge;
70
+ export {};
@@ -0,0 +1,45 @@
1
+ import { ArtifactOperation } from '@belong/codec/artifact-actions';
2
+ import { ArtifactOperationSighting } from './artifact-action-bridge.ts';
3
+ export declare const CLI_RECONNECT_REQUIRED = "cli_reconnect_required";
4
+ export type TrackedArtifactOperation = {
5
+ readonly operation: ArtifactOperation;
6
+ readonly receivedAtMs: number;
7
+ /** This view saw it change (a transition) or saw it unsettled: its outcome is news here. */
8
+ readonly seenLive: boolean;
9
+ };
10
+ export type TrackedArtifactOperations = ReadonlyMap<string, TrackedArtifactOperation>;
11
+ /** Latest snapshot wins; an older read finishing late never replaces a newer one. */
12
+ export declare const trackArtifactOperation: (tracked: TrackedArtifactOperations, operation: ArtifactOperation, sighting: ArtifactOperationSighting, nowMs: number) => TrackedArtifactOperations;
13
+ /**
14
+ * Launched, no positive stop evidence, and no longer running normally (its outcome is in, or it is
15
+ * unknown): the user's agent work waits for it, so the parent offers to stop it.
16
+ */
17
+ export declare const awaitsArtifactStop: (operation: ArtifactOperation) => boolean;
18
+ export declare const artifactOperationsAwaitingStop: (tracked: TrackedArtifactOperations) => readonly ArtifactOperation[];
19
+ /**
20
+ * The newest invocation of some action was released without proof it stopped. Older ones are
21
+ * history: a later run of the same action already superseded them.
22
+ */
23
+ export declare const latestReleasedUnconfirmed: (tracked: TrackedArtifactOperations) => boolean;
24
+ /** A reconnect is due for an operation this view watched fail on the Simetrik connection. */
25
+ export declare const needsArtifactReconnect: (entry: TrackedArtifactOperation) => boolean;
26
+ export type ArtifactStopState = "idle" | "stopping" | "unreachable";
27
+ export type ArtifactReconnectState = "idle" | "reconnecting" | "failed";
28
+ export type ArtifactOperationNotice = {
29
+ readonly kind: "none";
30
+ } | {
31
+ readonly kind: "awaiting_stop";
32
+ readonly stop: ArtifactStopState;
33
+ } | {
34
+ readonly kind: "reconnecting";
35
+ } | {
36
+ readonly kind: "reconnect_failed";
37
+ } | {
38
+ readonly kind: "released_unconfirmed";
39
+ };
40
+ /** One line at most, most actionable first. */
41
+ export declare const artifactOperationNotice: (input: {
42
+ readonly tracked: TrackedArtifactOperations;
43
+ readonly stop: ArtifactStopState;
44
+ readonly reconnect: ArtifactReconnectState;
45
+ }) => ArtifactOperationNotice;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * How often one action-enabled preview view re-mints after its report reloads or navigates
3
+ * itself. Each re-mint reloads the real report with a fresh document key; a report that keeps
4
+ * doing it (a `location.reload()` loop, or a page that bounces the frame) must not mint forever,
5
+ * so after the window's allowance the view shows a static state instead.
6
+ */
7
+ export declare const ARTIFACT_SELF_RELOAD_WINDOW_MS = 60000;
8
+ /** Delay before each successive re-mint inside one window. Its length is the per-window cap. */
9
+ export declare const ARTIFACT_REMINT_BACKOFF_MS: readonly number[];
10
+ export type ArtifactRemintDecision = {
11
+ readonly kind: "remint";
12
+ readonly delayMs: number;
13
+ } | {
14
+ readonly kind: "exhausted";
15
+ };
16
+ export type ArtifactRemintBudget = {
17
+ readonly next: (nowMs: number) => ArtifactRemintDecision;
18
+ };
19
+ export declare const createArtifactRemintBudget: () => ArtifactRemintBudget;
@@ -0,0 +1,10 @@
1
+ import { ArtifactOperation } from '@belong/codec/artifact-actions';
2
+ /** Running work owns the sandbox; launched work without stop evidence still fences it. */
3
+ export declare const holdsArtifactSandbox: (operation: Pick<ArtifactOperation, "status" | "stopEvidence">) => boolean;
4
+ /** One slot per preview view; `set` replaces that view's answer, `release` withdraws it. */
5
+ export declare const registerArtifactSandboxHoldSlot: () => {
6
+ readonly set: (holding: boolean) => void;
7
+ readonly release: () => void;
8
+ };
9
+ export declare const peekArtifactSandboxHeld: () => boolean;
10
+ export declare const subscribeArtifactSandboxHold: (listener: () => void) => (() => void);
@@ -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" | "goal" | "files" | "scheduled" | "prompts" | "connectors" | "skills";
8
+ export type DockView = "chat" | "goal" | "files" | "scheduled" | "prompts" | "connectors" | "skills" | "artifacts";
9
9
  export type DockSize = "collapsed" | "expanded" | "fullscreen";
10
10
  export type DockState = {
11
11
  readonly view: DockView;
@@ -1,4 +1,6 @@
1
1
  import { BelongGlobal, BelongInitInput, RouteHandler, UiActionHandler } from '../types/public.ts';
2
+ /** Release listeners and invalidate pending theme reads when an embed leaves. */
3
+ export declare const stopTenantThemeRefresh: () => void;
2
4
  type AgentGrantConfig = {
3
5
  readonly provider: string;
4
6
  readonly scopeExternalId: string | null;
@@ -1,7 +1,7 @@
1
1
  import { GoalElapsed } from './goal-plain-units.ts';
2
2
  import { GoalView } from '../api/goals.ts';
3
3
  export type GoalRowTone = "live" | "calm" | "attention";
4
- export type GoalRowActionKind = "cancel_setup" | "pause" | "resume" | "wake_now" | "details" | "answer" | "review" | "show_me" | "tell_it" | "give_it_more" | "new_goal";
4
+ export type GoalRowActionKind = "cancel_setup" | "pause" | "resume" | "wake_now" | "details" | "answer" | "review" | "show_me" | "tell_it" | "give_it_more" | "new_goal" | "exit_goal";
5
5
  export type GoalRowAction = {
6
6
  readonly kind: GoalRowActionKind;
7
7
  readonly labelKey: string;
@@ -6,6 +6,7 @@ export declare const PRESET_NAME_SCHEMA: z.ZodEnum<{
6
6
  custom: "custom";
7
7
  belong: "belong";
8
8
  simetrik: "simetrik";
9
+ tenant: "tenant";
9
10
  }>;
10
11
  export declare const BELONG_LIGHT_PALETTE: BelongThemePalette;
11
12
  export declare const BELONG_DARK_PALETTE: BelongThemePalette;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The composer's RESPONSE MODE — Fast / Balanced / Smart on a three-stop
3
+ * slider (the Codex app's dial). Every mode is named for its upside: a person
4
+ * picks what they want more of, never "less" of anything.
5
+ *
6
+ * fast → quick answers for simple requests
7
+ * balanced → everyday work
8
+ * smart → the most capable, for complex multi-step work (the default)
9
+ *
10
+ * The dock only ever names a MODE. Which model a mode buys is the backend's
11
+ * call (`response-mode-model.ts`), so no model name ever reaches a customer.
12
+ *
13
+ * "Never picked" is NOT "picked Smart". Until a person picks a mode the dial
14
+ * shows Smart but the dock sends no mode at all, so the deployment decides:
15
+ * its own model today, or the intention model switch where that is enabled. A
16
+ * pick — Smart included — is the person's choice, sent with every message and
17
+ * outranking the switch.
18
+ *
19
+ * A personal preference, not a per-conversation one: the mode a person last
20
+ * picked carries into new chats, the way other assistants remember your last
21
+ * choice. Persisted best-effort to localStorage (zod-validated at the storage
22
+ * perimeter); private mode, disabled storage or a junk value read as "never
23
+ * picked". The transport stamps the pick on every send (beside the locale),
24
+ * and the backend keeps it durable on the message, so a continuation after a
25
+ * reload still runs in the mode the person chose.
26
+ */
27
+ /** Fastest first — the slider's stops, left to right. */
28
+ export declare const RESPONSE_MODES: readonly ["fast", "balanced", "smart"];
29
+ export type ResponseMode = (typeof RESPONSE_MODES)[number];
30
+ /** What the dial shows before a person picks: the deployment's own model. */
31
+ export declare const DEFAULT_RESPONSE_MODE: ResponseMode;
32
+ /** Narrow an untrusted value (storage, a slider position's lookup) to a mode. */
33
+ export declare const parseResponseMode: (value: unknown) => ResponseMode | null;
34
+ /** The mode the person picked, or null when they never did — sends carry a mode only then. */
35
+ export declare const peekResponseModePick: () => ResponseMode | null;
36
+ /** The mode the dial shows: the person's pick, else the default. */
37
+ export declare const peekResponseMode: () => ResponseMode;
38
+ export declare const subscribeResponseMode: (listener: () => void) => (() => void);
39
+ /** Pick `mode` — Smart included — and remember it for this browser. */
40
+ export declare const writeResponseMode: (mode: ResponseMode) => void;
41
+ /** Test-only: back to a browser that never picked a mode. */
42
+ export declare const __resetResponseModeForTest: () => void;
43
+ /** The current mode, re-rendering on change. */
44
+ export declare const useResponseMode: () => ResponseMode;
45
+ /** Ask the API once whether it offers the dial (repeat calls are no-ops). */
46
+ export declare const askResponseModesAvailability: (apiBaseUrl: string) => void;
47
+ /** Whether the composer should show the dial for this API (the shell asked). */
48
+ export declare const useResponseModesAvailable: (apiBaseUrl: string) => boolean;
@@ -4,6 +4,11 @@ export declare const DEFAULT_THEME: BelongTheme;
4
4
  export declare const peekTheme: () => BelongTheme;
5
5
  export declare const subscribeTheme: (listener: () => void) => (() => void);
6
6
  export declare const setTheme: (partial: PartialBelongTheme) => void;
7
+ /** Start a branding scope. Old global prefs cannot override a tenant's default. */
8
+ export declare const configureTenantTheme: (scope: string, inline?: PartialBelongTheme) => void;
9
+ /** Refresh the baseline even while a user-selected style is active. No writes
10
+ * to local preferences: only explicit user/host overrides are persisted. */
11
+ export declare const setPublishedTenantTheme: (partial: PartialBelongTheme | null) => void;
7
12
  /** Switch the active theme style. Built-in presets render their pure palette;
8
13
  * the Custom style overlays the user's accent/cssVars stash. */
9
14
  export declare const applyPreset: (name: PresetName) => void;
@@ -0,0 +1,7 @@
1
+ export declare const peekWorkspacePolicy: () => "open" | "strict";
2
+ /** Report storage failure so the UI never claims a preference was saved when it wasn't. */
3
+ export declare const setWorkspacePolicy: (policy: "open" | "strict") => boolean;
4
+ export declare const useWorkspacePolicy: () => {
5
+ policy: string;
6
+ identified: boolean;
7
+ };
@@ -21,7 +21,6 @@ export declare const en: {
21
21
  readonly closeContext: "Close context";
22
22
  readonly currentPage: "Current page";
23
23
  readonly windowTooltip: "Context window: {{used}} of {{window}} tokens used ({{pct}}%)";
24
- readonly inOut: "Input {{in}} · output {{out}}";
25
24
  readonly turnsThisSessionOne: "{{count}} turn this session";
26
25
  readonly turnsThisSessionOther: "{{count}} turns this session";
27
26
  readonly panel: {
@@ -35,7 +34,6 @@ export declare const en: {
35
34
  };
36
35
  readonly freeSpace: "Free space";
37
36
  readonly estimateNote: "Breakdown is estimated; the total is as reported by the model.";
38
- readonly cacheLine: "Cache: {{read}} read · {{write}} written";
39
37
  readonly autoCompact: "Auto-compact: {{pct}}% of budget";
40
38
  };
41
39
  readonly compactionLabel: "Auto-compact: {{used}} of {{limit}} characters used ({{pct}}%)";
@@ -113,6 +111,35 @@ export declare const en: {
113
111
  readonly toolForgetDone: "Forgot a note";
114
112
  readonly toolForgetFailed: "Couldn't forget the note";
115
113
  readonly toolForgetDetail: "Deleted a saved note about you.";
114
+ readonly toolUsageRunning: "Checking your usage";
115
+ readonly toolUsageDone: "Checked your usage";
116
+ readonly toolUsageFailed: "Couldn't check your usage";
117
+ readonly toolUsageDetail: "Looked up how many tokens you've used.";
118
+ readonly toolCheckBackgroundRunning: "Checking a background command";
119
+ readonly toolCheckBackgroundDone: "Checked a background command";
120
+ readonly toolCheckBackgroundFailed: "Couldn't check the background command";
121
+ readonly toolCheckBackgroundDetail: "Read what a command running in the background wrote.";
122
+ readonly toolWaitBackgroundRunning: "Waiting for a background command";
123
+ readonly toolWaitBackgroundDone: "Waited for a background command";
124
+ readonly toolWaitBackgroundFailed: "Couldn't wait for the background command";
125
+ readonly toolWaitBackgroundDetail: "Waited for a command running in the background to finish.";
126
+ readonly toolStopBackgroundRunning: "Stopping a background command";
127
+ readonly toolStopBackgroundDone: "Stopped a background command";
128
+ readonly toolStopBackgroundFailed: "Couldn't stop the background command";
129
+ readonly toolStopBackgroundDetail: "Stopped a command that was running in the background.";
130
+ readonly toolReadFileRunning: "Reading {{file}}";
131
+ readonly toolReadFileDone: "Read {{file}}";
132
+ readonly toolReadFileFailed: "Couldn't read {{file}}";
133
+ readonly toolReadFileDetail: "Read {{path}}.";
134
+ readonly toolWriteFileRunning: "Writing {{file}}";
135
+ readonly toolWriteFileDone: "Wrote {{file}}";
136
+ readonly toolWriteFileFailed: "Couldn't write {{file}}";
137
+ readonly toolWriteFileDetail: "Wrote {{path}}.";
138
+ readonly toolEditFileRunning: "Editing {{file}}";
139
+ readonly toolEditFileDone: "Edited {{file}}";
140
+ readonly toolEditFileFailed: "Couldn't edit {{file}}";
141
+ readonly toolEditFileDetail: "Edited {{path}}.";
142
+ readonly toolFileUnnamed: "a file";
116
143
  readonly toolSaveSkillRunning: "Saving a skill";
117
144
  readonly toolSaveSkillDone: "Saved a skill";
118
145
  readonly toolSaveSkillFailed: "Couldn't save the skill";
@@ -137,6 +164,7 @@ export declare const en: {
137
164
  readonly browserRefreshView: "Refreshed the page";
138
165
  readonly failedBadge: "failed";
139
166
  readonly actionReadFile: "Read a file";
167
+ readonly actionCheckedUsage: "Checked your usage";
140
168
  readonly actionWroteFile: "Updated a file";
141
169
  readonly actionPublishedArtifact: "Put a report on screen";
142
170
  readonly actionLookedUpSkill: "Looked up a skill";
@@ -214,11 +242,24 @@ export declare const en: {
214
242
  readonly reconnectRateLimited: "{{provider}} is busy — trying again automatically in {{seconds}}s.";
215
243
  readonly reconnectRateLimitedStill: "{{provider}} is still busy. We'll keep trying on our own.";
216
244
  };
245
+ readonly myUsage: {
246
+ readonly thisMonth: "This month";
247
+ readonly today: "Today";
248
+ readonly last30Days: "Last 30 days";
249
+ readonly unit: "tokens";
250
+ readonly explainer: "Tokens measure all the work the agent does for you. Days are counted in UTC.";
251
+ readonly dayValue: "{{date}}: {{tokens}} tokens";
252
+ readonly chartLabel: "Tokens per day over the last 30 days";
253
+ readonly empty: "No usage in the last 30 days.";
254
+ readonly updated: "Updated {{time}} UTC";
255
+ readonly loading: "Loading your usage…";
256
+ readonly loadError: "Couldn't load your usage.";
257
+ readonly retry: "Try again";
258
+ readonly unavailable: "Usage isn't available here yet.";
259
+ };
217
260
  readonly stats: {
218
261
  readonly title: "Session stats";
219
- readonly input: "Input";
220
- readonly output: "Output";
221
- readonly total: "Total";
262
+ readonly tokens: "Tokens";
222
263
  readonly timeRunning: "Time running";
223
264
  readonly turns: "Turns";
224
265
  readonly toolCalls: "Tool calls";
@@ -329,6 +370,8 @@ export declare const en: {
329
370
  voiceDescription: string;
330
371
  history: string;
331
372
  historyDescription: string;
373
+ usage: string;
374
+ usageDescription: string;
332
375
  about: string;
333
376
  aboutDescription: string;
334
377
  apiKeys: string;
@@ -349,6 +392,10 @@ export declare const en: {
349
392
  apiKeysAuthError: string;
350
393
  apiKeysCreateError: string;
351
394
  apiKeysRevokeError: string;
395
+ workspaceScope: string;
396
+ workspaceScopeDescription: string;
397
+ workspaceScopeApplies: string;
398
+ workspaceScopeSaveError: string;
352
399
  profile: string;
353
400
  languageDescription: string;
354
401
  dockPosition: string;
@@ -357,6 +404,7 @@ export declare const en: {
357
404
  light: string;
358
405
  dark: string;
359
406
  presetDescription: string;
407
+ tenantDefault: string;
360
408
  advancedAppearance: string;
361
409
  advancedDescription: string;
362
410
  readRepliesDescription: string;
@@ -438,8 +486,8 @@ export declare const en: {
438
486
  readonly sharedFinished: "This one-time task has already passed. Ask an editor to update its timing.";
439
487
  readonly sharedLimit: "You have reached the active task limit. Pause a task before adding another.";
440
488
  readonly useInWorkspace: "Use in this workspace";
441
- readonly enableHelp: "Runs here using your account and connections. Run history and email recipients belong to this workspace. Make sure the required connections are ready.";
442
- readonly sharedSyncHelp: "Future edits to instructions and timing apply here automatically. You can pause or remove the task in this workspace at any time.";
489
+ readonly enableHelp: "Runs here using your account and connections. Run history and regular recipients belong to this workspace. Make sure the required connections are ready.";
490
+ readonly sharedSyncHelp: "Future edits to instructions, timing, and shared recipients apply here automatically. You can pause or remove the task in this workspace at any time.";
443
491
  readonly templateSynced: "Linked HTML template. Each run uses the latest file from the owner’s workspace.";
444
492
  readonly sharedLabel: "Shared";
445
493
  readonly sharedWorkspaceCount_one: "Shared in {{count}} workspace";
@@ -476,11 +524,16 @@ export declare const en: {
476
524
  readonly lastRun: "Last run {{time}}";
477
525
  readonly dayAtTime: "{{day}} at {{time}}";
478
526
  readonly pausedNotice: "Paused — runs won't start until you resume.";
527
+ readonly scheduleIdLabel: "Schedule ID";
528
+ readonly copyScheduleId: "Copy ID";
479
529
  readonly customEmailLabel: "Custom email enabled";
480
530
  readonly customEmailDescription: "Each run reads the latest version of this template and sends an email only when its condition matches.";
481
531
  readonly customEmailTemplate: "HTML template";
482
532
  readonly emailNotificationLabel: "Completion email enabled";
483
533
  readonly emailRecipients: "Recipients";
534
+ readonly sharedRecipients: "Shared recipients";
535
+ readonly sharedRecipientsHelp: "Sent only from the owner’s original task. Shared delivery pauses when that task is paused.";
536
+ readonly errorRecipientsInvalid: "Enter valid, unique email addresses.";
484
537
  readonly emailAccountRecipient: "Schedule owner's account email";
485
538
  readonly teamsDeliveryLabel: "Microsoft Teams delivery approved";
486
539
  readonly teamsStatusActive: "Active";
@@ -681,6 +734,7 @@ export declare const en: {
681
734
  readonly navPrompts: "Prompts";
682
735
  readonly navConnectors: "Connectors";
683
736
  readonly navSkills: "Skills";
737
+ readonly navApps: "Apps";
684
738
  readonly chatPlanRunning: "Chat — plan running, {{completed}} of {{total}} steps done";
685
739
  readonly devMode: "Dev mode";
686
740
  readonly devModeTitle: "Dev mode (belong:dev)";
@@ -795,6 +849,26 @@ export declare const en: {
795
849
  readonly thisFile: "this file";
796
850
  readonly download: "Download";
797
851
  readonly loadingPreview: "Loading preview…";
852
+ readonly artifactApprovalLabel: "Approve report action";
853
+ readonly artifactApprovalTitle: "Approve {{title}}?";
854
+ readonly artifactApprovalDescription: "This report action runs a registered script using your workspace access.";
855
+ readonly artifactApprovalSelection: "Workspace: {{workspace}}. Selected transactions: {{count}}";
856
+ readonly artifactApprovalOperation: "Operation: {{id}}";
857
+ readonly artifactApprovalVersion: "Script version: {{version}}";
858
+ readonly artifactApprovalReview: "Show full request and script";
859
+ readonly artifactApprovalProvided: "Provided by the report — check these values before approving";
860
+ readonly artifactApprovalTransactions: "Transaction IDs ({{count}})";
861
+ readonly artifactApprovalParameters: "Parameters";
862
+ readonly artifactApprovalNoParameters: "No parameters";
863
+ readonly artifactReportReloadLoop: "This report keeps reloading itself, so it was stopped. Close and reopen the preview to try again.";
864
+ readonly artifactApprovalReject: "Reject";
865
+ readonly artifactApprovalConfirm: "Approve action";
866
+ readonly artifactApprovalPersonal: "Personal";
867
+ readonly artifactHeldNotice: "An earlier report action may still be running. Belong will continue when it stops.";
868
+ readonly artifactHeldStop: "Stop it";
869
+ readonly artifactHeldStopping: "Stopping…";
870
+ readonly artifactHeldUnreachable: "Couldn't reach your workspace. Try again in a moment.";
871
+ readonly artifactReleasedUnconfirmed: "An earlier report action ended before Belong could confirm it stopped. Check its results before you run it again.";
798
872
  readonly devDefault: "default";
799
873
  readonly devModelIdPlaceholder: "model id (blank = env default)";
800
874
  readonly devModelIdTitle: "Exact model id for the selected provider — overrides the env pin";
@@ -806,6 +880,7 @@ export declare const en: {
806
880
  readonly devOverrideActive: "Dev override active — click to change";
807
881
  readonly callLightModelActive: "Calls are stepped down to the light voice model — click for the best voice";
808
882
  readonly agentWorking: "{{name}} is working…";
883
+ readonly waitingForReportAction: "Waiting for a report action to finish…";
809
884
  };
810
885
  readonly connectors: {
811
886
  readonly setupChooseAccount: "Several accounts are connected. Open Connectors and choose the account to manage, then continue your request.";
@@ -1040,6 +1115,74 @@ export declare const en: {
1040
1115
  readonly deleteConfirmBody: "The agent will lose access to its tools. This can't be undone.";
1041
1116
  readonly deleteConfirm: "Delete connector";
1042
1117
  };
1118
+ readonly artifacts: {
1119
+ readonly viewTitle: "Apps";
1120
+ readonly viewDescription: "Pages the assistant keeps up to date, and that you can act on. Share one with a link that always shows the latest.";
1121
+ readonly slotCounter: "{{used}} of {{limit}}";
1122
+ readonly atCapHint: "You're using every slot. Delete one to make room for a new app.";
1123
+ readonly versionLine: "v{{version}} · refreshed {{when}}";
1124
+ readonly versionLineNeverRefreshed: "v{{version}} · not refreshed yet";
1125
+ readonly notScheduled: "Not scheduled";
1126
+ readonly scheduledUnnamed: "On a schedule";
1127
+ readonly overdue: "Hasn't refreshed since {{when}}";
1128
+ readonly shareLive: "Link works until {{when}}";
1129
+ readonly shareExpired: "Link expired";
1130
+ readonly shareRevoked: "Link turned off";
1131
+ readonly shareNever: "Not shared";
1132
+ readonly copyLink: "Copy link";
1133
+ readonly copied: "Copied";
1134
+ readonly share: "Share";
1135
+ readonly shareAgain: "Share again";
1136
+ readonly extend: "Extend the link";
1137
+ readonly revoke: "Turn the link off";
1138
+ readonly rebind: "Change the schedule";
1139
+ readonly delete: "Delete";
1140
+ readonly open: "Open";
1141
+ readonly menuAria: "More actions for {{name}}";
1142
+ readonly emptyTitle: "No apps yet";
1143
+ readonly emptyHint: "Ask the assistant to keep a report up to date — it will show up here with a link you can share.";
1144
+ readonly featureAbsent: "Apps aren't available here yet.";
1145
+ readonly loading: "Loading your apps…";
1146
+ readonly loadError: "Couldn't load your apps.";
1147
+ readonly retry: "Try again";
1148
+ readonly noticeShareFailed: "Couldn't create a link for {{name}}. Try again.";
1149
+ readonly noticeExtendFailed: "Couldn't extend the link for {{name}}. Try again.";
1150
+ readonly noticeRevokeFailed: "Couldn't turn off the link for {{name}}. Try again.";
1151
+ readonly noticeDeleteFailed: "Couldn't delete {{name}}. Try again.";
1152
+ readonly noticeRebindFailed: "Couldn't change the schedule for {{name}}. Try again.";
1153
+ readonly noticeScheduleGone: "That schedule no longer exists.";
1154
+ readonly noticeCopyFailed: "Couldn't copy the link. Select it and copy it by hand.";
1155
+ readonly noticeOpenFailed: "Couldn't open that version. Try again.";
1156
+ readonly noticeGone: "That app no longer exists.";
1157
+ readonly noticeForbidden: "You don't have permission to change apps here.";
1158
+ readonly noticeResharedRotated: "New link created. The link you shared before no longer works.";
1159
+ readonly reshareTitle: "Share {{name}} again?";
1160
+ readonly reshareDescription: "This creates a new link. The one you shared before stops working for everyone who has it.";
1161
+ readonly reshareConfirm: "Create a new link";
1162
+ readonly cancel: "Cancel";
1163
+ readonly deleteTitle: "Delete this app?";
1164
+ readonly deleteDescription: "{{name}} will be removed, and the link you shared will stop working for everyone who has it.";
1165
+ readonly deleteConfirm: "Delete";
1166
+ readonly deleting: "Deleting…";
1167
+ readonly bindTitle: "Keep {{name}} up to date";
1168
+ readonly bindDescription: "Pick the schedule that should refresh this app.";
1169
+ readonly bindNone: "Not scheduled";
1170
+ readonly bindEmpty: "You don't have any schedules yet.";
1171
+ readonly bindLoading: "Loading your schedules…";
1172
+ readonly bindSearchPlaceholder: "Search your schedules";
1173
+ readonly bindNoResults: "No schedule matches \"{{q}}\".";
1174
+ readonly bindLoadMore: "Show more schedules";
1175
+ readonly bindLoadError: "Couldn't load your schedules.";
1176
+ readonly bindLoadMoreError: "Couldn't load more schedules. Try again.";
1177
+ readonly bindConfirm: "Save";
1178
+ readonly detailBack: "Apps";
1179
+ readonly detailCurrent: "Current version";
1180
+ readonly detailHistory: "Version history";
1181
+ readonly detailVersion: "v{{version}}";
1182
+ readonly detailPublished: "Published {{when}}";
1183
+ readonly detailNoSummary: "No summary for this version";
1184
+ readonly detailNotFound: "This app no longer exists.";
1185
+ };
1043
1186
  readonly app: {
1044
1187
  readonly uploadNoWorkspace: "Open the terminal once so your workspace exists, then upload.";
1045
1188
  readonly uploadTooLarge: "{{name}} is too large (max 25 MB).";
@@ -1100,6 +1243,7 @@ export declare const en: {
1100
1243
  readonly terminalFailed: "failed";
1101
1244
  readonly terminalRunning: "running…";
1102
1245
  readonly terminalStillRunning: "still running…";
1246
+ readonly terminalInBackground: "running in the background";
1103
1247
  readonly copyCommand: "Copy command";
1104
1248
  readonly waitingForOutput: "waiting for output…";
1105
1249
  readonly previousBranch: "Previous branch";
@@ -1122,6 +1266,14 @@ export declare const en: {
1122
1266
  readonly modeApproveDescription: "Ask before each consequential action";
1123
1267
  readonly modePlanLabel: "Plan";
1124
1268
  readonly modePlanDescription: "Propose a plan — no actions";
1269
+ readonly responseMode: "Response mode: {{mode}}";
1270
+ readonly responseModeTitle: "Response mode";
1271
+ readonly responseModeFastLabel: "Fast";
1272
+ readonly responseModeFastDescription: "Quick answers for simple requests";
1273
+ readonly responseModeBalancedLabel: "Balanced";
1274
+ readonly responseModeBalancedDescription: "Great for everyday work";
1275
+ readonly responseModeSmartLabel: "Smart";
1276
+ readonly responseModeSmartDescription: "Most capable, for complex work";
1125
1277
  };
1126
1278
  readonly conversation: {
1127
1279
  readonly thinking: "Thinking…";
@@ -1292,7 +1444,7 @@ export declare const en: {
1292
1444
  readonly edit: "Edit…";
1293
1445
  readonly clear: "Clear";
1294
1446
  readonly clearTitle: "Clear this goal?";
1295
- readonly clearBody: "The conversation stays. The goal and its history go.";
1447
+ readonly clearBody: "The conversation and its messages stay, and you can keep chatting. The goal stops here — nothing it already did is undone.";
1296
1448
  readonly clearConfirm: "Clear this goal";
1297
1449
  readonly clearKeep: "Keep it";
1298
1450
  readonly failedPause: "Couldn't pause the goal. Try again.";
@@ -1364,6 +1516,7 @@ export declare const en: {
1364
1516
  readonly primary: "Give it more";
1365
1517
  readonly newGoal: "Start a new goal";
1366
1518
  readonly newGoalHint: "Say what the new goal should get done…";
1519
+ readonly exit: "Exit goal mode";
1367
1520
  };
1368
1521
  readonly composerHint: "Tell it what to try instead…";
1369
1522
  };