zidane-ui 9.1.4 → 9.1.6

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 (251) hide show
  1. package/dist/adapters/server-extensions-host.js +1 -1
  2. package/dist/adapters/server-host.js +2 -1
  3. package/dist/adapters/server-machines-host.js +1 -1
  4. package/dist/adapters/server-session-host.js +87 -13
  5. package/dist/adapters/server-settings-host.js +1 -1
  6. package/dist/appearance/AppearanceProvider.js +2 -2
  7. package/dist/appearance/headless/index.js +1 -1
  8. package/dist/approvals/headless/index.js +2 -2
  9. package/dist/chat/HostTranscript.d.ts +5 -1
  10. package/dist/chat/HostTranscript.js +16 -4
  11. package/dist/chat/RunEstimateChip.d.ts +5 -3
  12. package/dist/chat/RunEstimateChip.js +33 -3
  13. package/dist/chat/Transcript.js +1 -1
  14. package/dist/chat/composer/ConversationBadges.js +16 -10
  15. package/dist/chat/composer/composer-bus.d.ts +2 -2
  16. package/dist/chat/composer/composer-bus.js +2 -2
  17. package/dist/chat/composer/use-composer-stores.js +1 -1
  18. package/dist/chat/composer/use-run-meter.js +1 -1
  19. package/dist/chat/headless/composer/conversation-badges.d.ts +8 -3
  20. package/dist/chat/headless/composer/conversation-badges.js +26 -11
  21. package/dist/chat/headless/composer/index.js +2 -2
  22. package/dist/chat/headless/composer/labels-chrome.d.ts +3 -1
  23. package/dist/chat/headless/composer/labels-chrome.js +3 -1
  24. package/dist/chat/headless/index.d.ts +6 -3
  25. package/dist/chat/headless/index.js +16 -13
  26. package/dist/chat/headless/labels.d.ts +54 -1
  27. package/dist/chat/headless/labels.js +62 -2
  28. package/dist/chat/headless/secrets.d.ts +32 -0
  29. package/dist/chat/headless/secrets.js +43 -0
  30. package/dist/chat/headless/session-list.d.ts +45 -0
  31. package/dist/chat/headless/sidebar/estimates.js +13 -1
  32. package/dist/chat/headless/sidebar/history.d.ts +71 -0
  33. package/dist/chat/headless/sidebar/history.js +174 -0
  34. package/dist/chat/headless/sidebar/index.d.ts +3 -2
  35. package/dist/chat/headless/sidebar/index.js +2 -1
  36. package/dist/chat/headless/sidebar/labels.d.ts +50 -0
  37. package/dist/chat/headless/sidebar/labels.js +1 -0
  38. package/dist/chat/headless/sidebar/query.d.ts +2 -2
  39. package/dist/chat/headless/sidebar/query.js +6 -3
  40. package/dist/chat/headless/sidebar/types.d.ts +7 -1
  41. package/dist/chat/headless/sidebar/view.js +2 -0
  42. package/dist/chat/headless/transcript/auth-failure.d.ts +67 -0
  43. package/dist/chat/headless/transcript/auth-failure.js +87 -0
  44. package/dist/chat/headless/transcript/index.d.ts +2 -1
  45. package/dist/chat/headless/transcript/index.js +2 -1
  46. package/dist/chat/headless/transcript/nesting.d.ts +3 -3
  47. package/dist/chat/headless/transcript/nesting.js +12 -4
  48. package/dist/chat/index.d.ts +4 -2
  49. package/dist/chat/index.js +3 -1
  50. package/dist/chat/interactions/InboxPanel.d.ts +6 -2
  51. package/dist/chat/interactions/InboxPanel.js +82 -44
  52. package/dist/chat/interactions/PlanCard.d.ts +2 -2
  53. package/dist/chat/interactions/PlanCard.js +1 -1
  54. package/dist/chat/interactions/QuestionField.d.ts +8 -3
  55. package/dist/chat/interactions/QuestionField.js +89 -8
  56. package/dist/chat/interactions/QuestionForm.d.ts +3 -1
  57. package/dist/chat/interactions/QuestionForm.js +48 -10
  58. package/dist/chat/interactions/SecretInput.d.ts +32 -0
  59. package/dist/chat/interactions/SecretInput.js +72 -0
  60. package/dist/chat/interactions/card-ui.d.ts +5 -3
  61. package/dist/chat/interactions/card-ui.js +5 -3
  62. package/dist/chat/interactions/index.d.ts +2 -1
  63. package/dist/chat/interactions/index.js +2 -1
  64. package/dist/chat/sidebar/SessionSidebar.js +2 -0
  65. package/dist/chat/sidebar/SidebarFilterMenu.d.ts +7 -2
  66. package/dist/chat/sidebar/SidebarFilterMenu.js +26 -2
  67. package/dist/chat/sidebar/SidebarSessionRow.d.ts +3 -1
  68. package/dist/chat/sidebar/SidebarSessionRow.js +8 -3
  69. package/dist/chat/sidebar/sidebar-live.js +8 -4
  70. package/dist/chat/transcript/AuthFailureCard.d.ts +34 -0
  71. package/dist/chat/transcript/AuthFailureCard.js +358 -0
  72. package/dist/chat/transcript/InteractionToolBody.js +12 -2
  73. package/dist/chat/transcript/actions.d.ts +24 -1
  74. package/dist/chat/transcript/index.d.ts +3 -2
  75. package/dist/chat/transcript/index.js +2 -1
  76. package/dist/chat/transcript/notices.d.ts +2 -1
  77. package/dist/chat/transcript/notices.js +13 -1
  78. package/dist/chat/transcript/script-input.d.ts +1 -1
  79. package/dist/chat/transcript/shell-block.js +1 -1
  80. package/dist/components/HowItWorks.d.ts +8 -1
  81. package/dist/components/HowItWorks.js +2 -2
  82. package/dist/components/RowActionsMenu.d.ts +6 -1
  83. package/dist/components/RowActionsMenu.js +4 -0
  84. package/dist/core.css +24 -0
  85. package/dist/dist/{index-WlE93Q6d.d.ts → index-DqCio7Nd.d.ts} +36 -3
  86. package/dist/dist/index-f-XWIoYo.d.ts +1 -0
  87. package/dist/dist/index.d.ts +6 -0
  88. package/dist/dist/sandbox-B4OW6oNx.d.ts +2 -0
  89. package/dist/dist/timeout-B5pO5I5a.d.ts +30 -0
  90. package/dist/extensions/ExtensionSettingsPage.js +1 -1
  91. package/dist/extensions/ExtensionSettingsSidebar.js +1 -1
  92. package/dist/extensions/headless/fixture-host.js +1 -1
  93. package/dist/extensions/headless/index.js +4 -4
  94. package/dist/extensions/hooks.js +1 -1
  95. package/dist/files/DiffsTab.js +1 -1
  96. package/dist/files/EditorColumn.js +1 -1
  97. package/dist/files/MediaDiff.js +1 -1
  98. package/dist/files/SearchPanel.js +121 -53
  99. package/dist/files/headless/name-match.js +29 -14
  100. package/dist/files/useEntryActions.js +1 -1
  101. package/dist/files/useOpenFiles.js +1 -1
  102. package/dist/git/WherePicker.js +2 -2
  103. package/dist/git/headless/environment.d.ts +6 -1
  104. package/dist/git/headless/environment.js +5 -2
  105. package/dist/git/headless/labels.d.ts +2 -0
  106. package/dist/git/headless/labels.js +2 -0
  107. package/dist/git/index.d.ts +2 -1
  108. package/dist/git/index.js +2 -1
  109. package/dist/git/useStartFromPanel.d.ts +22 -0
  110. package/dist/git/useStartFromPanel.js +91 -0
  111. package/dist/keybindings/KeyCommands.js +1 -1
  112. package/dist/keybindings/KeybindingsProvider.js +1 -1
  113. package/dist/keybindings/headless/catalog.d.ts +1 -1
  114. package/dist/keybindings/headless/catalog.js +14 -2
  115. package/dist/keybindings/headless/index.js +2 -2
  116. package/dist/keybindings/headless/key-scope.d.ts +4 -2
  117. package/dist/keybindings/headless/key-scope.js +17 -2
  118. package/dist/keybindings/headless/overrides.js +1 -1
  119. package/dist/machines/HostSyncPanel.js +1 -1
  120. package/dist/machines/SyncOutcomeBadge.js +1 -1
  121. package/dist/machines/headless/index.js +1 -1
  122. package/dist/onboarding/demos/features.d.ts +9 -1
  123. package/dist/onboarding/demos/features.js +107 -2
  124. package/dist/onboarding/demos/how-it-works.d.ts +5 -1
  125. package/dist/onboarding/demos/how-it-works.js +120 -2
  126. package/dist/onboarding/demos/index.js +1 -1
  127. package/dist/onboarding/headless/labels.d.ts +17 -0
  128. package/dist/onboarding/headless/labels.js +17 -0
  129. package/dist/onboarding/index.js +4 -4
  130. package/dist/onboarding/marks.d.ts +1 -2
  131. package/dist/onboarding/marks.js +4 -12
  132. package/dist/onboarding/steps/ConnectorsStep.js +1 -1
  133. package/dist/onboarding/steps/ReadyStep.js +1 -1
  134. package/dist/onboarding/steps/SkillsStep.js +1 -1
  135. package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
  136. package/dist/onboarding/tutorials.d.ts +3 -1
  137. package/dist/onboarding/tutorials.js +2 -1
  138. package/dist/palette/app-sources.js +1 -1
  139. package/dist/palette/headless/app-sources.js +10 -0
  140. package/dist/palette/headless/labels.js +2 -0
  141. package/dist/session/ArtifactsPanel.js +1 -1
  142. package/dist/session/PanelAttention.d.ts +14 -6
  143. package/dist/session/PanelAttention.js +35 -24
  144. package/dist/session/PlanTracker.d.ts +54 -0
  145. package/dist/session/PlanTracker.js +413 -0
  146. package/dist/session/ProjectHome.d.ts +15 -2
  147. package/dist/session/ProjectHome.js +158 -85
  148. package/dist/session/RemindersPanel.d.ts +25 -0
  149. package/dist/session/RemindersPanel.js +526 -0
  150. package/dist/session/SecretsPanel.d.ts +19 -0
  151. package/dist/session/SecretsPanel.js +241 -0
  152. package/dist/session/SessionProvider.d.ts +26 -5
  153. package/dist/session/SessionProvider.js +51 -6
  154. package/dist/session/StepStatusIcon.d.ts +24 -0
  155. package/dist/session/StepStatusIcon.js +50 -0
  156. package/dist/session/TodoList.d.ts +4 -3
  157. package/dist/session/TodoList.js +6 -5
  158. package/dist/session/headless/fixture-host.d.ts +32 -22
  159. package/dist/session/headless/fixture-host.js +86 -51
  160. package/dist/session/headless/fixture-plans.d.ts +57 -0
  161. package/dist/session/headless/fixture-plans.js +141 -0
  162. package/dist/session/headless/fixture-schedules.d.ts +49 -0
  163. package/dist/session/headless/fixture-schedules.js +133 -0
  164. package/dist/session/headless/home-layout.d.ts +10 -2
  165. package/dist/session/headless/home-layout.js +7 -2
  166. package/dist/session/headless/host.d.ts +85 -13
  167. package/dist/session/headless/index.d.ts +5 -3
  168. package/dist/session/headless/index.js +5 -3
  169. package/dist/session/headless/labels.d.ts +95 -12
  170. package/dist/session/headless/labels.js +67 -18
  171. package/dist/session/headless/plans.d.ts +53 -0
  172. package/dist/session/headless/plans.js +78 -0
  173. package/dist/session/headless/reminder-labels.d.ts +63 -0
  174. package/dist/session/headless/reminder-labels.js +84 -0
  175. package/dist/session/headless/schedules.d.ts +93 -0
  176. package/dist/session/headless/schedules.js +190 -0
  177. package/dist/session/headless/secrets.d.ts +28 -0
  178. package/dist/session/headless/secrets.js +48 -0
  179. package/dist/session/index.d.ts +7 -5
  180. package/dist/session/index.js +6 -4
  181. package/dist/session/testing/contract.d.ts +18 -5
  182. package/dist/session/testing/contract.js +351 -43
  183. package/dist/session/testing/index.d.ts +4 -2
  184. package/dist/session/testing/index.js +4 -2
  185. package/dist/settings/headless/catalog.js +17 -1
  186. package/dist/settings/headless/index.d.ts +2 -2
  187. package/dist/settings/headless/index.js +3 -3
  188. package/dist/settings/headless/labels.d.ts +0 -2
  189. package/dist/settings/headless/labels.js +0 -2
  190. package/dist/settings/headless/layout.js +7 -1
  191. package/dist/settings/headless/providers.d.ts +17 -1
  192. package/dist/settings/headless/providers.js +19 -1
  193. package/dist/settings/headless/search.d.ts +1 -1
  194. package/dist/settings/rows.d.ts +1 -1
  195. package/dist/settings/rows.js +2 -2
  196. package/dist/settings/sections/appearance/AppearanceSection.js +2 -2
  197. package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
  198. package/dist/settings/sections/editor/EditorSection.js +1 -1
  199. package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
  200. package/dist/settings/sections/extensions/ChangeOriginDialog.js +1 -1
  201. package/dist/settings/sections/extensions/CreateExtensionDialog.js +1 -1
  202. package/dist/settings/sections/extensions/ExtensionsSection.js +1 -1
  203. package/dist/settings/sections/host-catalog/HostCatalogSection.js +1 -1
  204. package/dist/settings/sections/instructions/InstructionsSection.js +1 -1
  205. package/dist/settings/sections/keybindings/labels.d.ts +2 -0
  206. package/dist/settings/sections/keybindings/labels.js +2 -0
  207. package/dist/settings/sections/keybindings/rows.js +8 -0
  208. package/dist/settings/sections/mcp/McpSection.js +1 -1
  209. package/dist/settings/sections/mcp/McpServerRow.js +1 -1
  210. package/dist/settings/sections/models/ModelRows.js +2 -2
  211. package/dist/settings/sections/providers/ProvidersSection.js +209 -201
  212. package/dist/settings/sections/providers/ServerProvidersSection.js +1 -1
  213. package/dist/settings/sections/shared/catalog.js +1 -1
  214. package/dist/settings/sections/skills/SkillList.js +1 -1
  215. package/dist/settings/sections/skills/SkillsSection.js +2 -2
  216. package/dist/styles.css +59 -1
  217. package/dist/terminal/HostTerminalSurface.js +2 -2
  218. package/dist/workspace/PanelContentView.d.ts +22 -4
  219. package/dist/workspace/PanelContentView.js +112 -16
  220. package/dist/workspace/PanelGlyph.d.ts +21 -0
  221. package/dist/workspace/PanelGlyph.js +33 -0
  222. package/dist/workspace/PanelHome.js +5 -3
  223. package/dist/workspace/PanelStrip.js +11 -4
  224. package/dist/workspace/PanelToolbar.d.ts +32 -0
  225. package/dist/workspace/PanelToolbar.js +194 -0
  226. package/dist/workspace/WorkspaceProvider.d.ts +3 -1
  227. package/dist/workspace/WorkspaceProvider.js +6 -2
  228. package/dist/workspace/extension-tabs.js +5 -2
  229. package/dist/workspace/headless/host.d.ts +4 -0
  230. package/dist/workspace/headless/index.d.ts +3 -1
  231. package/dist/workspace/headless/index.js +4 -2
  232. package/dist/workspace/headless/labels.d.ts +10 -0
  233. package/dist/workspace/headless/labels.js +11 -1
  234. package/dist/workspace/headless/pages.d.ts +15 -0
  235. package/dist/workspace/headless/pages.js +49 -0
  236. package/dist/workspace/headless/tab-mark.d.ts +14 -0
  237. package/dist/workspace/headless/tab-mark.js +27 -0
  238. package/dist/workspace/headless/view.d.ts +7 -1
  239. package/dist/workspace/index.d.ts +3 -2
  240. package/dist/workspace/index.js +3 -2
  241. package/dist/workspace/testing/index.js +6 -0
  242. package/dist/workspace/workspace-key-commands.js +3 -3
  243. package/package.json +2 -2
  244. package/src/styles/motion.css +13 -0
  245. package/src/styles/onboarding.css +0 -1
  246. package/src/styles/primitives.css +10 -0
  247. package/src/styles/workspace.css +17 -0
  248. package/dist/session/TodosPanel.d.ts +0 -19
  249. package/dist/session/TodosPanel.js +0 -251
  250. package/dist/session/headless/todos.d.ts +0 -22
  251. package/dist/session/headless/todos.js +0 -38
