zidane-ui 9.1.6 → 9.1.9

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 (224) hide show
  1. package/dist/adapters/run-host.js +17 -20
  2. package/dist/adapters/server-files-host.js +3 -1
  3. package/dist/adapters/server-host.js +18 -11
  4. package/dist/adapters/server-machines-host.js +3 -1
  5. package/dist/adapters/server-session-host.js +2 -1
  6. package/dist/adapters/server-settings-accounts.js +2 -1
  7. package/dist/adapters/server-settings-host.js +3 -3
  8. package/dist/adapters/sse-host.js +9 -7
  9. package/dist/chat/SessionGroupHeader.js +2 -2
  10. package/dist/chat/SessionHostHeader.js +1 -1
  11. package/dist/chat/StatusDot.js +24 -20
  12. package/dist/chat/composer/Composer.d.ts +13 -8
  13. package/dist/chat/composer/Composer.js +14 -10
  14. package/dist/chat/composer/ComposerEditor.js +1 -1
  15. package/dist/chat/composer/HostComposer.d.ts +1 -1
  16. package/dist/chat/composer/HostComposer.js +7 -10
  17. package/dist/chat/composer/RunStatusChip.js +13 -1
  18. package/dist/chat/composer/attachment-ingest.d.ts +4 -1
  19. package/dist/chat/composer/attachment-ingest.js +27 -10
  20. package/dist/chat/composer/composer-bus.d.ts +9 -1
  21. package/dist/chat/composer/composer-bus.js +49 -6
  22. package/dist/chat/composer/index.d.ts +2 -2
  23. package/dist/chat/composer/index.js +2 -2
  24. package/dist/chat/composer/use-draft-target.d.ts +4 -0
  25. package/dist/chat/composer/use-draft-target.js +15 -4
  26. package/dist/chat/composer/use-send-prompt.d.ts +5 -1
  27. package/dist/chat/composer/use-send-prompt.js +2 -12
  28. package/dist/chat/headless/chip-labels.d.ts +2 -0
  29. package/dist/chat/headless/chip-labels.js +3 -1
  30. package/dist/chat/headless/composer/labels-editor.d.ts +2 -0
  31. package/dist/chat/headless/composer/labels-editor.js +2 -0
  32. package/dist/chat/headless/file-chip.d.ts +12 -13
  33. package/dist/chat/headless/file-chip.js +40 -2
  34. package/dist/chat/headless/fixture-host.js +14 -17
  35. package/dist/chat/headless/host.d.ts +24 -6
  36. package/dist/chat/headless/index.d.ts +4 -4
  37. package/dist/chat/headless/index.js +4 -4
  38. package/dist/chat/headless/labels.d.ts +16 -0
  39. package/dist/chat/headless/labels.js +15 -2
  40. package/dist/chat/headless/send-flow.d.ts +21 -4
  41. package/dist/chat/headless/send-flow.js +25 -6
  42. package/dist/chat/headless/session-list.d.ts +11 -0
  43. package/dist/chat/headless/sidebar/index.js +1 -1
  44. package/dist/chat/headless/sidebar/labels.d.ts +12 -1
  45. package/dist/chat/headless/transcript-host.d.ts +8 -1
  46. package/dist/chat/headless/transcript-labels.d.ts +2 -0
  47. package/dist/chat/index.d.ts +3 -3
  48. package/dist/chat/index.js +2 -2
  49. package/dist/chat/interactions/InboxPanel.js +2 -2
  50. package/dist/chat/interactions/QuestionField.js +2 -2
  51. package/dist/chat/rich-composer/RichComposer.d.ts +9 -2
  52. package/dist/chat/rich-composer/RichComposer.js +28 -7
  53. package/dist/chat/rich-composer/composer-extensions.d.ts +2 -0
  54. package/dist/chat/rich-composer/composer-extensions.js +2 -2
  55. package/dist/chat/rich-composer/composer-keys.js +1 -1
  56. package/dist/chat/rich-composer/use-composer-bus.js +2 -1
  57. package/dist/chat/rich-composer/use-composer-editor.d.ts +4 -1
  58. package/dist/chat/rich-composer/use-composer-editor.js +2 -1
  59. package/dist/chat/sidebar/SessionSidebar.js +1 -2
  60. package/dist/chat/sidebar/SidebarSearchRow.js +1 -1
  61. package/dist/chat/sidebar/useSidebarKeyboardNav.d.ts +0 -2
  62. package/dist/chat/sidebar/useSidebarKeyboardNav.js +7 -13
  63. package/dist/chat/testing/contract.d.ts +1 -1
  64. package/dist/chat/testing/contract.js +8 -7
  65. package/dist/chat/transcript/BadgeMenu.d.ts +12 -3
  66. package/dist/chat/transcript/BadgeMenu.js +20 -3
  67. package/dist/chat/transcript/CodemodeScript.js +147 -44
  68. package/dist/chat/transcript/EditDiffBlock.js +1 -4
  69. package/dist/chat/transcript/FileChip.js +60 -14
  70. package/dist/chat/transcript/LiveOutput.js +7 -3
  71. package/dist/chat/transcript/badges.js +2 -2
  72. package/dist/chat/transcript/index.d.ts +2 -2
  73. package/dist/chat/transcript/markdown-context.d.ts +4 -1
  74. package/dist/chat/transcript/rolling.d.ts +12 -0
  75. package/dist/chat/transcript/rolling.js +22 -0
  76. package/dist/chat/transcript/script-input.d.ts +1 -1
  77. package/dist/chat/transcript/shell-block.js +70 -60
  78. package/dist/chat/transcript/tool-row.js +21 -5
  79. package/dist/code/editor/FileTree.d.ts +3 -1
  80. package/dist/code/editor/FileTree.js +29 -1
  81. package/dist/components/Restricted.d.ts +25 -0
  82. package/dist/components/Restricted.js +32 -0
  83. package/dist/components/StepFrame.d.ts +1 -1
  84. package/dist/components/ZidaneMark.d.ts +28 -0
  85. package/dist/components/ZidaneMark.js +114 -0
  86. package/dist/components/palette/PalettePanel.d.ts +7 -1
  87. package/dist/components/palette/PalettePanel.js +37 -11
  88. package/dist/components/zidane-mark.d.ts +52 -0
  89. package/dist/components/zidane-mark.js +94 -0
  90. package/dist/core.css +59 -6
  91. package/dist/dist/{index-DqCio7Nd.d.ts → index-Bq87OcGy.d.ts} +19 -12
  92. package/dist/dist/index.d.ts +1 -1
  93. package/dist/extensions/ExtensionSettingsSection.d.ts +18 -0
  94. package/dist/extensions/ExtensionSettingsSection.js +227 -0
  95. package/dist/extensions/headless/host.d.ts +1 -1
  96. package/dist/extensions/headless/labels.d.ts +41 -1
  97. package/dist/extensions/headless/labels.js +57 -0
  98. package/dist/extensions/headless/select.js +1 -2
  99. package/dist/extensions/index.d.ts +2 -1
  100. package/dist/extensions/index.js +2 -1
  101. package/dist/files/FilesTab.js +2 -0
  102. package/dist/files/TreeColumn.d.ts +5 -1
  103. package/dist/files/TreeColumn.js +6 -0
  104. package/dist/files/headless/fixture-host.js +5 -3
  105. package/dist/files/headless/host.d.ts +24 -6
  106. package/dist/files/headless/index.d.ts +2 -2
  107. package/dist/files/headless/labels.d.ts +1 -0
  108. package/dist/files/headless/labels.js +1 -0
  109. package/dist/files/testing/contract.js +9 -2
  110. package/dist/files/useWorkspace.d.ts +14 -2
  111. package/dist/files/useWorkspace.js +87 -9
  112. package/dist/git/BranchMenu.js +1 -1
  113. package/dist/git/MoveSessionDialog.js +1 -1
  114. package/dist/git/RemoteFolderPicker.js +1 -1
  115. package/dist/git/WherePicker.js +1 -1
  116. package/dist/git/headless/index.js +1 -1
  117. package/dist/git/useEnvironmentChoices.js +1 -1
  118. package/dist/index.d.ts +4 -2
  119. package/dist/index.js +4 -2
  120. package/dist/keybindings/headless/catalog.js +1 -1
  121. package/dist/labels.d.ts +1 -0
  122. package/dist/labels.js +1 -0
  123. package/dist/machines/DaemonMenu.js +1 -1
  124. package/dist/machines/HostCapabilities.d.ts +23 -1
  125. package/dist/machines/HostCapabilities.js +149 -65
  126. package/dist/machines/HostSyncPanel.js +129 -123
  127. package/dist/machines/HostsSection.js +5 -1
  128. package/dist/machines/ServerCard.d.ts +4 -2
  129. package/dist/machines/ServerCard.js +222 -99
  130. package/dist/machines/ServerMachinesPanel.js +16 -13
  131. package/dist/machines/ServerUpdatePanel.js +31 -21
  132. package/dist/machines/TokensPanel.js +75 -53
  133. package/dist/machines/headless/fixture-host.d.ts +5 -0
  134. package/dist/machines/headless/fixture-host.js +13 -4
  135. package/dist/machines/headless/fixtures.js +1 -1
  136. package/dist/machines/headless/host.d.ts +22 -2
  137. package/dist/machines/headless/index.d.ts +2 -2
  138. package/dist/machines/headless/labels.d.ts +22 -1
  139. package/dist/machines/headless/labels.js +22 -2
  140. package/dist/machines/testing/contract.d.ts +3 -1
  141. package/dist/machines/testing/contract.js +9 -0
  142. package/dist/motion/size.d.ts +22 -1
  143. package/dist/motion/size.js +82 -4
  144. package/dist/onboarding/demos/delivery.d.ts +16 -0
  145. package/dist/onboarding/demos/delivery.js +132 -0
  146. package/dist/onboarding/demos/index.d.ts +2 -1
  147. package/dist/onboarding/demos/index.js +2 -1
  148. package/dist/onboarding/headless/labels.d.ts +8 -0
  149. package/dist/onboarding/headless/labels.js +7 -0
  150. package/dist/onboarding/index.d.ts +2 -1
  151. package/dist/onboarding/index.js +2 -1
  152. package/dist/onboarding/steps/ConversationStep.js +46 -4
  153. package/dist/palette/CommandPalette.js +3 -0
  154. package/dist/palette/PaletteDialog.js +7 -3
  155. package/dist/palette/usePaletteController.d.ts +10 -0
  156. package/dist/palette/usePaletteController.js +25 -3
  157. package/dist/server/sse-handler.js +6 -1
  158. package/dist/session/ArtifactsPanel.js +1 -1
  159. package/dist/session/SideChat.js +1 -2
  160. package/dist/session/UsagePanel.js +1 -1
  161. package/dist/session/headless/host.d.ts +3 -1
  162. package/dist/session/headless/index.js +2 -2
  163. package/dist/settings/SettingsRestricted.d.ts +25 -0
  164. package/dist/settings/SettingsRestricted.js +44 -0
  165. package/dist/settings/SettingsRowsPage.js +31 -37
  166. package/dist/settings/headless/catalog.js +7 -6
  167. package/dist/settings/headless/labels.d.ts +4 -2
  168. package/dist/settings/headless/labels.js +4 -2
  169. package/dist/settings/headless/layout.js +1 -1
  170. package/dist/settings/headless/providers.d.ts +2 -0
  171. package/dist/settings/headless/search.d.ts +1 -1
  172. package/dist/settings/index.d.ts +2 -2
  173. package/dist/settings/index.js +2 -2
  174. package/dist/settings/rows.d.ts +51 -8
  175. package/dist/settings/rows.js +81 -26
  176. package/dist/settings/sections/enabled-list/EnabledListSection.js +3 -2
  177. package/dist/settings/sections/environments/EnvironmentsSection.js +4 -3
  178. package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +2 -2
  179. package/dist/settings/sections/extensions/ExtensionConfigRows.js +22 -25
  180. package/dist/settings/sections/extensions/ExtensionOptionsSection.js +3 -2
  181. package/dist/settings/sections/extensions/options-labels.d.ts +2 -2
  182. package/dist/settings/sections/extensions/options-labels.js +2 -2
  183. package/dist/settings/sections/host-catalog/HostCatalogSection.d.ts +5 -3
  184. package/dist/settings/sections/host-catalog/HostCatalogSection.js +7 -4
  185. package/dist/settings/sections/instructions/InstructionsSection.js +24 -17
  186. package/dist/settings/sections/logs/LogsSection.d.ts +2 -1
  187. package/dist/settings/sections/logs/LogsSection.js +64 -56
  188. package/dist/settings/sections/mcp/McpSection.d.ts +1 -1
  189. package/dist/settings/sections/mcp/McpSection.js +18 -17
  190. package/dist/settings/sections/models/ModelRows.d.ts +3 -3
  191. package/dist/settings/sections/models/ModelRows.js +8 -7
  192. package/dist/settings/sections/performance/PerformanceSection.js +13 -4
  193. package/dist/settings/sections/performance/labels.d.ts +0 -1
  194. package/dist/settings/sections/performance/labels.js +0 -1
  195. package/dist/settings/sections/providers/CredentialSources.js +18 -8
  196. package/dist/settings/sections/providers/ProvidersSection.d.ts +2 -2
  197. package/dist/settings/sections/providers/ProvidersSection.js +20 -17
  198. package/dist/settings/sections/providers/ServerProvidersSection.d.ts +1 -1
  199. package/dist/settings/sections/providers/ServerProvidersSection.js +10 -14
  200. package/dist/settings/sections/shared/catalog.js +3 -2
  201. package/dist/settings/sections/skills/SkillList.js +3 -2
  202. package/dist/settings/testing/accounts-demo.js +1 -0
  203. package/dist/settings/testing/accounts.contract.js +2 -0
  204. package/dist/styles.css +160 -24
  205. package/dist/terminal/HostTerminalSurface.js +1 -1
  206. package/dist/terminal/headless/links.d.ts +19 -1
  207. package/dist/terminal/headless/links.js +26 -2
  208. package/dist/theme/css-vars.js +1 -0
  209. package/dist/theme/derive.d.ts +4 -0
  210. package/dist/theme/derive.js +2 -0
  211. package/dist/workspace/PanelContentView.js +1 -1
  212. package/dist/workspace/PanelHome.d.ts +3 -1
  213. package/dist/workspace/PanelHome.js +4 -3
  214. package/dist/workspace/SidePanel.d.ts +3 -1
  215. package/dist/workspace/SidePanel.js +3 -2
  216. package/dist/workspace/headless/open-target.d.ts +1 -1
  217. package/dist/workspace/headless/open-target.js +2 -2
  218. package/package.json +2 -2
  219. package/src/styles/chat.css +10 -10
  220. package/src/styles/motion.css +37 -0
  221. package/src/styles/primitives.css +11 -3
  222. package/src/styles/sidebar.css +12 -0
  223. package/src/styles/tokens.css +6 -0
  224. package/src/styles/transcript.css +69 -5
