@theoremjs/react 0.0.0-stage → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +772 -2
  3. package/client/attachment-hover-preview.d.ts +11 -0
  4. package/client/attachment-hover-preview.js +36 -0
  5. package/client/audio-level.d.ts +5 -0
  6. package/client/audio-level.js +24 -0
  7. package/client/composer-attachments.d.ts +30 -0
  8. package/client/composer-attachments.js +33 -0
  9. package/client/composer-drawer.d.ts +19 -0
  10. package/client/composer-drawer.js +15 -0
  11. package/client/composer-hints.d.ts +25 -0
  12. package/client/composer-hints.js +20 -0
  13. package/client/composer-primary.d.ts +16 -0
  14. package/client/composer-primary.js +25 -0
  15. package/client/decision-images.d.ts +76 -0
  16. package/client/decision-images.js +139 -0
  17. package/client/decision-transport.d.ts +70 -0
  18. package/client/decision-transport.js +175 -0
  19. package/client/decode-composer-draft.d.ts +11 -0
  20. package/client/decode-composer-draft.js +12 -0
  21. package/client/embedding-input.d.ts +84 -0
  22. package/client/embedding-input.js +194 -0
  23. package/client/embedding-space.d.ts +82 -0
  24. package/client/embedding-space.js +389 -0
  25. package/client/embedding-transport.d.ts +40 -0
  26. package/client/embedding-transport.js +71 -0
  27. package/client/encode-composer-draft.d.ts +9 -0
  28. package/client/encode-composer-draft.js +34 -0
  29. package/client/encode-files.d.ts +18 -0
  30. package/client/encode-files.js +54 -0
  31. package/client/failure.d.ts +29 -0
  32. package/client/failure.js +34 -0
  33. package/client/generation-selection.d.ts +15 -0
  34. package/client/generation-selection.js +24 -0
  35. package/client/host-call.d.ts +51 -0
  36. package/client/host-call.js +47 -0
  37. package/client/host-transport.d.ts +70 -0
  38. package/client/host-transport.js +75 -0
  39. package/client/image-output.d.ts +6 -0
  40. package/client/image-output.js +13 -0
  41. package/client/index.d.ts +28 -0
  42. package/client/index.js +22 -0
  43. package/client/ink-waveform.d.ts +17 -0
  44. package/client/ink-waveform.js +68 -0
  45. package/client/live/apply-live-turn-tool-event.d.ts +14 -0
  46. package/client/live/apply-live-turn-tool-event.js +39 -0
  47. package/client/live/live-captions.d.ts +53 -0
  48. package/client/live/live-captions.js +174 -0
  49. package/client/live/live-mic-forward.d.ts +30 -0
  50. package/client/live/live-mic-forward.js +46 -0
  51. package/client/live/live-page-tool.d.ts +34 -0
  52. package/client/live/live-page-tool.js +11 -0
  53. package/client/live/live-state.d.ts +13 -0
  54. package/client/live/live-state.js +22 -0
  55. package/client/live/live-tool.d.ts +11 -0
  56. package/client/live/live-tool.js +1 -0
  57. package/client/live/live-video.d.ts +10 -0
  58. package/client/live/live-video.js +71 -0
  59. package/client/live/run-live-tool-call.d.ts +22 -0
  60. package/client/live/run-live-tool-call.js +70 -0
  61. package/client/live/use-live-caption-log.d.ts +17 -0
  62. package/client/live/use-live-caption-log.js +51 -0
  63. package/client/live-client.d.ts +189 -0
  64. package/client/live-client.js +829 -0
  65. package/client/live-errors.d.ts +2 -0
  66. package/client/live-errors.js +9 -0
  67. package/client/live-messages.d.ts +148 -0
  68. package/client/live-messages.js +100 -0
  69. package/client/mic-capture.d.ts +4 -0
  70. package/client/mic-capture.js +6 -0
  71. package/client/oauth-popup.d.ts +26 -0
  72. package/client/oauth-popup.js +30 -0
  73. package/client/page-dispatch.d.ts +15 -0
  74. package/client/page-dispatch.js +63 -0
  75. package/client/pcm-downsample.d.ts +4 -0
  76. package/client/pcm-downsample.js +45 -0
  77. package/client/run-commit.d.ts +34 -0
  78. package/client/run-commit.js +49 -0
  79. package/client/run-session.d.ts +79 -0
  80. package/client/run-session.js +207 -0
  81. package/client/schema-fields.d.ts +63 -0
  82. package/client/schema-fields.js +199 -0
  83. package/client/shaped-data.d.ts +118 -0
  84. package/client/shaped-data.js +343 -0
  85. package/client/source-citations.d.ts +13 -0
  86. package/client/source-citations.js +56 -0
  87. package/client/space-geometry.d.ts +39 -0
  88. package/client/space-geometry.js +183 -0
  89. package/client/state-fields.d.ts +16 -0
  90. package/client/state-fields.js +44 -0
  91. package/client/tool-result.d.ts +78 -0
  92. package/client/tool-result.js +293 -0
  93. package/client/tool-resume.d.ts +50 -0
  94. package/client/tool-resume.js +14 -0
  95. package/client/trace-feed.d.ts +13 -0
  96. package/client/trace-feed.js +18 -0
  97. package/client/trace-story.d.ts +163 -0
  98. package/client/trace-story.js +440 -0
  99. package/client/trace-view.d.ts +130 -0
  100. package/client/trace-view.js +333 -0
  101. package/client/transcript-groups.d.ts +140 -0
  102. package/client/transcript-groups.js +217 -0
  103. package/client/transcript-schema.d.ts +10 -0
  104. package/client/transcript-schema.js +120 -0
  105. package/client/transcript-scroll.d.ts +7 -0
  106. package/client/transcript-scroll.js +6 -0
  107. package/client/transport.d.ts +264 -0
  108. package/client/transport.js +330 -0
  109. package/client/turn-client.d.ts +44 -0
  110. package/client/turn-client.js +88 -0
  111. package/client/voice-label.d.ts +2 -0
  112. package/client/voice-label.js +15 -0
  113. package/client/voice-recorder.d.ts +27 -0
  114. package/client/voice-recorder.js +162 -0
  115. package/client/wire-line.d.ts +56 -0
  116. package/client/wire-line.js +90 -0
  117. package/client/worklets/mic-capture.js +16 -0
  118. package/components/InkWaveform.d.ts +21 -0
  119. package/components/InkWaveform.js +131 -0
  120. package/components/live/use-live-runner-controls.d.ts +47 -0
  121. package/components/live/use-live-runner-controls.js +96 -0
  122. package/components/live/use-live-runner-model.d.ts +49 -0
  123. package/components/live/use-live-runner-model.js +190 -0
  124. package/components/live/use-live-runner-ui.d.ts +67 -0
  125. package/components/live/use-live-runner-ui.js +167 -0
  126. package/components/live/use-live-session-client.d.ts +41 -0
  127. package/components/live/use-live-session-client.js +126 -0
  128. package/components/use-composer-voice.d.ts +28 -0
  129. package/components/use-composer-voice.js +90 -0
  130. package/components/use-editor-selection.d.ts +3 -0
  131. package/components/use-editor-selection.js +19 -0
  132. package/components/use-voice-playback.d.ts +17 -0
  133. package/components/use-voice-playback.js +68 -0
  134. package/hooks/use-described.d.ts +12 -0
  135. package/hooks/use-described.js +25 -0
  136. package/hooks/use-embedding-index.d.ts +27 -0
  137. package/hooks/use-embedding-index.js +43 -0
  138. package/hooks/use-one-call.d.ts +31 -0
  139. package/hooks/use-one-call.js +76 -0
  140. package/hooks/use-page-tool-warnings.d.ts +6 -0
  141. package/hooks/use-page-tool-warnings.js +25 -0
  142. package/hooks/use-second-ticker.d.ts +2 -0
  143. package/hooks/use-second-ticker.js +13 -0
  144. package/hooks/use-theorem-chat-actions.d.ts +79 -0
  145. package/hooks/use-theorem-chat-actions.js +287 -0
  146. package/hooks/use-theorem-chat-state.d.ts +66 -0
  147. package/hooks/use-theorem-chat-state.js +122 -0
  148. package/hooks/use-theorem-chat.d.ts +97 -0
  149. package/hooks/use-theorem-chat.js +528 -0
  150. package/hooks/use-theorem-decision.d.ts +18 -0
  151. package/hooks/use-theorem-decision.js +12 -0
  152. package/hooks/use-theorem-embedding.d.ts +18 -0
  153. package/hooks/use-theorem-embedding.js +12 -0
  154. package/hooks/use-theorem-host.d.ts +45 -0
  155. package/hooks/use-theorem-host.js +135 -0
  156. package/hooks/use-theorem-interface.d.ts +22 -0
  157. package/hooks/use-theorem-interface.js +15 -0
  158. package/hooks/use-trace-records.d.ts +4 -0
  159. package/hooks/use-trace-records.js +7 -0
  160. package/index.d.ts +17 -0
  161. package/index.js +17 -0
  162. package/live.d.ts +9 -0
  163. package/live.js +10 -0
  164. package/package.json +74 -4
  165. package/server/checkpoint-ownership.d.ts +6 -0
  166. package/server/checkpoint-ownership.js +42 -0
  167. package/server/conversation-store.d.ts +92 -0
  168. package/server/conversation-store.js +131 -0
  169. package/server/conversation.d.ts +193 -0
  170. package/server/conversation.js +552 -0
  171. package/server/credential-store.d.ts +24 -0
  172. package/server/credential-store.js +14 -0
  173. package/server/decision-handler.d.ts +42 -0
  174. package/server/decision-handler.js +46 -0
  175. package/server/embedding-handler.d.ts +33 -0
  176. package/server/embedding-handler.js +45 -0
  177. package/server/handler.d.ts +152 -0
  178. package/server/handler.js +771 -0
  179. package/server/json-response.d.ts +2 -0
  180. package/server/json-response.js +7 -0
  181. package/server/mod.d.ts +25 -0
  182. package/server/mod.js +23 -0
  183. package/server/page-dispatch.d.ts +22 -0
  184. package/server/page-dispatch.js +127 -0
  185. package/server/request-body.d.ts +2 -0
  186. package/server/request-body.js +42 -0
  187. package/server/request-check.d.ts +21 -0
  188. package/server/request-check.js +49 -0
  189. package/server/session-authority.d.ts +8 -0
  190. package/server/session-authority.js +78 -0
  191. package/server/session-boundary.d.ts +26 -0
  192. package/server/session-boundary.js +64 -0
  193. package/server/session-identity.d.ts +16 -0
  194. package/server/session-identity.js +41 -0
  195. package/server/session-limits.d.ts +12 -0
  196. package/server/session-limits.js +59 -0
  197. package/server/session-store.d.ts +123 -0
  198. package/server/session-store.js +264 -0
  199. package/server/single-action.d.ts +21 -0
  200. package/server/single-action.js +30 -0
  201. package/server/steer-inbox.d.ts +35 -0
  202. package/server/steer-inbox.js +52 -0
  203. package/server/tool-operations.d.ts +6 -0
  204. package/server/tool-operations.js +132 -0
  205. package/server/turn-input.d.ts +10 -0
  206. package/server/turn-input.js +29 -0
  207. package/styles/ink-controls.css +134 -0
  208. package/ui/CardWall.d.ts +10 -0
  209. package/ui/CardWall.js +61 -0
  210. package/ui/ChatComposerBar.d.ts +62 -0
  211. package/ui/ChatComposerBar.js +306 -0
  212. package/ui/ChatTranscript.d.ts +43 -0
  213. package/ui/ChatTranscript.js +527 -0
  214. package/ui/ConsoleFrame.d.ts +104 -0
  215. package/ui/ConsoleFrame.js +146 -0
  216. package/ui/DecisionAnswers.d.ts +53 -0
  217. package/ui/DecisionAnswers.js +233 -0
  218. package/ui/DecisionImages.d.ts +16 -0
  219. package/ui/DecisionImages.js +46 -0
  220. package/ui/EmbeddingDocuments.d.ts +78 -0
  221. package/ui/EmbeddingDocuments.js +278 -0
  222. package/ui/EmbeddingQuery.d.ts +27 -0
  223. package/ui/EmbeddingQuery.js +95 -0
  224. package/ui/EmbeddingResults.d.ts +41 -0
  225. package/ui/EmbeddingResults.js +165 -0
  226. package/ui/EmbeddingSpace.d.ts +26 -0
  227. package/ui/EmbeddingSpace.js +106 -0
  228. package/ui/LiveCaptionsPanel.d.ts +22 -0
  229. package/ui/LiveCaptionsPanel.js +27 -0
  230. package/ui/LiveRunner.d.ts +30 -0
  231. package/ui/LiveRunner.js +180 -0
  232. package/ui/PaneState.d.ts +33 -0
  233. package/ui/PaneState.js +50 -0
  234. package/ui/SchemaFields.d.ts +10 -0
  235. package/ui/SchemaFields.js +150 -0
  236. package/ui/ShapedData.d.ts +11 -0
  237. package/ui/ShapedData.js +196 -0
  238. package/ui/SidePanel.d.ts +126 -0
  239. package/ui/SidePanel.js +123 -0
  240. package/ui/StateFields.d.ts +44 -0
  241. package/ui/StateFields.js +139 -0
  242. package/ui/TheoremChat.d.ts +122 -0
  243. package/ui/TheoremChat.js +134 -0
  244. package/ui/TheoremDecision.d.ts +30 -0
  245. package/ui/TheoremDecision.js +130 -0
  246. package/ui/TheoremEmbedding.d.ts +27 -0
  247. package/ui/TheoremEmbedding.js +122 -0
  248. package/ui/TheoremHost.d.ts +55 -0
  249. package/ui/TheoremHost.js +240 -0
  250. package/ui/ToolGateCard.d.ts +32 -0
  251. package/ui/ToolGateCard.js +107 -0
  252. package/ui/ToolResult.d.ts +10 -0
  253. package/ui/ToolResult.js +62 -0
  254. package/ui/ToolResultCharts.d.ts +5 -0
  255. package/ui/ToolResultCharts.js +103 -0
  256. package/ui/TraceCharts.d.ts +13 -0
  257. package/ui/TraceCharts.js +266 -0
  258. package/ui/TraceGuardrails.d.ts +11 -0
  259. package/ui/TraceGuardrails.js +74 -0
  260. package/ui/TraceInspector.d.ts +16 -0
  261. package/ui/TraceInspector.js +206 -0
  262. package/ui/TraceInspectorPanel.d.ts +46 -0
  263. package/ui/TraceInspectorPanel.js +95 -0
  264. package/ui/TraceOverview.d.ts +38 -0
  265. package/ui/TraceOverview.js +126 -0
  266. package/ui/TraceSpanDetail.d.ts +10 -0
  267. package/ui/TraceSpanDetail.js +190 -0
  268. package/ui/TraceStory.d.ts +20 -0
  269. package/ui/TraceStory.js +108 -0
  270. package/ui/TraceValues.d.ts +36 -0
  271. package/ui/TraceValues.js +123 -0
  272. package/ui/TraceWaterfall.d.ts +13 -0
  273. package/ui/TraceWaterfall.js +135 -0
  274. package/ui/VoiceNote.d.ts +12 -0
  275. package/ui/VoiceNote.js +28 -0
  276. package/ui/approval-heading.d.ts +4 -0
  277. package/ui/approval-heading.js +9 -0
  278. package/ui/arrive.d.ts +18 -0
  279. package/ui/arrive.js +46 -0
  280. package/ui/built/theme.css +792 -0
  281. package/ui/built/theme.css.d.ts +9 -0
  282. package/ui/built/theorem.d.ts +13 -0
  283. package/ui/built/theorem.js +660 -0
  284. package/ui/built/theorem.variants.d.ts +22 -0
  285. package/ui/code-language.d.ts +12 -0
  286. package/ui/code-language.js +50 -0
  287. package/ui/disclosure-motion.d.ts +6 -0
  288. package/ui/disclosure-motion.js +207 -0
  289. package/ui/embedding-space-gl.d.ts +37 -0
  290. package/ui/embedding-space-gl.js +663 -0
  291. package/ui/embedding-space-view.d.ts +8 -0
  292. package/ui/embedding-space-view.js +8 -0
  293. package/ui/glide.d.ts +7 -0
  294. package/ui/glide.js +44 -0
  295. package/ui/icons.d.ts +4 -0
  296. package/ui/icons.js +38 -0
  297. package/ui/index.d.ts +36 -0
  298. package/ui/index.js +39 -0
  299. package/ui/labels-provider.d.ts +16 -0
  300. package/ui/labels-provider.js +64 -0
  301. package/ui/labels.d.ts +1442 -0
  302. package/ui/labels.js +1443 -0
  303. package/ui/markdown-plugins.d.ts +9 -0
  304. package/ui/markdown-plugins.js +13 -0
  305. package/ui/mcp-icon.d.ts +6 -0
  306. package/ui/mcp-icon.js +8 -0
  307. package/ui/row-keys.d.ts +19 -0
  308. package/ui/row-keys.js +33 -0
  309. package/ui/theme.d.ts +10 -0
  310. package/ui/theme.js +13 -0
  311. package/ui/theorem-theme.d.ts +10 -0
  312. package/ui/theorem-theme.js +105 -0
  313. package/ui/trace-palette.d.ts +10 -0
  314. package/ui/trace-palette.js +10 -0
  315. package/ui/trace-patterns.d.ts +40 -0
  316. package/ui/trace-patterns.js +57 -0
  317. package/ui/transcript-copy-text.d.ts +4 -0
  318. package/ui/transcript-copy-text.js +40 -0
  319. package/ui/wall-columns.d.ts +8 -0
  320. package/ui/wall-columns.js +19 -0