@@ -1003,6 +1003,123 @@ function HostsScene({ step, className, style }) {
1003
1003
  })
1004
1004
  });
1005
1005
  }
1006
+ /** Secrets: a password field the agent asks with, the private file that keeps the key, then a command whose output hides it. */
1007
+ function SecretsScene({ step, className, style }) {
1008
+ const labels = useOnboardingLabels();
1009
+ return /* @__PURE__ */ jsx(TourStage, {
1010
+ step,
1011
+ className,
1012
+ style,
1013
+ children: /* @__PURE__ */ jsxs("span", {
1014
+ className: "zg-demo-stack items-center justify-items-center w-full max-w-[268px]",
1015
+ children: [
1016
+ /* @__PURE__ */ jsxs(Part, {
1017
+ at: [0],
1018
+ className: "relative zg-raised border rounded-zg-lg flex flex-col gap-2 px-3.5 py-3 w-[212px]",
1019
+ children: [
1020
+ /* @__PURE__ */ jsx("span", {
1021
+ className: "truncate text-zg-label text-[var(--zg-text)]",
1022
+ children: labels.sceneSecretPrompt
1023
+ }),
1024
+ /* @__PURE__ */ jsxs("span", {
1025
+ className: "zg-well flex items-center gap-1.5 h-6 px-2 rounded-zg-md min-w-0",
1026
+ children: [/* @__PURE__ */ jsx("span", {
1027
+ "aria-hidden": true,
1028
+ className: "i-ph-lock-simple text-zg-label text-[var(--zg-text-muted)] shrink-0"
1029
+ }), /* @__PURE__ */ jsx("span", {
1030
+ className: "zg-loop zg-tour-type truncate font-mono text-zg-badge text-[var(--zg-text)]",
1031
+ style: after(300),
1032
+ children: labels.sceneSecretDots
1033
+ })]
1034
+ }),
1035
+ /* @__PURE__ */ jsx("span", {
1036
+ className: `zg-loop zg-tour-press ${buttonClass({
1037
+ variant: "solid",
1038
+ size: "xs"
1039
+ })} self-start`,
1040
+ style: after(1500),
1041
+ children: labels.sceneSecretSave
1042
+ }),
1043
+ /* @__PURE__ */ jsx(TourPointer, {
1044
+ className: "absolute left-14 bottom-1",
1045
+ from: [40, 30]
1046
+ })
1047
+ ]
1048
+ }),
1049
+ /* @__PURE__ */ jsxs(Part, {
1050
+ at: [1],
1051
+ className: "flex items-center w-full",
1052
+ children: [
1053
+ /* @__PURE__ */ jsx("span", {
1054
+ className: "zg-raised border rounded-full grid place-items-center w-9 h-9 shrink-0",
1055
+ children: /* @__PURE__ */ jsx("span", {
1056
+ "aria-hidden": true,
1057
+ className: "i-ph-key text-zg-body text-[var(--zg-accent)]"
1058
+ })
1059
+ }),
1060
+ /* @__PURE__ */ jsx(Link, {
1061
+ lit: [1],
1062
+ dots: [1]
1063
+ }),
1064
+ /* @__PURE__ */ jsxs("span", {
1065
+ className: "zg-raised border rounded-zg-md flex flex-col gap-1 px-2.5 py-2 w-[156px] shrink-0 min-w-0",
1066
+ children: [
1067
+ /* @__PURE__ */ jsxs("span", {
1068
+ className: "flex items-center gap-1.5 min-w-0",
1069
+ children: [/* @__PURE__ */ jsx("span", {
1070
+ "aria-hidden": true,
1071
+ className: "i-ph-file-lock text-zg-label text-[var(--zg-text-muted)] shrink-0"
1072
+ }), /* @__PURE__ */ jsx("span", {
1073
+ className: "truncate font-mono text-zg-badge text-[var(--zg-text)]",
1074
+ children: labels.sceneSecretName
1075
+ })]
1076
+ }),
1077
+ /* @__PURE__ */ jsx("span", {
1078
+ className: "truncate font-mono text-zg-badge text-[var(--zg-text-muted)]",
1079
+ children: labels.sceneSecretsFolder
1080
+ }),
1081
+ /* @__PURE__ */ jsx(Pop, {
1082
+ at: 900,
1083
+ className: "self-start",
1084
+ children: /* @__PURE__ */ jsxs(MetaChip, {
1085
+ tone: "success",
1086
+ children: [/* @__PURE__ */ jsx("span", {
1087
+ "aria-hidden": true,
1088
+ className: "i-ph-clock"
1089
+ }), labels.sceneSecretTtl]
1090
+ })
1091
+ })
1092
+ ]
1093
+ })
1094
+ ]
1095
+ }),
1096
+ /* @__PURE__ */ jsx(Part, {
1097
+ at: [2],
1098
+ className: "flex items-center w-full",
1099
+ children: /* @__PURE__ */ jsxs(MiniWindow, {
1100
+ className: "w-full",
1101
+ bodyClassName: "px-2.5 pb-2.5 gap-1 font-mono text-zg-badge",
1102
+ children: [/* @__PURE__ */ jsx("span", {
1103
+ className: "zg-loop zg-tour-type truncate text-[var(--zg-text)]",
1104
+ style: after(200),
1105
+ children: labels.sceneSecretCommand
1106
+ }), /* @__PURE__ */ jsxs("span", {
1107
+ className: "zg-loop zg-tour-then flex items-center gap-1.5 min-w-0",
1108
+ style: after(1300),
1109
+ children: [/* @__PURE__ */ jsx("span", {
1110
+ "aria-hidden": true,
1111
+ className: "i-ph-shield-check shrink-0 text-zg-success"
1112
+ }), /* @__PURE__ */ jsx("span", {
1113
+ className: "truncate text-[var(--zg-accent)]",
1114
+ children: labels.sceneSecretOutput
1115
+ })]
1116
+ })]
1117
+ })
1118
+ })
1119
+ ]
1120
+ })
1121
+ });
1122
+ }
1006
1123
  /** The scene of each tutorial. */
