@tai42/studio-sdk 25.0.1 → 26.0.0

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 (262) hide show
  1. package/README.md +143 -26
  2. package/dist/components/action-menu.d.ts +30 -0
  3. package/dist/components/action-menu.d.ts.map +1 -0
  4. package/dist/components/action-menu.js +101 -0
  5. package/dist/components/action-menu.js.map +1 -0
  6. package/dist/components/agent-picker.d.ts +22 -0
  7. package/dist/components/agent-picker.d.ts.map +1 -0
  8. package/dist/components/agent-picker.js +17 -0
  9. package/dist/components/agent-picker.js.map +1 -0
  10. package/dist/components/channel-picker.d.ts +27 -0
  11. package/dist/components/channel-picker.d.ts.map +1 -0
  12. package/dist/components/channel-picker.js +26 -0
  13. package/dist/components/channel-picker.js.map +1 -0
  14. package/dist/components/components.css +226 -8
  15. package/dist/components/confirm-dialog.d.ts +3 -1
  16. package/dist/components/confirm-dialog.d.ts.map +1 -1
  17. package/dist/components/confirm-dialog.js +2 -2
  18. package/dist/components/confirm-dialog.js.map +1 -1
  19. package/dist/components/execution-key-picker.d.ts +26 -10
  20. package/dist/components/execution-key-picker.d.ts.map +1 -1
  21. package/dist/components/execution-key-picker.js +134 -15
  22. package/dist/components/execution-key-picker.js.map +1 -1
  23. package/dist/components/extension-combo-builder.d.ts +7 -7
  24. package/dist/components/extension-combo-builder.d.ts.map +1 -1
  25. package/dist/components/extension-combo-builder.js +42 -16
  26. package/dist/components/extension-combo-builder.js.map +1 -1
  27. package/dist/components/extension-combo-parts.d.ts +13 -11
  28. package/dist/components/extension-combo-parts.d.ts.map +1 -1
  29. package/dist/components/extension-combo-parts.js +10 -19
  30. package/dist/components/extension-combo-parts.js.map +1 -1
  31. package/dist/components/extension-config-editor.d.ts +33 -0
  32. package/dist/components/extension-config-editor.d.ts.map +1 -0
  33. package/dist/components/extension-config-editor.js +190 -0
  34. package/dist/components/extension-config-editor.js.map +1 -0
  35. package/dist/components/extension-grouping.d.ts +4 -41
  36. package/dist/components/extension-grouping.d.ts.map +1 -1
  37. package/dist/components/extension-grouping.js +1 -48
  38. package/dist/components/extension-grouping.js.map +1 -1
  39. package/dist/components/extension-picker.d.ts +4 -3
  40. package/dist/components/extension-picker.d.ts.map +1 -1
  41. package/dist/components/extension-picker.js +6 -6
  42. package/dist/components/extension-picker.js.map +1 -1
  43. package/dist/components/fleet-report.d.ts +8 -3
  44. package/dist/components/fleet-report.d.ts.map +1 -1
  45. package/dist/components/fleet-report.js +12 -2
  46. package/dist/components/fleet-report.js.map +1 -1
  47. package/dist/components/holder-kinds.d.ts +18 -0
  48. package/dist/components/holder-kinds.d.ts.map +1 -0
  49. package/dist/components/holder-kinds.js +41 -0
  50. package/dist/components/holder-kinds.js.map +1 -0
  51. package/dist/components/holder-list.d.ts +58 -0
  52. package/dist/components/holder-list.d.ts.map +1 -0
  53. package/dist/components/holder-list.js +77 -0
  54. package/dist/components/holder-list.js.map +1 -0
  55. package/dist/components/icons/index.d.ts +1 -1
  56. package/dist/components/icons/index.d.ts.map +1 -1
  57. package/dist/components/icons/index.js +1 -1
  58. package/dist/components/icons/index.js.map +1 -1
  59. package/dist/components/icons/nav-map.d.ts.map +1 -1
  60. package/dist/components/icons/nav-map.js +1 -3
  61. package/dist/components/icons/nav-map.js.map +1 -1
  62. package/dist/components/icons/nav-marks.d.ts +0 -4
  63. package/dist/components/icons/nav-marks.d.ts.map +1 -1
  64. package/dist/components/icons/nav-marks.js +0 -4
  65. package/dist/components/icons/nav-marks.js.map +1 -1
  66. package/dist/components/named-list-picker.d.ts +39 -0
  67. package/dist/components/named-list-picker.d.ts.map +1 -0
  68. package/dist/components/named-list-picker.js +61 -0
  69. package/dist/components/named-list-picker.js.map +1 -0
  70. package/dist/components/named-list-test-utils.d.ts +23 -0
  71. package/dist/components/named-list-test-utils.d.ts.map +1 -0
  72. package/dist/components/named-list-test-utils.js +33 -0
  73. package/dist/components/named-list-test-utils.js.map +1 -0
  74. package/dist/components/recycle-roll.d.ts +23 -0
  75. package/dist/components/recycle-roll.d.ts.map +1 -0
  76. package/dist/components/recycle-roll.js +47 -0
  77. package/dist/components/recycle-roll.js.map +1 -0
  78. package/dist/components/stepper.d.ts +28 -0
  79. package/dist/components/stepper.d.ts.map +1 -0
  80. package/dist/components/stepper.js +33 -0
  81. package/dist/components/stepper.js.map +1 -0
  82. package/dist/components/subject-section.d.ts +2 -1
  83. package/dist/components/subject-section.d.ts.map +1 -1
  84. package/dist/components/subject-section.js +10 -5
  85. package/dist/components/subject-section.js.map +1 -1
  86. package/dist/components/tokens.css +31 -41
  87. package/dist/components/tokens.d.ts +3 -4
  88. package/dist/components/tokens.d.ts.map +1 -1
  89. package/dist/components/tokens.js +5 -13
  90. package/dist/components/tokens.js.map +1 -1
  91. package/dist/components/tool-picker-parts.d.ts +5 -1
  92. package/dist/components/tool-picker-parts.d.ts.map +1 -1
  93. package/dist/components/tool-picker-parts.js +8 -6
  94. package/dist/components/tool-picker-parts.js.map +1 -1
  95. package/dist/components/tool-picker.d.ts +77 -2
  96. package/dist/components/tool-picker.d.ts.map +1 -1
  97. package/dist/components/tool-picker.js +87 -29
  98. package/dist/components/tool-picker.js.map +1 -1
  99. package/dist/components/version-history-panel.d.ts +7 -1
  100. package/dist/components/version-history-panel.d.ts.map +1 -1
  101. package/dist/components/version-history-panel.js +2 -2
  102. package/dist/components/version-history-panel.js.map +1 -1
  103. package/dist/components/version-history-rows.d.ts +4 -2
  104. package/dist/components/version-history-rows.d.ts.map +1 -1
  105. package/dist/components/version-history-rows.js +14 -2
  106. package/dist/components/version-history-rows.js.map +1 -1
  107. package/dist/errors.d.ts +5 -0
  108. package/dist/errors.d.ts.map +1 -1
  109. package/dist/errors.js +7 -0
  110. package/dist/errors.js.map +1 -1
  111. package/dist/hooks/useApi.d.ts +524 -197
  112. package/dist/hooks/useApi.d.ts.map +1 -1
  113. package/dist/hooks/useCapabilities.d.ts +43 -10
  114. package/dist/hooks/useCapabilities.d.ts.map +1 -1
  115. package/dist/hooks/useCapabilities.js +39 -10
  116. package/dist/hooks/useCapabilities.js.map +1 -1
  117. package/dist/index.d.ts +25 -12
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +14 -6
  120. package/dist/index.js.map +1 -1
  121. package/dist/marketplace-install/env-var-fields.d.ts +17 -0
  122. package/dist/marketplace-install/env-var-fields.d.ts.map +1 -0
  123. package/dist/marketplace-install/env-var-fields.js +22 -0
  124. package/dist/marketplace-install/env-var-fields.js.map +1 -0
  125. package/dist/marketplace-install/index.d.ts +18 -0
  126. package/dist/marketplace-install/index.d.ts.map +1 -0
  127. package/dist/marketplace-install/index.js +8 -0
  128. package/dist/marketplace-install/index.js.map +1 -0
  129. package/dist/marketplace-install/install-env.d.ts +21 -0
  130. package/dist/marketplace-install/install-env.d.ts.map +1 -0
  131. package/dist/marketplace-install/install-env.js +22 -0
  132. package/dist/marketplace-install/install-env.js.map +1 -0
  133. package/dist/marketplace-install/install-mount.d.ts +42 -0
  134. package/dist/marketplace-install/install-mount.d.ts.map +1 -0
  135. package/dist/marketplace-install/install-mount.js +62 -0
  136. package/dist/marketplace-install/install-mount.js.map +1 -0
  137. package/dist/marketplace-install/install-report.d.ts +14 -0
  138. package/dist/marketplace-install/install-report.d.ts.map +1 -0
  139. package/dist/marketplace-install/install-report.js +19 -0
  140. package/dist/marketplace-install/install-report.js.map +1 -0
  141. package/dist/marketplace-install/install-shell.d.ts +34 -0
  142. package/dist/marketplace-install/install-shell.d.ts.map +1 -0
  143. package/dist/marketplace-install/install-shell.js +32 -0
  144. package/dist/marketplace-install/install-shell.js.map +1 -0
  145. package/dist/marketplace-install/mount-install.d.ts +41 -0
  146. package/dist/marketplace-install/mount-install.d.ts.map +1 -0
  147. package/dist/marketplace-install/mount-install.js +90 -0
  148. package/dist/marketplace-install/mount-install.js.map +1 -0
  149. package/dist/marketplace-install/plugin-detail.d.ts +17 -0
  150. package/dist/marketplace-install/plugin-detail.d.ts.map +1 -0
  151. package/dist/marketplace-install/plugin-detail.js +41 -0
  152. package/dist/marketplace-install/plugin-detail.js.map +1 -0
  153. package/dist/marketplace-install/plugin-install.d.ts +27 -0
  154. package/dist/marketplace-install/plugin-install.d.ts.map +1 -0
  155. package/dist/marketplace-install/plugin-install.js +89 -0
  156. package/dist/marketplace-install/plugin-install.js.map +1 -0
  157. package/dist/marketplace-install/route-items.d.ts +14 -0
  158. package/dist/marketplace-install/route-items.d.ts.map +1 -0
  159. package/dist/marketplace-install/route-items.js +11 -0
  160. package/dist/marketplace-install/route-items.js.map +1 -0
  161. package/dist/marketplace-install/use-debounced-value.d.ts +6 -0
  162. package/dist/marketplace-install/use-debounced-value.d.ts.map +1 -0
  163. package/dist/marketplace-install/use-debounced-value.js +18 -0
  164. package/dist/marketplace-install/use-debounced-value.js.map +1 -0
  165. package/dist/marketplace-install/use-install-action.d.ts +26 -0
  166. package/dist/marketplace-install/use-install-action.d.ts.map +1 -0
  167. package/dist/marketplace-install/use-install-action.js +35 -0
  168. package/dist/marketplace-install/use-install-action.js.map +1 -0
  169. package/dist/marketplace-install/use-install-preview.d.ts +33 -0
  170. package/dist/marketplace-install/use-install-preview.d.ts.map +1 -0
  171. package/dist/marketplace-install/use-install-preview.js +44 -0
  172. package/dist/marketplace-install/use-install-preview.js.map +1 -0
  173. package/dist/marketplace-install/use-mount-install.d.ts +80 -0
  174. package/dist/marketplace-install/use-mount-install.d.ts.map +1 -0
  175. package/dist/marketplace-install/use-mount-install.js +75 -0
  176. package/dist/marketplace-install/use-mount-install.js.map +1 -0
  177. package/dist/navigation/index.d.ts +1 -1
  178. package/dist/navigation/index.d.ts.map +1 -1
  179. package/dist/navigation/index.js.map +1 -1
  180. package/dist/navigation/types.d.ts +23 -7
  181. package/dist/navigation/types.d.ts.map +1 -1
  182. package/dist/plugin/registry.d.ts +0 -8
  183. package/dist/plugin/registry.d.ts.map +1 -1
  184. package/dist/plugin/registry.js +25 -1
  185. package/dist/plugin/registry.js.map +1 -1
  186. package/dist/plugin/types.d.ts +36 -12
  187. package/dist/plugin/types.d.ts.map +1 -1
  188. package/dist/plugin/version.d.ts +6 -4
  189. package/dist/plugin/version.d.ts.map +1 -1
  190. package/dist/plugin/version.js +6 -4
  191. package/dist/plugin/version.js.map +1 -1
  192. package/dist/query-keys.d.ts +45 -4
  193. package/dist/query-keys.d.ts.map +1 -1
  194. package/dist/query-keys.js +52 -4
  195. package/dist/query-keys.js.map +1 -1
  196. package/dist/schema-form/json-schema-meta.d.ts +3 -0
  197. package/dist/schema-form/json-schema-meta.d.ts.map +1 -0
  198. package/dist/schema-form/json-schema-meta.js +3 -0
  199. package/dist/schema-form/json-schema-meta.js.map +1 -0
  200. package/dist/testing.d.ts +2 -0
  201. package/dist/testing.d.ts.map +1 -1
  202. package/dist/testing.js +2 -0
  203. package/dist/testing.js.map +1 -1
  204. package/dist/token-rules.d.ts +26 -0
  205. package/dist/token-rules.d.ts.map +1 -0
  206. package/dist/token-rules.js +64 -0
  207. package/dist/token-rules.js.map +1 -0
  208. package/package.json +2 -2
  209. package/src/components/action-menu.tsx +160 -0
  210. package/src/components/agent-picker.tsx +53 -0
  211. package/src/components/channel-picker.tsx +68 -0
  212. package/src/components/components.css +226 -8
  213. package/src/components/confirm-dialog.tsx +4 -1
  214. package/src/components/execution-key-picker.tsx +252 -36
  215. package/src/components/extension-combo-builder.tsx +61 -29
  216. package/src/components/extension-combo-parts.tsx +28 -38
  217. package/src/components/extension-config-editor.tsx +307 -0
  218. package/src/components/extension-grouping.ts +4 -73
  219. package/src/components/extension-picker.tsx +13 -13
  220. package/src/components/fleet-report.tsx +38 -4
  221. package/src/components/holder-kinds.ts +60 -0
  222. package/src/components/holder-list.tsx +163 -0
  223. package/src/components/icons/index.ts +0 -2
  224. package/src/components/icons/nav-map.ts +0 -4
  225. package/src/components/icons/nav-marks.tsx +0 -15
  226. package/src/components/named-list-picker.tsx +182 -0
  227. package/src/components/named-list-test-utils.tsx +47 -0
  228. package/src/components/recycle-roll.tsx +120 -0
  229. package/src/components/stepper.tsx +111 -0
  230. package/src/components/subject-section.tsx +10 -5
  231. package/src/components/tokens.css +31 -41
  232. package/src/components/tokens.ts +5 -13
  233. package/src/components/tool-picker-parts.tsx +17 -6
  234. package/src/components/tool-picker.tsx +215 -41
  235. package/src/components/version-history-panel.tsx +8 -0
  236. package/src/components/version-history-rows.tsx +14 -2
  237. package/src/errors.ts +10 -0
  238. package/src/hooks/useCapabilities.ts +59 -10
  239. package/src/index.ts +54 -14
  240. package/src/marketplace-install/env-var-fields.tsx +59 -0
  241. package/src/marketplace-install/index.ts +17 -0
  242. package/src/marketplace-install/install-env.ts +39 -0
  243. package/src/marketplace-install/install-mount.ts +96 -0
  244. package/src/marketplace-install/install-report.tsx +54 -0
  245. package/src/marketplace-install/install-shell.tsx +99 -0
  246. package/src/marketplace-install/mount-install.tsx +290 -0
  247. package/src/marketplace-install/plugin-detail.ts +60 -0
  248. package/src/marketplace-install/plugin-install.tsx +221 -0
  249. package/src/marketplace-install/route-items.ts +20 -0
  250. package/src/marketplace-install/use-debounced-value.ts +18 -0
  251. package/src/marketplace-install/use-install-action.ts +60 -0
  252. package/src/marketplace-install/use-install-preview.ts +74 -0
  253. package/src/marketplace-install/use-mount-install.ts +116 -0
  254. package/src/navigation/index.ts +1 -0
  255. package/src/navigation/types.ts +27 -7
  256. package/src/plugin/registry.ts +19 -1
  257. package/src/plugin/types.ts +40 -12
  258. package/src/plugin/version.ts +6 -4
  259. package/src/query-keys.ts +71 -4
  260. package/src/schema-form/json-schema-meta.ts +2 -0
  261. package/src/testing.ts +2 -0
  262. package/src/token-rules.ts +66 -0
