@numa-tech/numa 1.12.8 → 1.12.10

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 (42) hide show
  1. package/README.md +127 -4
  2. package/dist/application-candidates/client.d.ts +167 -0
  3. package/dist/application-candidates/client.js +103 -0
  4. package/dist/application-candidates/client.js.map +1 -0
  5. package/dist/application-candidates/commands.d.ts +13 -0
  6. package/dist/application-candidates/commands.js +225 -0
  7. package/dist/application-candidates/commands.js.map +1 -0
  8. package/dist/application-candidates/schemas.d.ts +171 -0
  9. package/dist/application-candidates/schemas.js +80 -0
  10. package/dist/application-candidates/schemas.js.map +1 -0
  11. package/dist/application-onboarding/client.d.ts +256 -0
  12. package/dist/application-onboarding/client.js +213 -0
  13. package/dist/application-onboarding/client.js.map +1 -0
  14. package/dist/application-onboarding/commands.d.ts +64 -0
  15. package/dist/application-onboarding/commands.js +694 -0
  16. package/dist/application-onboarding/commands.js.map +1 -0
  17. package/dist/application-onboarding/errors.d.ts +11 -0
  18. package/dist/application-onboarding/errors.js +51 -0
  19. package/dist/application-onboarding/errors.js.map +1 -0
  20. package/dist/application-onboarding/schemas.d.ts +1167 -0
  21. package/dist/application-onboarding/schemas.js +459 -0
  22. package/dist/application-onboarding/schemas.js.map +1 -0
  23. package/dist/application-onboarding/scm-credentials.d.ts +8 -0
  24. package/dist/application-onboarding/scm-credentials.js +98 -0
  25. package/dist/application-onboarding/scm-credentials.js.map +1 -0
  26. package/dist/application-onboarding/tui-model.d.ts +131 -0
  27. package/dist/application-onboarding/tui-model.js +554 -0
  28. package/dist/application-onboarding/tui-model.js.map +1 -0
  29. package/dist/application-onboarding/tui.d.ts +14 -0
  30. package/dist/application-onboarding/tui.js +554 -0
  31. package/dist/application-onboarding/tui.js.map +1 -0
  32. package/dist/cli.js +18 -4
  33. package/dist/cli.js.map +1 -1
  34. package/dist/command-catalog.js +134 -0
  35. package/dist/command-catalog.js.map +1 -1
  36. package/dist/web-console.js +4 -3
  37. package/dist/web-console.js.map +1 -1
  38. package/package.json +4 -4
  39. package/skills/numa-cli/SKILL.md +44 -0
  40. package/skills/numa-cli/agents/openai.yaml +4 -0
  41. package/skills/numa-cli/evals/evals.json +35 -0
  42. package/skills/numa-cli/references/pipeline-release.md +107 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-model.js","sourceRoot":"","sources":["../../src/application-onboarding/tui-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { OnboardingApi } from "./client.js";