@@ -0,0 +1,94 @@
1
+ //#region src/components/zidane-mark.ts
2
+ const AMPLITUDE = .45;
3
+ const WAVE = 1.5;
4
+ const TILT = 28 * Math.PI / 180;
5
+ const COS = Math.cos(TILT);
6
+ const SIN = Math.sin(TILT);
7
+ /** The detail for a mark drawn `size` pixels wide: fewer, wider bands when small, so they stay apart. */
8
+ function markDetail(size) {
9
+ if (size <= 12) return {
10
+ spacing: .56,
11
+ duty: .68,
12
+ steps: 32
13
+ };
14
+ if (size <= 24) return {
15
+ spacing: .46,
16
+ duty: .72,
17
+ steps: 48
18
+ };
19
+ return {
20
+ spacing: .36,
21
+ duty: .8,
22
+ steps: 96
23
+ };
24
+ }
25
+ function point(u, v) {
26
+ const rho = Math.hypot(u, v) || 1e-9;
27
+ const r = rho >= 1 ? 1 : Math.sin(rho * Math.PI / 2);
28
+ const x = u / rho * r;
29
+ const y = v / rho * r;
30
+ return `${(x * COS - y * SIN).toFixed(3)} ${(x * SIN + y * COS).toFixed(3)}`;
31
+ }
32
+ /**
33
+ * The band paths at `phase` (0 to 1, one loop). Always the same number of
34
+ * paths for a detail; a band out of view is an empty path.
35
+ */
36
+ function markPaths(detail, phase) {
37
+ const { spacing, duty, steps } = detail;
38
+ const k = Math.ceil(1.95 / spacing);
39
+ const p = (phase % 1 + 1) % 1 * spacing;
40
+ const paths = [];
41
+ for (let n = -k; n <= k; n++) {
42
+ const c = p + n * spacing;
43
+ const a = [];
44
+ const b = [];
45
+ let visible = false;
46
+ for (let i = 0; i <= steps; i++) {
47
+ const v = -1 + 2 * i / steps;
48
+ const u = c + AMPLITUDE * Math.sin(WAVE * Math.PI * v);
49
+ const w = u + spacing * duty;
50
+ if (Math.hypot(u, v) < 1 || Math.hypot(w, v) < 1 || u < 0 && w > 0 && Math.abs(v) < 1) visible = true;
51
+ a.push(point(u, v));
52
+ b.push(point(w, v));
53
+ }
54
+ paths.push(visible ? `M${a.join("L")}L${b.reverse().join("L")}Z` : "");
55
+ }
56
+ return paths;
57
+ }
58
+ /** How deep the bell goes: 1 stops the bands at each lull, 0 is a steady flow. Shallow: a surge, never a stall. */
59
+ const BELL = .35;
60
+ /** Bands one swell carries: a slow surge, not a throb per band. */
61
+ const MARK_SWELL = 3;
62
+ /**
63
+ * Where a swell's time (0 to 1) puts the bands, in loops (0 to
64
+ * {@link MARK_SWELL}): they gather speed, peak mid-swell and settle, a
65
+ * raised-cosine bell of speed. Its mean is one loop per loop of time, so
66
+ * `speed` still counts loops per second, and a swell ends on a whole loop.
67
+ */
68
+ function markEase(t) {
69
+ return 3 * (t - BELL * Math.sin(2 * Math.PI * t) / (2 * Math.PI));
70
+ }
71
+ /**
72
+ * Frames kept per loop. At the fastest pace (streaming, mid-swell) a loop
73
+ * takes about a third of a second, so 96 frames is still more than a display shows:
74
+ * snapping to them is invisible, and every mark of a detail shares them.
75
+ */
76
+ const MARK_FRAMES = 96;
77
+ const frames = /* @__PURE__ */ new Map();
78
+ /** The frame index (0 to {@link MARK_FRAMES} - 1) a phase snaps to. */
79
+ function markFrameIndex(phase) {
80
+ return Math.round((phase % 1 + 1) % 1 * 96) % 96;
81
+ }
82
+ /** The band paths of frame `index` for a detail, computed once and kept. */
83
+ function markFrame(detail, index) {
84
+ const key = `${detail.spacing}|${detail.duty}|${detail.steps}`;
85
+ let cache = frames.get(key);
86
+ if (!cache) frames.set(key, cache = []);
87
+ return cache[index] ??= markPaths(detail, index / 96);
88
+ }
89
+ /** The still mark (phase 0) for a detail, computed once and kept. */
90
+ function markStill(detail) {
91
+ return markFrame(detail, 0);
92
+ }
93
+ //#endregion
94
+ export { MARK_FRAMES, MARK_SWELL, markDetail, markEase, markFrame, markFrameIndex, markPaths, markStill };
package/dist/core.css CHANGED
@@ -222,6 +222,9 @@
222
222
  .gap-6{gap:1.5rem;}