@@ -0,0 +1,89 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ import { Skeleton } from '../components/primitives';
4
+ import { EnvVarFields } from './env-var-fields';
5
+ import { installEnvBands } from './install-env';
6
+ import { collectEnv } from './install-mount';
7
+ import { InstallFailure, InstallShell, storeOffNote } from './install-shell';
8
+ import { MountInstallDialog, MountInstallForm } from './mount-install';
9
+ import { deliveryOf, requiredEnvFromDetail } from './plugin-detail';
10
+ import { routeItemsOf } from './route-items';
11
+ import { useInstallAction } from './use-install-action';
12
+ import { useInstallPreview } from './use-install-preview';
13
+ /** The env-collecting body: one value per var the deployment does not already provide. */
14
+ function EnvInstallFields({ refValue, version, missingVars, values, secretMap, lockedSecret, envHints, onChangeValue, onToggleSecret, }) {
15
+ return (_jsxs("div", { className: "tai-stack tai-stack-3", children: [_jsxs("p", { style: { margin: 0 }, children: ["Install ", refValue, version !== null ? ` v${version}` : '', "?", missingVars.length > 0
16
+ ? ' This plugin needs these values to install. Leave a field blank if the deployment already provides it.'
17
+ : ''] }), missingVars.length > 0 ? (_jsx(EnvVarFields, { requiredVars: missingVars, values: values, secret: secretMap, requiredSecret: lockedSecret, hints: envHints, onChangeValue: onChangeValue, onToggleSecret: onToggleSecret })) : null] }));
18
+ }
19
+ /**
20
+ * The install of a plugin with no route-carrying item. Whether it needs install-time
21
+ * env is the install PREVIEW's call — the server authority — because the registry's
22
+ * plugin-detail body carries no per-item required_env. A preview naming required or
23
+ * missing env collects one value per missing var (a secret var's toggle is locked
24
+ * on, a free var starts off; a blank field is omitted, the deployment may still
25
+ * provide it). A clean no-env preview shows the plain confirm. The submit stays
26
+ * blocked while the preview loads or after it failed: the env picture is unverified.
27
+ */
28
+ function NonRouteInstall({ layout, refValue, version, detail, onInstalled, onFailed, onDismiss, }) {
29
+ const request = useMemo(() => ({ ref: refValue, version }), [refValue, version]);
30
+ const { state: previewState } = useInstallPreview(request);
31
+ const action = useInstallAction(refValue, 'Install');
32
+ const { requiredEnvSecret, requiredEnvHints } = requiredEnvFromDetail(detail);
33
+ const [values, setValues] = useState({});
34
+ const [secretOverride, setSecretOverride] = useState({});
35
+ const preview = previewState.status === 'ready' ? previewState.preview : null;
36
+ const needsEnv = preview !== null && (preview.required_env.length > 0 || preview.missing_env.length > 0);
37
+ const missingVars = preview?.missing_env ?? [];
38
+ // The secret band merges the preview's per-var authority, the detail-derived
39
+ // fallback, and the operator override; a preview/detail-secret var is LOCKED on.
40
+ const { secretMap, lockedSecret } = installEnvBands(missingVars, preview?.required_env ?? [], requiredEnvSecret, secretOverride);
41
+ const failure = action.state.status === 'failed' ? action.state.error : null;
42
+ const submit = () => {
43
+ let body = {};
44
+ if (needsEnv) {
45
+ const { env, secretKeys } = collectEnv(missingVars, values, secretMap);
46
+ // Every var pre-satisfied → a plain install body.
47
+ if (Object.keys(env).length > 0)
48
+ body = { env, secret_keys: secretKeys };
49
+ }
50
+ action.run(body).then(onInstalled, (error) => {
51
+ onFailed?.(error);
52
+ });
53
+ };
54
+ return (_jsx(InstallShell, { layout: layout, title: "Install plugin", submitLabel: "Install", pendingLabel: "Installing", isPending: action.state.status === 'pending', error: storeOffNote(failure) === undefined ? failure : null, disabledNote: previewNote(previewState) ?? storeOffNote(failure), onSubmit: submit, onDismiss: onDismiss, children: needsEnv ? (_jsx(EnvInstallFields, { refValue: refValue, version: version, missingVars: missingVars, values: values, secretMap: secretMap, lockedSecret: lockedSecret, envHints: requiredEnvHints, onChangeValue: (name, value) => {
55
+ setValues((prev) => ({ ...prev, [name]: value }));
56
+ }, onToggleSecret: (name, checked) => {
57
+ setSecretOverride((prev) => ({ ...prev, [name]: checked }));
58
+ } })) : (_jsxs("p", { style: { margin: 0 }, children: ["Install ", refValue, detail.latest !== null ? ` v${detail.latest.version}` : '', "?", ' ', deliveryOf(detail) === 'descriptor'
59
+ ? 'The app will register this plugin and reload.'
60
+ : 'The app will pip-install the package and reload.'] })) }));
61
+ }
62
+ /** What the preview puts in the failure slot: a skeleton while it loads, its failure after. */
63
+ function previewNote(state) {
64
+ if (state.status === 'loading')
65
+ return _jsx(Skeleton, { height: 48 });
66
+ if (state.status === 'failed')
67
+ return _jsx(InstallFailure, { error: state.error });
68
+ return undefined;
69
+ }
70
+ function PluginInstall({ layout, ...props }) {
71
+ const { refValue, version, detail, onInstalled, onFailed, onDismiss } = props;
72
+ const routeItems = useMemo(() => routeItemsOf(detail.latest?.items ?? []), [detail]);
73
+ if (routeItems.length === 0)
74
+ return _jsx(NonRouteInstall, { layout: layout, ...props });
75
+ const { requiredEnvSecret, requiredEnvHints } = requiredEnvFromDetail(detail);
76
+ const Mount = layout === 'dialog' ? MountInstallDialog : MountInstallForm;
77
+ return (_jsx(Mount, { refValue: refValue, version: version, verb: "Install", routeItems: routeItems, requiredEnvSecret: requiredEnvSecret, envHints: requiredEnvHints, onDone: onInstalled, onFailed: onFailed, onDismiss: onDismiss }));
78
+ }
79
+ /** The install in place, with its own Install button. */
80
+ export function PluginInstallPanel(props) {
81
+ return _jsx(PluginInstall, { layout: "panel", ...props });
82
+ }
83
+ /** The install in a dialog titled "Install plugin". */
84
+ export function PluginInstallDialog(props) {
85
+ return _jsx(PluginInstall, { layout: "dialog", ...props });
86
+ }
87
+ /** The line that stands in for an Install control this session's grant does not admit. */
88
+ export const INSTALL_NO_GRANT = 'This session cannot install from the marketplace. Installing needs administrator access to POST /api/marketplace/install; ask an administrator to install it.';
89
+ //# sourceMappingURL=plugin-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-install.js","sourceRoot":"","sources":["../../src/marketplace-install/plugin-install.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MarketplaceRoutesDecl } from '@tai42/api-client';
2
+ /** A route-carrying item as the install form drives it: its name, kind, and declaration. */
3
+ export interface RouteItem {
4
+ readonly name: string;
5
+ readonly kind: string;
6
+ readonly routes: MarketplaceRoutesDecl;
7
+ }
8
+ /** The route-carrying items of a published version, in declaration order. */
9
+ export declare function routeItemsOf(items: readonly {
10
+ kind: string;
11
+ name: string;
12
+ routes?: MarketplaceRoutesDecl | null;
13
+ }[]): RouteItem[];
14
+ //# sourceMappingURL=route-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-items.d.ts","sourceRoot":"","sources":["../../src/marketplace-install/route-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,4FAA4F;AAC5F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAAE,EAAE,GACtF,SAAS,EAAE,CAOb"}
@@ -0,0 +1,11 @@
1
+ /** The route-carrying items of a published version, in declaration order. */
2
+ export function routeItemsOf(items) {
3
+ const out = [];
4
+ for (const item of items) {
5
+ if (item.routes === null || item.routes === undefined)
6
+ continue;
7
+ out.push({ name: item.name, kind: item.kind, routes: item.routes });
8
+ }
9
+ return out;
10
+ }
11
+ //# sourceMappingURL=route-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-items.js","sourceRoot":"","sources":["../../src/marketplace-install/route-items.ts"],"names":[],"mappings":"AASA,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAC1B,KAAuF;IAEvF,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,SAAS;QAChE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Track a value that only settles `delayMs` after it last changed. The first
3
+ * value settles immediately, so a read keyed on it fires on mount before any edit.
4
+ */
5
+ export declare function useDebouncedValue<T>(value: T, delayMs: number): T;
6
+ //# sourceMappingURL=use-debounced-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-value.d.ts","sourceRoot":"","sources":["../../src/marketplace-install/use-debounced-value.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAWjE"}
@@ -0,0 +1,18 @@
1
+ import { useEffect, useState } from 'react';
2
+ /**
3
+ * Track a value that only settles `delayMs` after it last changed. The first
4
+ * value settles immediately, so a read keyed on it fires on mount before any edit.
5
+ */
6
+ export function useDebouncedValue(value, delayMs) {
7
+ const [settled, setSettled] = useState(value);
8
+ useEffect(() => {
9
+ const timer = setTimeout(() => {
10
+ setSettled(value);
11
+ }, delayMs);
12
+ return () => {
13
+ clearTimeout(timer);
14
+ };
15
+ }, [value, delayMs]);
16
+ return settled;
17
+ }
18
+ //# sourceMappingURL=use-debounced-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-value.js","sourceRoot":"","sources":["../../src/marketplace-install/use-debounced-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAI,KAAQ,EAAE,OAAe;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The one install / update call path (`POST /api/marketplace/install` or
3
+ * `/update`), as a plain state machine through `useApi`. The ref is closed over;
4
+ * the caller supplies the rest of the body.
5
+ */
6
+ import type { MarketplaceInstallBody, MarketplaceInstallResult } from '@tai42/api-client';
7
+ export type InstallActionState = {
8
+ readonly status: 'idle';
9
+ } | {
10
+ readonly status: 'pending';
11
+ } | {
12
+ readonly status: 'done';
13
+ readonly result: MarketplaceInstallResult;
14
+ } | {
15
+ readonly status: 'failed';
16
+ readonly error: unknown;
17
+ };
18
+ export interface InstallAction {
19
+ readonly state: InstallActionState;
20
+ /** Resolves with the receipt; rejects with the server error after recording `failed`. */
21
+ readonly run: (body: Omit<MarketplaceInstallBody, 'ref'>) => Promise<MarketplaceInstallResult>;
22
+ /** Back to `idle`. */
23
+ readonly reset: () => void;
24
+ }
25
+ export declare function useInstallAction(refValue: string, verb: 'Install' | 'Update'): InstallAction;
26
+ //# sourceMappingURL=use-install-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-install-action.d.ts","sourceRoot":"","sources":["../../src/marketplace-install/use-install-action.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAK1F,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,yFAAyF;IACzF,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC/F,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,CAmC5F"}
@@ -0,0 +1,35 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { useApi } from '../hooks/useApi';
3
+ export function useInstallAction(refValue, verb) {
4
+ const api = useApi();
5
+ const [state, setState] = useState({ status: 'idle' });
6
+ // A reply landing after unmount must not set state.
7
+ const mountedRef = useRef(true);
8
+ useEffect(() => {
9
+ mountedRef.current = true;
10
+ return () => {
11
+ mountedRef.current = false;
12
+ };
13
+ }, []);
14
+ const run = useCallback(async (body) => {
15
+ setState({ status: 'pending' });
16
+ try {
17
+ const result = verb === 'Install'
18
+ ? await api.installMarketplacePlugin({ ref: refValue, ...body })
19
+ : await api.updateMarketplacePlugin({ ref: refValue, ...body });
20
+ if (mountedRef.current)
21
+ setState({ status: 'done', result });
22
+ return result;
23
+ }
24
+ catch (error) {
25
+ if (mountedRef.current)
26
+ setState({ status: 'failed', error });
27
+ throw error;
28
+ }
29
+ }, [api, refValue, verb]);
30
+ const reset = useCallback(() => {
31
+ setState({ status: 'idle' });
32
+ }, []);
33
+ return { state, run, reset };
34
+ }
35
+ //# sourceMappingURL=use-install-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-install-action.js","sourceRoot":"","sources":["../../src/marketplace-install/use-install-action.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAgBzC,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,IAA0B;IAC3E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,oDAAoD;IACpD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,GAAG,GAAG,WAAW,CACrB,KAAK,EAAE,IAAyC,EAAqC,EAAE;QACrF,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GACV,IAAI,KAAK,SAAS;gBAChB,CAAC,CAAC,MAAM,GAAG,CAAC,wBAAwB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;gBAChE,CAAC,CAAC,MAAM,GAAG,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,UAAU,CAAC,OAAO;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,OAAO;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CACtB,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The install preview (`POST /api/marketplace/install/preview`) as a plain fetch state
3
+ * machine through `useApi`: the SDK holds no query context, so each request gets its
4
+ * own `AbortController`, aborted when the request changes and on unmount. No retry,
5
+ * no cache.
6
+ */
7
+ import type { MarketplaceInstallPreview } from '@tai42/api-client';
8
+ /** What a preview is asked for; `null` keeps the hook idle. */
9
+ export interface InstallPreviewRequest {
10
+ readonly ref: string;
11
+ readonly version: string | null;
12
+ readonly route_mounts?: Record<string, string>;
13
+ }
14
+ export type InstallPreviewState = {
15
+ readonly status: 'loading';
16
+ readonly previous: MarketplaceInstallPreview | null;
17
+ } | {
18
+ readonly status: 'ready';
19
+ readonly preview: MarketplaceInstallPreview;
20
+ } | {
21
+ readonly status: 'failed';
22
+ readonly error: unknown;
23
+ };
24
+ /**
25
+ * Fire the preview whenever the serialized request changes. While a re-preview
26
+ * loads, `previous` keeps the last ready preview so the form does not blank on every
27
+ * edit; a failure clears it.
28
+ */
29
+ export declare function useInstallPreview(request: InstallPreviewRequest | null): {
30
+ readonly state: InstallPreviewState;
31
+ readonly refetch: () => void;
32
+ };
33
+ //# sourceMappingURL=use-install-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-install-preview.d.ts","sourceRoot":"","sources":["../../src/marketplace-install/use-install-preview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAKnE,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAAE,GACnF;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG;IACxE,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CA0CA"}
@@ -0,0 +1,44 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import { useApi } from '../hooks/useApi';
3
+ /**
4
+ * Fire the preview whenever the serialized request changes. While a re-preview
5
+ * loads, `previous` keeps the last ready preview so the form does not blank on every
6
+ * edit; a failure clears it.
7
+ */
8
+ export function useInstallPreview(request) {
9
+ const api = useApi();
10
+ const [state, setState] = useState({ status: 'loading', previous: null });
11
+ const [attempt, setAttempt] = useState(0);
12
+ const requestKey = request === null ? null : JSON.stringify(request);
13
+ useEffect(() => {
14
+ if (requestKey === null)
15
+ return;
16
+ const body = JSON.parse(requestKey);
17
+ const controller = new AbortController();
18
+ setState((prev) => ({
19
+ status: 'loading',
20
+ previous: prev.status === 'ready' ? prev.preview : prev.status === 'loading' ? prev.previous : null,
21
+ }));
22
+ api
23
+ .previewMarketplaceInstall({
24
+ ref: body.ref,
25
+ version: body.version ?? undefined,
26
+ ...(body.route_mounts !== undefined ? { route_mounts: body.route_mounts } : {}),
27
+ }, controller.signal)
28
+ .then((preview) => {
29
+ if (!controller.signal.aborted)
30
+ setState({ status: 'ready', preview });
31
+ }, (error) => {
32
+ if (!controller.signal.aborted)
33
+ setState({ status: 'failed', error });
34
+ });
35
+ return () => {
36
+ controller.abort();
37
+ };
38
+ }, [api, requestKey, attempt]);
39
+ const refetch = useCallback(() => {
40
+ setAttempt((n) => n + 1);
41
+ }, []);
42
+ return { state, refetch };
43
+ }
44
+ //# sourceMappingURL=use-install-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-install-preview.js","sourceRoot":"","sources":["../../src/marketplace-install/use-install-preview.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAczC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAqC;IAIrE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAA0B,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,SAAS;YACjB,QAAQ,EACN,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;SAC5F,CAAC,CAAC,CAAC;QACJ,GAAG;aACA,yBAAyB,CACxB;YACE,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;YAClC,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,EACD,UAAU,CAAC,MAAM,CAClB;aACA,IAAI,CACH,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC,CACF,CAAC;QACJ,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { type InstallExtras } from './install-mount';
2
+ import type { RouteItem } from './route-items';
3
+ /** The inputs the mount form hands its view-model. */
4
+ export interface UseMountInstallProps {
5
+ readonly refValue: string;
6
+ readonly version: string | null;
7
+ readonly verb: 'Install' | 'Update';
8
+ readonly routeItems: readonly RouteItem[];
9
+ readonly storedMounts?: Record<string, string>;
10
+ readonly requiredEnvSecret?: Record<string, boolean>;
11
+ }
12
+ export declare function useMountInstall(props: UseMountInstallProps): {
13
+ bases: Record<string, string>;
14
+ setBases: import("react").Dispatch<import("react").SetStateAction<Record<string, string>>>;
15
+ accepted: boolean;
16
+ setAccepted: import("react").Dispatch<import("react").SetStateAction<boolean>>;
17
+ envValues: Record<string, string>;
18
+ setEnvValues: import("react").Dispatch<import("react").SetStateAction<Record<string, string>>>;
19
+ setEnvSecretOverride: import("react").Dispatch<import("react").SetStateAction<Record<string, boolean>>>;
20
+ preview: {
21
+ collisions: {
22
+ conflict_owner: string;
23
+ conflict_path: string;
24
+ full_path: string;
25
+ item: string;
26
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
27
+ }[];
28
+ delivery: "package" | "descriptor";
29
+ items: {
30
+ base: string;
31
+ default_base: string;
32
+ item: string;
33
+ kind: string;
34
+ routes: {
35
+ full_path: string;
36
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
37
+ path: string;
38
+ public: boolean;
39
+ }[];
40
+ }[];
41
+ missing_env: string[];
42
+ new_public_routes: {
43
+ full_path: string;
44
+ item: string;
45
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
46
+ }[];
47
+ public_routes: {
48
+ full_path: string;
49
+ item: string;
50
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
51
+ }[];
52
+ ref: string;
53
+ required_env: {
54
+ name: string;
55
+ secret: boolean;
56
+ }[];
57
+ requires_public_acceptance: boolean;
58
+ version: string;
59
+ } | undefined;
60
+ previewIsError: boolean;
61
+ collisions: {
62
+ conflict_owner: string;
63
+ conflict_path: string;
64
+ full_path: string;
65
+ item: string;
66
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
67
+ }[];
68
+ publicRows: {
69
+ full_path: string;
70
+ item: string;
71
+ methods: ("POST" | "GET" | "PUT" | "PATCH" | "DELETE")[];
72
+ }[];
73
+ requiresAccept: boolean;
74
+ envToCollect: string[];
75
+ envSecretMap: Record<string, boolean>;
76
+ blocked: boolean;
77
+ extras: () => InstallExtras;
78
+ };
79
+ export type MountInstallModel = ReturnType<typeof useMountInstall>;
80
+ //# sourceMappingURL=use-mount-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mount-install.d.ts","sourceRoot":"","sources":["../../src/marketplace-install/use-mount-install.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtD;AASD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2DtC,aAAa;EAqBjC;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { useMemo, useState } from 'react';
2
+ import { buildInstallExtras, deriveEnvSecretMap } from './install-mount';
3
+ import { useDebouncedValue } from './use-debounced-value';
4
+ import { useInstallPreview } from './use-install-preview';
5
+ /** How long after the last base keystroke the preview refetches. */
6
+ const PREVIEW_DEBOUNCE_MS = 250;
7
+ /** The preview on screen: the ready one, else the last ready one while a remap re-previews. */
8
+ function shownPreview(state) {
9
+ if (state.status === 'ready')
10
+ return state.preview;
11
+ if (state.status === 'loading')
12
+ return state.previous ?? undefined;
13
+ return undefined;
14
+ }
15
+ export function useMountInstall(props) {
16
+ const { refValue, version, verb, routeItems, storedMounts, requiredEnvSecret } = props;
17
+ // The base each item is CURRENTLY mounted at: the stored mount on update, the
18
+ // declared default on install (or for an item the install added). This seeds the
19
+ // inputs and, on update, is the baseline the submit diffs against so an untouched
20
+ // base is OMITTED and the server preserves it.
21
+ const seededBases = useMemo(() => Object.fromEntries(routeItems.map((item) => [item.name, storedMounts?.[item.name] ?? item.routes.base])), [routeItems, storedMounts]);
22
+ const [bases, setBases] = useState(seededBases);
23
+ const [accepted, setAccepted] = useState(false);
24
+ const [envValues, setEnvValues] = useState({});
25
+ // Only OPERATOR overrides live in state; each toggle's baseline is the derived
26
+ // `requiredEnvSecret`, so a var starts secret iff the server marks it so — no
27
+ // async seed to miss when the preview lands.
28
+ const [envSecretOverride, setEnvSecretOverride] = useState({});
29
+ // The serialized map is the debounce key: a stable string that only changes when a
30
+ // base actually changes, so identity churn never re-previews.
31
+ const debouncedKey = useDebouncedValue(JSON.stringify(bases), PREVIEW_DEBOUNCE_MS);
32
+ const request = useMemo(() => ({
33
+ ref: refValue,
34
+ version,
35
+ route_mounts: JSON.parse(debouncedKey),
36
+ }), [refValue, version, debouncedKey]);
37
+ const { state } = useInstallPreview(request);
38
+ const preview = shownPreview(state);
39
+ const previewIsError = state.status === 'failed';
40
+ const collisions = preview?.collisions ?? [];
41
+ const publicRows = preview?.new_public_routes ?? [];
42
+ const requiresAccept = preview?.requires_public_acceptance ?? false;
43
+ // The env to collect is the preview's server-computed missing set — only on
44
+ // INSTALL: an update that would add a required var is refused server-side, so the
45
+ // update flow never collects env.
46
+ const envToCollect = verb === 'Install' ? (preview?.missing_env ?? []) : [];
47
+ const envSecretMap = deriveEnvSecretMap(envToCollect, preview, requiredEnvSecret, envSecretOverride);
48
+ // Submit is blocked until a clean preview exists with no collision and any
49
+ // required public acceptance given. A preview error blocks too — an unverified
50
+ // mount must never be committed.
51
+ const blocked = previewIsError ||
52
+ preview === undefined ||
53
+ collisions.length > 0 ||
54
+ (requiresAccept && !accepted);
55
+ const extras = () => buildInstallExtras(verb, bases, seededBases, accepted, envToCollect, envValues, envSecretMap);
56
+ return {
57
+ bases,
58
+ setBases,
59
+ accepted,
60
+ setAccepted,
61
+ envValues,
62
+ setEnvValues,
63
+ setEnvSecretOverride,
64
+ preview,
65
+ previewIsError,
66
+ collisions,
67
+ publicRows,
68
+ requiresAccept,
69
+ envToCollect,
70
+ envSecretMap,
71
+ blocked,
72
+ extras,
73
+ };
74
+ }
75
+ //# sourceMappingURL=use-mount-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mount-install.js","sourceRoot":"","sources":["../../src/marketplace-install/use-mount-install.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export type { AppLinkProps } from './app-link';
2
2
  export { AppLink } from './app-link';