1007
1124
  const TUTORIAL_SCENES = {
1008
1125
  connectors: ConnectorsScene,
@@ -1013,7 +1130,8 @@ const TUTORIAL_SCENES = {
1013
1130
  environments: EnvironmentsScene,
1014
1131
  files: FilesScene,
1015
1132
  accounts: AccountsScene,
1016
- hosts: HostsScene
1133
+ hosts: HostsScene,
1134
+ secrets: SecretsScene
1017
1135
  };
1018
1136
  //#endregion
1019
- export { AccountsScene, ConnectorsScene, EnvironmentsScene, ExtensionsScene, FilesScene, HostsScene, InstructionsScene, SkillsScene, TUTORIAL_SCENES };
1137
+ export { AccountsScene, ConnectorsScene, EnvironmentsScene, ExtensionsScene, FilesScene, HostsScene, InstructionsScene, SecretsScene, SkillsScene, TUTORIAL_SCENES };
@@ -1,6 +1,6 @@
1
1
  import { DemoStage } from "./parts.js";
2
- import { ApprovalDemo, SandboxDemo } from "./autonomy.js";
3
2
  import { TUTORIAL_SCENES } from "./how-it-works.js";
3
+ import { ApprovalDemo, SandboxDemo } from "./autonomy.js";
4
4
  import { ExtensionDemo } from "./extensions.js";
5
5
  import { FeatureDemo, hasFeatureDemo } from "./features.js";
6
6
  export { ApprovalDemo, DemoStage, ExtensionDemo, FeatureDemo, SandboxDemo, TUTORIAL_SCENES, hasFeatureDemo };
@@ -111,6 +111,14 @@ declare const DEFAULT_ONBOARDING_LABELS: {
111
111
  sceneTokenCreate: string;
112
112
  sceneToken: string;
113
113
  sceneWss: string;
114
+ sceneSecretPrompt: string;
115
+ sceneSecretDots: string;
116
+ sceneSecretSave: string;
117
+ sceneSecretName: string;
118
+ sceneSecretsFolder: string;
119
+ sceneSecretTtl: string;
120
+ sceneSecretCommand: string;
121
+ sceneSecretOutput: string;
114
122
  sourceField: string;
115
123
  browse: string;
116
124
  sourceName: (label: string, repo: string) => string;
@@ -185,6 +193,15 @@ declare const DEFAULT_ONBOARDING_LABELS: {
185
193
  demoNotifyApp: string;
186
194
  demoNotifyBody: string;
187
195
  demoFolders: readonly ["my-app", ".zidane", "extensions", "deploy.ts"];
196
+ demoSecretPrompt: string;
197
+ demoSecretDots: string;
198
+ demoSecretSave: string;
199
+ demoSecretSaved: string;
200
+ demoReminderTyped: string;
201
+ demoReminderIn: string;
202
+ demoReminderNow: string;
203
+ demoReminderFrom: string;
204
+ demoReminderText: string;
188
205
  demoCommitCommand: string;
189
206
  demoCommitMessage: string;
190
207
  demoBranch: string;
@@ -165,6 +165,14 @@ const DEFAULT_ONBOARDING_LABELS = {
165
165
  sceneTokenCreate: "$ zidane server token create --name laptop",
166
166
  sceneToken: "zds_3f2a…",
167
167
  sceneWss: "wss://",
168
+ sceneSecretPrompt: "Tailscale auth key",
169
+ sceneSecretDots: "••••••••••••",
170
+ sceneSecretSave: "Save securely",
171
+ sceneSecretName: "TS_AUTHKEY",
172
+ sceneSecretsFolder: "~/.zidane/secrets",
173
+ sceneSecretTtl: "24 hours",
174
+ sceneSecretCommand: "$ cat $ZIDANE_SECRETS/TS_AUTHKEY",
175
+ sceneSecretOutput: "[secret:TS_AUTHKEY]",
168
176
  sourceField: "Repository or package",
169
177
  browse: "Browse",
170
178
  sourceName: (label, repo) => `${label}, ${repo}`,
@@ -252,6 +260,15 @@ const DEFAULT_ONBOARDING_LABELS = {
252
260
  "extensions",
253
261
  "deploy.ts"
254
262
  ],
263
+ demoSecretPrompt: "Tailscale auth key",
264
+ demoSecretDots: "••••••••••••",
265
+ demoSecretSave: "Save securely",
266
+ demoSecretSaved: "Saved TS_AUTHKEY",
267
+ demoReminderTyped: "/remind in 20m check the deploy",
268
+ demoReminderIn: "in 20 min",
269
+ demoReminderNow: "now",
270
+ demoReminderFrom: "Reminder",
271
+ demoReminderText: "Check the deploy",
255
272
  demoCommitCommand: "/commit",
256
273
  demoCommitMessage: "feat: rate limit /chat",
257
274
  demoBranch: "main",
@@ -1,14 +1,14 @@
1
1
  import { OnboardingHostProvider, OnboardingProvider, useOnboarding, useOnboardingHost, useOnboardingLabels, useOnboardingStep } from "./OnboardingProvider.js";
2
+ import { useSignIn } from "./useSignIn.js";
2
3
  import { ExtensionMark, NATIVE_EXTENSION_ICONS, ProviderMark, extensionMarkOf } from "./marks.js";
3
- import { ConnectProviderCard } from "./ConnectProviderCard.js";
4
4
  import { DemoStage } from "./demos/parts.js";
5
+ import { TUTORIAL_SCENES } from "./demos/how-it-works.js";
6
+ import { Tutorial } from "./tutorials.js";
7
+ import { ConnectProviderCard } from "./ConnectProviderCard.js";
5
8
  import { ApprovalDemo, SandboxDemo } from "./demos/autonomy.js";
6
9
  import { OnboardingStepFrame } from "./OnboardingStepFrame.js";
7
10
  import { AutonomyStep } from "./steps/AutonomyStep.js";
8
- import { TUTORIAL_SCENES } from "./demos/how-it-works.js";
9
- import { Tutorial } from "./tutorials.js";
10
11
  import { ConnectorsStep } from "./steps/ConnectorsStep.js";
11
- import { useSignIn } from "./useSignIn.js";
12
12
  import { ConnectStep } from "./steps/ConnectStep.js";
13
13
  import { ConversationPresetPreview, ConversationPreview, transcriptPreviewOptions } from "./conversation.js";
14
14
  import { ConversationStep } from "./steps/ConversationStep.js";
@@ -33,8 +33,7 @@ interface ExtensionMarkEntry {
33
33
  brand?: string;
34
34
  }
35
35
  /**
36
- * The mark of an extension: its own icon, else the logo a listing gives it, else `extensionMark`'s
37
- * (the native catalog's logo or icon, else its letter).
36
+ * The mark of an extension: `extensionMark` of its entry, the rule every app and every row shares.
38
37
  *
39
38
  * @param entry - The extension.
40
39
  */
@@ -29,24 +29,16 @@ function ProviderMark({ provider, size = "md", className }) {
29
29
  });
30
30
  }
31
31
  /**
32
- * The mark of an extension: its own icon, else the logo a listing gives it, else `extensionMark`'s
33
- * (the native catalog's logo or icon, else its letter).
32
+ * The mark of an extension: `extensionMark` of its entry, the rule every app and every row shares.
34
33
  *
35
34
  * @param entry - The extension.
36
35
  */
37
36
  function extensionMarkOf(entry) {
38
- const own = entry.icon?.gui?.trim();
39
- if (own) return {
40
- kind: "icon",
41
- gui: own
42
- };
43
- if (entry.brand) return {
44
- kind: "brand",
45
- brand: entry.brand
46
- };
47
37
  return extensionMark({
48
38
  id: entry.name,
49
- ...entry.label ? { name: entry.label } : {}
39
+ ...entry.label ? { name: entry.label } : {},
40
+ ...entry.icon ? { icon: entry.icon } : {},
41
+ ...entry.brand ? { brand: entry.brand } : {}
50
42
  });
51
43
  }
52
44
  /**
@@ -6,8 +6,8 @@ import { constant, useReadable } from "../../chat/headless/store.js";
6
6
  import { connectorsFromImport } from "../headless/controller.js";
7
7
  import { useOnboarding, useOnboardingLabels } from "../OnboardingProvider.js";
8
8
  import { RoutedLink } from "../../extensions/links.js";
9
- import { OnboardingStepFrame } from "../OnboardingStepFrame.js";
10
9
  import { Tutorial } from "../tutorials.js";
10
+ import { OnboardingStepFrame } from "../OnboardingStepFrame.js";
11
11
  import { StepSection, StepTray } from "./StepSection.js";
12
12
  import { TaskChip, TaskFailure } from "./tasks.js";
13
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -4,11 +4,11 @@ import { BrowserSignIn } from "../../components/BrowserSignIn.js";
4
4
  import { presetFor } from "../../theme/accents.js";
5
5
  import { constant, useReadable } from "../../chat/headless/store.js";
6
6
  import { useOnboarding, useOnboardingLabels } from "../OnboardingProvider.js";
7
+ import { useSignIn } from "../useSignIn.js";
7
8
  import { ExtensionMark as ExtensionMark$1, ProviderMark } from "../marks.js";
8
9
  import { OnboardingStepFrame } from "../OnboardingStepFrame.js";
9
10
  import { StepSection } from "./StepSection.js";
10
11
  import { TaskChip } from "./tasks.js";
11
- import { useSignIn } from "../useSignIn.js";
12
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
13
  import { Fragment as Fragment$1, useEffect, useState } from "react";
14
14
  import { APPROVAL_MODE_OPTIONS, TRANSCRIPT_PRESETS, connectorById, nativeExtensionByName, onboardingImportParts, onboardingSwitchedFeatures, transcriptPresetOf } from "zidane/chat/pure";
@@ -1,7 +1,7 @@
1
1
  import { constant, useReadable } from "../../chat/headless/store.js";
2
2
  import { useOnboarding, useOnboardingLabels } from "../OnboardingProvider.js";
3
- import { OnboardingStepFrame } from "../OnboardingStepFrame.js";
4
3
  import { Tutorial } from "../tutorials.js";
4
+ import { OnboardingStepFrame } from "../OnboardingStepFrame.js";
5
5
  import { SkillSourceBrowser } from "../skills/SkillSourceBrowser.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/onboarding/steps/SkillsStep.tsx
@@ -3,8 +3,8 @@ import { Segmented } from "../../../components/Segmented.js";
3
3
  import { ErrorNote, FormCard, OpLine } from "../../../components/Form.js";
4
4
  import { BrowserSignIn } from "../../../components/BrowserSignIn.js";
5
5
  import { useOnboarding, useOnboardingLabels } from "../../OnboardingProvider.js";
6
- import { ProviderMark } from "../../marks.js";
7
6
  import { useSignIn } from "../../useSignIn.js";
7
+ import { ProviderMark } from "../../marks.js";
8
8
  import { KeyForm } from "./KeyForm.js";
9
9
  import { ProviderReady } from "./ProviderReady.js";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -9,6 +9,8 @@ interface TutorialProps {
9
9
  actions?: ReactNode;
10
10
  /** The server it is about, by name: the steps that name this computer name it instead. Absent: this computer. */
11
11
  host?: string;
12
+ /** The block's surface (`HowItWorks`): `raised` on a bare panel. @default 'tray' */
13
+ surface?: 'tray' | 'raised';
12
14
  /** Extra classes on the block. */
13
15
  className?: string;
14
16
  }
@@ -17,6 +19,6 @@ interface TutorialProps {
17
19
  *
18
20
  * @param props - Component props.
19
21
  */
20
- declare function Tutorial({ topic, actions, host, className }: TutorialProps): import("react").JSX.Element;
22
+ declare function Tutorial({ topic, actions, host, surface, className }: TutorialProps): import("react").JSX.Element;
21
23
  //#endregion
22
24
  export { Tutorial, TutorialProps };
@@ -8,7 +8,7 @@ import { jsx } from "react/jsx-runtime";
8
8
  *
9
9
  * @param props - Component props.
10
10
  */
11
- function Tutorial({ topic, actions, host, className = "" }) {
11
+ function Tutorial({ topic, actions, host, surface, className = "" }) {
12
12
  const labels = useOnboardingLabels();
13
13
  const words = host === void 0 ? labels.tutorials[topic] : labels.tutorialOnServer(topic, host);
14
14
  const Scene = TUTORIAL_SCENES[topic];
@@ -17,6 +17,7 @@ function Tutorial({ topic, actions, host, className = "" }) {
17
17
  steps: words.steps,
18
18
  illustration: (step) => /* @__PURE__ */ jsx(Scene, { step }),
19
19
  actions,
20
+ ...surface ? { surface } : {},
20
21
  className
21
22
  });
22
23
  }
@@ -1,5 +1,5 @@
1
- import { usePendingApprovals } from "../approvals/ApprovalsProvider.js";
2
1
  import { getMergedKeybindings } from "../keybindings/headless/overrides.js";
2
+ import { usePendingApprovals } from "../approvals/ApprovalsProvider.js";
3
3
  import { useKeybindingsHost } from "../keybindings/KeybindingsProvider.js";
4
4
  import { useKeyCommandActions, useKeyCommandRegistry } from "../keybindings/KeyCommands.js";
5
5
  import { usePresenceMap } from "../machines/MachinesProvider.js";
@@ -76,6 +76,16 @@ const ACTIONS = {
76
76
  group: "navigate",
77
77
  icon: "i-ph-sidebar-simple"
78
78
  },
79
+ navigateBack: {
80
+ group: "navigate",
81
+ icon: "i-ph-arrow-left",
82
+ keywords: ["history", "previous"]
83
+ },
84
+ navigateForward: {
85
+ group: "navigate",
86
+ icon: "i-ph-arrow-right",
87
+ keywords: ["history", "next"]
88
+ },
79
89
  panelNext: {
80
90
  group: "navigate",
81
91
  icon: "i-ph-caret-double-right"
@@ -62,6 +62,8 @@ const DEFAULT_PALETTE_LABELS = {
62
62
  openArtifacts: "Show artifacts",
63
63
  openUsagePanel: "Show usage",
64
64
  toggleSidebar: "Toggle sidebar",
65
+ navigateBack: "Go back",
66
+ navigateForward: "Go forward",
65
67
  panelNext: "Next panel tab",
66
68
  panelPrev: "Previous panel tab",
67
69
  tabNext: "Next tab",
@@ -2,6 +2,7 @@ import { IconButton } from "../components/IconButton.js";
2
2
  import { PanelEmpty, PanelLoading } from "../components/PanelEmpty.js";
3
3
  import { PANEL_ROW, PANEL_ROW_HOVER, RowBadge } from "../components/PanelRows.js";
4
4
  import { RowActionsMenu } from "../components/RowActionsMenu.js";
5
+ import { countArtifacts } from "./headless/artifacts.js";
5
6
  import { useExtensionItems } from "../extensions/ExtensionsProvider.js";
6
7
  import { useSessionArtifacts, useSessionHost } from "./SessionProvider.js";
7
8
  import { useLinkRouter } from "../extensions/links.js";
@@ -9,7 +10,6 @@ import { useSessionLabels } from "./useSessionLabels.js";
9
10
  import { ArtifactRowChips, badgeColorStyle, badgeToneClass } from "./ArtifactRowChips.js";
10
11
  import { renderersFor } from "../extensions/headless/select.js";
11
12
  import { ExtensionRenderer } from "../extensions/ExtensionRenderer.js";
12
- import { countArtifacts } from "./headless/artifacts.js";
13
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
14
14
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
15
15
  //#region src/session/ArtifactsPanel.tsx
@@ -25,16 +25,24 @@ interface InboxAttentionProps extends PanelAttentionProps {
25
25
  */
26
26
  declare function InboxAttention({ sessionId, actions, reveal }: InboxAttentionProps): null;
27
27
  /**
28
- * Badges the Todos tab with the active session's open items (pending and in progress); hidden at zero.
28
+ * Badges the Queue tab with the active session's queued messages; hidden at zero.
29
29
  *
30
30
  * @param props - The {@link PanelAttentionProps}.
31
31
  */
32
- declare function TodosAttention({ sessionId, actions }: PanelAttentionProps): null;
32
+ declare function QueueAttention({ sessionId, actions }: PanelAttentionProps): null;
33
+ /** Props for {@link SecretsAttention}. */
34
+ interface SecretsAttentionProps {
35
+ /** The active session, or `null`. */
36
+ sessionId: string | null;
37
+ /** Where the open goes. Default: the `WorkspaceProvider` above (none: nothing happens). Keep it stable. */
38
+ actions?: Pick<WorkspaceActions, 'openProactive'>;
39
+ }
33
40
  /**
34
- * Badges the Queue tab with the active session's queued messages; hidden at zero.
41
+ * Opens the Secrets tab (proactively) the first time the active session saves a secret, once per session. Reads the
42
+ * session's secrets itself, so the change signal reaches it while the panel is closed.
35
43
  *
36
- * @param props - The {@link PanelAttentionProps}.
44
+ * @param props - The {@link SecretsAttentionProps}.
37
45
  */
38
- declare function QueueAttention({ sessionId, actions }: PanelAttentionProps): null;
46
+ declare function SecretsAttention({ sessionId, actions }: SecretsAttentionProps): null;
39
47
  //#endregion
40
- export { AttentionActions, InboxAttention, InboxAttentionProps, PanelAttentionProps, QueueAttention, TodosAttention };
48
+ export { AttentionActions, InboxAttention, InboxAttentionProps, PanelAttentionProps, QueueAttention, SecretsAttention, SecretsAttentionProps };
@@ -1,9 +1,9 @@
1
1
  import { useOptionalChatHost } from "../chat/ChatProvider.js";
2
- import { useSessionQueue, useSessionTodos } from "./SessionProvider.js";
2
+ import { useSessionHost, useSessionQueue, useSessionSecrets } from "./SessionProvider.js";
3
3
  import { useOptionalWorkspaceActions } from "../workspace/WorkspaceProvider.js";
4
4
  import { useAllInteractions, usePendingInteractions } from "../chat/interactions/hooks.js";
5
5
  import { useEffect, useLayoutEffect, useRef } from "react";
6
- import { INBOX_PANEL_ID, QUEUE_PANEL_ID, TODOS_PANEL_ID } from "zidane/chat/pure";
6
+ import { INBOX_PANEL_ID, QUEUE_PANEL_ID, SECRETS_PANEL_ID } from "zidane/chat/pure";
7
7
  //#region src/session/PanelAttention.tsx
8
8
  /**
9
9
  * The side panel's attention drivers: they turn what waits in a session into
@@ -16,12 +16,13 @@ import { INBOX_PANEL_ID, QUEUE_PANEL_ID, TODOS_PANEL_ID } from "zidane/chat/pure
16
16
  * once); a live request in the active session pins the Inbox tab and
17
17
  * shows it, once per request (a blocked run outranks a tab). Rehydrated
18
18
  * requests only badge.
19
- * - `TodosAttention`: open items of the active session's list, info tone.
20
19
  * - `QueueAttention`: messages of the active session waiting for its run
21
20
  * to end, info tone.
21
+ * - `SecretsAttention`: the first time the active session saves a secret
22
+ * (new, or a replaced one), a proactive open of the Secrets tab, once per
23
+ * session; it never yanks the panel off a tab the user picked.
22
24
  *
23
25
  * <InboxAttention sessionId={active} />
24
- * <TodosAttention sessionId={active} />
25
26
  * <QueueAttention sessionId={active} />
26
27
  */
27
28
  const ATTENTION_TONE = "attention";
@@ -74,47 +75,57 @@ function InboxAttention({ sessionId, actions, reveal = true }) {
74
75
  return null;
75
76
  }
76
77
  /**
77
- * Badges the Todos tab with the active session's open items (pending and in progress); hidden at zero.
78
+ * Badges the Queue tab with the active session's queued messages; hidden at zero.
78
79
  *
79
80
  * @param props - The {@link PanelAttentionProps}.
80
81
  */
81
- function TodosAttention({ sessionId, actions }) {
82
+ function QueueAttention({ sessionId, actions }) {
82
83
  const panel = useAttentionActions(actions);
83
- const snap = useSessionTodos(sessionId);
84
- const open = snap && snap.todos.length > 0 ? snap.tally.pending + snap.tally.in_progress : 0;
84
+ const queued = useSessionQueue(sessionId).length;
85
85
  useLayoutEffect(() => {
86
86
  if (!sessionId || !panel) return;
87
- panel.setAttention(sessionId, TODOS_PANEL_ID, open > 0 ? {
88
- count: open,
87
+ panel.setAttention(sessionId, QUEUE_PANEL_ID, queued > 0 ? {
88
+ count: queued,
89
89
  tone: "info"
90
90
  } : null);
91
91
  }, [
92
92
  sessionId,
93
- open,
93
+ queued,
94
94
  panel
95
95
  ]);
96
96
  return null;
97
97
  }
98
98
  /**
99
- * Badges the Queue tab with the active session's queued messages; hidden at zero.
99
+ * Opens the Secrets tab (proactively) the first time the active session saves a secret, once per session. Reads the
100
+ * session's secrets itself, so the change signal reaches it while the panel is closed.
100
101
  *
101
- * @param props - The {@link PanelAttentionProps}.
102
+ * @param props - The {@link SecretsAttentionProps}.
102
103
  */
103
- function QueueAttention({ sessionId, actions }) {
104
- const panel = useAttentionActions(actions);
105
- const queued = useSessionQueue(sessionId).length;
106
- useLayoutEffect(() => {
107
- if (!sessionId || !panel) return;
108
- panel.setAttention(sessionId, QUEUE_PANEL_ID, queued > 0 ? {
109
- count: queued,
110
- tone: "info"
111
- } : null);
104
+ function SecretsAttention({ sessionId, actions }) {
105
+ const fromProvider = useOptionalWorkspaceActions();
106
+ const panel = actions ?? fromProvider;
107
+ const secrets = useSessionHost().secrets;
108
+ const entries = useSessionSecrets(sessionId);
109
+ useEffect(() => {
110
+ if (sessionId) secrets?.refresh(sessionId).catch(() => void 0);
111
+ }, [secrets, sessionId]);
112
+ const seen = useRef(/* @__PURE__ */ new Map());
113
+ const opened = useRef(/* @__PURE__ */ new Set());
114
+ useEffect(() => {
115
+ if (!sessionId || !entries) return;
116
+ const known = seen.current.get(sessionId);
117
+ const now = new Map(entries.map((e) => [e.name, e.createdAt]));
118
+ seen.current.set(sessionId, now);
119
+ if (!known || !panel || opened.current.has(sessionId)) return;
120
+ if (!entries.some((e) => e.sessionId === sessionId && known.get(e.name) !== e.createdAt)) return;
121
+ opened.current.add(sessionId);
122
+ panel.openProactive(SECRETS_PANEL_ID);
112
123
  }, [
113
124
  sessionId,
114
- queued,
125
+ entries,
115
126
  panel
116
127
  ]);
117
128
  return null;
118
129
  }
119
130
  //#endregion
120
- export { InboxAttention, QueueAttention, TodosAttention };
131
+ export { InboxAttention, QueueAttention, SecretsAttention };
@@ -0,0 +1,54 @@
1
+ import { InboxPlans } from "./headless/plans.js";
2
+ import { CSSProperties } from "react";
3
+ import { PlanView } from "zidane/chat";
4
+ //#region src/session/PlanTracker.d.ts
5
+ /** Props for {@link PlanTracker}. */
6
+ interface PlanTrackerProps {
7
+ /** The session the plan belongs to. */
8
+ sessionId: string;
9
+ /** The plan to show. */
10
+ plan: PlanView;
11
+ /** Leave out the title row (a "Recent" row opened already shows it). */
12
+ hideHeader?: boolean;
13
+ /** Extra classes on the root element. */
14
+ className?: string;
15
+ /** Inline styles on the root element. */
16
+ style?: CSSProperties;
17
+ }
18
+ /**
19
+ * The tone of a plan's state chip.
20
+ *
21
+ * @param plan - The plan.
22
+ */
23
+ declare function planStateTone(plan: PlanView): 'accent' | 'warn' | 'success' | 'muted';
24
+ /**
25
+ * A session's plans for the Inbox: the one in progress and the recent ones. Reads the session from the host once.
26
+ *
27
+ * @param sessionId - The session.
28
+ */
29
+ declare function useInboxPlans(sessionId: string): InboxPlans;
30
+ /**
31
+ * Renders one plan with its step edits, retry, add box, tally, and the plan's stop, resume and drop.
32
+ *
33
+ * @param props - The {@link PlanTrackerProps}.
34
+ */
35
+ declare function PlanTracker({ sessionId, plan, hideHeader, className, style }: PlanTrackerProps): import("react").JSX.Element;
36
+ /** Props for {@link RecentPlans}. */
37
+ interface RecentPlansProps {
38
+ /** The session the plans belong to. */
39
+ sessionId: string;
40
+ /** Closed plans, newest first (`useInboxPlans`). */
41
+ plans: readonly PlanView[];
42
+ /** Extra classes on the root element. */
43
+ className?: string;
44
+ /** Inline styles on the root element. */
45
+ style?: CSSProperties;
46
+ }
47
+ /**
48
+ * The Inbox's "Recent" plans: one line each (title, how it ended, its tally), opened in place to read its steps.
49
+ *
50
+ * @param props - The {@link RecentPlansProps}.
51
+ */
52
+ declare function RecentPlans({ sessionId, plans, className, style }: RecentPlansProps): import("react").JSX.Element;
53
+ //#endregion
54
+ export { PlanTracker, PlanTrackerProps, RecentPlans, RecentPlansProps, planStateTone, useInboxPlans };