package/ui/labels.d.ts ADDED
@@ -0,0 +1,1442 @@
1
+ /**
2
+ * The default UI's words, as an Astryx i18n catalog under `@theorem.*` keys:
3
+ * the same mechanism that words Astryx's own components (`@astryx.*`), so one
4
+ * override table replaces any line on screen, per locale. Messages are ICU
5
+ * (`{handle}`, `{n, plural, …}`); `params` names the values each one is given.
6
+ * Failures are worded by the profile labels, not here.
7
+ *
8
+ * @module
9
+ */
10
+ import type { ComposerDrawerSummary } from '../client/composer-drawer.ts';
11
+ import type { LiveState } from '../client/live/live-state.ts';
12
+ import type { TurnUsage, WorkStatus } from '../client/transcript-groups.ts';
13
+ export declare const THEOREM_UI_CATALOG: {
14
+ readonly '@theorem.agent.handle': {
15
+ readonly defaultMessage: "@{handle}";
16
+ readonly description: "The agent's name above its messages, on the landing and in captions.";
17
+ readonly params: readonly ["handle"];
18
+ };
19
+ readonly '@theorem.chat.greeting': {
20
+ readonly defaultMessage: "What are we working on?";
21
+ readonly description: "Chat landing heading, before the first message.";
22
+ };
23
+ readonly '@theorem.chat.loading': {
24
+ readonly defaultMessage: "Loading…";
25
+ readonly description: "Spinner label while the profile loads.";
26
+ };
27
+ readonly '@theorem.chat.live_unsupported.title': {
28
+ readonly defaultMessage: "Live profiles aren't supported here";
29
+ readonly description: "Shown when TheoremChat is pointed at a live profile.";
30
+ };
31
+ readonly '@theorem.chat.live_unsupported.description': {
32
+ readonly defaultMessage: "Use LiveRunner from @theoremjs/react/live.";
33
+ readonly description: "Where to go instead, under the live-profile warning.";
34
+ };
35
+ readonly '@theorem.composer.placeholder': {
36
+ readonly defaultMessage: "Message @{handle}";
37
+ readonly description: "Empty composer placeholder.";
38
+ readonly params: readonly ["handle"];
39
+ };
40
+ readonly '@theorem.composer.listening': {
41
+ readonly defaultMessage: "Listening…";
42
+ readonly description: "Composer placeholder while a voice note records.";
43
+ };
44
+ readonly '@theorem.composer.attach': {
45
+ readonly defaultMessage: "Attach files";
46
+ readonly description: "Paperclip button.";
47
+ };
48
+ readonly '@theorem.composer.record': {
49
+ readonly defaultMessage: "Record voice";
50
+ readonly description: "Microphone button, idle.";
51
+ };
52
+ readonly '@theorem.composer.stop_recording': {
53
+ readonly defaultMessage: "Stop recording";
54
+ readonly description: "Microphone button, recording.";
55
+ };
56
+ readonly '@theorem.composer.send_options': {
57
+ readonly defaultMessage: "More send options";
58
+ readonly description: "Menu button beside send.";
59
+ };
60
+ readonly '@theorem.composer.menu.queue': {
61
+ readonly defaultMessage: "Queue";
62
+ readonly description: "Send menu item.";
63
+ };
64
+ readonly '@theorem.composer.menu.queue.description': {
65
+ readonly defaultMessage: "Send it once this reply finishes.";
66
+ readonly description: "Send menu item detail: the message waits its turn.";
67
+ };
68
+ readonly '@theorem.composer.menu.steer': {
69
+ readonly defaultMessage: "Steer this reply";
70
+ readonly description: "Send menu item.";
71
+ };
72
+ readonly '@theorem.composer.menu.steer.description': {
73
+ readonly defaultMessage: "Add it to the reply in progress. The agent reads it at its next step.";
74
+ readonly description: "Send menu item detail: the message joins the running reply instead of waiting.";
75
+ };
76
+ readonly '@theorem.composer.menu.send_now': {
77
+ readonly defaultMessage: "Send now";
78
+ readonly description: "Send menu item.";
79
+ };
80
+ readonly '@theorem.composer.menu.send_now.description': {
81
+ readonly defaultMessage: "Stop this reply and send it instead.";
82
+ readonly description: "Send menu item detail: ends the running reply (or its wait for approval), then sends.";
83
+ };
84
+ readonly '@theorem.composer.menu.stash': {
85
+ readonly defaultMessage: "Stash";
86
+ readonly description: "Send menu item.";
87
+ };
88
+ readonly '@theorem.composer.menu.stash.description': {
89
+ readonly defaultMessage: "Set it aside to send later.";
90
+ readonly description: "Send menu item detail: the message waits in the composer until sent.";
91
+ };
92
+ readonly '@theorem.composer.hint.stash-selected-draft.message': {
93
+ readonly defaultMessage: "Replacing this?";
94
+ readonly description: "Hint when the whole draft is selected and could be stashed.";
95
+ };
96
+ readonly '@theorem.composer.hint.stash-selected-draft.action': {
97
+ readonly defaultMessage: "Stash it";
98
+ readonly description: "The hint's button.";
99
+ };
100
+ readonly '@theorem.composer.drawer.steer': {
101
+ readonly defaultMessage: "steering";
102
+ readonly description: "Drawer header when only steering messages wait.";
103
+ };
104
+ readonly '@theorem.composer.drawer.queue': {
105
+ readonly defaultMessage: "queued";
106
+ readonly description: "Drawer header when only queued messages wait.";
107
+ };
108
+ readonly '@theorem.composer.drawer.stash': {
109
+ readonly defaultMessage: "stashed";
110
+ readonly description: "Drawer header when only stashed messages wait.";
111
+ };
112
+ readonly '@theorem.composer.drawer.attached': {
113
+ readonly defaultMessage: "attached";
114
+ readonly description: "Drawer header when only files wait.";
115
+ };
116
+ readonly '@theorem.composer.drawer.steer.count': {
117
+ readonly defaultMessage: "{n} steering";
118
+ readonly description: "One part of a mixed drawer header.";
119
+ readonly params: readonly ["n"];
120
+ };
121
+ readonly '@theorem.composer.drawer.queue.count': {
122
+ readonly defaultMessage: "{n} queued";
123
+ readonly description: "One part of a mixed drawer header.";
124
+ readonly params: readonly ["n"];
125
+ };
126
+ readonly '@theorem.composer.drawer.stash.count': {
127
+ readonly defaultMessage: "{n} stashed";
128
+ readonly description: "One part of a mixed drawer header.";
129
+ readonly params: readonly ["n"];
130
+ };
131
+ readonly '@theorem.composer.drawer.attached.count': {
132
+ readonly defaultMessage: "{n} attached";
133
+ readonly description: "One part of a mixed drawer header.";
134
+ readonly params: readonly ["n"];
135
+ };
136
+ readonly '@theorem.composer.drawer.separator': {
137
+ readonly defaultMessage: " · ";
138
+ readonly description: "Between the parts of a mixed drawer header.";
139
+ };
140
+ readonly '@theorem.composer.pending.steer': {
141
+ readonly defaultMessage: "Steering";
142
+ readonly description: "Badge on a waiting steering message.";
143
+ };
144
+ readonly '@theorem.composer.pending.queue': {
145
+ readonly defaultMessage: "Queued";
146
+ readonly description: "Badge on a waiting queued message.";
147
+ };
148
+ readonly '@theorem.composer.pending.stash': {
149
+ readonly defaultMessage: "Stashed";
150
+ readonly description: "Badge on a waiting stashed message.";
151
+ };
152
+ readonly '@theorem.composer.pending.edit': {
153
+ readonly defaultMessage: "Edit";
154
+ readonly description: "Waiting message: back into the composer.";
155
+ };
156
+ readonly '@theorem.composer.pending.queue_action': {
157
+ readonly defaultMessage: "Queue";
158
+ readonly description: "Stashed message: queue it.";
159
+ };
160
+ readonly '@theorem.composer.pending.send_now': {
161
+ readonly defaultMessage: "Send now";
162
+ readonly description: "Waiting message: send it now.";
163
+ };
164
+ readonly '@theorem.composer.pending.move_up': {
165
+ readonly defaultMessage: "Move up";
166
+ readonly description: "Waiting message: earlier.";
167
+ };
168
+ readonly '@theorem.composer.pending.move_down': {
169
+ readonly defaultMessage: "Move down";
170
+ readonly description: "Waiting message: later.";
171
+ };
172
+ readonly '@theorem.composer.pending.remove': {
173
+ readonly defaultMessage: "Remove";
174
+ readonly description: "Waiting message: discard.";
175
+ };
176
+ readonly '@theorem.transcript.copy': {
177
+ readonly defaultMessage: "Copy";
178
+ readonly description: "Copy a message.";
179
+ };
180
+ readonly '@theorem.transcript.copied': {
181
+ readonly defaultMessage: "Copied";
182
+ readonly description: "Right after copying a message.";
183
+ };
184
+ readonly '@theorem.transcript.now': {
185
+ readonly defaultMessage: "now";
186
+ readonly description: "Message time during its first minute.";
187
+ };
188
+ readonly '@theorem.transcript.failed': {
189
+ readonly defaultMessage: "failed";
190
+ readonly description: "Message status: the turn failed. The reason shows on hover.";
191
+ };
192
+ readonly '@theorem.transcript.generated_image': {
193
+ readonly defaultMessage: "Generated image";
194
+ readonly description: "Alt text for a generated image.";
195
+ };
196
+ readonly '@theorem.transcript.generated_video': {
197
+ readonly defaultMessage: "Generated video";
198
+ readonly description: "Alt text for a generated video.";
199
+ };
200
+ readonly '@theorem.transcript.open_generated_image': {
201
+ readonly defaultMessage: "Open generated image";
202
+ readonly description: "Opens the image full size.";
203
+ };
204
+ readonly '@theorem.transcript.generating_image': {
205
+ readonly defaultMessage: "Generating image";
206
+ readonly description: "Placeholder while an image generates.";
207
+ };
208
+ readonly '@theorem.transcript.sources': {
209
+ readonly defaultMessage: "Sources";
210
+ readonly description: "The row of source chips (screen readers).";
211
+ };
212
+ readonly '@theorem.transcript.tool_input': {
213
+ readonly defaultMessage: "Input";
214
+ readonly description: "A tool call's arguments, in its detail.";
215
+ };
216
+ readonly '@theorem.transcript.tool_input_edited': {
217
+ readonly defaultMessage: "Input (edited)";
218
+ readonly description: "A tool call's arguments after the user edited them on approval.";
219
+ };
220
+ readonly '@theorem.transcript.tool_output': {
221
+ readonly defaultMessage: "Output";
222
+ readonly description: "A tool call's result, in its detail.";
223
+ };
224
+ readonly '@theorem.transcript.tool_error': {
225
+ readonly defaultMessage: "Error";
226
+ readonly description: "A failed tool call's failure, in its detail.";
227
+ };
228
+ readonly '@theorem.transcript.tokens': {
229
+ readonly defaultMessage: "{count, plural, one {# token} other {# tokens}}";
230
+ readonly description: "Tokens a reply used, under it, or an agent tool's called agent used, on its call row.";
231
+ readonly params: readonly ["count"];
232
+ };
233
+ readonly '@theorem.data.view': {
234
+ readonly defaultMessage: "View as";
235
+ readonly description: "Switch between tool data drawn by its shape and its JSON.";
236
+ };
237
+ readonly '@theorem.data.shaped': {
238
+ readonly defaultMessage: "Data";
239
+ readonly description: "Tool data drawn as fields, sections, and tables.";
240
+ };
241
+ readonly '@theorem.data.json': {
242
+ readonly defaultMessage: "JSON";
243
+ readonly description: "Tool data as its raw JSON.";
244
+ };
245
+ readonly '@theorem.data.item': {
246
+ readonly defaultMessage: "Item {index}";
247
+ readonly description: "A list row with no name of its own.";
248
+ readonly params: readonly ["index"];
249
+ };
250
+ readonly '@theorem.data.none': {
251
+ readonly defaultMessage: "Empty";
252
+ readonly description: "An empty list or object in tool data.";
253
+ };
254
+ readonly '@theorem.data.yes': {
255
+ readonly defaultMessage: "Yes";
256
+ readonly description: "A true value in tool data.";
257
+ };
258
+ readonly '@theorem.data.no': {
259
+ readonly defaultMessage: "No";
260
+ readonly description: "A false value in tool data.";
261
+ };
262
+ readonly '@theorem.data.more': {
263
+ readonly defaultMessage: "{count} more — switch to JSON to see them";
264
+ readonly description: "Rows past the shown ones, left to the JSON view.";
265
+ readonly params: readonly ["count"];
266
+ };
267
+ readonly '@theorem.data.large': {
268
+ readonly defaultMessage: "Too large to lay out — showing the first {size} of its JSON";
269
+ readonly description: "A payload too big to draw by its shape, shown as the start of its JSON.";
270
+ readonly params: readonly ["size"];
271
+ };
272
+ readonly '@theorem.transcript.copy_text.tool': {
273
+ readonly defaultMessage: "Tool: {name}";
274
+ readonly description: "A tool call in copied message text.";
275
+ readonly params: readonly ["name"];
276
+ };
277
+ readonly '@theorem.transcript.copy_text.media': {
278
+ readonly defaultMessage: "[{mimeType} media]";
279
+ readonly description: "Media without a link, in copied message text.";
280
+ readonly params: readonly ["mimeType"];
281
+ };
282
+ readonly '@theorem.transcript.working': {
283
+ readonly defaultMessage: "Working…";
284
+ readonly description: "Turn status while running, start unknown.";
285
+ };
286
+ readonly '@theorem.transcript.working_for': {
287
+ readonly defaultMessage: "Working for {duration}";
288
+ readonly description: "Turn status while running.";
289
+ readonly params: readonly ["duration"];
290
+ };
291
+ readonly '@theorem.transcript.worked': {
292
+ readonly defaultMessage: "Worked";
293
+ readonly description: "Turn status once done, duration unknown.";
294
+ };
295
+ readonly '@theorem.transcript.worked_for': {
296
+ readonly defaultMessage: "Worked for {duration}";
297
+ readonly description: "Turn status once done.";
298
+ readonly params: readonly ["duration"];
299
+ };
300
+ readonly '@theorem.duration.milliseconds': {
301
+ readonly defaultMessage: "{ms}ms";
302
+ readonly description: "Under a second.";
303
+ readonly params: readonly ["ms"];
304
+ };
305
+ readonly '@theorem.duration.belowTenth': {
306
+ readonly defaultMessage: "<0.1ms";
307
+ readonly description: "Above zero but under a tenth of a millisecond, such as a quick guardrail check.";
308
+ };
309
+ readonly '@theorem.duration.seconds': {
310
+ readonly defaultMessage: "{seconds}s";
311
+ readonly description: "Under a minute.";
312
+ readonly params: readonly ["seconds"];
313
+ };
314
+ readonly '@theorem.duration.minutes': {
315
+ readonly defaultMessage: "{minutes}m";
316
+ readonly description: "Whole minutes.";
317
+ readonly params: readonly ["minutes"];
318
+ };
319
+ readonly '@theorem.duration.minutes_seconds': {
320
+ readonly defaultMessage: "{minutes}m {seconds}s";
321
+ readonly description: "Minutes and seconds.";
322
+ readonly params: readonly ["minutes", "seconds"];
323
+ };
324
+ readonly '@theorem.gate.approval.title': {
325
+ readonly defaultMessage: "{agent} wants to {request}";
326
+ readonly description: "Approval card heading. {agent} is the agent's handle; {request} is what the call would do, e.g. 'check the weather'.";
327
+ readonly params: readonly ["agent", "request"];
328
+ };
329
+ readonly '@theorem.gate.approval.title_no_agent': {
330
+ readonly defaultMessage: "The agent wants to {request}";
331
+ readonly description: "Approval card heading when the host names no agent.";
332
+ readonly params: readonly ["request"];
333
+ };
334
+ readonly '@theorem.gate.approval.use_tool': {
335
+ readonly defaultMessage: "use {tool}";
336
+ readonly description: "The {request} in the heading when the tool sets no labels.request. {tool} is the tool's name in words.";
337
+ readonly params: readonly ["tool"];
338
+ };
339
+ readonly '@theorem.gate.approval.input': {
340
+ readonly defaultMessage: "Details";
341
+ readonly description: "Expands the arguments the tool would run with.";
342
+ };
343
+ readonly '@theorem.gate.approval.deny': {
344
+ readonly defaultMessage: "Reject";
345
+ readonly description: "Approval card button.";
346
+ };
347
+ readonly '@theorem.gate.approval.approve': {
348
+ readonly defaultMessage: "Approve";
349
+ readonly description: "Approval card button.";
350
+ };
351
+ readonly '@theorem.gate.tag.bearer': {
352
+ readonly defaultMessage: "bearer";
353
+ readonly description: "Credential type tag.";
354
+ };
355
+ readonly '@theorem.gate.tag.api_key': {
356
+ readonly defaultMessage: "api_key";
357
+ readonly description: "Credential type tag.";
358
+ };
359
+ readonly '@theorem.gate.tag.oauth2': {
360
+ readonly defaultMessage: "oauth2";
361
+ readonly description: "Credential type tag.";
362
+ };
363
+ readonly '@theorem.gate.auth.title': {
364
+ readonly defaultMessage: "Sign in to use {tool}";
365
+ readonly description: "Credential card heading. {tool} is the tool's name in words.";
366
+ readonly params: readonly ["tool"];
367
+ };
368
+ readonly '@theorem.gate.auth.resource': {
369
+ readonly defaultMessage: "Resource: {resource}";
370
+ readonly description: "What the credential is for.";
371
+ readonly params: readonly ["resource"];
372
+ };
373
+ readonly '@theorem.gate.auth.no_oauth': {
374
+ readonly defaultMessage: "No OAuth authorization endpoint is configured.";
375
+ readonly description: "OAuth tool without an authorization URL.";
376
+ };
377
+ readonly '@theorem.gate.auth.authorize': {
378
+ readonly defaultMessage: "Authorize with provider";
379
+ readonly description: "Opens the OAuth sign-in.";
380
+ };
381
+ readonly '@theorem.gate.auth.provided': {
382
+ readonly defaultMessage: "Credential provided for {slot}";
383
+ readonly description: "After submitting a credential or finishing an OAuth sign-in.";
384
+ readonly params: readonly ["slot"];
385
+ };
386
+ readonly '@theorem.gate.auth.api_key': {
387
+ readonly defaultMessage: "API key";
388
+ readonly description: "Secret field label, API-key tools.";
389
+ };
390
+ readonly '@theorem.gate.auth.bearer': {
391
+ readonly defaultMessage: "Bearer token";
392
+ readonly description: "Secret field label, bearer tools.";
393
+ };
394
+ readonly '@theorem.gate.auth.secret_placeholder': {
395
+ readonly defaultMessage: "Secret for slot ''{slot}''";
396
+ readonly description: "Secret field placeholder.";
397
+ readonly params: readonly ["slot"];
398
+ };
399
+ readonly '@theorem.gate.auth.secret_note': {
400
+ readonly defaultMessage: " ";
401
+ readonly description: "Under the secret field: how the host handles the credential. Blank by default, since only the host knows; the studio says it is used for one call.";
402
+ };
403
+ readonly '@theorem.gate.auth.submit': {
404
+ readonly defaultMessage: "Submit & continue";
405
+ readonly description: "Sends the credential.";
406
+ };
407
+ readonly '@theorem.voice_note.name': {
408
+ readonly defaultMessage: "voice.{format}";
409
+ readonly description: "A voice note's name, by audio format (webm, wav, mp3, m4a, ogg).";
410
+ readonly params: readonly ["format"];
411
+ };
412
+ readonly '@theorem.voice_note.unnamed': {
413
+ readonly defaultMessage: "voice note";
414
+ readonly description: "A voice note's name when its format is unknown.";
415
+ };
416
+ readonly '@theorem.voice_note.play': {
417
+ readonly defaultMessage: "Play {name}";
418
+ readonly description: "Voice note, paused.";
419
+ readonly params: readonly ["name"];
420
+ };
421
+ readonly '@theorem.voice_note.pause': {
422
+ readonly defaultMessage: "Pause {name}";
423
+ readonly description: "Voice note, playing.";
424
+ readonly params: readonly ["name"];
425
+ };
426
+ readonly '@theorem.voice_note.remove': {
427
+ readonly defaultMessage: "Remove {name}";
428
+ readonly description: "Unstages a voice note.";
429
+ readonly params: readonly ["name"];
430
+ };
431
+ readonly '@theorem.decision.state': {
432
+ readonly defaultMessage: "State";
433
+ readonly description: "The JSON a decision is asked about (field label).";
434
+ };
435
+ readonly '@theorem.decision.state_size': {
436
+ readonly defaultMessage: "{size} of {limit}";
437
+ readonly description: "The state's size against the profile's limit, under the field.";
438
+ readonly params: readonly ["size", "limit"];
439
+ };
440
+ readonly '@theorem.decision.view': {
441
+ readonly defaultMessage: "Edit as";
442
+ readonly description: "Switch between the state as fields and as JSON.";
443
+ };
444
+ readonly '@theorem.decision.fields': {
445
+ readonly defaultMessage: "Fields";
446
+ readonly description: "The state edited field by field.";
447
+ };
448
+ readonly '@theorem.decision.add_item': {
449
+ readonly defaultMessage: "Add to {field}";
450
+ readonly description: "Adds a row to a list in the state.";
451
+ readonly params: readonly ["field"];
452
+ };
453
+ readonly '@theorem.decision.remove_item': {
454
+ readonly defaultMessage: "Remove {item}";
455
+ readonly description: "Removes a row from a list in the state.";
456
+ readonly params: readonly ["item"];
457
+ };
458
+ readonly '@theorem.decision.add_value': {
459
+ readonly defaultMessage: "Add a value";
460
+ readonly description: "A list of words in the state, while it is empty.";
461
+ };
462
+ readonly '@theorem.decision.invalid_json': {
463
+ readonly defaultMessage: "Not valid JSON yet";
464
+ readonly description: "The state doesn't parse.";
465
+ };
466
+ readonly '@theorem.decision.null_state': {
467
+ readonly defaultMessage: "State can’t be null";
468
+ readonly description: "The state is the JSON null.";
469
+ };
470
+ readonly '@theorem.decision.too_large': {
471
+ readonly defaultMessage: "Over the {limit} limit";
472
+ readonly description: "The state is larger than the profile's limit.";
473
+ readonly params: readonly ["limit"];
474
+ };
475
+ readonly '@theorem.decision.answers': {
476
+ readonly defaultMessage: "Answers";
477
+ readonly description: "The decision response column.";
478
+ };
479
+ readonly '@theorem.decision.decide': {
480
+ readonly defaultMessage: "Decide";
481
+ readonly description: "Asks the questions about the state.";
482
+ };
483
+ readonly '@theorem.decision.deciding': {
484
+ readonly defaultMessage: "Deciding…";
485
+ readonly description: "The decide button while it runs.";
486
+ };
487
+ readonly '@theorem.decision.stop': {
488
+ readonly defaultMessage: "Stop";
489
+ readonly description: "Cancels the running decision.";
490
+ };
491
+ readonly '@theorem.decision.confidence': {
492
+ readonly defaultMessage: "{percent} sure";
493
+ readonly description: "How sure the model is of a choice or score; percent is formatted, e.g. '92%'.";
494
+ readonly params: readonly ["percent"];
495
+ };
496
+ readonly '@theorem.decision.option': {
497
+ readonly defaultMessage: "{label}, {percent}";
498
+ readonly description: "One option and its probability (screen readers); percent is formatted.";
499
+ readonly params: readonly ["label", "percent"];
500
+ };
501
+ readonly '@theorem.decision.score_of': {
502
+ readonly defaultMessage: "{score} of {max}";
503
+ readonly description: "A score on its scale from 0, e.g. 1.4 of 3.";
504
+ readonly params: readonly ["score", "max"];
505
+ };
506
+ readonly '@theorem.decision.type.choice': {
507
+ readonly defaultMessage: "Choice";
508
+ readonly description: "A question that picks one label.";
509
+ };
510
+ readonly '@theorem.decision.type.score': {
511
+ readonly defaultMessage: "Score";
512
+ readonly description: "A question that places the state on a scale.";
513
+ };
514
+ readonly '@theorem.decision.type.noul': {
515
+ readonly defaultMessage: "Noul";
516
+ readonly description: "A question answered with one number.";
517
+ };
518
+ readonly '@theorem.decision.type.box': {
519
+ readonly defaultMessage: "Box";
520
+ readonly description: "A question answered with one box in an image.";
521
+ };
522
+ readonly '@theorem.decision.box_edges': {
523
+ readonly defaultMessage: "Left {left}, top {top}, right {right}, bottom {bottom}";
524
+ readonly description: "Where a box sits in its image, each edge as a share of the image from its top-left corner.";
525
+ readonly params: readonly ["left", "top", "right", "bottom"];
526
+ };
527
+ readonly '@theorem.decision.add_image': {
528
+ readonly defaultMessage: "Add an image";
529
+ readonly description: "The drop area under the state: each image dropped or chosen becomes a state field.";
530
+ };
531
+ readonly '@theorem.decision.add_image_hint': {
532
+ readonly defaultMessage: "Drop a PNG or JPEG, or choose one. It becomes a field the questions can name.";
533
+ readonly description: "What the drop area under the state says it does.";
534
+ };
535
+ readonly '@theorem.decision.replace_image': {
536
+ readonly defaultMessage: "Replace";
537
+ readonly description: "An image field's file input, which swaps in another PNG or JPEG.";
538
+ };
539
+ readonly '@theorem.decision.image_bad': {
540
+ readonly defaultMessage: "{file} is not a PNG or JPEG.";
541
+ readonly description: "A file attached as an image that is neither.";
542
+ readonly params: readonly ["file"];
543
+ };
544
+ readonly '@theorem.decision.edit_question': {
545
+ readonly defaultMessage: "Edit {question}";
546
+ readonly description: "The button on an answer that opens its question where it is set up. The page shows it only when it can.";
547
+ readonly params: readonly ["question"];
548
+ };
549
+ readonly '@theorem.decision.box_in': {
550
+ readonly defaultMessage: "The box, cut from the image";
551
+ readonly description: "The alt text of the part of the image a box answer covers.";
552
+ };
553
+ readonly '@theorem.decision.open_box': {
554
+ readonly defaultMessage: "See the box in the whole image";
555
+ readonly description: "The cut-out box on an answer, which opens the whole image with the box outlined.";
556
+ };
557
+ readonly '@theorem.decision.box_marked': {
558
+ readonly defaultMessage: "The whole image, the box outlined and the rest shaded";
559
+ readonly description: "The alt text of the whole image a box answer opens.";
560
+ };
561
+ readonly '@theorem.decision.tokens': {
562
+ readonly defaultMessage: "{count, plural, one {# token} other {# tokens}}";
563
+ readonly description: "Input tokens the decision used, in the line under the answers.";
564
+ readonly params: readonly ["count"];
565
+ };
566
+ readonly '@theorem.embedding.documents': {
567
+ readonly defaultMessage: "Documents";
568
+ readonly description: "What a search looks through: the texts and files to embed (card title).";
569
+ };
570
+ readonly '@theorem.embedding.document': {
571
+ readonly defaultMessage: "Document {number}";
572
+ readonly description: "One document, by its place in the list.";
573
+ readonly params: readonly ["number"];
574
+ };
575
+ readonly '@theorem.embedding.text': {
576
+ readonly defaultMessage: "Text";
577
+ readonly description: "Text to split into documents (field label).";
578
+ };
579
+ readonly '@theorem.embedding.text_placeholder': {
580
+ readonly defaultMessage: "Paste text to search through";
581
+ readonly description: "The empty text field on the documents card.";
582
+ };
583
+ readonly '@theorem.embedding.split': {
584
+ readonly defaultMessage: "Split by";
585
+ readonly description: "Where the text is cut into documents (field label).";
586
+ };
587
+ readonly '@theorem.embedding.split_whole': {
588
+ readonly defaultMessage: "Nothing: one document";
589
+ readonly description: "The text is one document.";
590
+ };
591
+ readonly '@theorem.embedding.split_lines': {
592
+ readonly defaultMessage: "Lines";
593
+ readonly description: "Each line of the text is a document.";
594
+ };
595
+ readonly '@theorem.embedding.split_paragraphs': {
596
+ readonly defaultMessage: "Paragraphs";
597
+ readonly description: "Each run of text between blank lines is a document.";
598
+ };
599
+ readonly '@theorem.embedding.split_commas': {
600
+ readonly defaultMessage: "Commas";
601
+ readonly description: "Each piece of the text between commas is a document.";
602
+ };
603
+ readonly '@theorem.embedding.split_custom': {
604
+ readonly defaultMessage: "A separator you type";
605
+ readonly description: "The text is cut wherever a separator of the user’s own appears.";
606
+ };
607
+ readonly '@theorem.embedding.separator': {
608
+ readonly defaultMessage: "Separator";
609
+ readonly description: "The text the documents are cut at (field label).";
610
+ };
611
+ readonly '@theorem.embedding.files': {
612
+ readonly defaultMessage: "Files";
613
+ readonly description: "Adds files as documents (field label).";
614
+ };
615
+ readonly '@theorem.embedding.drop_files': {
616
+ readonly defaultMessage: "Drop files here, or click to upload";
617
+ readonly description: "The file field's prompt.";
618
+ };
619
+ readonly '@theorem.embedding.unreadable': {
620
+ readonly defaultMessage: "{name} couldn't be read.";
621
+ readonly description: "A chosen file the browser could not read.";
622
+ readonly params: readonly ["name"];
623
+ };
624
+ readonly '@theorem.embedding.remove': {
625
+ readonly defaultMessage: "Remove {name}";
626
+ readonly description: "Takes a document off the list.";
627
+ readonly params: readonly ["name"];
628
+ };
629
+ readonly '@theorem.embedding.from_file': {
630
+ readonly defaultMessage: "From {name}";
631
+ readonly description: "A document that is a piece of a text file, under its text.";
632
+ readonly params: readonly ["name"];
633
+ };
634
+ readonly '@theorem.embedding.from_json': {
635
+ readonly defaultMessage: "From the JSON";
636
+ readonly description: "The documents of a pasted list, as a group.";
637
+ };
638
+ readonly '@theorem.embedding.group': {
639
+ readonly defaultMessage: "{source} · {count, plural, one {# document} other {# documents}}";
640
+ readonly description: "A group of documents from one source, above its first few.";
641
+ readonly params: readonly ["source", "count"];
642
+ };
643
+ readonly '@theorem.embedding.held_file': {
644
+ readonly defaultMessage: "Held by the provider";
645
+ readonly description: "A file the provider already holds, referred to by address, beside its type.";
646
+ };
647
+ readonly '@theorem.embedding.more': {
648
+ readonly defaultMessage: "{count, plural, one {# more document} other {# more documents}}";
649
+ readonly description: "Documents past the ones the list shows.";
650
+ readonly params: readonly ["count"];
651
+ };
652
+ readonly '@theorem.embedding.invalid_json': {
653
+ readonly defaultMessage: "Not a list of documents: each is text, or an object with parts.";
654
+ readonly description: "The documents' JSON doesn't read as the inputs an embedding takes.";
655
+ };
656
+ readonly '@theorem.embedding.no_documents': {
657
+ readonly defaultMessage: "Add text or files to search through.";
658
+ readonly description: "There are no documents yet.";
659
+ };
660
+ readonly '@theorem.embedding.empty': {
661
+ readonly defaultMessage: "{name} is empty.";
662
+ readonly description: "A document or the query has no text and no file.";
663
+ readonly params: readonly ["name"];
664
+ };
665
+ readonly '@theorem.embedding.text_off': {
666
+ readonly defaultMessage: "{name} has text, and this profile embeds files only.";
667
+ readonly description: "A document or the query has text the profile does not take.";
668
+ readonly params: readonly ["name"];
669
+ };
670
+ readonly '@theorem.embedding.too_many': {
671
+ readonly defaultMessage: "One request takes at most {max} documents.";
672
+ readonly description: "A request holds more inputs than the profile's model takes in one call.";
673
+ readonly params: readonly ["max"];
674
+ };
675
+ readonly '@theorem.embedding.ready': {
676
+ readonly defaultMessage: "{count, plural, one {# document} other {# documents}} in {requests, plural, one {# request} other {# requests}}";
677
+ readonly description: "The documents are ready: how many, and how many requests the profile’s limits make them.";
678
+ readonly params: readonly ["count", "requests"];
679
+ };
680
+ readonly '@theorem.embedding.index': {
681
+ readonly defaultMessage: "Index";
682
+ readonly description: "Embeds the documents so they can be searched.";
683
+ };
684
+ readonly '@theorem.embedding.indexing': {
685
+ readonly defaultMessage: "Indexing…";
686
+ readonly description: "The index button while the documents are embedded.";
687
+ };
688
+ readonly '@theorem.embedding.indexing_progress': {
689
+ readonly defaultMessage: "Indexing {done}/{total}…";
690
+ readonly description: "The pane while the documents are embedded: the request in flight, of all of them.";
691
+ readonly params: readonly ["done", "total"];
692
+ };
693
+ readonly '@theorem.embedding.stop': {
694
+ readonly defaultMessage: "Stop";
695
+ readonly description: "Cancels the running index or search.";
696
+ };
697
+ readonly '@theorem.embedding.query': {
698
+ readonly defaultMessage: "Query";
699
+ readonly description: "What to search the documents for (card title).";
700
+ };
701
+ readonly '@theorem.embedding.query_placeholder': {
702
+ readonly defaultMessage: "What to search for";
703
+ readonly description: "The empty query field.";
704
+ };
705
+ readonly '@theorem.embedding.query_file': {
706
+ readonly defaultMessage: "Search with a file";
707
+ readonly description: "Adds a file to the query, such as an image to find documents like it.";
708
+ };
709
+ readonly '@theorem.embedding.query_invalid_json': {
710
+ readonly defaultMessage: "Not a query: text, or an object with parts.";
711
+ readonly description: "The query's JSON doesn't read as one embedding input.";
712
+ };
713
+ readonly '@theorem.embedding.stale': {
714
+ readonly defaultMessage: "The documents changed. Index them again.";
715
+ readonly description: "The documents differ from the ones last embedded.";
716
+ };
717
+ readonly '@theorem.embedding.remodelled': {
718
+ readonly defaultMessage: "The model changed. Index the documents again.";
719
+ readonly description: "The last query came from another model than the one the documents were embedded with.";
720
+ };
721
+ readonly '@theorem.embedding.search': {
722
+ readonly defaultMessage: "Search";
723
+ readonly description: "Embeds the query and ranks the documents by it.";
724
+ };
725
+ readonly '@theorem.embedding.searching': {
726
+ readonly defaultMessage: "Searching…";
727
+ readonly description: "The search button while the query is embedded.";
728
+ };
729
+ readonly '@theorem.embedding.results': {
730
+ readonly defaultMessage: "Results";
731
+ readonly description: "The index and the matches (heading).";
732
+ };
733
+ readonly '@theorem.embedding.indexed': {
734
+ readonly defaultMessage: "{count, plural, one {# document} other {# documents}}";
735
+ readonly description: "How many documents the index holds, its card’s figure.";
736
+ readonly params: readonly ["count"];
737
+ };
738
+ readonly '@theorem.embedding.view': {
739
+ readonly defaultMessage: "View";
740
+ readonly description: "Switches the index card between the space and the list of vectors.";
741
+ };
742
+ readonly '@theorem.embedding.space': {
743
+ readonly defaultMessage: "Space";
744
+ readonly description: "The index drawn in three dimensions, alike documents together.";
745
+ };
746
+ readonly '@theorem.embedding.list': {
747
+ readonly defaultMessage: "List";
748
+ readonly description: "The index as a list of documents and their vectors.";
749
+ };
750
+ readonly '@theorem.embedding.space_label': {
751
+ readonly defaultMessage: "{count, plural, one {# document} other {# documents}} drawn in three dimensions by where their vectors differ most: each document is joined to the one most like it when that pair is far more alike than the typical pair in this index, heavier the more alike, documents the lines connect share a colour, and three circles mark the planes of the axes.";
752
+ readonly description: "What the space shows, for screen readers.";
753
+ readonly params: readonly ["count"];
754
+ };
755
+ readonly '@theorem.embedding.space_query': {
756
+ readonly defaultMessage: "The query lands among its matches, with a line to each match far more alike than its typical document.";
757
+ readonly description: "What the space shows after a search, for screen readers.";
758
+ };
759
+ readonly '@theorem.embedding.space_off': {
760
+ readonly defaultMessage: "This browser can’t draw the space, so the vectors are listed.";
761
+ readonly description: "WebGL2 is unavailable, so the index card shows the list.";
762
+ };
763
+ readonly '@theorem.embedding.copy_vector': {
764
+ readonly defaultMessage: "Copy vector";
765
+ readonly description: "Copies one document's vector as JSON.";
766
+ };
767
+ readonly '@theorem.embedding.copy_vectors': {
768
+ readonly defaultMessage: "Copy all";
769
+ readonly description: "Copies every vector in the index as JSON, in document order.";
770
+ };
771
+ readonly '@theorem.embedding.copied': {
772
+ readonly defaultMessage: "Copied";
773
+ readonly description: "Right after copying a vector.";
774
+ };
775
+ readonly '@theorem.embedding.width': {
776
+ readonly defaultMessage: "{dimensions, plural, one {# dimension} other {# dimensions}}";
777
+ readonly description: "How wide a vector is, after its first values in the list.";
778
+ readonly params: readonly ["dimensions"];
779
+ };
780
+ readonly '@theorem.embedding.matches': {
781
+ readonly defaultMessage: "Matches";
782
+ readonly description: "The documents most like the query, best first (card title).";
783
+ };
784
+ readonly '@theorem.embedding.matches_shown': {
785
+ readonly defaultMessage: "Top {shown} of {count}";
786
+ readonly description: "The matches card lists the best documents only.";
787
+ readonly params: readonly ["shown", "count"];
788
+ };
789
+ readonly '@theorem.embedding.best': {
790
+ readonly defaultMessage: "Best: {name}";
791
+ readonly description: "The document most like the query, under the matches figure.";
792
+ readonly params: readonly ["name"];
793
+ };
794
+ readonly '@theorem.embedding.no_matches': {
795
+ readonly defaultMessage: "No document has a vector as wide as the query’s.";
796
+ readonly description: "The query and the documents were embedded by models of different widths.";
797
+ };
798
+ readonly '@theorem.embedding.tokens': {
799
+ readonly defaultMessage: "{count, plural, one {# token} other {# tokens}}";
800
+ readonly description: "Input tokens a call used, in the line under the results.";
801
+ readonly params: readonly ["count"];
802
+ };
803
+ readonly '@theorem.host.tool': {
804
+ readonly defaultMessage: "Tool";
805
+ readonly description: "Picks which of the host’s tools to call (field label).";
806
+ };
807
+ readonly '@theorem.host.request': {
808
+ readonly defaultMessage: "Request";
809
+ readonly description: "The input a tool call sends (card heading).";
810
+ };
811
+ readonly '@theorem.host.response': {
812
+ readonly defaultMessage: "Response";
813
+ readonly description: "What a tool call returned (section heading).";
814
+ };
815
+ readonly '@theorem.host.run': {
816
+ readonly defaultMessage: "Run";
817
+ readonly description: "Calls the tool with the request.";
818
+ };
819
+ readonly '@theorem.host.image': {
820
+ readonly defaultMessage: "Image the tool returned";
821
+ readonly description: "Alt text for an image a tool returned beside its output.";
822
+ };
823
+ readonly '@theorem.host.running': {
824
+ readonly defaultMessage: "Running…";
825
+ readonly description: "The run button while the call runs.";
826
+ };
827
+ readonly '@theorem.host.stop': {
828
+ readonly defaultMessage: "Stop";
829
+ readonly description: "Cancels the running call.";
830
+ };
831
+ readonly '@theorem.host.missing': {
832
+ readonly defaultMessage: "Needs {fields}";
833
+ readonly description: "Required fields the request is still missing, under the form.";
834
+ readonly params: readonly ["fields"];
835
+ };
836
+ readonly '@theorem.host.shortcut': {
837
+ readonly defaultMessage: "⌘↵ to run";
838
+ readonly description: "The keyboard shortcut that runs the call, under the form.";
839
+ };
840
+ readonly '@theorem.host.no_tools': {
841
+ readonly defaultMessage: "This host has no tools yet";
842
+ readonly description: "A host profile that allows no tools.";
843
+ };
844
+ readonly '@theorem.host.earlier': {
845
+ readonly defaultMessage: "Earlier calls";
846
+ readonly description: "Heading over this page’s previous tool calls.";
847
+ };
848
+ readonly '@theorem.host.kind.function': {
849
+ readonly defaultMessage: "Function";
850
+ readonly description: "A tool that runs a function on the host.";
851
+ };
852
+ readonly '@theorem.host.kind.http': {
853
+ readonly defaultMessage: "HTTP";
854
+ readonly description: "A tool that calls an HTTP endpoint.";
855
+ };
856
+ readonly '@theorem.host.kind.mcp': {
857
+ readonly defaultMessage: "MCP";
858
+ readonly description: "A tool served by an MCP server.";
859
+ };
860
+ readonly '@theorem.tool.access.read-only': {
861
+ readonly defaultMessage: "Read only";
862
+ readonly description: "A tool that only reads.";
863
+ };
864
+ readonly '@theorem.tool.access.read-write': {
865
+ readonly defaultMessage: "Read and write";
866
+ readonly description: "A tool that can change things.";
867
+ };
868
+ readonly '@theorem.tool.access.destructive': {
869
+ readonly defaultMessage: "Destructive";
870
+ readonly description: "A tool that can delete or overwrite.";
871
+ };
872
+ readonly '@theorem.host.status.running': {
873
+ readonly defaultMessage: "running";
874
+ readonly description: "A tool call in progress.";
875
+ };
876
+ readonly '@theorem.host.status.gate': {
877
+ readonly defaultMessage: "waiting";
878
+ readonly description: "A tool call paused on approval or sign-in.";
879
+ };
880
+ readonly '@theorem.host.status.complete': {
881
+ readonly defaultMessage: "done";
882
+ readonly description: "A tool call that returned.";
883
+ };
884
+ readonly '@theorem.host.status.error': {
885
+ readonly defaultMessage: "failed";
886
+ readonly description: "A tool call that failed.";
887
+ };
888
+ readonly '@theorem.host.status.cancel': {
889
+ readonly defaultMessage: "stopped";
890
+ readonly description: "A tool call that was cancelled.";
891
+ };
892
+ readonly '@theorem.host.finished': {
893
+ readonly defaultMessage: "{activity} in {duration}";
894
+ readonly description: "A finished tool call: what it did, and how long it took.";
895
+ readonly params: readonly ["activity", "duration"];
896
+ };
897
+ readonly '@theorem.panel.trace.name': {
898
+ readonly defaultMessage: "Trace";
899
+ readonly description: "Trace side panel (screen readers).";
900
+ };
901
+ readonly '@theorem.panel.trace.show': {
902
+ readonly defaultMessage: "Show trace";
903
+ readonly description: "Trace panel toggle, closed.";
904
+ };
905
+ readonly '@theorem.panel.trace.hide': {
906
+ readonly defaultMessage: "Hide trace";
907
+ readonly description: "Trace panel toggle, open.";
908
+ };
909
+ readonly '@theorem.panel.trace.resize': {
910
+ readonly defaultMessage: "Resize trace";
911
+ readonly description: "Trace panel drag handle.";
912
+ };
913
+ readonly '@theorem.panel.resize': {
914
+ readonly defaultMessage: "Resize {name}";
915
+ readonly description: "Drag handle for a named console panel.";
916
+ readonly params: readonly ["name"];
917
+ };
918
+ readonly '@theorem.panel.trace.empty.title': {
919
+ readonly defaultMessage: "No trace yet";
920
+ readonly description: "Empty trace panel.";
921
+ };
922
+ readonly '@theorem.panel.trace.empty.description': {
923
+ readonly defaultMessage: "Spans for each run will show here.";
924
+ readonly description: "Empty trace panel.";
925
+ };
926
+ readonly '@theorem.panel.trace.summary': {
927
+ readonly defaultMessage: "{traces, plural, one {# trace} other {# traces}} · {spans, plural, one {# span} other {# spans}}";
928
+ readonly description: "Trace panel line under the search: how many traces and spans it holds.";
929
+ readonly params: readonly ["traces", "spans"];
930
+ };
931
+ readonly '@theorem.panel.trace.separator': {
932
+ readonly defaultMessage: " · ";
933
+ readonly description: "Between facts on one trace panel line.";
934
+ };
935
+ readonly '@theorem.panel.trace.search': {
936
+ readonly defaultMessage: "Search spans";
937
+ readonly description: "Trace panel search (screen readers).";
938
+ };
939
+ readonly '@theorem.panel.trace.search.placeholder': {
940
+ readonly defaultMessage: "Filter by type, status, model, text…";
941
+ readonly description: "Trace panel search, empty.";
942
+ };
943
+ readonly '@theorem.panel.trace.search.text': {
944
+ readonly defaultMessage: "Any text";
945
+ readonly description: "Search field matching any text a span holds.";
946
+ };
947
+ readonly '@theorem.panel.trace.search.text.description': {
948
+ readonly defaultMessage: "Names, values, and stored text.";
949
+ readonly description: "What the any-text search field matches.";
950
+ };
951
+ readonly '@theorem.panel.trace.no_match': {
952
+ readonly defaultMessage: "No spans match";
953
+ readonly description: "Trace panel, when the search matches nothing.";
954
+ };
955
+ readonly '@theorem.panel.trace.back': {
956
+ readonly defaultMessage: "Back";
957
+ readonly description: "Leaves an open span for its turn.";
958
+ };
959
+ readonly '@theorem.panel.trace.show_text': {
960
+ readonly defaultMessage: "Show text";
961
+ readonly description: "Reveals stored text, JSON, or messages.";
962
+ };
963
+ readonly '@theorem.panel.trace.hide_text': {
964
+ readonly defaultMessage: "Hide text";
965
+ readonly description: "Hides revealed stored text.";
966
+ };
967
+ readonly '@theorem.panel.trace.other': {
968
+ readonly defaultMessage: "Other";
969
+ readonly description: "Group for attributes the trace catalog does not name.";
970
+ };
971
+ readonly '@theorem.panel.trace.yes': {
972
+ readonly defaultMessage: "Yes";
973
+ readonly description: "A true trace value.";
974
+ };
975
+ readonly '@theorem.panel.trace.no': {
976
+ readonly defaultMessage: "No";
977
+ readonly description: "A false trace value.";
978
+ };
979
+ readonly '@theorem.panel.trace.tokens': {
980
+ readonly defaultMessage: "Tokens";
981
+ readonly description: "Card of token counts.";
982
+ };
983
+ readonly '@theorem.panel.trace.errors': {
984
+ readonly defaultMessage: "Errors";
985
+ readonly description: "Card counting failed spans.";
986
+ };
987
+ readonly '@theorem.panel.trace.at_least': {
988
+ readonly defaultMessage: "At least {value}";
989
+ readonly description: "A total some calls did not report.";
990
+ readonly params: readonly ["value"];
991
+ };
992
+ readonly '@theorem.panel.trace.about': {
993
+ readonly defaultMessage: "About {value}";
994
+ readonly description: "A total with estimated counts.";
995
+ readonly params: readonly ["value"];
996
+ };
997
+ readonly '@theorem.panel.trace.offset': {
998
+ readonly defaultMessage: "+{duration}";
999
+ readonly description: "When an event happened, after its span started.";
1000
+ readonly params: readonly ["duration"];
1001
+ };
1002
+ readonly '@theorem.panel.trace.unit.milliseconds': {
1003
+ readonly defaultMessage: "ms";
1004
+ readonly description: "Unit of a search field in milliseconds.";
1005
+ };
1006
+ readonly '@theorem.panel.trace.unit.seconds': {
1007
+ readonly defaultMessage: "s";
1008
+ readonly description: "Unit of a search field in seconds.";
1009
+ };
1010
+ readonly '@theorem.panel.trace.unit.usd': {
1011
+ readonly defaultMessage: "USD";
1012
+ readonly description: "Unit of a search field in US dollars.";
1013
+ };
1014
+ readonly '@theorem.panel.trace.turn': {
1015
+ readonly defaultMessage: "{label} {index} of {count}";
1016
+ readonly description: "Which root of the trace is shown: \"Turn 2 of 3\".";
1017
+ readonly params: readonly ["label", "index", "count"];
1018
+ };
1019
+ readonly '@theorem.panel.trace.turns': {
1020
+ readonly defaultMessage: "Turns";
1021
+ readonly description: "List of every turn of the conversation; a row opens its turn.";
1022
+ };
1023
+ readonly '@theorem.panel.trace.conversation': {
1024
+ readonly defaultMessage: "{count, plural, one {# turn} other {# turns}}";
1025
+ readonly description: "Heading of the whole-conversation view: how many turns it holds.";
1026
+ readonly params: readonly ["count"];
1027
+ };
1028
+ readonly '@theorem.panel.trace.conversation.back': {
1029
+ readonly defaultMessage: "All turns";
1030
+ readonly description: "Leaves a turn for the whole-conversation view.";
1031
+ };
1032
+ readonly '@theorem.panel.trace.previous': {
1033
+ readonly defaultMessage: "Previous turn";
1034
+ readonly description: "Opens the turn before this one.";
1035
+ };
1036
+ readonly '@theorem.panel.trace.next': {
1037
+ readonly defaultMessage: "Next turn";
1038
+ readonly description: "Opens the turn after this one.";
1039
+ };
1040
+ readonly '@theorem.panel.trace.calls': {
1041
+ readonly defaultMessage: "Tool calls";
1042
+ readonly description: "List of every call of a host's trace; a row opens its call.";
1043
+ };
1044
+ readonly '@theorem.panel.trace.calls.count': {
1045
+ readonly defaultMessage: "{count, plural, one {# tool call} other {# tool calls}}";
1046
+ readonly description: "Heading of a host's whole-trace view: how many tool calls it holds.";
1047
+ readonly params: readonly ["count"];
1048
+ };
1049
+ readonly '@theorem.panel.trace.calls.back': {
1050
+ readonly defaultMessage: "All tool calls";
1051
+ readonly description: "Leaves a call for the host's whole-trace view.";
1052
+ };
1053
+ readonly '@theorem.panel.trace.calls.previous': {
1054
+ readonly defaultMessage: "Previous call";
1055
+ readonly description: "Opens the tool call before this one.";
1056
+ };
1057
+ readonly '@theorem.panel.trace.calls.next': {
1058
+ readonly defaultMessage: "Next call";
1059
+ readonly description: "Opens the tool call after this one.";
1060
+ };
1061
+ readonly '@theorem.panel.trace.steps': {
1062
+ readonly defaultMessage: "Steps";
1063
+ readonly description: "Card counting the model and tool calls of a turn.";
1064
+ };
1065
+ readonly '@theorem.panel.trace.steps.detail': {
1066
+ readonly defaultMessage: "{calls, plural, one {# model call} other {# model calls}} · {tools, plural, one {# tool} other {# tools}}";
1067
+ readonly description: "Under the steps count: how many were model calls and tool calls.";
1068
+ readonly params: readonly ["calls", "tools"];
1069
+ };
1070
+ readonly '@theorem.panel.trace.failed': {
1071
+ readonly defaultMessage: "{count} failed";
1072
+ readonly description: "Under the steps count, when some failed.";
1073
+ readonly params: readonly ["count"];
1074
+ };
1075
+ readonly '@theorem.panel.trace.firstText': {
1076
+ readonly defaultMessage: "First text";
1077
+ readonly description: "Card: how long the person waited before any of the answer appeared.";
1078
+ };
1079
+ readonly '@theorem.panel.trace.rate': {
1080
+ readonly defaultMessage: "{rate} tokens/s";
1081
+ readonly description: "Under the first-text time: how fast the model wrote once it started.";
1082
+ readonly params: readonly ["rate"];
1083
+ };
1084
+ readonly '@theorem.panel.trace.held': {
1085
+ readonly defaultMessage: "{duration} held back";
1086
+ readonly description: "Under the first-text time: how long guardrails held written text back before showing it.";
1087
+ readonly params: readonly ["duration"];
1088
+ };
1089
+ readonly '@theorem.panel.trace.guardrails': {
1090
+ readonly defaultMessage: "Guardrails";
1091
+ readonly description: "Card: the time guardrail checks took in a turn.";
1092
+ };
1093
+ readonly '@theorem.panel.trace.guardrails.passed': {
1094
+ readonly defaultMessage: "Passed: {checks}";
1095
+ readonly description: "Under the guardrail checks that acted: the checks that let the text through, each with what it checked and its time.";
1096
+ readonly params: readonly ["checks"];
1097
+ };
1098
+ readonly '@theorem.panel.trace.guardrails.from': {
1099
+ readonly defaultMessage: "from {tool}";
1100
+ readonly description: "A guardrail check: the tool the checked text came from.";
1101
+ readonly params: readonly ["tool"];
1102
+ };
1103
+ readonly '@theorem.panel.trace.guardrails.tainted': {
1104
+ readonly defaultMessage: "Tainted";
1105
+ readonly description: "A guardrail check: a tool that writes or deletes was called after the turn read remote content.";
1106
+ };
1107
+ readonly '@theorem.panel.trace.guardrails.steered': {
1108
+ readonly defaultMessage: "Steered";
1109
+ readonly description: "A guardrail check: a tool that writes or deletes was called after the turn read remote content that looked like instructions.";
1110
+ };
1111
+ readonly '@theorem.panel.trace.guardrails.detail': {
1112
+ readonly defaultMessage: "{checks, plural, one {# check} other {# checks}} · {flagged, plural, =0 {all passed} other {# acted}}";
1113
+ readonly description: "Under the guardrail time: how many checks ran, and how many redacted, flagged, or blocked.";
1114
+ readonly params: readonly ["checks", "flagged"];
1115
+ };
1116
+ readonly '@theorem.panel.trace.tokens.detail': {
1117
+ readonly defaultMessage: "{input} in · {output} out";
1118
+ readonly description: "Under the token total: tokens read and written.";
1119
+ readonly params: readonly ["input", "output"];
1120
+ };
1121
+ readonly '@theorem.panel.trace.time': {
1122
+ readonly defaultMessage: "Where the time went";
1123
+ readonly description: "Bar splitting a turn into model, tool, and other time.";
1124
+ };
1125
+ readonly '@theorem.panel.trace.time.model': {
1126
+ readonly defaultMessage: "Model";
1127
+ readonly description: "Time spent waiting on the model.";
1128
+ };
1129
+ readonly '@theorem.panel.trace.time.tools': {
1130
+ readonly defaultMessage: "Tools";
1131
+ readonly description: "Time spent running tools.";
1132
+ };
1133
+ readonly '@theorem.panel.trace.time.guardrails': {
1134
+ readonly defaultMessage: "Guardrails";
1135
+ readonly description: "Time guardrail checks took: on the input, the stream, and the answer.";
1136
+ };
1137
+ readonly '@theorem.panel.trace.time.hooks': {
1138
+ readonly defaultMessage: "Hooks";
1139
+ readonly description: "Time the host's turn hooks took.";
1140
+ };
1141
+ readonly '@theorem.panel.trace.time.other': {
1142
+ readonly defaultMessage: "Other";
1143
+ readonly description: "Time spent on none of these: waiting between steps, the host, the network.";
1144
+ };
1145
+ readonly '@theorem.panel.trace.charts.calls': {
1146
+ readonly defaultMessage: "Tokens per model call";
1147
+ readonly description: "Chart of each model call: its tokens stacked as a bar.";
1148
+ };
1149
+ readonly '@theorem.panel.trace.charts.cached': {
1150
+ readonly defaultMessage: "Cached";
1151
+ readonly description: "Legend: input tokens read from cache.";
1152
+ };
1153
+ readonly '@theorem.panel.trace.charts.input': {
1154
+ readonly defaultMessage: "Input";
1155
+ readonly description: "Legend: input tokens read fresh.";
1156
+ };
1157
+ readonly '@theorem.panel.trace.charts.output': {
1158
+ readonly defaultMessage: "Output";
1159
+ readonly description: "Legend: tokens the model wrote.";
1160
+ };
1161
+ readonly '@theorem.panel.trace.charts.slowest': {
1162
+ readonly defaultMessage: "Slowest steps";
1163
+ readonly description: "Chart ranking the steps that took longest.";
1164
+ };
1165
+ readonly '@theorem.panel.trace.charts.modelShare': {
1166
+ readonly defaultMessage: "{share} on the model";
1167
+ readonly description: "Beside a chart's total time: the model's share.";
1168
+ readonly params: readonly ["share"];
1169
+ };
1170
+ readonly '@theorem.panel.trace.charts.cachedShare': {
1171
+ readonly defaultMessage: "{share} of input cached";
1172
+ readonly description: "Beside a chart's total tokens: the input read from cache.";
1173
+ readonly params: readonly ["share"];
1174
+ };
1175
+ readonly '@theorem.panel.trace.charts.turnTime': {
1176
+ readonly defaultMessage: "Time per turn";
1177
+ readonly description: "Chart of each turn: its model, tool, and other time stacked.";
1178
+ };
1179
+ readonly '@theorem.panel.trace.charts.callTime': {
1180
+ readonly defaultMessage: "Time per call";
1181
+ readonly description: "Chart of each tool call of a host's trace: its tool, check, and hook time stacked.";
1182
+ };
1183
+ readonly '@theorem.panel.trace.charts.turnTokens': {
1184
+ readonly defaultMessage: "Tokens per turn";
1185
+ readonly description: "Chart of each turn: its tokens stacked as a bar.";
1186
+ };
1187
+ readonly '@theorem.panel.trace.charts.turn': {
1188
+ readonly defaultMessage: "Turn {index}";
1189
+ readonly description: "A turn, by its order in the conversation.";
1190
+ readonly params: readonly ["index"];
1191
+ };
1192
+ readonly '@theorem.panel.trace.charts.hostCall': {
1193
+ readonly defaultMessage: "Call {index}";
1194
+ readonly description: "A tool call, by its order in a host's trace.";
1195
+ readonly params: readonly ["index"];
1196
+ };
1197
+ readonly '@theorem.panel.trace.charts.call': {
1198
+ readonly defaultMessage: "Model call {index}";
1199
+ readonly description: "A model call, by its order in the turn.";
1200
+ readonly params: readonly ["index"];
1201
+ };
1202
+ readonly '@theorem.panel.trace.charts.tokens': {
1203
+ readonly defaultMessage: "{cached} cached · {fresh} new in · {output} out";
1204
+ readonly description: "A model call's tokens: read from cache, read fresh, and written.";
1205
+ readonly params: readonly ["cached", "fresh", "output"];
1206
+ };
1207
+ readonly '@theorem.panel.trace.story': {
1208
+ readonly defaultMessage: "What happened";
1209
+ readonly description: "The turn told step by step.";
1210
+ };
1211
+ readonly '@theorem.panel.trace.story.asked': {
1212
+ readonly defaultMessage: "User asked";
1213
+ readonly description: "The first step: what the user sent.";
1214
+ };
1215
+ readonly '@theorem.panel.trace.story.requested': {
1216
+ readonly defaultMessage: "Asked for {count, plural, one {# tool} other {# tools}}";
1217
+ readonly description: "A model call that answered with tool calls.";
1218
+ readonly params: readonly ["count"];
1219
+ };
1220
+ readonly '@theorem.panel.trace.story.wrote': {
1221
+ readonly defaultMessage: "Wrote a reply";
1222
+ readonly description: "A model call that answered with text.";
1223
+ };
1224
+ readonly '@theorem.panel.trace.story.answered': {
1225
+ readonly defaultMessage: "Answered";
1226
+ readonly description: "The last step: the turn ended with this answer.";
1227
+ };
1228
+ readonly '@theorem.panel.trace.story.failed': {
1229
+ readonly defaultMessage: "Ended with an error";
1230
+ readonly description: "The last step, when the turn failed.";
1231
+ };
1232
+ readonly '@theorem.panel.trace.timeline': {
1233
+ readonly defaultMessage: "Timeline";
1234
+ readonly description: "Every span of the turn on one time axis.";
1235
+ };
1236
+ readonly '@theorem.panel.trace.timeline.zoom': {
1237
+ readonly defaultMessage: "Drag across the strip to zoom";
1238
+ readonly description: "Hint beside the activity strip that zooms the timeline.";
1239
+ };
1240
+ readonly '@theorem.panel.trace.timeline.reset': {
1241
+ readonly defaultMessage: "Show the whole turn";
1242
+ readonly description: "Zooms the timeline back out to the full turn.";
1243
+ };
1244
+ readonly '@theorem.panel.trace.input': {
1245
+ readonly defaultMessage: "Input";
1246
+ readonly description: "What a span was given.";
1247
+ };
1248
+ readonly '@theorem.panel.trace.output': {
1249
+ readonly defaultMessage: "Output";
1250
+ readonly description: "What a span gave back.";
1251
+ };
1252
+ readonly '@theorem.panel.trace.details': {
1253
+ readonly defaultMessage: "All details";
1254
+ readonly description: "A span's every attribute, event, and link.";
1255
+ };
1256
+ readonly '@theorem.panel.trace.close': {
1257
+ readonly defaultMessage: "Close";
1258
+ readonly description: "Closes the open span.";
1259
+ };
1260
+ readonly '@theorem.panel.captions.name': {
1261
+ readonly defaultMessage: "Captions";
1262
+ readonly description: "Captions side panel (screen readers).";
1263
+ };
1264
+ readonly '@theorem.panel.captions.show': {
1265
+ readonly defaultMessage: "Show captions";
1266
+ readonly description: "Captions panel toggle, closed.";
1267
+ };
1268
+ readonly '@theorem.panel.captions.hide': {
1269
+ readonly defaultMessage: "Hide captions";
1270
+ readonly description: "Captions panel toggle, open.";
1271
+ };
1272
+ readonly '@theorem.panel.captions.resize': {
1273
+ readonly defaultMessage: "Resize captions";
1274
+ readonly description: "Captions panel drag handle.";
1275
+ };
1276
+ readonly '@theorem.panel.captions.empty.title': {
1277
+ readonly defaultMessage: "No captions yet";
1278
+ readonly description: "Empty captions panel.";
1279
+ };
1280
+ readonly '@theorem.panel.captions.empty.description': {
1281
+ readonly defaultMessage: "What you and the agent say will show here.";
1282
+ readonly description: "Empty captions panel.";
1283
+ };
1284
+ readonly '@theorem.live.greeting': {
1285
+ readonly defaultMessage: "Ready when you are.";
1286
+ readonly description: "Live landing heading, before a call.";
1287
+ };
1288
+ readonly '@theorem.live.start_voice_call': {
1289
+ readonly defaultMessage: "Start voice call";
1290
+ readonly description: "Live landing, voice profiles.";
1291
+ };
1292
+ readonly '@theorem.live.start_call': {
1293
+ readonly defaultMessage: "Start call";
1294
+ readonly description: "Starts or restarts a call.";
1295
+ };
1296
+ readonly '@theorem.live.start_video_call': {
1297
+ readonly defaultMessage: "Start video call";
1298
+ readonly description: "Live landing, video profiles.";
1299
+ };
1300
+ readonly '@theorem.live.microphone': {
1301
+ readonly defaultMessage: "Microphone";
1302
+ readonly description: "Mic toggle.";
1303
+ };
1304
+ readonly '@theorem.live.mute': {
1305
+ readonly defaultMessage: "Mute";
1306
+ readonly description: "Mic toggle tooltip, unmuted.";
1307
+ };
1308
+ readonly '@theorem.live.unmute': {
1309
+ readonly defaultMessage: "Unmute";
1310
+ readonly description: "Mic toggle tooltip, muted.";
1311
+ };
1312
+ readonly '@theorem.live.camera': {
1313
+ readonly defaultMessage: "Camera";
1314
+ readonly description: "Camera toggle.";
1315
+ };
1316
+ readonly '@theorem.live.camera_on': {
1317
+ readonly defaultMessage: "Turn camera on";
1318
+ readonly description: "Camera toggle tooltip, off.";
1319
+ };
1320
+ readonly '@theorem.live.camera_off': {
1321
+ readonly defaultMessage: "Turn camera off";
1322
+ readonly description: "Camera toggle tooltip, on.";
1323
+ };
1324
+ readonly '@theorem.live.flip_camera': {
1325
+ readonly defaultMessage: "Flip camera";
1326
+ readonly description: "Switches front and back camera.";
1327
+ };
1328
+ readonly '@theorem.live.end_call': {
1329
+ readonly defaultMessage: "End call";
1330
+ readonly description: "Hangs up.";
1331
+ };
1332
+ readonly '@theorem.live.new_session': {
1333
+ readonly defaultMessage: "New session";
1334
+ readonly description: "Captions divider between calls.";
1335
+ };
1336
+ readonly '@theorem.live.controls': {
1337
+ readonly defaultMessage: "Call controls";
1338
+ readonly description: "The control toolbar (screen readers).";
1339
+ };
1340
+ readonly '@theorem.live.camera_preview': {
1341
+ readonly defaultMessage: "Camera preview";
1342
+ readonly description: "Self-view (screen readers).";
1343
+ };
1344
+ readonly '@theorem.live.state.calling_tool': {
1345
+ readonly defaultMessage: "calling {tool}";
1346
+ readonly description: "Call status: a tool runs.";
1347
+ readonly params: readonly ["tool"];
1348
+ };
1349
+ readonly '@theorem.live.state.connecting': {
1350
+ readonly defaultMessage: "connecting";
1351
+ readonly description: "Call status.";
1352
+ };
1353
+ readonly '@theorem.live.state.reconnecting': {
1354
+ readonly defaultMessage: "reconnecting";
1355
+ readonly description: "Call status: the call dropped and is being taken up again.";
1356
+ };
1357
+ readonly '@theorem.live.state.requesting_mic': {
1358
+ readonly defaultMessage: "requesting mic";
1359
+ readonly description: "Call status.";
1360
+ };
1361
+ readonly '@theorem.live.state.speaking': {
1362
+ readonly defaultMessage: "speaking";
1363
+ readonly description: "Call status: the agent speaks.";
1364
+ };
1365
+ readonly '@theorem.live.state.connected': {
1366
+ readonly defaultMessage: "connected";
1367
+ readonly description: "Call status.";
1368
+ };
1369
+ readonly '@theorem.live.state.muted': {
1370
+ readonly defaultMessage: "muted";
1371
+ readonly description: "Call status.";
1372
+ };
1373
+ readonly '@theorem.live.state.listening': {
1374
+ readonly defaultMessage: "listening";
1375
+ readonly description: "Call status.";
1376
+ };
1377
+ readonly '@theorem.live.state.error': {
1378
+ readonly defaultMessage: "error";
1379
+ readonly description: "Call status.";
1380
+ };
1381
+ readonly '@theorem.live.state.ended': {
1382
+ readonly defaultMessage: "ended";
1383
+ readonly description: "Call status.";
1384
+ };
1385
+ };
1386
+ /** The default UI's catalog: each line's default message, description, and values. */
1387
+ export type TheoremUiCatalog = typeof THEOREM_UI_CATALOG;
1388
+ /** Every line the default UI writes. */
1389
+ export type TheoremLabelKey = keyof TheoremUiCatalog;
1390
+ /** The values a label's message is formatted with; none for a plain line. */
1391
+ export type TheoremLabelValues<K extends TheoremLabelKey> = TheoremUiCatalog[K] extends {
1392
+ params: readonly (infer P extends string)[];
1393
+ } ? Record<P, string | number> : undefined;
1394
+ /** Words a label; the default UI gets one from Astryx's `useTranslator`. */
1395
+ export type LabelText = <K extends TheoremLabelKey>(key: K, values?: TheoremLabelValues<K>) => string;
1396
+ /**
1397
+ * One locale's replacements: any `@theorem.*` line, and any of Astryx's own
1398
+ * (`@astryx.*`, see `@astryxdesign/core/locales/en.json`).
1399
+ */
1400
+ export type TheoremLabelOverrides = {
1401
+ readonly [K in TheoremLabelKey]?: string;
1402
+ } & {
1403
+ readonly [key: `@astryx.${string}`]: string;
1404
+ };
1405
+ /** Replacements by locale (`en`, `en-GB`, `de`, …), as Astryx's `overrides`. */
1406
+ export type TheoremLabels = {
1407
+ readonly [locale: string]: TheoremLabelOverrides | undefined;
1408
+ };
1409
+ /** A single kind is just its word ("queued"); a mix spells out each count ("2 queued · 1 attached"). */
1410
+ export declare function composerDrawerLabel(t: LabelText, summary: ComposerDrawerSummary): string;
1411
+ /** What a reply or a called agent used: its tokens, then its cost when the provider gave one. */
1412
+ export declare function usageLine(t: LabelText, locale: string, tokens: TurnUsage): string;
1413
+ /** Wall-clock duration, matching Seance's builder-trace formatter: "<0.1ms", "0.4ms", "850ms", "3.2s", "12s", "1m 5s". */
1414
+ export declare function workDuration(t: LabelText, durationMs: number): string;
1415
+ /** A console result's quiet line: model, time, tokens, and cost, leaving out what it lacks. */
1416
+ export declare function resultMeta(t: LabelText, usd: Intl.NumberFormat, result: {
1417
+ model: string;
1418
+ usage?: {
1419
+ inputTokens?: number;
1420
+ costUsd?: number;
1421
+ };
1422
+ elapsedMs?: number | null;
1423
+ tokens: (count: number) => string;
1424
+ }): string;
1425
+ /** Whole-second ticker while a turn runs: "0s", "12s", "1m 5s". */
1426
+ export declare function liveDuration(t: LabelText, durationMs: number): string;
1427
+ /** "Working for 12s" while streaming (when the start is known), "Worked for 3.2s" after. */
1428
+ export declare function workStatusLabel(t: LabelText, status: WorkStatus | null): string;
1429
+ /** A live call's status line; `calling_tool` names the tool. */
1430
+ export declare function liveStateLabel(t: LabelText, state: LiveState, toolName: string | null): string;
1431
+ /** A voice note's name from its audio format; the unnamed line when the format is unknown. */
1432
+ export declare function voiceNoteName(t: LabelText, format: string | undefined): string;
1433
+ /**
1434
+ * Checks a label table before it renders: every `@theorem.*` key must exist
1435
+ * and its message must format with that key's values only; with `strict`
1436
+ * (the `labels` prop), every other key must be an `@astryx.*` line whose
1437
+ * message parses. A host's own Astryx overrides are checked for `@theorem.*`
1438
+ * keys only, since the rest may be the host app's own strings. Throws, naming
1439
+ * the locale and key, so a typo fails at mount instead of showing a raw key or
1440
+ * crashing mid-render.
1441
+ */
1442
+ export declare function assertLabelOverrides(labels: TheoremLabels, strict: boolean): void;