3
3
  export { NavigationProvider, useAppNavigate, useNavigationGate, useNavigationGuard, usePluginEntryNavigation, usePluginNavigation, useResolvePath, } from './context';
4
- export type { NavigateOptions, NavigationContextValue, NavigationGuardHandler, PageProps, PluginNavigateOptions, PluginSearch, RouteSearch, RouteSearchByToken, RouteToken, } from './types';
4
+ export type { NavigateOptions, NavigationContextValue, NavigationGuardHandler, PageProps, PluginHolderTarget, PluginNavigateOptions, PluginSearch, RouteSearch, RouteSearchByToken, RouteToken, } from './types';
5
5
  export type { SearchCommitParams } from './use-search-commit';
6
6
  export { useSearchCommit } from './use-search-commit';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,SAAS,EACT,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AAanB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AAcnB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -12,7 +12,7 @@
12
12
  * supplies the runtime resolution via {@link NavigationContextValue}; features
13
13
  * consume it type-safely.
14
14
  */
15
- import type { ConversationDeliveryStatus } from '@tai42/api-client';
15
+ import type { ConversationDeliveryStatus, ReferenceHolder } from '@tai42/api-client';
16
16
  /**
17
17
  * Every top-level route the shell owns, mapped to its typed search parameters.
18
18
  * A route with no parameters maps to the empty object. Detail views are driven
@@ -29,6 +29,7 @@ export interface RouteSearchByToken {
29
29
  agents: Record<string, never>;
30
30
  presets: {
31
31
  preset?: string;
32
+ version?: number;
32
33
  };
33
34
  states: {
34
35
  state?: string;
@@ -37,7 +38,6 @@ export interface RouteSearchByToken {
37
38
  target?: string;
38
39
  template?: string;
39
40
  };
40
- extensions: Record<string, never>;
41
41
  interactions: Record<string, never>;
42
42
  notifications: Record<string, never>;
43
43
  conversations: {
@@ -46,24 +46,26 @@ export interface RouteSearchByToken {
46
46
  status?: ConversationDeliveryStatus;
47
47
  address?: string;
48
48
  q?: string;
49
+ config?: string;
49
50
  };
50
51
  connectors: {
51
52
  connection?: string;
52
53
  };
53
54
  servedEndpoints: Record<string, never>;
54
- hooks: Record<string, never>;
55
- templates: {
56
- template?: string;
57
- q?: string;
55
+ hooks: {
56
+ hook?: string;
58
57
  };
59
58
  storage: {
60
59
  q?: string;
60
+ id?: string;
61
61
  };
62
62
  manifest: Record<string, never>;
63
63
  members: Record<string, never>;
64
64
  settings: Record<string, never>;
65
65
  system: Record<string, never>;
66
- scheduling: Record<string, never>;
66
+ scheduling: {
67
+ schedule?: string;
68
+ };
67
69
  observability: {
68
70
  tab?: 'dashboard' | 'tracing';
69
71
  from?: string;
@@ -194,6 +196,20 @@ export interface NavigationContextValue {
194
196
  * {@link navigatePluginWithOptions}; reached through {@link usePluginEntryNavigation}.
195
197
  */
196
198
  updatePluginEntryState?: (pluginId: string, state: unknown) => void;
199
+ /**
200
+ * The plugin page that shows one holder of a plugin-declared kind, from the resolver
201
+ * a plugin registered for that kind; `null` when no plugin resolves it. OPTIONAL for
202
+ * the same additive reason as {@link navigatePluginWithOptions}: a host that omits
203
+ * it links no plugin kind, and the holder renders as text.
204
+ */
205
+ resolveHolderLink?: (holder: ReferenceHolder) => PluginHolderTarget | null;
206
+ }
207
+ /** A plugin page addressed by {@link NavigationContextValue.resolveHolderLink}. */
208
+ export interface PluginHolderTarget {
209
+ readonly pluginId: string;
210
+ readonly pagePath: string;
211
+ readonly params?: string;
212
+ readonly search?: PluginSearch;
197
213
  }
198
214
  /**
199
215
  * A navigation guard's decision function, run while armed before any SDK-controlled
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"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"}