223
223
  .space-y-3>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(0.75rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(0.75rem * var(--un-space-y-reverse));}
224
224
  .space-y-5>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(1.25rem * var(--un-space-y-reverse));}
225
+ .divide-y>:not([hidden])~:not([hidden]){--un-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--un-divide-y-reverse)));border-bottom-width:calc(1px * var(--un-divide-y-reverse));}
226
+ .border-zg-border,
227
+ .divide-\[var\(--zg-border\)\]>:not([hidden])~:not([hidden]){border-color:var(--zg-border);}
225
228
  .overflow-auto{overflow:auto;}
226
229
  .overflow-hidden{overflow:hidden;}
227
230
  .overflow-x-auto{overflow-x:auto;}
@@ -240,7 +243,6 @@
240
243
  .border-r{border-right-width:1px;}
241
244
  .border-\[var\(--zg-hairline\)\]{border-color:var(--zg-hairline);}
242
245
  .border-transparent{border-color:transparent;}
243
- .border-zg-border{border-color:var(--zg-border);}
244
246
  .\!rounded-full{border-radius:9999px !important;}
245
247
  .rounded{border-radius:0.25rem;}
246
248
  .rounded-\[1px\]{border-radius:1px;}
@@ -350,6 +352,8 @@
350
352
  .text-\[var\(--zg-accent\)\]{color:var(--zg-accent);}