2
+ import type { OnboardingMode, OnboardingSession } from "./schemas.js";
3
+ import { type OnboardingTuiState, type WizardCatalog } from "./tui-model.js";
4
+ export { ONBOARDING_STEPS, applyTemplateDefaults, applyRepositorySelection, assertCredentialFreeDraft, fieldsForState, initialOnboardingTuiState, reduceOnboardingTuiState, safeTerminalWidth, validateTemplateParameters, validateWizardBeforeStep } from "./tui-model.js";
5
+ export type { OnboardingTuiAction, OnboardingTuiState } from "./tui-model.js";
6
+ export declare function saveWizardStep(client: OnboardingApi, state: OnboardingTuiState, stepIndex: number): Promise<{
7
+ session: OnboardingSession;
8
+ reloadedAfterConflict: boolean;
9
+ }>;
10
+ export declare function loadTuiRepositories(client: Pick<OnboardingApi, "listRepositories">, connectionCode: string, search?: string, cursor?: string): Promise<Pick<WizardCatalog, "repositories" | "repositoryStatus" | "repositoryNextCursor">>;
11
+ export declare function runOnboardingTui(client: OnboardingApi, options?: {
12
+ sessionNo?: string;
13
+ mode?: OnboardingMode;
14
+ }): Promise<void>;
@@ -0,0 +1,554 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { randomUUID } from "node:crypto";
3
+ import { useEffect, useMemo, useState } from "react";
4
+ import { Box, Text, render, useApp, useInput } from "ink";
5
+ import { OnboardingError, sanitizeOnboardingOutput } from "./errors.js";
6
+ import { ONBOARDING_STEPS, applyRepositorySelection, applyTemplateDefaults, assertCredentialFreeDraft, currentStepCode, cycleFieldValue, displayFieldValue, draftAsJsonValue, fieldsForState, initialOnboardingTuiState, parseFieldInput, reduceOnboardingTuiState, safeTerminalWidth, stringAt, validateTemplateParameters, validateWizardBeforeStep, valueAtPath } from "./tui-model.js";
7
+ export { ONBOARDING_STEPS, applyTemplateDefaults, applyRepositorySelection, assertCredentialFreeDraft, fieldsForState, initialOnboardingTuiState, reduceOnboardingTuiState, safeTerminalWidth, validateTemplateParameters, validateWizardBeforeStep } from "./tui-model.js";
8
+ export async function saveWizardStep(client, state, stepIndex) {
9
+ const session = state.session;
10
+ if (!session)
11
+ throw new OnboardingError("Create or load a session first.", "onboarding_session_required");
12
+ assertCredentialFreeDraft(state.draft);
13
+ const validationErrors = stepIndex >= state.stepIndex
14
+ ? validateWizardBeforeStep(state, stepIndex)
15
+ : [];
16
+ if (validationErrors.length) {
17
+ throw new OnboardingError(validationErrors.join(" "), "onboarding_draft_invalid");
18
+ }
19
+ try {
20
+ return {
21
+ session: await client.updateSession(session.sessionNo, {
22
+ revision: session.revision,
23
+ currentStep: ONBOARDING_STEPS[stepIndex],
24
+ draft: draftAsJsonValue(state.draft)
25
+ }),
26
+ reloadedAfterConflict: false
27
+ };
28
+ }
29
+ catch (error) {
30
+ if (!isRevisionConflict(error))
31
+ throw error;
32
+ return { session: await client.getSession(session.sessionNo), reloadedAfterConflict: true };
33
+ }
34
+ }
35
+ export async function loadTuiRepositories(client, connectionCode, search, cursor) {
36
+ try {
37
+ const response = await client.listRepositories(connectionCode, { search, cursor, limit: 50 });
38
+ return {
39
+ repositories: response.items,
40
+ repositoryNextCursor: response.hasMore ? response.nextCursor : null,
41
+ repositoryStatus: response.items.length
42
+ ? `Loaded ${response.items.length} repositories${response.hasMore ? "; another page is available with n" : ""}. Use ←/→ on externalId or press e to enter one manually.`
43
+ : "Provider returned no repositories; externalId and expectedHead may still be entered manually."
44
+ };
45
+ }
46
+ catch (error) {
47
+ if (error instanceof OnboardingError && error.status === 501) {
48
+ return {
49
+ repositories: [],
50
+ repositoryNextCursor: null,
51
+ repositoryStatus: `${error.code}: repository browsing is not installed; enter stable externalId and expectedHead manually.`
52
+ };
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+ export async function runOnboardingTui(client, options = {}) {
58
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
59
+ throw new OnboardingError("Application onboarding TUI requires an interactive terminal.", "onboarding_tui_required");
60
+ }
61
+ const instance = render(_jsx(OnboardingWorkbench, { client: client, sessionNo: options.sessionNo, mode: options.mode }));
62
+ await instance.waitUntilExit();
63
+ }
64
+ function OnboardingWorkbench(props) {
65
+ const { exit } = useApp();
66
+ const [state, setState] = useState(initialOnboardingTuiState);
67
+ const dispatch = (action) => setState((current) => reduceOnboardingTuiState(current, action));
68
+ const fields = useMemo(() => fieldsForState(state), [state]);
69
+ const selectedField = fields[Math.min(state.fieldIndex, Math.max(0, fields.length - 1))];
70
+ useEffect(() => {
71
+ let active = true;
72
+ void loadBootstrap(props.client, props.sessionNo)
73
+ .then((loaded) => {
74
+ if (!active)
75
+ return;
76
+ dispatch({
77
+ type: "BOOTSTRAP_LOADED",
78
+ capabilities: loaded.capabilities,
79
+ catalog: loaded.catalog,
80
+ preferredMode: props.mode
81
+ });
82
+ if (loaded.session)
83
+ dispatch({ type: "SESSION_LOADED", session: loaded.session });
84
+ if (loaded.events.length)
85
+ dispatch({ type: "EVENTS_LOADED", events: loaded.events });
86
+ })
87
+ .catch((error) => {
88
+ if (active)
89
+ dispatch({ type: "ERROR", value: errorMessage(error) });
90
+ });
91
+ return () => { active = false; };
92
+ }, [props.client, props.sessionNo, props.mode]);
93
+ useEffect(() => {
94
+ const session = state.session;
95
+ if (!session || currentStepCode(state) !== "EXECUTION" || !isActiveState(session.state))
96
+ return;
97
+ let active = true;
98
+ const timer = setInterval(() => {
99
+ void refreshSession(props.client, state)
100
+ .then(({ session: next, events }) => {
101
+ if (!active)
102
+ return;
103
+ dispatch({ type: "SESSION_LOADED", session: next });
104
+ dispatch({ type: "EVENTS_LOADED", events });
105
+ })
106
+ .catch((error) => {
107
+ if (active)
108
+ dispatch({ type: "ERROR", value: errorMessage(error) });
109
+ });
110
+ }, 2_000);
111
+ return () => { active = false; clearInterval(timer); };
112
+ }, [props.client, state.session?.sessionNo, state.session?.state, state.stepIndex, state.afterSequence]);
113
+ const execute = (operation, notice) => {
114
+ dispatch({ type: "BUSY", value: true, notice });
115
+ void operation().catch((error) => dispatch({ type: "ERROR", value: errorMessage(error) }));
116
+ };
117
+ const saveAtStep = async (stepIndex) => {
118
+ const result = await saveWizardStep(props.client, state, stepIndex);
119
+ dispatch({ type: "SESSION_LOADED", session: result.session });
120
+ if (result.reloadedAfterConflict) {
121
+ throw new OnboardingError("Draft revision conflicted with another client. The latest server draft was reloaded; review and re-enter local changes.", "onboarding_revision_reloaded", 409);
122
+ }
123
+ return result.session;
124
+ };
125
+ const navigate = (direction) => {
126
+ const target = Math.min(ONBOARDING_STEPS.length - 1, Math.max(0, state.stepIndex + direction));
127
+ if (target === state.stepIndex)
128
+ return;
129
+ if (!state.session || !draftMutable(state.session.state)) {
130
+ dispatch({ type: "SET_STEP", index: target });
131
+ return;
132
+ }
133
+ execute(async () => {
134
+ await saveAtStep(target);
135
+ dispatch({ type: "NOTICE", value: `Saved revision and moved to ${ONBOARDING_STEPS[target]}.` });
136
+ }, `Saving ${ONBOARDING_STEPS[target]}…`);
137
+ };
138
+ const commitEditor = () => {
139
+ if (!selectedField)
140
+ return;
141
+ try {
142
+ const value = parseFieldInput(selectedField, state.editBuffer);
143
+ let nextDraft = setViaReducerPreview(state, selectedField.path, value);
144
+ if (selectedField.path === "technology.parameters" && state.session?.mode === "NEW") {
145
+ const errors = validateTemplateParameters(nextDraft, state.catalog.templates);
146
+ if (errors.length)
147
+ throw new OnboardingError(errors.join(" "), "onboarding_template_parameters_invalid");
148
+ }
149
+ assertCredentialFreeDraft(nextDraft);
150
+ dispatch({ type: "SET_DRAFT", draft: nextDraft });
151
+ dispatch({ type: "NOTICE", value: `${selectedField.label} updated locally; save or change step to persist.` });
152
+ }
153
+ catch (error) {
154
+ dispatch({ type: "ERROR", value: errorMessage(error) });
155
+ }
156
+ };
157
+ const chooseField = (direction) => {
158
+ if (!selectedField)
159
+ return;
160
+ let draft = cycleFieldValue(state, selectedField, direction);
161
+ if (selectedField.path === "technology.templateCode") {
162
+ const selected = state.catalog.templates.find((item) => stringValue(item.code) === stringAt(draft, selectedField.path));
163
+ draft = applyTemplateDefaults(draft, selected);
164
+ }
165
+ if (selectedField.path === "technology.stackCode" || selectedField.path === "technology.repoMode") {
166
+ draft = setViaReducerPreview({ ...state, draft }, "technology.templateCode", undefined);
167
+ draft = setViaReducerPreview({ ...state, draft }, "technology.parameters", {});
168
+ }
169
+ if (selectedField.path === "repository.connectionCode") {
170
+ draft = setViaReducerPreview({ ...state, draft }, "repository.externalId", undefined);
171
+ dispatch({
172
+ type: "CATALOG_LOADED",
173
+ catalog: {
174
+ repositories: [],
175
+ repositoryNextCursor: null,
176
+ repositoryStatus: "Connection changed; press f to query repositories or enter externalId manually."
177
+ }
178
+ });
179
+ }
180
+ if (selectedField.path === "repository.externalId") {
181
+ const externalId = stringAt(draft, "repository.externalId");
182
+ draft = applyRepositorySelection(draft, state.catalog.repositories, externalId);
183
+ }
184
+ assertCredentialFreeDraft(draft);
185
+ dispatch({ type: "SET_DRAFT", draft });
186
+ };
187
+ const fetchRepositories = (nextPage = false) => {
188
+ const connectionCode = stringAt(state.draft, "repository.connectionCode");
189
+ if (!connectionCode) {
190
+ dispatch({ type: "ERROR", value: "Select an SCM connection first." });
191
+ return;
192
+ }
193
+ const cursor = nextPage ? state.catalog.repositoryNextCursor ?? undefined : undefined;
194
+ if (nextPage && !cursor) {
195
+ dispatch({ type: "NOTICE", value: "There is no additional repository page to load." });
196
+ return;
197
+ }
198
+ execute(async () => {
199
+ const result = await loadTuiRepositories(props.client, connectionCode, stringAt(state.draft, "repository.name") || undefined, cursor);
200
+ const repositories = nextPage
201
+ ? deduplicateRepositories([...state.catalog.repositories, ...result.repositories])
202
+ : result.repositories;
203
+ dispatch({ type: "CATALOG_LOADED", catalog: { ...result, repositories } });
204
+ if (result.repositoryStatus?.includes("not installed")) {
205
+ dispatch({ type: "NOTICE", value: "Repository provider browsing is unavailable; manual externalId and expectedHead remain enabled." });
206
+ }
207
+ }, "Loading repositories…");
208
+ };
209
+ const runPreflight = () => {
210
+ execute(async () => {
211
+ const saved = await saveAtStep(ONBOARDING_STEPS.indexOf("REVIEW"));
212
+ const result = await props.client.preflight(saved.sessionNo);
213
+ dispatch({ type: "PREFLIGHT_LOADED", preflight: result });
214
+ const latest = await props.client.getSession(saved.sessionNo);
215
+ dispatch({ type: "SESSION_LOADED", session: latest });
216
+ dispatch({ type: "PREFLIGHT_LOADED", preflight: result });
217
+ dispatch({
218
+ type: "NOTICE",
219
+ value: result.blockingErrors.length
220
+ ? `Preflight found ${result.blockingErrors.length} blocking issue(s).`
221
+ : `Preflight locked plan ${result.planHash ?? "without a hash"}.`
222
+ });
223
+ }, "Saving and running server preflight…");
224
+ };
225
+ const requestApply = () => {
226
+ const planHash = state.preflight?.planHash ?? state.session?.planHash;
227
+ if (!planHash || !state.preflight) {
228
+ dispatch({ type: "ERROR", value: "Run preflight and review its plan hash first." });
229
+ return;
230
+ }
231
+ if (state.preflight.blockingErrors.length) {
232
+ dispatch({ type: "ERROR", value: "Resolve all blocking preflight issues before apply." });
233
+ return;
234
+ }
235
+ const key = state.idempotencyKey ?? randomUUID();
236
+ dispatch({ type: "IDEMPOTENCY_KEY", value: key });
237
+ dispatch({ type: "CONFIRM", value: "APPLY" });
238
+ };
239
+ const confirmApply = () => {
240
+ const session = state.session;
241
+ const planHash = state.preflight?.planHash ?? session?.planHash;
242
+ const key = state.idempotencyKey;
243
+ if (!session || !planHash || !key)
244
+ return;
245
+ execute(async () => {
246
+ await props.client.apply(session.sessionNo, { planHash, idempotencyKey: key });
247
+ const refreshed = await refreshSession(props.client, { ...state, afterSequence: 0 });
248
+ dispatch({ type: "SESSION_LOADED", session: refreshed.session });
249
+ dispatch({ type: "EVENTS_LOADED", events: refreshed.events });
250
+ dispatch({ type: "SET_STEP", index: ONBOARDING_STEPS.indexOf("EXECUTION") });
251
+ dispatch({ type: "NOTICE", value: `Apply accepted. Reuse idempotency key ${key} if the response becomes uncertain.` });
252
+ }, "Submitting the locked plan…");
253
+ };
254
+ const executionAction = (action) => {
255
+ const session = state.session;
256
+ if (!session)
257
+ return;
258
+ execute(async () => {
259
+ if (action === "assessment") {
260
+ const assessment = await props.client.getAssessment(session.sessionNo);
261
+ dispatch({ type: "ASSESSMENT_LOADED", assessment });
262
+ dispatch({ type: "NOTICE", value: "Standardization assessment loaded." });
263
+ return;
264
+ }
265
+ if (action !== "refresh") {
266
+ await props.client[action](session.sessionNo);
267
+ }
268
+ const refreshed = await refreshSession(props.client, state);
269
+ dispatch({ type: "SESSION_LOADED", session: refreshed.session });
270
+ dispatch({ type: "EVENTS_LOADED", events: refreshed.events });
271
+ dispatch({ type: "NOTICE", value: `${action} completed using server state.` });
272
+ }, `${action}…`);
273
+ };
274
+ useInput((input, key) => {
275
+ if (state.editing) {
276
+ if (key.return)
277
+ commitEditor();
278
+ else if (key.escape)
279
+ dispatch({ type: "STOP_EDIT" });
280
+ else if (key.backspace || key.delete)
281
+ dispatch({ type: "EDIT_BUFFER", value: state.editBuffer.slice(0, -1) });
282
+ else if (!key.ctrl && !key.meta && input && !/[\u0000-\u001f\u007f]/u.test(input)) {
283
+ dispatch({ type: "EDIT_BUFFER", value: `${state.editBuffer}${input}` });
284
+ }
285
+ return;
286
+ }
287
+ if (state.confirmation) {
288
+ if (input.toLowerCase() === "n" || key.escape)
289
+ dispatch({ type: "CONFIRM" });
290
+ else if (input.toLowerCase() === "y") {
291
+ if (state.confirmation === "APPLY")
292
+ confirmApply();
293
+ else if (state.session)
294
+ execute(async () => {
295
+ await props.client.cancel(state.session.sessionNo);
296
+ const refreshed = await refreshSession(props.client, state);
297
+ dispatch({ type: "SESSION_LOADED", session: refreshed.session });
298
+ dispatch({ type: "EVENTS_LOADED", events: refreshed.events });
299
+ dispatch({ type: "SET_STEP", index: ONBOARDING_STEPS.indexOf("EXECUTION") });
300
+ dispatch({ type: "NOTICE", value: "Server accepted cancellation; completed resources were not rolled back." });
301
+ }, "Cancelling…");
302
+ }
303
+ return;
304
+ }
305
+ if (input === "q") {
306
+ exit();
307
+ return;
308
+ }
309
+ if (state.busy || state.phase === "LOADING")
310
+ return;
311
+ if (state.phase === "SELECT_MODE") {
312
+ if (key.upArrow || key.leftArrow)
313
+ dispatch({ type: "MODE_MOVE", direction: -1 });
314
+ else if (key.downArrow || key.rightArrow)
315
+ dispatch({ type: "MODE_MOVE", direction: 1 });
316
+ else if (key.return)
317
+ execute(async () => {
318
+ const session = await props.client.createSession(state.modes[state.modeIndex]);
319
+ dispatch({ type: "SESSION_LOADED", session });
320
+ dispatch({ type: "NOTICE", value: `Draft ${session.sessionNo} created; use ] to progress through all nine steps.` });
321
+ }, "Creating resumable server draft…");
322
+ return;
323
+ }
324
+ if (state.phase !== "SESSION" || !state.session)
325
+ return;
326
+ const step = currentStepCode(state);
327
+ if (input === "[")
328
+ navigate(-1);
329
+ else if (input === "]")
330
+ navigate(1);
331
+ else if (key.upArrow)
332
+ dispatch({ type: "MOVE_FIELD", direction: -1, maximum: fields.length });
333
+ else if (key.downArrow)
334
+ dispatch({ type: "MOVE_FIELD", direction: 1, maximum: fields.length });
335
+ else if ((key.leftArrow || key.rightArrow) && selectedField
336
+ && (["select", "boolean", "choiceOrText"].includes(selectedField.kind) || Boolean(selectedField.choices?.length))) {
337
+ chooseField(key.leftArrow ? -1 : 1);
338
+ }
339
+ else if ((key.return || input === "e") && selectedField) {
340
+ if (selectedField.kind === "boolean")
341
+ chooseField(1);
342
+ else if (selectedField.kind === "select" && input !== "e")
343
+ chooseField(1);
344
+ else
345
+ dispatch({ type: "START_EDIT", value: rawEditorValue(selectedField, state.draft) });
346
+ }
347
+ else if (input === "s" && draftMutable(state.session.state)) {
348
+ execute(async () => {
349
+ await saveAtStep(state.stepIndex);
350
+ dispatch({ type: "NOTICE", value: `Draft saved at ${step}.` });
351
+ }, "Saving draft…");
352
+ }
353
+ else if (input === "f" && step === "SOURCE_CONTROL")
354
+ fetchRepositories(false);
355
+ else if (input === "n" && step === "SOURCE_CONTROL")
356
+ fetchRepositories(true);
357
+ else if (input === "g" && step === "STANDARDIZATION")
358
+ executionAction("assessment");
359
+ else if (input === "p" && step === "REVIEW")
360
+ runPreflight();
361
+ else if (input === "a" && step === "REVIEW")
362
+ requestApply();
363
+ else if (step === "EXECUTION" && input === "r")
364
+ executionAction("refresh");
365
+ else if (step === "EXECUTION" && input === "u")
366
+ executionAction("resume");
367
+ else if (step === "EXECUTION" && input === "t")
368
+ executionAction("retry");
369
+ else if (step === "EXECUTION" && input === "e")
370
+ executionAction("reassess");
371
+ else if (step === "EXECUTION" && input === "x" && !["COMPLETED", "CANCELLED"].includes(state.session.state)) {
372
+ dispatch({ type: "CONFIRM", value: "CANCEL" });
373
+ }
374
+ });
375
+ return _jsx(WizardView, { state: state, fields: fields });
376
+ }
377
+ function WizardView(props) {
378
+ const { state, fields } = props;
379
+ const width = safeTerminalWidth(process.stdout.columns);
380
+ const compact = width < 72;
381
+ const step = ONBOARDING_STEPS[state.stepIndex] ?? "MODE";
382
+ return _jsxs(Box, { width: width, minHeight: Math.max(14, (process.stdout.rows || 26) - 1), flexDirection: "column", borderStyle: "round", borderColor: "cyan", children: [_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsx(Text, { bold: true, color: "cyan", children: "NUMA / APP ONBOARDING" }), !compact ? _jsx(Text, { children: "server-authoritative \u00B7 revision-safe" }) : null] }), _jsx(Box, { paddingX: 1, borderStyle: "single", borderLeft: false, borderRight: false, flexDirection: "column", children: state.phase === "SESSION" && state.session ? _jsxs(_Fragment, { children: [_jsxs(Text, { children: [state.session.sessionNo, " \u00B7 ", _jsx(Text, { color: "cyan", children: state.session.mode }), " \u00B7 ", _jsx(Text, { color: sessionColor(state.session.state), children: state.session.state }), " \u00B7 rev ", state.session.revision] }), _jsx(Text, { wrap: "truncate-end", children: ONBOARDING_STEPS.map((item, index) => index === state.stepIndex ? `[${index + 1}:${shortStep(item)}]` : `${index + 1}:${shortStep(item)}`).join(" ") })] }) : _jsx(Text, { children: "Select mode to create a resumable server session." }) }), _jsxs(Box, { paddingX: 1, paddingY: compact ? 0 : 1, flexDirection: "column", flexGrow: 1, children: [state.phase === "LOADING" ? _jsx(Text, { color: "yellow", children: "Loading capabilities and approved catalogs\u2026" }) : null, state.phase === "SELECT_MODE" ? _jsx(ModeView, { state: state }) : null, state.phase === "SESSION" && state.session ? _jsx(StepView, { state: state, fields: fields, compact: compact }) : null, state.phase === "ERROR" ? _jsx(Text, { color: "red", children: state.error ?? "Unable to start onboarding." }) : null] }), _jsxs(Box, { paddingX: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: footerHelp(state, fields) }), state.editing ? _jsxs(Text, { color: "cyan", children: ["\u203A ", state.editBuffer, _jsx(Text, { inverse: true, children: " " })] }) : null, state.busy ? _jsx(Text, { color: "yellow", children: state.notice ?? "Working…" }) : null, !state.busy && state.notice ? _jsx(Text, { color: "green", wrap: "truncate-end", children: state.notice }) : null, state.error ? _jsx(Text, { color: "red", wrap: "wrap", children: state.error }) : null, state.confirmation === "APPLY" ? _jsxs(Text, { bold: true, color: "yellow", wrap: "wrap", children: ["Apply locked plan ", state.preflight?.planHash, " with idempotency key ", state.idempotencyKey, "? y / n"] }) : null, state.confirmation === "CANCEL" ? _jsx(Text, { bold: true, color: "yellow", children: "Cancel pending work without rolling back completed resources? y / n" }) : null] })] });
383
+ }
384
+ function ModeView({ state }) {
385
+ return _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "1 / 9 \u00B7 MODE" }), state.modes.map((mode, index) => _jsxs(Text, { color: index === state.modeIndex ? "cyan" : undefined, children: [index === state.modeIndex ? "›" : " ", " ", mode, " \u00B7 ", mode === "NEW" ? "template bootstrap or monorepo module" : "existing repository standardization"] }, mode)), _jsx(Text, { dimColor: true, children: "\u2191\u2193 select \u00B7 Enter create session" })] });
386
+ }
387
+ function StepView(props) {
388
+ const { state, fields, compact } = props;
389
+ const step = currentStepCode(state);
390
+ return _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: [state.stepIndex + 1, " / 9 \u00B7 ", step] }), step === "MODE" ? _jsxs(Text, { children: ["Mode is immutable after session creation: ", state.session?.mode] }) : null, fields.length ? _jsx(Box, { marginTop: compact ? 0 : 1, flexDirection: "column", children: fields.map((field, index) => _jsxs(Text, { color: index === state.fieldIndex ? "cyan" : undefined, wrap: "truncate-end", children: [index === state.fieldIndex ? "›" : " ", " ", field.label, field.required ? " *" : "", ": ", displayFieldValue(field, state.draft)] }, field.path)) }) : null, step === "SOURCE_CONTROL" ? _jsx(SourceStatus, { state: state }) : null, step === "TECHNOLOGY" ? _jsx(TechnologyStatus, { state: state }) : null, step === "STANDARDIZATION" ? _jsx(StandardizationStatus, { state: state }) : null, step === "REVIEW" ? _jsx(ReviewStatus, { state: state, compact: compact }) : null, step === "EXECUTION" ? _jsx(ExecutionStatus, { state: state, compact: compact }) : null, state.catalog.errors.length ? _jsxs(Text, { color: "yellow", wrap: "wrap", children: ["Catalog warnings: ", state.catalog.errors.join(" · ")] }) : null, state.dirty ? _jsx(Text, { color: "yellow", children: "Local draft has unsaved changes." }) : null, state.session?.currentStep && !ONBOARDING_STEPS.includes(state.session.currentStep)
391
+ ? _jsxs(Text, { color: "yellow", children: ["Server returned unknown currentStep ", state.session.currentStep, "; displaying it safely and using a conservative local step."] })
392
+ : null] });
393
+ }
394
+ function SourceStatus({ state }) {
395
+ if (state.session?.mode !== "EXISTING" && stringAt(state.draft, "technology.repoMode") !== "ADD_MODULE")
396
+ return null;
397
+ return _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Press f to query provider repositories. Selection copies externalId and headRevision\u2192expectedHead. On 501, enter both manually; URLs and credentials remain forbidden." }), state.catalog.repositoryStatus ? _jsx(Text, { color: state.catalog.repositoryStatus.includes("NOT_INSTALLED") ? "yellow" : "cyan", children: state.catalog.repositoryStatus }) : null] });
398
+ }
399
+ function TechnologyStatus({ state }) {
400
+ if (state.session?.mode !== "NEW")
401
+ return null;
402
+ const errors = stringAt(state.draft, "technology.templateCode")
403
+ ? validateTemplateParameters(state.draft, state.catalog.templates)
404
+ : [];
405
+ const template = state.catalog.templates.find((item) => stringValue(item.code) === stringAt(state.draft, "technology.templateCode"));
406
+ const schema = objectValue(template?.parameterSchema);
407
+ const required = Array.isArray(schema.required) ? schema.required.map(String) : [];
408
+ return _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Changing template resets parameters and applies registry defaults. Edit JSON to satisfy required/type/enum/pattern constraints." }), required.length ? _jsxs(Text, { children: ["Required template parameters: ", required.join(", ")] }) : null, errors.length ? errors.slice(0, 5).map((error) => _jsxs(Text, { color: "yellow", children: ["\u2022 ", error] }, error)) : null] });
409
+ }
410
+ function StandardizationStatus({ state }) {
411
+ if (state.session?.mode === "NEW") {
412
+ return _jsx(Text, { dimColor: true, children: "Template render/build/secret-scan evidence remains pending until the approved runner emits server events." });
413
+ }
414
+ if (!state.assessment)
415
+ return _jsx(Text, { dimColor: true, children: "Press g to load the immutable commit/policy assessment. Missing Phase 3 capability is shown as an error, never as PASS." });
416
+ return _jsxs(Text, { wrap: "wrap", children: ["Assessment: ", JSON.stringify(sanitizeOnboardingOutput(state.assessment)).slice(0, 1_500)] });
417
+ }
418
+ function ReviewStatus({ state, compact }) {
419
+ const preflight = state.preflight;
420
+ return _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { wrap: "wrap", children: ["Draft preview: ", JSON.stringify(sanitizeOnboardingOutput(state.draft), null, compact ? 0 : 2).slice(0, compact ? 1_200 : 3_500)] }), !preflight ? _jsx(Text, { dimColor: true, children: "Press p to save REVIEW and run server preflight." }) : _jsxs(_Fragment, { children: [_jsxs(Text, { children: ["Plan hash: ", _jsx(Text, { color: preflight.planHash ? "cyan" : "yellow", children: preflight.planHash ?? "not generated" })] }), _jsxs(Text, { children: ["Blocking: ", preflight.blockingErrors.length, " \u00B7 Warnings: ", preflight.warnings.length] }), preflight.blockingErrors.slice(0, 8).map((issue, index) => _jsxs(Text, { color: "red", children: ["\u2022 ", issueText(issue)] }, `b-${index}`)), preflight.warnings.slice(0, 8).map((issue, index) => _jsxs(Text, { color: "yellow", children: ["\u2022 ", issueText(issue)] }, `w-${index}`)), !preflight.blockingErrors.length && preflight.planHash ? _jsx(Text, { dimColor: true, children: "Press a, inspect plan hash/idempotency key, then y to apply." }) : null] })] });
421
+ }
422
+ function ExecutionStatus({ state, compact }) {
423
+ const maximum = compact ? 7 : 12;
424
+ return _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [state.idempotencyKey ? _jsxs(Text, { color: "yellow", children: ["Idempotency key: ", state.idempotencyKey] }) : null, _jsx(Text, { dimColor: true, children: "Only server session state and events determine completion. Active sessions refresh every 2 seconds." }), state.events.length ? state.events.slice(-maximum).map((event) => _jsxs(Text, { wrap: "truncate-end", children: [_jsxs(Text, { dimColor: true, children: ["#", event.sequenceNo] }), " ", event.stepCode ?? event.eventType, " ", _jsx(Text, { color: event.stepState === "FAILED" ? "red" : event.stepState === "SUCCEEDED" ? "green" : "yellow", children: event.stepState ?? "" }), " ", String(sanitizeOnboardingOutput(event.message))] }, event.sequenceNo)) : _jsx(Text, { dimColor: true, children: "No server events yet." })] });
425
+ }
426
+ async function loadBootstrap(client, sessionNo) {
427
+ const [capabilities, connections, stacks, templates, teams, systems, businessDomains, environments, session, events] = await Promise.all([
428
+ client.getCapabilities(),
429
+ settleCatalog("SCM connections", () => client.listScmConnections()),
430
+ settleCatalog("technology stacks", () => client.listTechnologyStacks({ status: "ACTIVE" })),
431
+ settleCatalog("templates", () => client.listTemplates()),
432
+ settleCatalog("teams", () => client.listCatalogOptions("team")),
433
+ settleCatalog("systems", () => client.listCatalogOptions("system")),
434
+ settleCatalog("business domains", () => client.listCatalogOptions("business-domain")),
435
+ settleCatalog("environments", () => client.listCatalogOptions("environment")),
436
+ sessionNo ? client.getSession(sessionNo) : Promise.resolve(undefined),
437
+ sessionNo ? client.getEvents(sessionNo, 0) : Promise.resolve({ items: [], nextSequence: 0 })
438
+ ]);
439
+ return {
440
+ capabilities,
441
+ catalog: {
442
+ connections: connections.items,
443
+ stacks: stacks.items,
444
+ templates: templates.items,
445
+ teams: teams.items,
446
+ systems: systems.items,
447
+ businessDomains: businessDomains.items,
448
+ environments: environments.items,
449
+ errors: [
450
+ connections.error,
451
+ stacks.error,
452
+ templates.error,
453
+ teams.error,
454
+ systems.error,
455
+ businessDomains.error,
456
+ environments.error
457
+ ].filter((item) => Boolean(item))
458
+ },
459
+ session,
460
+ events: events.items
461
+ };
462
+ }
463
+ async function settleCatalog(label, request) {
464
+ try {
465
+ return await request();
466
+ }
467
+ catch (error) {
468
+ return { items: [], error: `${label}: ${errorMessage(error)}` };
469
+ }
470
+ }
471
+ async function refreshSession(client, state) {
472
+ const sessionNo = state.session?.sessionNo;
473
+ if (!sessionNo)
474
+ throw new OnboardingError("Session is required.", "onboarding_session_required");
475
+ const [session, events] = await Promise.all([
476
+ client.getSession(sessionNo),
477
+ client.getEvents(sessionNo, state.afterSequence)
478
+ ]);
479
+ return { session, events: events.items };
480
+ }
481
+ function setViaReducerPreview(state, path, value) {
482
+ return reduceOnboardingTuiState(state, { type: "SET_DRAFT_VALUE", path, value }).draft;
483
+ }
484
+ function rawEditorValue(field, draft) {
485
+ const value = valueAtPath(draft, field.path);
486
+ if (field.kind === "json")
487
+ return JSON.stringify(value ?? {}, null, 0);
488
+ if (field.kind === "tiers")
489
+ return Array.isArray(value) ? value.join(",") : "";
490
+ return value == null ? "" : String(value);
491
+ }
492
+ function footerHelp(state, fields) {
493
+ if (state.phase === "SELECT_MODE")
494
+ return "↑↓ mode · Enter create · q quit";
495
+ if (state.phase !== "SESSION")
496
+ return "q quit";
497
+ const step = currentStepCode(state);
498
+ const fieldHelp = fields.length ? "↑↓ field · ←→ choose · Enter/e edit" : "";
499
+ const stepHelp = "[ previous · ] save+next · s save";
500
+ const action = step === "SOURCE_CONTROL" ? " · f repositories · n next page"
501
+ : step === "STANDARDIZATION" ? " · g assessment"
502
+ : step === "REVIEW" ? " · p preflight · a apply"
503
+ : step === "EXECUTION" ? " · r refresh · u resume · t retry · e reassess · x cancel"
504
+ : "";
505
+ return `${fieldHelp}${fieldHelp ? " · " : ""}${stepHelp}${action} · q quit`;
506
+ }
507
+ function errorMessage(error) {
508
+ return error instanceof Error ? error.message : String(error);
509
+ }
510
+ function isRevisionConflict(error) {
511
+ return error instanceof OnboardingError
512
+ && (error.status === 409 || /REVISION_CONFLICT/iu.test(error.code));
513
+ }
514
+ function draftMutable(state) {
515
+ return ["DRAFT", "READY", "PLANNED"].includes(state);
516
+ }
517
+ function isActiveState(state) {
518
+ return ["RUNNING", "WAITING_EXTERNAL", "VERIFYING"].includes(state);
519
+ }
520
+ function issueText(issue) {
521
+ if (issue && typeof issue === "object" && !Array.isArray(issue)) {
522
+ const item = issue;
523
+ return [item.path, item.code, item.message].filter(Boolean).map(String).join(" · ") || JSON.stringify(sanitizeOnboardingOutput(issue));
524
+ }
525
+ return String(sanitizeOnboardingOutput(issue));
526
+ }
527
+ function objectValue(value) {
528
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
529
+ }
530
+ function stringValue(value) {
531
+ return typeof value === "string" ? value : typeof value === "number" ? String(value) : "";
532
+ }
533
+ function deduplicateRepositories(items) {
534
+ const byExternalId = new Map();
535
+ for (const item of items) {
536
+ const externalId = stringValue(item.externalId ?? item.id);
537
+ if (externalId)
538
+ byExternalId.set(externalId, item);
539
+ }
540
+ return [...byExternalId.values()];
541
+ }
542
+ function shortStep(step) {
543
+ return step.replace("BASIC_INFORMATION", "BASIC").replace("SOURCE_CONTROL", "SCM").replace("STANDARDIZATION", "STANDARD");
544
+ }
545
+ function sessionColor(state) {
546
+ if (state === "COMPLETED")
547
+ return "green";
548
+ if (state === "FAILED" || state === "CANCELLED")
549
+ return "red";
550
+ if (state === "RUNNING" || state === "VERIFYING")
551
+ return "cyan";
552
+ return "yellow";
553
+ }
554
+ //# sourceMappingURL=tui.js.map