@xyteai/cli 0.1.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 (251) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +245 -0
  3. package/dist/bin/xyte-cli.d.ts +3 -0
  4. package/dist/bin/xyte-cli.d.ts.map +1 -0
  5. package/dist/bin/xyte-cli.js +18 -0
  6. package/dist/bin/xyte-cli.js.map +1 -0
  7. package/dist/cli/index.d.ts +24 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +1185 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/client/catalog.d.ts +6 -0
  12. package/dist/client/catalog.d.ts.map +1 -0
  13. package/dist/client/catalog.js +32 -0
  14. package/dist/client/catalog.js.map +1 -0
  15. package/dist/client/create-client.d.ts +3 -0
  16. package/dist/client/create-client.d.ts.map +1 -0
  17. package/dist/client/create-client.js +235 -0
  18. package/dist/client/create-client.js.map +1 -0
  19. package/dist/config/connectivity.d.ts +19 -0
  20. package/dist/config/connectivity.d.ts.map +1 -0
  21. package/dist/config/connectivity.js +166 -0
  22. package/dist/config/connectivity.js.map +1 -0
  23. package/dist/config/readiness.d.ts +32 -0
  24. package/dist/config/readiness.d.ts.map +1 -0
  25. package/dist/config/readiness.js +96 -0
  26. package/dist/config/readiness.js.map +1 -0
  27. package/dist/config/retry-policy.d.ts +16 -0
  28. package/dist/config/retry-policy.d.ts.map +1 -0
  29. package/dist/config/retry-policy.js +24 -0
  30. package/dist/config/retry-policy.js.map +1 -0
  31. package/dist/contracts/call-envelope.d.ts +74 -0
  32. package/dist/contracts/call-envelope.d.ts.map +1 -0
  33. package/dist/contracts/call-envelope.js +72 -0
  34. package/dist/contracts/call-envelope.js.map +1 -0
  35. package/dist/contracts/problem.d.ts +11 -0
  36. package/dist/contracts/problem.d.ts.map +1 -0
  37. package/dist/contracts/problem.js +55 -0
  38. package/dist/contracts/problem.js.map +1 -0
  39. package/dist/contracts/versions.d.ts +6 -0
  40. package/dist/contracts/versions.d.ts.map +1 -0
  41. package/dist/contracts/versions.js +9 -0
  42. package/dist/contracts/versions.js.map +1 -0
  43. package/dist/http/errors.d.ts +24 -0
  44. package/dist/http/errors.d.ts.map +1 -0
  45. package/dist/http/errors.js +39 -0
  46. package/dist/http/errors.js.map +1 -0
  47. package/dist/http/transport.d.ts +35 -0
  48. package/dist/http/transport.d.ts.map +1 -0
  49. package/dist/http/transport.js +129 -0
  50. package/dist/http/transport.js.map +1 -0
  51. package/dist/index.d.ts +10 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/server.d.ts +12 -0
  56. package/dist/mcp/server.d.ts.map +1 -0
  57. package/dist/mcp/server.js +404 -0
  58. package/dist/mcp/server.js.map +1 -0
  59. package/dist/namespaces/device.d.ts +38 -0
  60. package/dist/namespaces/device.d.ts.map +1 -0
  61. package/dist/namespaces/device.js +36 -0
  62. package/dist/namespaces/device.js.map +1 -0
  63. package/dist/namespaces/organization.d.ts +27 -0
  64. package/dist/namespaces/organization.d.ts.map +1 -0
  65. package/dist/namespaces/organization.js +30 -0
  66. package/dist/namespaces/organization.js.map +1 -0
  67. package/dist/namespaces/partner.d.ts +18 -0
  68. package/dist/namespaces/partner.d.ts.map +1 -0
  69. package/dist/namespaces/partner.js +21 -0
  70. package/dist/namespaces/partner.js.map +1 -0
  71. package/dist/observability/logger.d.ts +3 -0
  72. package/dist/observability/logger.d.ts.map +1 -0
  73. package/dist/observability/logger.js +21 -0
  74. package/dist/observability/logger.js.map +1 -0
  75. package/dist/observability/tracing.d.ts +3 -0
  76. package/dist/observability/tracing.d.ts.map +1 -0
  77. package/dist/observability/tracing.js +26 -0
  78. package/dist/observability/tracing.js.map +1 -0
  79. package/dist/secure/key-slots.d.ts +8 -0
  80. package/dist/secure/key-slots.d.ts.map +1 -0
  81. package/dist/secure/key-slots.js +47 -0
  82. package/dist/secure/key-slots.js.map +1 -0
  83. package/dist/secure/keychain.d.ts +20 -0
  84. package/dist/secure/keychain.d.ts.map +1 -0
  85. package/dist/secure/keychain.js +170 -0
  86. package/dist/secure/keychain.js.map +1 -0
  87. package/dist/secure/profile-store.d.ts +66 -0
  88. package/dist/secure/profile-store.d.ts.map +1 -0
  89. package/dist/secure/profile-store.js +309 -0
  90. package/dist/secure/profile-store.js.map +1 -0
  91. package/dist/spec/public-endpoints.json +1175 -0
  92. package/dist/tui/animation.d.ts +12 -0
  93. package/dist/tui/animation.d.ts.map +1 -0
  94. package/dist/tui/animation.js +41 -0
  95. package/dist/tui/animation.js.map +1 -0
  96. package/dist/tui/app.d.ts +27 -0
  97. package/dist/tui/app.d.ts.map +1 -0
  98. package/dist/tui/app.js +711 -0
  99. package/dist/tui/app.js.map +1 -0
  100. package/dist/tui/assets/logo.d.ts +5 -0
  101. package/dist/tui/assets/logo.d.ts.map +1 -0
  102. package/dist/tui/assets/logo.js +24 -0
  103. package/dist/tui/assets/logo.js.map +1 -0
  104. package/dist/tui/data-loaders.d.ts +33 -0
  105. package/dist/tui/data-loaders.d.ts.map +1 -0
  106. package/dist/tui/data-loaders.js +250 -0
  107. package/dist/tui/data-loaders.js.map +1 -0
  108. package/dist/tui/dispatch.d.ts +14 -0
  109. package/dist/tui/dispatch.d.ts.map +1 -0
  110. package/dist/tui/dispatch.js +44 -0
  111. package/dist/tui/dispatch.js.map +1 -0
  112. package/dist/tui/headless-renderer.d.ts +20 -0
  113. package/dist/tui/headless-renderer.d.ts.map +1 -0
  114. package/dist/tui/headless-renderer.js +598 -0
  115. package/dist/tui/headless-renderer.js.map +1 -0
  116. package/dist/tui/input-controller.d.ts +29 -0
  117. package/dist/tui/input-controller.d.ts.map +1 -0
  118. package/dist/tui/input-controller.js +76 -0
  119. package/dist/tui/input-controller.js.map +1 -0
  120. package/dist/tui/key-wizard.d.ts +29 -0
  121. package/dist/tui/key-wizard.d.ts.map +1 -0
  122. package/dist/tui/key-wizard.js +177 -0
  123. package/dist/tui/key-wizard.js.map +1 -0
  124. package/dist/tui/keymap.d.ts +9 -0
  125. package/dist/tui/keymap.d.ts.map +1 -0
  126. package/dist/tui/keymap.js +29 -0
  127. package/dist/tui/keymap.js.map +1 -0
  128. package/dist/tui/layout.d.ts +16 -0
  129. package/dist/tui/layout.d.ts.map +1 -0
  130. package/dist/tui/layout.js +99 -0
  131. package/dist/tui/layout.js.map +1 -0
  132. package/dist/tui/logger.d.ts +12 -0
  133. package/dist/tui/logger.d.ts.map +1 -0
  134. package/dist/tui/logger.js +83 -0
  135. package/dist/tui/logger.js.map +1 -0
  136. package/dist/tui/navigation.d.ts +26 -0
  137. package/dist/tui/navigation.d.ts.map +1 -0
  138. package/dist/tui/navigation.js +136 -0
  139. package/dist/tui/navigation.js.map +1 -0
  140. package/dist/tui/panes.d.ts +7 -0
  141. package/dist/tui/panes.d.ts.map +1 -0
  142. package/dist/tui/panes.js +34 -0
  143. package/dist/tui/panes.js.map +1 -0
  144. package/dist/tui/runtime.d.ts +34 -0
  145. package/dist/tui/runtime.d.ts.map +1 -0
  146. package/dist/tui/runtime.js +100 -0
  147. package/dist/tui/runtime.js.map +1 -0
  148. package/dist/tui/scene.d.ts +160 -0
  149. package/dist/tui/scene.d.ts.map +1 -0
  150. package/dist/tui/scene.js +424 -0
  151. package/dist/tui/scene.js.map +1 -0
  152. package/dist/tui/screens/config.d.ts +3 -0
  153. package/dist/tui/screens/config.d.ts.map +1 -0
  154. package/dist/tui/screens/config.js +406 -0
  155. package/dist/tui/screens/config.js.map +1 -0
  156. package/dist/tui/screens/dashboard.d.ts +3 -0
  157. package/dist/tui/screens/dashboard.d.ts.map +1 -0
  158. package/dist/tui/screens/dashboard.js +176 -0
  159. package/dist/tui/screens/dashboard.js.map +1 -0
  160. package/dist/tui/screens/devices.d.ts +3 -0
  161. package/dist/tui/screens/devices.d.ts.map +1 -0
  162. package/dist/tui/screens/devices.js +297 -0
  163. package/dist/tui/screens/devices.js.map +1 -0
  164. package/dist/tui/screens/incidents.d.ts +4 -0
  165. package/dist/tui/screens/incidents.d.ts.map +1 -0
  166. package/dist/tui/screens/incidents.js +304 -0
  167. package/dist/tui/screens/incidents.js.map +1 -0
  168. package/dist/tui/screens/setup.d.ts +3 -0
  169. package/dist/tui/screens/setup.d.ts.map +1 -0
  170. package/dist/tui/screens/setup.js +299 -0
  171. package/dist/tui/screens/setup.js.map +1 -0
  172. package/dist/tui/screens/spaces.d.ts +7 -0
  173. package/dist/tui/screens/spaces.d.ts.map +1 -0
  174. package/dist/tui/screens/spaces.js +422 -0
  175. package/dist/tui/screens/spaces.js.map +1 -0
  176. package/dist/tui/screens/tickets.d.ts +9 -0
  177. package/dist/tui/screens/tickets.d.ts.map +1 -0
  178. package/dist/tui/screens/tickets.js +418 -0
  179. package/dist/tui/screens/tickets.js.map +1 -0
  180. package/dist/tui/serialize.d.ts +31 -0
  181. package/dist/tui/serialize.d.ts.map +1 -0
  182. package/dist/tui/serialize.js +183 -0
  183. package/dist/tui/serialize.js.map +1 -0
  184. package/dist/tui/table-format.d.ts +11 -0
  185. package/dist/tui/table-format.d.ts.map +1 -0
  186. package/dist/tui/table-format.js +77 -0
  187. package/dist/tui/table-format.js.map +1 -0
  188. package/dist/tui/tabs.d.ts +4 -0
  189. package/dist/tui/tabs.d.ts.map +1 -0
  190. package/dist/tui/tabs.js +13 -0
  191. package/dist/tui/tabs.js.map +1 -0
  192. package/dist/tui/types.d.ts +37 -0
  193. package/dist/tui/types.d.ts.map +1 -0
  194. package/dist/tui/types.js +3 -0
  195. package/dist/tui/types.js.map +1 -0
  196. package/dist/types/client.d.ts +54 -0
  197. package/dist/types/client.d.ts.map +1 -0
  198. package/dist/types/client.js +3 -0
  199. package/dist/types/client.js.map +1 -0
  200. package/dist/types/endpoints.d.ts +29 -0
  201. package/dist/types/endpoints.d.ts.map +1 -0
  202. package/dist/types/endpoints.js +3 -0
  203. package/dist/types/endpoints.js.map +1 -0
  204. package/dist/types/profile.d.ts +29 -0
  205. package/dist/types/profile.d.ts.map +1 -0
  206. package/dist/types/profile.js +3 -0
  207. package/dist/types/profile.js.map +1 -0
  208. package/dist/utils/config-dir.d.ts +2 -0
  209. package/dist/utils/config-dir.d.ts.map +1 -0
  210. package/dist/utils/config-dir.js +23 -0
  211. package/dist/utils/config-dir.js.map +1 -0
  212. package/dist/utils/error-format.d.ts +4 -0
  213. package/dist/utils/error-format.d.ts.map +1 -0
  214. package/dist/utils/error-format.js +34 -0
  215. package/dist/utils/error-format.js.map +1 -0
  216. package/dist/utils/install-skills.d.ts +38 -0
  217. package/dist/utils/install-skills.d.ts.map +1 -0
  218. package/dist/utils/install-skills.js +117 -0
  219. package/dist/utils/install-skills.js.map +1 -0
  220. package/dist/utils/json-output.d.ts +6 -0
  221. package/dist/utils/json-output.d.ts.map +1 -0
  222. package/dist/utils/json-output.js +30 -0
  223. package/dist/utils/json-output.js.map +1 -0
  224. package/dist/utils/json.d.ts +4 -0
  225. package/dist/utils/json.d.ts.map +1 -0
  226. package/dist/utils/json.js +36 -0
  227. package/dist/utils/json.js.map +1 -0
  228. package/dist/utils/version.d.ts +2 -0
  229. package/dist/utils/version.d.ts.map +1 -0
  230. package/dist/utils/version.js +28 -0
  231. package/dist/utils/version.js.map +1 -0
  232. package/dist/workflows/fleet-insights.d.ts +122 -0
  233. package/dist/workflows/fleet-insights.d.ts.map +1 -0
  234. package/dist/workflows/fleet-insights.js +938 -0
  235. package/dist/workflows/fleet-insights.js.map +1 -0
  236. package/docs/schemas/call-envelope.v1.schema.json +140 -0
  237. package/docs/schemas/headless-frame.v1.schema.json +159 -0
  238. package/docs/schemas/inspect-deep-dive.v1.schema.json +251 -0
  239. package/docs/schemas/inspect-fleet.v1.schema.json +111 -0
  240. package/docs/schemas/report.v1.schema.json +39 -0
  241. package/package.json +75 -0
  242. package/skills/xyte-cli/SKILL.md +181 -0
  243. package/skills/xyte-cli/agents/openai.yaml +4 -0
  244. package/skills/xyte-cli/references/endpoints.md +106 -0
  245. package/skills/xyte-cli/references/headless-contract.md +96 -0
  246. package/skills/xyte-cli/references/tui-flows.md +126 -0
  247. package/skills/xyte-cli/scripts/check_headless.sh +83 -0
  248. package/skills/xyte-cli/scripts/endpoint_filters_report.sh +33 -0
  249. package/skills/xyte-cli/scripts/run_xyte_cli.sh +12 -0
  250. package/skills/xyte-cli/scripts/validate_agent_contracts.sh +72 -0
  251. package/skills/xyte-cli/scripts/validate_with_schema.js +30 -0
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSetupScreen = createSetupScreen;
7
+ const blessed_1 = __importDefault(require("blessed"));
8
+ const navigation_1 = require("../navigation");
9
+ const panes_1 = require("../panes");
10
+ const scene_1 = require("../scene");
11
+ const key_wizard_1 = require("../key-wizard");
12
+ const PROVIDERS = ['xyte-org', 'xyte-partner', 'xyte-device'];
13
+ function parseProvider(value) {
14
+ const normalized = value.trim();
15
+ if (!PROVIDERS.includes(normalized)) {
16
+ throw new Error(`Invalid provider: ${value}`);
17
+ }
18
+ return normalized;
19
+ }
20
+ function createSetupScreen() {
21
+ let root;
22
+ let statsBox;
23
+ let providerTable;
24
+ let checklistBox;
25
+ let context;
26
+ let selectedProviderIndex = 0;
27
+ let providerSelectionSync = {
28
+ syncing: false,
29
+ name: 'setup-providers'
30
+ };
31
+ let providerRowsState = [];
32
+ const paneConfig = panes_1.SCREEN_PANE_CONFIG.setup;
33
+ let activePane = paneConfig.defaultPane;
34
+ let isMounted = false;
35
+ const focusPane = () => {
36
+ if (activePane === 'providers-table') {
37
+ providerTable?.focus();
38
+ return;
39
+ }
40
+ checklistBox?.focus();
41
+ };
42
+ const render = async () => {
43
+ if (!isMounted) {
44
+ return;
45
+ }
46
+ const readiness = context.getReadiness() ?? (await context.refreshReadiness(true));
47
+ if (!isMounted) {
48
+ return;
49
+ }
50
+ const panels = (0, scene_1.sceneFromSetupState)({
51
+ tenantId: readiness.tenantId,
52
+ readinessState: readiness.state,
53
+ connectionState: readiness.connectionState,
54
+ missingItems: readiness.missingItems,
55
+ recommendedActions: readiness.recommendedActions,
56
+ providerRows: readiness.providers.map((provider) => ({
57
+ provider: provider.provider,
58
+ slotCount: provider.slotCount,
59
+ activeSlot: provider.activeSlotId ?? 'none',
60
+ hasSecret: provider.hasActiveSecret ? 'yes' : 'no'
61
+ }))
62
+ });
63
+ providerRowsState = readiness.providers.map((provider) => provider.provider);
64
+ const overview = panels.find((panel) => panel.id === 'setup-overview');
65
+ const providers = panels.find((panel) => panel.id === 'setup-providers');
66
+ const checklist = panels.find((panel) => panel.id === 'setup-checklist');
67
+ statsBox?.setContent((overview?.stats ?? []).map((stat) => `${stat.label}: ${stat.value}`).join('\n'));
68
+ (0, navigation_1.setListTableData)(providerTable, [
69
+ (providers?.table?.columns ?? ['Provider', 'Slots', 'Active Slot', 'Has Secret']),
70
+ ...(providers?.table?.rows ?? [])
71
+ ], providerSelectionSync);
72
+ selectedProviderIndex = (0, navigation_1.clampIndex)(selectedProviderIndex, readiness.providers.length);
73
+ (0, navigation_1.syncListSelection)(providerTable, selectedProviderIndex, providerSelectionSync);
74
+ checklistBox?.setContent((checklist?.text?.lines ?? []).join('\n'));
75
+ focusPane();
76
+ context.screen.render();
77
+ };
78
+ return {
79
+ id: 'setup',
80
+ title: 'Setup',
81
+ mount(parent, ctx) {
82
+ context = ctx;
83
+ providerSelectionSync = {
84
+ syncing: false,
85
+ name: 'setup-providers',
86
+ onLog: (event, data) => context.debugLog?.(event, data)
87
+ };
88
+ isMounted = true;
89
+ root = blessed_1.default.box({
90
+ parent,
91
+ width: '100%-2',
92
+ height: '100%-2'
93
+ });
94
+ statsBox = blessed_1.default.box({
95
+ parent: root,
96
+ top: 0,
97
+ left: 0,
98
+ width: '100%',
99
+ height: 4,
100
+ border: 'line',
101
+ label: ' Readiness '
102
+ });
103
+ providerTable = blessed_1.default.listtable({
104
+ parent: root,
105
+ top: 4,
106
+ left: 0,
107
+ width: '100%',
108
+ height: 9,
109
+ border: 'line',
110
+ label: ' Provider Slots ',
111
+ keys: false,
112
+ mouse: true,
113
+ style: {
114
+ header: { bold: true, fg: 'black', bg: 'white' },
115
+ cell: { selected: { bg: 'blue' } }
116
+ },
117
+ data: [['Provider', 'Slots', 'Active Slot', 'Has Secret']]
118
+ });
119
+ checklistBox = blessed_1.default.box({
120
+ parent: root,
121
+ top: 13,
122
+ left: 0,
123
+ width: '100%',
124
+ height: '100%-13',
125
+ border: 'line',
126
+ label: ' Checklist ',
127
+ scrollable: true,
128
+ alwaysScroll: true,
129
+ vi: true,
130
+ keys: false,
131
+ mouse: true
132
+ });
133
+ context.debugLog?.('nav.list.nativeKeysDisabled', {
134
+ screen: 'setup',
135
+ widgets: ['providers-table', 'checklist-box']
136
+ });
137
+ },
138
+ unmount() {
139
+ isMounted = false;
140
+ root?.destroy();
141
+ root = undefined;
142
+ },
143
+ async refresh() {
144
+ await context.refreshReadiness(true);
145
+ await render();
146
+ },
147
+ focus() {
148
+ focusPane();
149
+ },
150
+ getActivePane() {
151
+ return activePane;
152
+ },
153
+ getAvailablePanes() {
154
+ return paneConfig.panes;
155
+ },
156
+ async handleArrow(key) {
157
+ if (key === 'left' || key === 'right') {
158
+ const next = (0, navigation_1.movePaneWithBoundary)(paneConfig.panes, activePane, key);
159
+ if (next.boundary) {
160
+ return 'boundary';
161
+ }
162
+ activePane = next.pane;
163
+ focusPane();
164
+ context.setStatus(`Pane: ${activePane}`);
165
+ return 'handled';
166
+ }
167
+ const delta = key === 'up' ? -1 : key === 'down' ? 1 : 0;
168
+ if (!delta) {
169
+ return 'unhandled';
170
+ }
171
+ if (activePane === 'providers-table') {
172
+ const readiness = context.getReadiness();
173
+ const totalRows = readiness?.providers.length ?? 0;
174
+ const beforeIndex = selectedProviderIndex;
175
+ selectedProviderIndex = (0, navigation_1.moveTableSelection)({
176
+ table: providerTable,
177
+ index: selectedProviderIndex,
178
+ delta,
179
+ totalRows,
180
+ selectionSync: providerSelectionSync
181
+ });
182
+ context.debugLog?.('nav.arrow.updown', {
183
+ screen: 'setup',
184
+ pane: activePane,
185
+ beforeIndex,
186
+ afterIndex: selectedProviderIndex,
187
+ delta
188
+ });
189
+ context.screen.render();
190
+ return 'handled';
191
+ }
192
+ (0, navigation_1.scrollBox)(checklistBox, delta);
193
+ context.screen.render();
194
+ return 'handled';
195
+ },
196
+ async handleKey(ch) {
197
+ try {
198
+ if (ch === 'r') {
199
+ await this.refresh();
200
+ context.setStatus('Setup refreshed.');
201
+ return true;
202
+ }
203
+ if (ch === 'c') {
204
+ await context.refreshReadiness(true);
205
+ await render();
206
+ context.setStatus('Connectivity probe complete.');
207
+ return true;
208
+ }
209
+ if (ch === 'a') {
210
+ const tenantId = (await context.prompt('Tenant id:', ''))?.trim();
211
+ if (!isMounted) {
212
+ return true;
213
+ }
214
+ if (!tenantId) {
215
+ return true;
216
+ }
217
+ const tenantName = (await context.prompt('Tenant display name:', tenantId))?.trim() || tenantId;
218
+ await context.profileStore.upsertTenant({ id: tenantId, name: tenantName });
219
+ await context.profileStore.setActiveTenant(tenantId);
220
+ await this.refresh();
221
+ context.setStatus(`Tenant ${tenantId} configured and active.`);
222
+ return true;
223
+ }
224
+ if (ch === 'u') {
225
+ const data = await context.profileStore.getData();
226
+ const hint = data.activeTenantId ?? data.tenants[0]?.id ?? '';
227
+ const tenantId = (await context.prompt('Set active tenant id:', hint))?.trim();
228
+ if (!isMounted) {
229
+ return true;
230
+ }
231
+ if (!tenantId) {
232
+ return true;
233
+ }
234
+ await context.profileStore.setActiveTenant(tenantId);
235
+ await this.refresh();
236
+ context.setStatus(`Active tenant set to ${tenantId}.`);
237
+ return true;
238
+ }
239
+ if (ch === 'k') {
240
+ const tenantId = await context.getActiveTenantId();
241
+ if (!tenantId) {
242
+ context.setStatus('Set an active tenant first (a/u).');
243
+ return true;
244
+ }
245
+ const selectedProvider = providerRowsState[(0, navigation_1.clampIndex)(selectedProviderIndex, providerRowsState.length)] ?? 'xyte-org';
246
+ const result = await (0, key_wizard_1.runKeyCreateWizard)({
247
+ context,
248
+ tenantId,
249
+ defaultProvider: selectedProvider,
250
+ defaultSlotName: 'primary',
251
+ setActiveDefault: true
252
+ });
253
+ if (!isMounted) {
254
+ return true;
255
+ }
256
+ await this.refresh();
257
+ if (result.canceled) {
258
+ context.setStatus(result.message);
259
+ return true;
260
+ }
261
+ context.setStatus(result.message);
262
+ return true;
263
+ }
264
+ if (ch === 'p') {
265
+ const tenantId = await context.getActiveTenantId();
266
+ if (!tenantId) {
267
+ context.setStatus('Set an active tenant first.');
268
+ return true;
269
+ }
270
+ const providerText = (await context.prompt('Provider:', 'xyte-org'))?.trim();
271
+ if (!isMounted) {
272
+ return true;
273
+ }
274
+ if (!providerText) {
275
+ return true;
276
+ }
277
+ const provider = parseProvider(providerText);
278
+ const slotRef = (await context.prompt('Slot id or name:', ''))?.trim();
279
+ if (!isMounted) {
280
+ return true;
281
+ }
282
+ if (!slotRef) {
283
+ return true;
284
+ }
285
+ await context.profileStore.setActiveKeySlot(tenantId, provider, slotRef);
286
+ await this.refresh();
287
+ context.setStatus(`Active slot updated for ${provider}.`);
288
+ return true;
289
+ }
290
+ }
291
+ catch (error) {
292
+ context.showError(error);
293
+ return true;
294
+ }
295
+ return false;
296
+ }
297
+ };
298
+ }
299
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/tui/screens/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { TuiScreen } from '../types';
2
+ export declare function createStaleSafeSelectionLoader<TInput, TResult>(args: {
3
+ load: (input: TInput) => Promise<TResult>;
4
+ apply: (result: TResult) => void;
5
+ }): (input: TInput) => Promise<boolean>;
6
+ export declare function createSpacesScreen(): TuiScreen;
7
+ //# sourceMappingURL=spaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/spaces.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAA2B,SAAS,EAAE,MAAM,UAAU,CAAC;AAanE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IACpE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAYtC;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAkb9C"}