351
353
  .text-\[var\(--zg-bg\)\]{color:var(--zg-bg);}
352
354
  .text-\[var\(--zg-code-fg\)\]{color:var(--zg-code-fg);}
355
+ .text-\[var\(--zg-danger\)\],
356
+ .text-zg-danger{color:var(--zg-danger);}
353
357
  .text-\[var\(--zg-text-muted\)\],
354
358
  .text-zg-muted{color:var(--zg-text-muted);}
355
359
  .text-\[var\(--zg-text-subtle\)\]{color:var(--zg-text-subtle);}
@@ -357,7 +361,6 @@
357
361
  .text-\[var\(--zg-warn\)\],
358
362
  .text-zg-warn{color:var(--zg-warn);}
359
363
  .text-zg-accent-fill-fg{color:var(--zg-accent-fill-fg);}
360
- .text-zg-danger{color:var(--zg-danger);}
361
364
  .text-zg-info{color:var(--zg-info);}
362
365
  .text-zg-success{color:var(--zg-success);}
363
366
  .hover\:\!text-zg-danger:hover{color:var(--zg-danger) !important;}
@@ -378,7 +381,6 @@
378
381
  .tracking-\[0\.12em\]{letter-spacing:0.12em;}
379
382
  .font-mono{font-family:var(--zg-font-mono);}
380
383
  .font-sans{font-family:var(--zg-font-ui);}
381
- .uppercase{text-transform:uppercase;}
382
384
  .italic{font-style:italic;}
383
385
  .tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction);}
384
386
  .underline{text-decoration-line:underline;}
@@ -474,6 +476,7 @@
474
476
  --zg-ring: #26a9f1;
475
477
 
476
478
  --zg-text-raw: #e5e8ec;
479
+ --zg-text-strong-raw: #ffffff;
477
480
  --zg-text-muted-raw: #9499a0;
478
481
  --zg-text-subtle-raw: #5f636a;
479
482
 
@@ -740,6 +743,11 @@ html[data-motion='off'] {
740
743
  color-mix(in oklab, var(--zg-text-raw) var(--zg-contrast-base), var(--zg-bg)),
741
744
  var(--zg-contrast-target) var(--zg-contrast-boost)
742
745
  );
746
+ --zg-text-strong: color-mix(
747
+ in oklab,
748
+ color-mix(in oklab, var(--zg-text-strong-raw, var(--zg-text-raw)) var(--zg-contrast-base), var(--zg-bg)),
749
+ var(--zg-contrast-target) var(--zg-contrast-boost)
750
+ );
743
751
  --zg-text-muted: color-mix(
744
752
  in oklab,
745
753
  color-mix(in oklab, var(--zg-text-muted-raw) var(--zg-contrast-base), var(--zg-bg)),
@@ -881,6 +889,16 @@ html[data-motion='off'] {
881
889
  scale: 0.985;
882
890
  }
883
891
 
892
+ /* Restricted (`Restricted.tsx`): what a connection may read but not change,
893
+ dimmed by tone and opacity together; its tooltip says why. */
894
+ .zg-restricted {
895
+ cursor: not-allowed;
896
+ }
897
+ .zg-restricted > [inert] {
898
+ opacity: 0.55;
899
+ filter: saturate(0.6);
900
+ }
901
+
884
902
  /* Tooltip (`Tooltip.tsx`): visibility, the fade + 2px rise and the show
885
903
  delay are driven inline by the component (one timing model for inline and
886
904
  portalled bubbles). This is the hidden state before it renders. */
@@ -1111,12 +1129,10 @@ html[data-motion='off'] {
1111
1129
  background: var(--zg-row-hover);
1112
1130
  }
1113
1131
 
1114
- /* The one uppercase section label. */
1132
+ /* The section label: sentence case, as written. */
1115
1133
  .zg-section-label {
1116
1134
  font-size: var(--zg-font-size-badge);
1117
1135
  font-weight: 600;
1118
- letter-spacing: 0.08em;
1119
- text-transform: uppercase;
1120
1136
  /* A real label, read like any text: the muted tone (subtle is for decoration). */
1121
1137
  color: var(--zg-text-muted);
1122
1138
  }
@@ -1520,6 +1536,16 @@ html[data-motion='reduced'] .zg-shimmer {
1520
1536
  white-space: nowrap;
1521
1537
  }
1522
1538
 
1539
+ /* SmoothHeight: eases between two contents' heights while `data-easing`, then lets go. */
1540
+ .zg-smooth-height[data-easing] {
1541
+ overflow: hidden;
1542
+ transition: height var(--zg-motion-settle);
1543
+ }
1544
+ /* The content's own margins stay inside what is measured. */
1545
+ .zg-smooth-height-inner {
1546
+ display: flow-root;
1547
+ }
1548
+
1523
1549
  /* HeldWidth: a trailing slot held to its widest content; content sits on
1524
1550
  the right edge and is revealed from the left as the slot grows. */
1525
1551
  .zg-held-width {
@@ -1942,6 +1968,33 @@ html[data-motion='reduced'] :is(.animate-spin, .zg-spin-ring, .zg-sendstop-ring)
1942
1968
  `running`, Timeline `tool-running`). Applied to an absolutely positioned
1943
1969
  ring sibling, never to the dot itself. */
1944
1970
 
1971
+ /* The zidane mark spinning in and out (`ZidaneMark`): a quarter turn the way
1972
+ its bands flow, from `--zg-mark-from` of its size (the dot it grows out
1973
+ of in `StatusDot`). `.zg-mark-in` plays on mount; `.zg-mark-swap` on a
1974
+ `Presence` plays both ways. Turn and scale ride `snap` in and `exit`
1975
+ out, opacity `fade` / `fade-out`. */
1976
+ .zg-mark-in,
1977
+ .zg-presence.zg-mark-swap[data-state='enter'] {
1978
+ animation:
1979
+ zg-mark-in var(--zg-motion-snap) both,
1980
+ zg-fade-in var(--zg-motion-fade) both;
1981
+ }
1982
+ .zg-presence.zg-mark-swap[data-state='exit'] {
1983
+ animation:
1984
+ zg-mark-out var(--zg-motion-exit) both,
1985
+ zg-fade-out var(--zg-motion-fade-out) both;
1986
+ }
1987
+ @keyframes zg-mark-in {
1988
+ from {
1989
+ transform: scale(var(--zg-mark-from, 0.6)) rotate(-90deg);
1990
+ }
1991
+ }
1992
+ @keyframes zg-mark-out {
1993
+ to {
1994
+ transform: scale(var(--zg-mark-from, 0.6)) rotate(45deg);
1995
+ }
1996
+ }
1997
+
1945
1998
  @keyframes zg-orbit {
1946
1999
  to {
1947
2000
  transform: rotate(360deg);
@@ -6,7 +6,7 @@ import "../node_modules/.bun/@earendil-works_pi-ai@1.3.0_bff1df87cb190f90/node_m
6
6
  import "../node_modules/.bun/@anthropic-ai_sdk@0.104.2_fff7ddf946fac095/node_modules/@anthropic-ai/sdk/index.js";
7
7
  import "../node_modules/.bun/@anthropic-ai_sdk@0.104.2_fff7ddf946fac095/node_modules/@anthropic-ai/sdk/resources2.js";
8
8
  import { ReactNode } from "react";
9
- //#region ../dist/index-DqCio7Nd.d.ts
9
+ //#region ../dist/index-Bq87OcGy.d.ts
10
10
  //#endregion
11
11
  //#region src/thinking-levels.d.ts
12
12
  /**
@@ -112,16 +112,18 @@ interface OutputLine {
112
112
  }
113
113
  //#endregion
114
114
  //#region src/chat/script-progress.d.ts
115
- /** How the latest call of a script line stands. */
116
- type ScriptCallStatus = 'running' | 'ok' | 'error';
115
+ /** How the latest call of a script line stands: `waiting` is a `sleep(ms)` in progress. */
116
+ type ScriptCallStatus = 'running' | 'waiting' | 'ok' | 'error';
117
117
  /** A script line that made calls. */
118
118
  interface ScriptLineProgress {
119
119
  /** 1-based line in the script as the model wrote it. */
120
120
  line: number;
121
121
  /** State of the latest call made from this line. */
122
122
  status: ScriptCallStatus;
123
- /** Calls made from this line so far. */
123
+ /** Calls made from this line so far, its `sleep`s included. */
124
124
  calls: number;
125
+ /** While it waits (`waiting`): when the wait ends, epoch milliseconds. */
126
+ until?: number;
125
127
  }
126
128
  /** One line of what a script printed or its shell calls wrote. */
127
129
  type ScriptOutputLine = OutputLine;
@@ -139,6 +141,8 @@ interface ScriptProgress {
139
141
  output: ScriptOutputLine[];
140
142
  /** How the script ended, once it did: its last line shows done when it ended without error. */
141
143
  ended?: 'ok' | 'error';
144
+ /** The line of the latest call or wait to start: where the script is (in a loop, which round's lines are behind it). */
145
+ at?: number;
142
146
  }
143
147
  //#endregion
144
148
  //#region src/chat/secrets/protocol.d.ts
@@ -175,7 +179,7 @@ type QueryBound = number | string;
175
179
  * session without an environment. `projectName` is computed: the folder name
176
180
  * (last path segment) of `projectRoot`, or of `cwd` without one.
177
181
  */
178
- type SessionFieldName = 'id' | 'title' | 'projectRoot' | 'projectName' | 'cwd' | 'agentId' | 'status' | 'createdAt' | 'updatedAt' | 'runStartedAt' | 'archived' | 'favorite' | 'isMain' | 'spaceId' | 'scheduleId' | 'providerKey' | 'modelId' | 'account' | 'effort' | 'hostId' | 'repoKey' | 'environment.kind' | 'environment.state' | 'environment.branch';
182
+ type SessionFieldName = 'id' | 'title' | 'projectRoot' | 'projectName' | 'cwd' | 'agentId' | 'status' | 'createdAt' | 'updatedAt' | 'runStartedAt' | 'archived' | 'favorite' | 'isMain' | 'spaceId' | 'scheduleId' | 'providerKey' | 'modelId' | 'account' | 'effort' | 'hostId' | 'repoKey' | 'environment.kind' | 'environment.state' | 'environment.branch' | 'wakes';
179
183
  /**
180
184
  * A facet an extension computes for each session: `facet.<extensionId>.<key>`,
181
185
  * optionally followed by `.<property>` steps into an object value (a number
@@ -331,6 +335,8 @@ type ToolCallDisplay = 'hidden' | 'formatted' | 'full';
331
335
  type InteractionMode = 'ask' | 'skip' | 'disabled';
332
336
  /** Who approves tool calls: `ask` the user, `decide` the decision model (unsure calls still ask), `off` nobody (full access). */
333
337
  type ApprovalMode = 'ask' | 'decide' | 'off';
338
+ /** What happens to a message sent while a run works: it goes into the run (`steer`), or waits for the run to end (`queue`). */
339
+ type MessageDelivery = 'steer' | 'queue';
334
340
  /** Network policy for sandboxed shell commands — see {@link Settings.sandboxNetwork}. */
335
341
  type SandboxNetwork = 'allow' | 'deny';
336
342
  /**
@@ -584,13 +590,14 @@ interface Settings {
584
590
  */
585
591
  maxParallelSubagents: number;
586
592
  /**
587
- * Hold prompts submitted while a run is in flight in the queue and send
588
- * them in order at run end. Off steers them into the live run instead
589
- * (`agent.steer()`, delivered at the next tool boundary). Attachments and
590
- * extension `/` commands still queue, and so does a steer the run refuses.
591
- * Default: on.
593
+ * What happens to a message that you send while a run works.
594
+ * `'queue'`: it waits in the queue and is sent when the run ends.
595
+ * `'steer'`: it goes into the run (`agent.steer()`), and the model reads
596
+ * it after the current step. A `/` command always waits in the queue, and
597
+ * so does a message that the run refuses. A client can ask for the other
598
+ * delivery for one message (Alt+Enter). Default: `'queue'`.
592
599
  */
593
- queueMessages: boolean;
600
+ messageDelivery: MessageDelivery;
594
601
  /**
595
602
  * Active theme id — looked up in `BUILTIN_THEMES` to resolve the palette,
596
603
  * select styling, syntax highlight tokens, etc. Default: `'default'`.
@@ -1482,4 +1489,4 @@ interface Settings {
1482
1489
  activeIcon: string;
1483
1490
  }
1484
1491
  //#endregion
1485
- export { ScriptCallStatus as Bw, Space as Cf, SessionSort as Eb, ThinkingLevel as FR, ScriptProgress as Gw, DurabilityMode as LD, EditDiffDisplay as Qd, ScriptLineProgress as Vw, SecretTtl as WC, EnvironmentSettings as WE, ScriptOutputLine as Ww, ApprovalMode as Zd, TranscriptDensity as _f, OutputStream as aT, SessionQueryAny as bb, AnsiColor as cT, FacetPath as cb, AnsiStyle as dT, SessionCondition as db, SessionFieldName as fb, SessionGroupOrder as gb, ToolCallDisplay as gf, SessionGroupBy as hb, OutputLine as iT, EnvironmentConfigValue as lD, QueryBound as lb, OpenInTarget as of, SessionFieldPath as pb, Settings as pf, InteractionMode as rf, AnsiSpan as uT, QueryValue as ub, SessionQuery as vb, SessionQueryNot as wb, SpaceIcon as wf, SessionQueryAll as yb };
1492
+ export { EditDiffDisplay as $d, SessionQueryNot as Eb, SpaceIcon as Ef, ScriptCallStatus as Hw, ScriptOutputLine as Jw, SecretTtl as KC, SessionSort as Ob, ApprovalMode as Qd, SessionQueryAny as Sb, Space as Tf, DurabilityMode as UD, ScriptLineProgress as Uw, ThinkingLevel as WR, EnvironmentSettings as XE, ScriptProgress as Yw, AnsiStyle as _T, SessionGroupBy as _b, MessageDelivery as af, SessionQuery as bb, OpenInTarget as cf, OutputStream as dT, QueryBound as db, QueryValue as fb, AnsiSpan as gT, EnvironmentConfigValue as hD, SessionFieldPath as hb, Settings as hf, InteractionMode as if, AnsiColor as mT, SessionFieldName as mb, SessionCondition as pb, OutputLine as uT, FacetPath as ub, SessionGroupOrder as vb, ToolCallDisplay as vf, SessionQueryAll as xb, TranscriptDensity as yf };
@@ -1,6 +1,6 @@
1
1
  import { d as AuthFailureKind, u as AuthFailure } from "./timeout-B5pO5I5a.js";
2
2
  import "./types-2HrgolQz.js";
3
3
  import "./oauth-callback-page-DMxIgurj.js";
4
- import { Eb as SessionSort, FR as ThinkingLevel, bb as SessionQueryAny, cb as FacetPath, db as SessionCondition, fb as SessionFieldName, gb as SessionGroupOrder, hb as SessionGroupBy, lb as QueryBound, pb as SessionFieldPath, ub as QueryValue, vb as SessionQuery, wb as SessionQueryNot, yb as SessionQueryAll } from "./index-DqCio7Nd.js";
4
+ import { Eb as SessionQueryNot, Ob as SessionSort, Sb as SessionQueryAny, WR as ThinkingLevel, _b as SessionGroupBy, bb as SessionQuery, db as QueryBound, fb as QueryValue, hb as SessionFieldPath, mb as SessionFieldName, pb as SessionCondition, ub as FacetPath, vb as SessionGroupOrder, xb as SessionQueryAll } from "./index-Bq87OcGy.js";
5
5
  import "./index-f-XWIoYo.js";
6
6
  import "./sandbox-B4OW6oNx.js";
@@ -0,0 +1,18 @@
1
+ import { CSSProperties } from "react";
2
+ //#region src/extensions/ExtensionSettingsSection.d.ts
3
+ /** Props for {@link ExtensionSettingsSection}. */
4
+ interface ExtensionSettingsSectionProps {
5
+ /** Extra classes on the root. */
6
+ className?: string;
7
+ /** Inline styles on the root. */
8
+ style?: CSSProperties;
9
+ }
10
+ /**
11
+ * Renders the extensions' locked settings, catalog changes and integrations for the folder in view, over
12
+ * the nearest extensions host (`settings`, `integrations`; one left out shows nothing of its part).
13
+ *
14
+ * @param props - `className` and `style`.
15
+ */
16
+ declare function ExtensionSettingsSection({ className, style }: ExtensionSettingsSectionProps): import("react").JSX.Element | null;
17
+ //#endregion
18
+ export { ExtensionSettingsSection, ExtensionSettingsSectionProps };
@@ -0,0 +1,227 @@
1
+ import { useReadable } from "../chat/headless/store.js";
2
+ import { extensionsErrorOf } from "./headless/host.js";
3
+ import { useExtensionsLabels } from "./useExtensionsLabels.js";
4
+ import { useExtensionsHost } from "./ExtensionsProvider.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { useState } from "react";
7
+ //#region src/extensions/ExtensionSettingsSection.tsx
8
+ /**
9
+ * Settings › Extensions, the extension host part. The settings rows
10
+ * themselves show above it, in the options section (the runtime projects them
11
+ * onto the config schema, and writes land in the same `extensionConfig` bag
12
+ * the extension settings port reads); this part adds what that section lacks:
13
+ * the values a declarative config entry locks, the catalog items extensions
14
+ * added, changed or hid, and each integration's connected accounts
15
+ * (Disconnect, Make default) and the ways to add one. The extensions' own
16
+ * settings pages and the `settings.section` slot follow, drawn by the
17
+ * Extensions page (`ExtensionsSection`, `ExtensionSettingsPages`).
18
+ * Everything goes through the nearest extensions host; nothing shows without
19
+ * one, or when it has nothing to show.
20
+ */
21
+ const EMPTY_SETTINGS = {
22
+ schema: {
23
+ categories: [],
24
+ items: []
25
+ },
26
+ actions: [],
27
+ values: {},
28
+ locked: []
29
+ };
30
+ const NO_INTEGRATIONS = [];
31
+ const noop = {
32
+ get: () => EMPTY_SETTINGS,
33
+ subscribe: () => () => {}
34
+ };
35
+ const noIntegrations = {
36
+ get: () => NO_INTEGRATIONS,
37
+ subscribe: () => () => {}
38
+ };
39
+ /** One integration: its connected accounts, the default first, and the ways to add one. */
40
+ function IntegrationRow({ integration }) {
41
+ const host = useExtensionsHost();
42
+ const l = useExtensionsLabels();
43
+ const [keys, setKeys] = useState({});
44
+ const [busy, setBusy] = useState(false);
45
+ const [error, setError] = useState(null);
46
+ const run = (work) => {
47
+ setBusy(true);
48
+ setError(null);
49
+ Promise.resolve(work()).catch((err) => setError(l.extensionIntegrationError(extensionsErrorOf(err)))).finally(() => setBusy(false));
50
+ };
51
+ const connections = integration.connections ?? (integration.connection ? [integration.connection] : []);
52
+ const connected = connections.length > 0;
53
+ return /* @__PURE__ */ jsxs("li", {
54
+ className: "flex flex-col gap-1.5 py-2",
55
+ "data-integration": integration.id,
56
+ children: [
57
+ /* @__PURE__ */ jsxs("div", {
58
+ className: "flex items-center gap-2",
59
+ children: [/* @__PURE__ */ jsx("span", {
60
+ className: "text-zg-ui font-medium",
61
+ children: integration.name
62
+ }), /* @__PURE__ */ jsx("span", {
63
+ className: "text-zg-label text-[var(--zg-text-muted)]",
64
+ children: !connected ? l.extensionIntegrationNotConnected : connections.length === 1 ? l.extensionIntegrationConnected : l.extensionIntegrationAccountCount(connections.length)
65
+ })]
66
+ }),
67
+ integration.description && /* @__PURE__ */ jsx("p", {
68
+ className: "text-zg-label text-[var(--zg-text-muted)]",
69
+ children: integration.description
70
+ }),
71
+ connected && /* @__PURE__ */ jsx("ul", {
72
+ "aria-label": l.extensionIntegrationAccounts(integration.name),
73
+ className: "flex flex-col gap-1",
74
+ children: connections.map((c) => /* @__PURE__ */ jsxs("li", {
75
+ className: "flex items-center gap-2 text-zg-label",
76
+ "data-connection": c.account,
77
+ children: [
78
+ /* @__PURE__ */ jsx("span", { children: c.label ?? c.account }),
79
+ c.isDefault ? /* @__PURE__ */ jsx("span", {
80
+ className: "zg-meta",
81
+ children: l.extensionIntegrationDefault
82
+ }) : /* @__PURE__ */ jsx("button", {
83
+ type: "button",
84
+ className: "text-zg-label underline",
85
+ disabled: busy,
86
+ "aria-label": l.extensionIntegrationMakeDefaultLabel(c.label ?? c.account),
87
+ onClick: () => run(() => host?.integrations?.setDefault(integration.id, c.account)),
88
+ children: l.extensionIntegrationMakeDefault
89
+ }),
90
+ /* @__PURE__ */ jsx("button", {
91
+ type: "button",
92
+ className: "ml-auto text-zg-label underline",
93
+ disabled: busy,
94
+ "aria-label": l.extensionIntegrationDisconnectLabel(c.label ?? c.account),
95
+ onClick: () => run(() => host?.integrations?.disconnect(integration.id, { account: c.account })),
96
+ children: l.extensionIntegrationDisconnect
97
+ })
98
+ ]
99
+ }, c.account))
100
+ }),
101
+ integration.methods.map((method) => method.type === "apiKey" ? /* @__PURE__ */ jsxs("form", {
102
+ className: "flex items-center gap-2",
103
+ onSubmit: (e) => {
104
+ e.preventDefault();
105
+ run(() => host?.integrations?.connect(integration.id, {
106
+ methodId: method.id,
107
+ key: keys[method.id] ?? ""
108
+ }).then(() => setKeys((k) => ({
109
+ ...k,
110
+ [method.id]: ""
111
+ }))));
112
+ },
113
+ children: [/* @__PURE__ */ jsx("input", {
114
+ type: "password",
115
+ "aria-label": method.label,
116
+ placeholder: method.placeholder ?? method.label,
117
+ value: keys[method.id] ?? "",
118
+ onChange: (e) => setKeys((k) => ({
119
+ ...k,
120
+ [method.id]: e.target.value
121
+ })),
122
+ className: "zg-well flex-1 min-w-0 rounded px-2 py-1 text-zg-label"
123
+ }), /* @__PURE__ */ jsx("button", {
124
+ type: "submit",
125
+ disabled: busy || !keys[method.id],
126
+ className: "text-zg-label underline",
127
+ children: connected ? l.extensionIntegrationAddAccount : l.extensionIntegrationConnect
128
+ })]
129
+ }, method.id) : /* @__PURE__ */ jsx("button", {
130
+ type: "button",
131
+ disabled: busy,
132
+ className: "self-start text-zg-label underline",
133
+ onClick: () => run(() => host?.integrations?.connect(integration.id, { methodId: method.id })),
134
+ children: connected ? l.extensionIntegrationAddAccountWith(method.label) : method.label
135
+ }, method.id)),
136
+ error && /* @__PURE__ */ jsx("p", {
137
+ role: "alert",
138
+ className: "text-zg-label text-[var(--zg-danger)]",
139
+ children: error
140
+ })
141
+ ]
142
+ });
143
+ }
144
+ /**
145
+ * Renders the extensions' locked settings, catalog changes and integrations for the folder in view, over
146
+ * the nearest extensions host (`settings`, `integrations`; one left out shows nothing of its part).
147
+ *
148
+ * @param props - `className` and `style`.
149
+ */
150
+ function ExtensionSettingsSection({ className, style }) {
151
+ const host = useExtensionsHost();
152
+ const l = useExtensionsLabels();
153
+ const wire = useReadable(host?.settings?.wire ?? noop);
154
+ const integrations = useReadable(host?.integrations?.list ?? noIntegrations);
155
+ if (!host) return null;
156
+ const locked = wire.locked;
157
+ const changes = wire.provenance ?? [];
158
+ if (locked.length === 0 && changes.length === 0 && integrations.length === 0) return null;
159
+ return /* @__PURE__ */ jsxs("section", {
160
+ "aria-label": l.extensionSettingsSection,
161
+ className: ["flex flex-col gap-4", className].filter(Boolean).join(" "),
162
+ style,
163
+ children: [
164
+ locked.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
165
+ className: "text-zg-label text-[var(--zg-text-muted)]",
166
+ children: l.extensionSettingsLockedHeading
167
+ }), /* @__PURE__ */ jsx("ul", {
168
+ className: "text-zg-label",
169
+ children: locked.map((id) => {
170
+ const [extension = "", key = ""] = id.split(":");
171
+ const value = wire.values[extension]?.[key];
172
+ return /* @__PURE__ */ jsxs("li", {
173
+ className: "flex gap-2 py-0.5",
174
+ "data-locked-setting": id,
175
+ children: [
176
+ /* @__PURE__ */ jsx("span", {
177
+ className: "font-mono",
178
+ children: id
179
+ }),
180
+ value !== void 0 && /* @__PURE__ */ jsx("span", {
181
+ className: "text-[var(--zg-text-muted)]",
182
+ children: String(value)
183
+ }),
184
+ /* @__PURE__ */ jsx("span", {
185
+ className: "ml-auto text-[var(--zg-text-muted)]",
186
+ children: l.extensionSettingsLockedTag
187
+ })
188
+ ]
189
+ }, id);
190
+ })
191
+ })] }),
192
+ changes.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
193
+ className: "text-zg-label text-[var(--zg-text-muted)]",
194
+ children: l.extensionSettingsChangesHeading
195
+ }), /* @__PURE__ */ jsx("ul", {
196
+ className: "text-zg-label",
197
+ children: changes.map((p) => /* @__PURE__ */ jsxs("li", {
198
+ className: "flex gap-2 py-0.5",
199
+ "data-catalog-change": `${p.kind}:${p.id}`,
200
+ children: [
201
+ /* @__PURE__ */ jsx("span", {
202
+ className: "text-[var(--zg-text-muted)]",
203
+ children: l.extensionCatalogKind(p.kind)
204
+ }),
205
+ /* @__PURE__ */ jsx("span", {
206
+ className: "font-mono",
207
+ children: p.id
208
+ }),
209
+ /* @__PURE__ */ jsx("span", {
210
+ className: "ml-auto text-[var(--zg-text-muted)]",
211
+ children: l.extensionProvenance(p)
212
+ })
213
+ ]
214
+ }, `${p.kind}:${p.id}`))
215
+ })] }),
216
+ integrations.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
217
+ className: "text-zg-label text-[var(--zg-text-muted)]",
218
+ children: l.extensionSettingsIntegrationsHeading
219
+ }), /* @__PURE__ */ jsx("ul", {
220
+ className: "divide-y divide-[var(--zg-border)]",
221
+ children: integrations.map((integration) => /* @__PURE__ */ jsx(IntegrationRow, { integration }, integration.id))
222
+ })] })
223
+ ]
224
+ });
225
+ }
226
+ //#endregion
227
+ export { ExtensionSettingsSection };
@@ -381,7 +381,7 @@ interface ExtensionLinkRequest {
381
381
  * The least client token scope that may run something (`chat` ⊂ `approve` ⊂ `admin`): zidane's
382
382
  * `AccessScope`, the scope of an action setting.
383
383
  */
384
- type ExtensionAccessScope = 'chat' | 'approve' | 'admin';
384
+ type ExtensionAccessScope = 'chat' | 'admin';
385
385
  /** Options of {@link ExtensionsHost.rpc}. */
386
386
  interface ExtensionRpcOptions {
387
387
  /** The extension whose UI calls: its own contracts count as local (internal methods allowed). */
@@ -1,4 +1,4 @@
1
- import { ExtensionsError } from "./host.js";
1
+ import { ExtensionProvenanceWire, ExtensionsError } from "./host.js";
2
2
  //#region src/extensions/headless/labels.d.ts
3
3
  /** The default English strings of the extensions components. */
4
4
  declare const DEFAULT_EXTENSIONS_LABELS: {
@@ -30,6 +30,46 @@ declare const DEFAULT_EXTENSIONS_LABELS: {
30
30
  extensionSettingRunning: string;
31
31
  /** A settings page or form with no rows. */
32
32
  extensionSettingsNone: string;
33
+ /** Settings › Extensions' extension host part (`ExtensionSettingsSection`), for assistive tech. */
34
+ extensionSettingsSection: string;
35
+ /** Its heading over the values a declarative config entry locks. */
36
+ extensionSettingsLockedHeading: string;
37
+ /** A locked value's tag. */
38
+ extensionSettingsLockedTag: string;
39
+ /** Its heading over the catalog items extensions added, changed or hid. */
40
+ extensionSettingsChangesHeading: string;
41
+ /** Its heading over the integrations. */
42
+ extensionSettingsIntegrationsHeading: string;
43
+ /** A changed catalog item's kind. */
44
+ extensionCatalogKind: (kind: ExtensionProvenanceWire["kind"]) => string;
45
+ /** Who added, changed or hid a catalog item (the TUI's wording). */
46
+ extensionProvenance: (p: ExtensionProvenanceWire) => string;
47
+ /** An integration with no account connected. */
48
+ extensionIntegrationNotConnected: string;
49
+ /** An integration with one account connected. */
50
+ extensionIntegrationConnected: string;
51
+ /** An integration with several accounts connected. */
52
+ extensionIntegrationAccountCount: (count: number) => string;
53
+ /** The list of an integration's accounts. */
54
+ extensionIntegrationAccounts: (integration: string) => string;
55
+ /** The default account's tag. */
56
+ extensionIntegrationDefault: string;
57
+ /** Makes an account the default. */
58
+ extensionIntegrationMakeDefault: string;
59
+ /** Makes an account the default, for assistive tech. */
60
+ extensionIntegrationMakeDefaultLabel: (account: string) => string;
61
+ /** Removes an account. */
62
+ extensionIntegrationDisconnect: string;
63
+ /** Removes an account, for assistive tech. */
64
+ extensionIntegrationDisconnectLabel: (account: string) => string;
65
+ /** Connects the first account (an API key method's submit). */
66
+ extensionIntegrationConnect: string;
67
+ /** Connects another account with an API key. */
68
+ extensionIntegrationAddAccount: string;
69
+ /** Connects another account through a method. */
70
+ extensionIntegrationAddAccountWith: (method: string) => string;
71
+ /** Words a failed integration action. */
72
+ extensionIntegrationError: (error: ExtensionsError) => string;
33
73
  /** A screen whose id no extension offers (any more). */
34
74
  extensionScreenMissing: string;
35
75
  /** Closes a screen. */