@osva-ai/cli 1.1.1 → 1.1.2

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 (181) hide show
  1. package/README.md +36 -0
  2. package/dist/bin/osva.js +26 -0
  3. package/dist/bin/osva.js.map +1 -1
  4. package/dist/commands/index.js +6 -0
  5. package/dist/commands/index.js.map +1 -1
  6. package/dist/doctor/redact.d.ts.map +1 -1
  7. package/dist/doctor/redact.js +3 -1
  8. package/dist/doctor/redact.js.map +1 -1
  9. package/dist/doctor/run-doctor.d.ts +2 -1
  10. package/dist/doctor/run-doctor.d.ts.map +1 -1
  11. package/dist/doctor/run-doctor.js +1 -1
  12. package/dist/doctor/run-doctor.js.map +1 -1
  13. package/dist/doctor/streaming-redact.d.ts +11 -0
  14. package/dist/doctor/streaming-redact.d.ts.map +1 -0
  15. package/dist/doctor/streaming-redact.js +29 -0
  16. package/dist/doctor/streaming-redact.js.map +1 -0
  17. package/dist/platform/compose-inspect.d.ts +9 -0
  18. package/dist/platform/compose-inspect.d.ts.map +1 -0
  19. package/dist/platform/compose-inspect.js +114 -0
  20. package/dist/platform/compose-inspect.js.map +1 -0
  21. package/dist/platform/doctor.d.ts +10 -0
  22. package/dist/platform/doctor.d.ts.map +1 -0
  23. package/dist/platform/doctor.js +154 -0
  24. package/dist/platform/doctor.js.map +1 -0
  25. package/dist/platform/format.d.ts +10 -0
  26. package/dist/platform/format.d.ts.map +1 -0
  27. package/dist/platform/format.js +73 -0
  28. package/dist/platform/format.js.map +1 -0
  29. package/dist/platform/index.d.ts +9 -0
  30. package/dist/platform/index.d.ts.map +1 -0
  31. package/dist/platform/index.js +143 -0
  32. package/dist/platform/index.js.map +1 -0
  33. package/dist/platform/lifecycle.d.ts +20 -0
  34. package/dist/platform/lifecycle.d.ts.map +1 -0
  35. package/dist/platform/lifecycle.js +136 -0
  36. package/dist/platform/lifecycle.js.map +1 -0
  37. package/dist/platform/logs.d.ts +12 -0
  38. package/dist/platform/logs.d.ts.map +1 -0
  39. package/dist/platform/logs.js +81 -0
  40. package/dist/platform/logs.js.map +1 -0
  41. package/dist/platform/readiness.d.ts +9 -0
  42. package/dist/platform/readiness.d.ts.map +1 -0
  43. package/dist/platform/readiness.js +58 -0
  44. package/dist/platform/readiness.js.map +1 -0
  45. package/dist/platform/resolve-installation.d.ts +5 -0
  46. package/dist/platform/resolve-installation.d.ts.map +1 -0
  47. package/dist/platform/resolve-installation.js +115 -0
  48. package/dist/platform/resolve-installation.js.map +1 -0
  49. package/dist/platform/services.d.ts +7 -0
  50. package/dist/platform/services.d.ts.map +1 -0
  51. package/dist/platform/services.js +21 -0
  52. package/dist/platform/services.js.map +1 -0
  53. package/dist/platform/status.d.ts +7 -0
  54. package/dist/platform/status.d.ts.map +1 -0
  55. package/dist/platform/status.js +60 -0
  56. package/dist/platform/status.js.map +1 -0
  57. package/dist/platform/types.d.ts +37 -0
  58. package/dist/platform/types.d.ts.map +1 -0
  59. package/dist/platform/types.js +8 -0
  60. package/dist/platform/types.js.map +1 -0
  61. package/dist/platform/upgrade/backup-policy.d.ts +4 -0
  62. package/dist/platform/upgrade/backup-policy.d.ts.map +1 -0
  63. package/dist/platform/upgrade/backup-policy.js +20 -0
  64. package/dist/platform/upgrade/backup-policy.js.map +1 -0
  65. package/dist/platform/upgrade/catalog.d.ts +26 -0
  66. package/dist/platform/upgrade/catalog.d.ts.map +1 -0
  67. package/dist/platform/upgrade/catalog.js +56 -0
  68. package/dist/platform/upgrade/catalog.js.map +1 -0
  69. package/dist/platform/upgrade/options.d.ts +8 -0
  70. package/dist/platform/upgrade/options.d.ts.map +1 -0
  71. package/dist/platform/upgrade/options.js +17 -0
  72. package/dist/platform/upgrade/options.js.map +1 -0
  73. package/dist/platform/upgrade/preflight.d.ts +25 -0
  74. package/dist/platform/upgrade/preflight.d.ts.map +1 -0
  75. package/dist/platform/upgrade/preflight.js +91 -0
  76. package/dist/platform/upgrade/preflight.js.map +1 -0
  77. package/dist/platform/upgrade/run-upgrade.d.ts +22 -0
  78. package/dist/platform/upgrade/run-upgrade.d.ts.map +1 -0
  79. package/dist/platform/upgrade/run-upgrade.js +253 -0
  80. package/dist/platform/upgrade/run-upgrade.js.map +1 -0
  81. package/dist/platform/upgrade/state.d.ts +31 -0
  82. package/dist/platform/upgrade/state.d.ts.map +1 -0
  83. package/dist/platform/upgrade/state.js +129 -0
  84. package/dist/platform/upgrade/state.js.map +1 -0
  85. package/dist/platform/upgrade/version.d.ts +11 -0
  86. package/dist/platform/upgrade/version.d.ts.map +1 -0
  87. package/dist/platform/upgrade/version.js +70 -0
  88. package/dist/platform/upgrade/version.js.map +1 -0
  89. package/dist/platform/upgrade-guard.d.ts +2 -0
  90. package/dist/platform/upgrade-guard.d.ts.map +1 -0
  91. package/dist/platform/upgrade-guard.js +12 -0
  92. package/dist/platform/upgrade-guard.js.map +1 -0
  93. package/dist/setup/acceptance-install.d.ts +15 -0
  94. package/dist/setup/acceptance-install.d.ts.map +1 -0
  95. package/dist/setup/acceptance-install.js +44 -0
  96. package/dist/setup/acceptance-install.js.map +1 -0
  97. package/dist/setup/atomic-write.d.ts +4 -0
  98. package/dist/setup/atomic-write.d.ts.map +1 -0
  99. package/dist/setup/atomic-write.js +19 -0
  100. package/dist/setup/atomic-write.js.map +1 -0
  101. package/dist/setup/bootstrap-capture.d.ts +9 -0
  102. package/dist/setup/bootstrap-capture.d.ts.map +1 -0
  103. package/dist/setup/bootstrap-capture.js +64 -0
  104. package/dist/setup/bootstrap-capture.js.map +1 -0
  105. package/dist/setup/compose-exec.d.ts +21 -0
  106. package/dist/setup/compose-exec.d.ts.map +1 -0
  107. package/dist/setup/compose-exec.js +55 -0
  108. package/dist/setup/compose-exec.js.map +1 -0
  109. package/dist/setup/compose-project.d.ts +3 -0
  110. package/dist/setup/compose-project.d.ts.map +1 -0
  111. package/dist/setup/compose-project.js +12 -0
  112. package/dist/setup/compose-project.js.map +1 -0
  113. package/dist/setup/compose-template-root.d.ts +3 -0
  114. package/dist/setup/compose-template-root.d.ts.map +1 -0
  115. package/dist/setup/compose-template-root.js +8 -0
  116. package/dist/setup/compose-template-root.js.map +1 -0
  117. package/dist/setup/distribution.d.ts +13 -0
  118. package/dist/setup/distribution.d.ts.map +1 -0
  119. package/dist/setup/distribution.js +55 -0
  120. package/dist/setup/distribution.js.map +1 -0
  121. package/dist/setup/env-file.d.ts +23 -0
  122. package/dist/setup/env-file.d.ts.map +1 -0
  123. package/dist/setup/env-file.js +141 -0
  124. package/dist/setup/env-file.js.map +1 -0
  125. package/dist/setup/format.d.ts +4 -0
  126. package/dist/setup/format.d.ts.map +1 -0
  127. package/dist/setup/format.js +58 -0
  128. package/dist/setup/format.js.map +1 -0
  129. package/dist/setup/index.d.ts +17 -0
  130. package/dist/setup/index.d.ts.map +1 -0
  131. package/dist/setup/index.js +45 -0
  132. package/dist/setup/index.js.map +1 -0
  133. package/dist/setup/install-path.d.ts +3 -0
  134. package/dist/setup/install-path.d.ts.map +1 -0
  135. package/dist/setup/install-path.js +26 -0
  136. package/dist/setup/install-path.js.map +1 -0
  137. package/dist/setup/installation-state.d.ts +29 -0
  138. package/dist/setup/installation-state.d.ts.map +1 -0
  139. package/dist/setup/installation-state.js +83 -0
  140. package/dist/setup/installation-state.js.map +1 -0
  141. package/dist/setup/installation-status.d.ts +14 -0
  142. package/dist/setup/installation-status.d.ts.map +1 -0
  143. package/dist/setup/installation-status.js +36 -0
  144. package/dist/setup/installation-status.js.map +1 -0
  145. package/dist/setup/materialize-install.d.ts +24 -0
  146. package/dist/setup/materialize-install.d.ts.map +1 -0
  147. package/dist/setup/materialize-install.js +108 -0
  148. package/dist/setup/materialize-install.js.map +1 -0
  149. package/dist/setup/probe-spawn.d.ts +16 -0
  150. package/dist/setup/probe-spawn.d.ts.map +1 -0
  151. package/dist/setup/probe-spawn.js +87 -0
  152. package/dist/setup/probe-spawn.js.map +1 -0
  153. package/dist/setup/read-options.d.ts +15 -0
  154. package/dist/setup/read-options.d.ts.map +1 -0
  155. package/dist/setup/read-options.js +69 -0
  156. package/dist/setup/read-options.js.map +1 -0
  157. package/dist/setup/run-onboarding.d.ts +22 -0
  158. package/dist/setup/run-onboarding.d.ts.map +1 -0
  159. package/dist/setup/run-onboarding.js +273 -0
  160. package/dist/setup/run-onboarding.js.map +1 -0
  161. package/dist/setup/run-provision.d.ts +17 -0
  162. package/dist/setup/run-provision.d.ts.map +1 -0
  163. package/dist/setup/run-provision.js +224 -0
  164. package/dist/setup/run-provision.js.map +1 -0
  165. package/dist/setup/run-setup.d.ts +26 -0
  166. package/dist/setup/run-setup.d.ts.map +1 -0
  167. package/dist/setup/run-setup.js +227 -0
  168. package/dist/setup/run-setup.js.map +1 -0
  169. package/dist/setup/secrets.d.ts +2 -0
  170. package/dist/setup/secrets.d.ts.map +1 -0
  171. package/dist/setup/secrets.js +8 -0
  172. package/dist/setup/secrets.js.map +1 -0
  173. package/dist/setup/setup-report.d.ts +19 -0
  174. package/dist/setup/setup-report.d.ts.map +1 -0
  175. package/dist/setup/setup-report.js +35 -0
  176. package/dist/setup/setup-report.js.map +1 -0
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +3 -3
  179. package/templates/compose-install/compose.yml +307 -0
  180. package/templates/compose-install/distribution.json +5 -0
  181. package/templates/compose-install/upgrade-catalog.json +39 -0
@@ -0,0 +1,141 @@
1
+ import { readFile } from "node:fs/promises";
2
+ /** Keys written to the installation `.env` and checked for host-shell conflicts. */
3
+ export const INSTALL_ENV_KEYS = [
4
+ "COMPOSE_PROJECT_NAME",
5
+ "OSVA_IMAGE",
6
+ "POSTGRES_PASSWORD",
7
+ "OSVA_AUTH_SECRET",
8
+ "OSVA_PUBLISH_WEB_PORT",
9
+ "OSVA_PUBLISH_MCP_PORT",
10
+ "OSVA_PUBLISH_CONSOLE_PORT",
11
+ "OSVA_AUTH_BASE_URL",
12
+ "OSVA_AUTH_TRUSTED_ORIGINS",
13
+ "OSVA_VALKEY_URL",
14
+ ];
15
+ export function parseDotEnv(contents) {
16
+ const values = new Map();
17
+ for (const line of contents.split(/\r?\n/)) {
18
+ const trimmed = line.trim();
19
+ if (trimmed.length === 0 || trimmed.startsWith("#")) {
20
+ continue;
21
+ }
22
+ const withoutExport = trimmed.startsWith("export ")
23
+ ? trimmed.slice("export ".length).trim()
24
+ : trimmed;
25
+ const eq = withoutExport.indexOf("=");
26
+ if (eq <= 0) {
27
+ continue;
28
+ }
29
+ const key = withoutExport.slice(0, eq).trim();
30
+ let value = withoutExport.slice(eq + 1).trim();
31
+ if ((value.startsWith('"') && value.endsWith('"')) ||
32
+ (value.startsWith("'") && value.endsWith("'"))) {
33
+ value = value.slice(1, -1);
34
+ }
35
+ values.set(key, value);
36
+ }
37
+ return values;
38
+ }
39
+ export async function readInstallEnvFile(envPath) {
40
+ try {
41
+ const contents = await readFile(envPath, "utf8");
42
+ return parseDotEnv(contents);
43
+ }
44
+ catch (error) {
45
+ if (error instanceof Error &&
46
+ "code" in error &&
47
+ error.code === "ENOENT") {
48
+ return undefined;
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ export function detectShellEnvConflicts(fileValues, shellEnv) {
54
+ const conflicts = [];
55
+ for (const key of INSTALL_ENV_KEYS) {
56
+ const shellRaw = key === "COMPOSE_PROJECT_NAME"
57
+ ? shellEnv.COMPOSE_PROJECT_NAME?.trim()
58
+ : shellEnv[key]?.trim();
59
+ if (shellRaw === undefined || shellRaw.length === 0) {
60
+ continue;
61
+ }
62
+ const fileValue = fileValues[key];
63
+ if (shellRaw !== fileValue) {
64
+ conflicts.push({ key, shellValue: shellRaw, fileValue });
65
+ }
66
+ }
67
+ return conflicts;
68
+ }
69
+ export function renderInstallEnvFile(values) {
70
+ const lines = [
71
+ "# Generated by `osva setup`. Do not commit this file.",
72
+ "# Host shell exports override these values during `docker compose` interpolation.",
73
+ "",
74
+ `COMPOSE_PROJECT_NAME=${values.COMPOSE_PROJECT_NAME}`,
75
+ "",
76
+ `OSVA_IMAGE=${values.OSVA_IMAGE}`,
77
+ `POSTGRES_PASSWORD=${values.POSTGRES_PASSWORD}`,
78
+ "",
79
+ "OSVA_VALKEY_URL=redis://valkey:6379",
80
+ "",
81
+ `OSVA_PUBLISH_WEB_PORT=${values.OSVA_PUBLISH_WEB_PORT}`,
82
+ `OSVA_PUBLISH_MCP_PORT=${values.OSVA_PUBLISH_MCP_PORT}`,
83
+ `OSVA_PUBLISH_CONSOLE_PORT=${values.OSVA_PUBLISH_CONSOLE_PORT}`,
84
+ "",
85
+ `OSVA_AUTH_SECRET=${values.OSVA_AUTH_SECRET}`,
86
+ `OSVA_AUTH_BASE_URL=${values.OSVA_AUTH_BASE_URL}`,
87
+ `OSVA_AUTH_TRUSTED_ORIGINS=${values.OSVA_AUTH_TRUSTED_ORIGINS}`,
88
+ "",
89
+ "OSVA_KNOWLEDGE_EMBEDDING_PROVIDER=DETERMINISTIC",
90
+ "OSVA_KNOWLEDGE_EMBEDDING_MODEL=deterministic-v1",
91
+ "OSVA_KNOWLEDGE_EMBEDDING_DIMENSIONS=384",
92
+ "",
93
+ ];
94
+ return `${lines.join("\n")}\n`;
95
+ }
96
+ export function buildInstallEnvValues(input) {
97
+ const webOrigin = `http://127.0.0.1:${String(input.webPort)}`;
98
+ const consoleOrigin = `http://127.0.0.1:${String(input.consolePort)}`;
99
+ const existing = input.existing;
100
+ const postgresPassword = existing?.get("POSTGRES_PASSWORD")?.trim() || input.generateSecret();
101
+ const authSecret = existing?.get("OSVA_AUTH_SECRET")?.trim() || input.generateSecret();
102
+ const imageRef = existing?.get("OSVA_IMAGE")?.trim() || input.imageRef;
103
+ assertRequiredSecret("POSTGRES_PASSWORD", postgresPassword);
104
+ assertRequiredSecret("OSVA_AUTH_SECRET", authSecret);
105
+ const composeProjectName = existing?.get("COMPOSE_PROJECT_NAME")?.trim() || input.composeProjectName;
106
+ return {
107
+ COMPOSE_PROJECT_NAME: composeProjectName,
108
+ OSVA_IMAGE: imageRef,
109
+ POSTGRES_PASSWORD: postgresPassword,
110
+ OSVA_AUTH_SECRET: authSecret,
111
+ OSVA_PUBLISH_WEB_PORT: String(input.webPort),
112
+ OSVA_PUBLISH_MCP_PORT: String(input.mcpPort),
113
+ OSVA_PUBLISH_CONSOLE_PORT: String(input.consolePort),
114
+ OSVA_AUTH_BASE_URL: existing?.get("OSVA_AUTH_BASE_URL")?.trim() || webOrigin,
115
+ OSVA_AUTH_TRUSTED_ORIGINS: mergeInstallTrustedOrigins(existing?.get("OSVA_AUTH_TRUSTED_ORIGINS"), webOrigin, consoleOrigin),
116
+ OSVA_VALKEY_URL: existing?.get("OSVA_VALKEY_URL")?.trim() || "redis://valkey:6379",
117
+ };
118
+ }
119
+ function mergeInstallTrustedOrigins(existing, webOrigin, consoleOrigin) {
120
+ const required = [webOrigin, consoleOrigin];
121
+ const merged = new Set();
122
+ for (const origin of required) {
123
+ merged.add(origin);
124
+ }
125
+ const raw = existing?.trim();
126
+ if (raw !== undefined && raw.length > 0) {
127
+ for (const segment of raw.split(",")) {
128
+ const origin = segment.trim();
129
+ if (origin.length > 0) {
130
+ merged.add(origin);
131
+ }
132
+ }
133
+ }
134
+ return [...merged].join(",");
135
+ }
136
+ function assertRequiredSecret(name, value) {
137
+ if (value.length < 32) {
138
+ throw new Error(`${name} must be at least 32 characters for installation.`);
139
+ }
140
+ }
141
+ //# sourceMappingURL=env-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../src/setup/env-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SetupReport } from "./setup-report.js";
2
+ export declare function formatSetupHuman(report: SetupReport): string;
3
+ export declare function formatSetupJson(report: SetupReport): string;
4
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/setup/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqD5D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,58 @@
1
+ export function formatSetupHuman(report) {
2
+ const lines = [
3
+ "OSVA Setup",
4
+ "",
5
+ "Preflight checks and local Compose provisioning for self-hosted OSVA.",
6
+ report.installDir !== undefined
7
+ ? `Installation directory: ${report.installDir}`
8
+ : undefined,
9
+ "",
10
+ ].filter((line) => line !== undefined);
11
+ for (const check of report.checks) {
12
+ const status = check.status.padEnd(4, " ");
13
+ const id = check.id.padEnd(26, " ");
14
+ lines.push(`${status} ${id} ${check.message}`);
15
+ if (check.remediation !== undefined) {
16
+ lines.push(` → ${check.remediation}`);
17
+ }
18
+ }
19
+ lines.push("");
20
+ lines.push(`Result: ${report.result.toUpperCase()}`);
21
+ if (report.platformReady === true) {
22
+ lines.push("Platform services: READY");
23
+ }
24
+ else if (report.phase === "provision") {
25
+ lines.push("Platform services: NOT READY");
26
+ }
27
+ if (report.consoleReady === true) {
28
+ lines.push("Console: READY");
29
+ }
30
+ else if (report.phase === "provision") {
31
+ lines.push("Console: NOT READY");
32
+ }
33
+ if (report.administratorBootstrapped === true) {
34
+ lines.push("Administrator bootstrap: DONE");
35
+ }
36
+ else if (report.phase === "provision") {
37
+ lines.push("Administrator bootstrap: PENDING");
38
+ }
39
+ if (report.installationComplete === true) {
40
+ lines.push("Installation: COMPLETE");
41
+ }
42
+ else {
43
+ lines.push("Installation: NOT COMPLETE (complete Console sign-in and Agent Studio onboarding).");
44
+ }
45
+ if (report.setupTokenForOperator !== undefined) {
46
+ lines.push("");
47
+ lines.push("One-time administrator password setup token (single use):");
48
+ lines.push(report.setupTokenForOperator);
49
+ lines.push("");
50
+ lines.push("Enter this token at the Console /setup page. It is not stored in installation files or JSON output.");
51
+ }
52
+ return `${lines.join("\n")}\n`;
53
+ }
54
+ export function formatSetupJson(report) {
55
+ const safeReport = Object.fromEntries(Object.entries(report).filter(([key]) => key !== "setupTokenForOperator"));
56
+ return `${JSON.stringify(safeReport, null, 2)}\n`;
57
+ }
58
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/setup/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type SetupProbeDependencies } from "./run-setup.js";
2
+ export type { SetupOptions } from "./read-options.js";
3
+ export type { SetupProbeDependencies } from "./run-setup.js";
4
+ export type { SetupReport } from "./setup-report.js";
5
+ export { DEFAULT_SETUP_SUBPROCESS_TIMEOUT_MS, runSetupPipeline, setupExitCode, } from "./run-setup.js";
6
+ export { parsePortNumber, readSetupOptions } from "./read-options.js";
7
+ export { runSetupProvision } from "./run-provision.js";
8
+ export { buildInstallEnvValues, detectShellEnvConflicts, parseDotEnv, renderInstallEnvFile, } from "./env-file.js";
9
+ export { materializeInstallation } from "./materialize-install.js";
10
+ export { composeBaseArgs, composeCommandIncludesDestructiveVolumeRemoval, } from "./compose-exec.js";
11
+ export { assertPinnedImageRef, loadComposeDistribution, } from "./distribution.js";
12
+ export { defaultInstallDir, resolveInstallDir } from "./install-path.js";
13
+ export interface SetupCommandDependencies extends SetupProbeDependencies {
14
+ readonly processEnv?: NodeJS.ProcessEnv;
15
+ }
16
+ export declare function runSetupCommand(flags: Readonly<Record<string, string | boolean>>, processEnv?: NodeJS.ProcessEnv, deps?: SetupCommandDependencies): Promise<number>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,mCAAmC,EACnC,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,eAAe,EACf,8CAA8C,GAC/C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzC;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EACjD,UAAU,GAAE,MAAM,CAAC,UAAwB,EAC3C,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -0,0 +1,45 @@
1
+ import { writeStdout } from "../stdout.js";
2
+ import { formatSetupHuman, formatSetupJson } from "./format.js";
3
+ import { readSetupOptions } from "./read-options.js";
4
+ import { runSetupProvision } from "./run-provision.js";
5
+ import { runSetupPipeline, setupExitCode, } from "./run-setup.js";
6
+ import { mergeSetupReport } from "./setup-report.js";
7
+ export { DEFAULT_SETUP_SUBPROCESS_TIMEOUT_MS, runSetupPipeline, setupExitCode, } from "./run-setup.js";
8
+ export { parsePortNumber, readSetupOptions } from "./read-options.js";
9
+ export { runSetupProvision } from "./run-provision.js";
10
+ export { buildInstallEnvValues, detectShellEnvConflicts, parseDotEnv, renderInstallEnvFile, } from "./env-file.js";
11
+ export { materializeInstallation } from "./materialize-install.js";
12
+ export { composeBaseArgs, composeCommandIncludesDestructiveVolumeRemoval, } from "./compose-exec.js";
13
+ export { assertPinnedImageRef, loadComposeDistribution, } from "./distribution.js";
14
+ export { defaultInstallDir, resolveInstallDir } from "./install-path.js";
15
+ export async function runSetupCommand(flags, processEnv = process.env, deps = {}) {
16
+ const options = readSetupOptions(flags, processEnv, deps.platform);
17
+ const preflight = await runSetupPipeline(options, {
18
+ ...deps,
19
+ cwdForDisk: options.installDir,
20
+ });
21
+ const json = flags.json === true;
22
+ if (preflight.result === "fail" || options.preflightOnly) {
23
+ const report = mergeSetupReport({
24
+ preflight,
25
+ installDir: options.installDir,
26
+ phase: "preflight",
27
+ });
28
+ await writeStdout(json ? formatSetupJson(report) : formatSetupHuman(report));
29
+ return setupExitCode(report);
30
+ }
31
+ const provision = await runSetupProvision(options, {
32
+ spawn: deps.spawn,
33
+ processEnv,
34
+ });
35
+ const report = mergeSetupReport({
36
+ preflight,
37
+ provisionChecks: provision.checks,
38
+ installDir: options.installDir,
39
+ phase: "provision",
40
+ setupTokenForOperator: provision.setupTokenForOperator,
41
+ });
42
+ await writeStdout(json ? formatSetupJson(report) : formatSetupHuman(report));
43
+ return setupExitCode(report);
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,aAAa,GAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKrD,OAAO,EACL,mCAAmC,EACnC,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,eAAe,EACf,8CAA8C,GAC/C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMzE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAiD,EACjD,aAAgC,OAAO,CAAC,GAAG,EAC3C,OAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;QAChD,GAAG,IAAI;QACP,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,SAAS;YACT,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,WAAW,CACf,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC1D,CAAC;QACF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE;QACjD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU;KACX,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,SAAS;QACT,eAAe,EAAE,SAAS,CAAC,MAAM;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,WAAW;QAClB,qBAAqB,EAAE,SAAS,CAAC,qBAAqB;KACvD,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function defaultInstallDir(platform?: NodeJS.Platform): string;
2
+ export declare function resolveInstallDir(flags: Readonly<Record<string, string | boolean>>, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string;
3
+ //# sourceMappingURL=install-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-path.d.ts","sourceRoot":"","sources":["../../src/setup/install-path.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAC/B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EACjD,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAaR"}
@@ -0,0 +1,26 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ export function defaultInstallDir(platform = process.platform) {
4
+ if (platform === "win32") {
5
+ const localAppData = process.env.LOCALAPPDATA?.trim();
6
+ if (localAppData !== undefined && localAppData.length > 0) {
7
+ return path.join(localAppData, "OSVA", "install");
8
+ }
9
+ return path.join(os.homedir(), "AppData", "Local", "OSVA", "install");
10
+ }
11
+ return path.join(os.homedir(), ".osva", "install");
12
+ }
13
+ export function resolveInstallDir(flags, env = process.env, platform = process.platform) {
14
+ const flagValue = flags["install-dir"];
15
+ if (typeof flagValue === "boolean") {
16
+ throw new Error("--install-dir requires a directory path.");
17
+ }
18
+ const raw = typeof flagValue === "string" && flagValue.trim().length > 0
19
+ ? flagValue.trim()
20
+ : env.OSVA_INSTALL_DIR?.trim();
21
+ if (raw === undefined || raw.length === 0) {
22
+ return path.resolve(defaultInstallDir(platform));
23
+ }
24
+ return path.resolve(raw);
25
+ }
26
+ //# sourceMappingURL=install-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-path.js","sourceRoot":"","sources":["../../src/setup/install-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,iBAAiB,CAC/B,WAA4B,OAAO,CAAC,QAAQ;IAE5C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QACtD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAiD,EACjD,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA4B,OAAO,CAAC,QAAQ;IAE5C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,GAAG,GACP,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;QAClB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,29 @@
1
+ export declare const INSTALLATION_MARKER_RELATIVE: string;
2
+ export interface InstallationMarker {
3
+ readonly schemaVersion: 1;
4
+ readonly platformVersion: string;
5
+ readonly imageRef: string;
6
+ readonly cliVersion: string;
7
+ readonly installDir: string;
8
+ readonly composeProjectName: string;
9
+ readonly createdAt: string;
10
+ readonly updatedAt: string;
11
+ }
12
+ export type InstallDirectoryKind = "missing" | "empty" | "osva_installation" | "foreign";
13
+ export interface InstallDirectoryAssessment {
14
+ readonly kind: InstallDirectoryKind;
15
+ readonly marker: InstallationMarker | undefined;
16
+ readonly foreignEntries: readonly string[];
17
+ }
18
+ export declare function assessInstallDirectory(installDir: string): Promise<InstallDirectoryAssessment>;
19
+ export declare function readInstallationMarker(markerPath: string): Promise<InstallationMarker | undefined>;
20
+ export declare function renderInstallationMarker(input: {
21
+ readonly platformVersion: string;
22
+ readonly imageRef: string;
23
+ readonly cliVersion: string;
24
+ readonly installDir: string;
25
+ readonly composeProjectName: string;
26
+ readonly existing?: InstallationMarker;
27
+ }): InstallationMarker;
28
+ export declare function pathIsDirectory(targetPath: string): Promise<boolean>;
29
+ //# sourceMappingURL=installation-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-state.d.ts","sourceRoot":"","sources":["../../src/setup/installation-state.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B,QAGxC,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,oBAAoB,GAC9B,SAAS,GAAG,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,0BAA0B,CAAC,CAyCrC;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAkBzC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC,GAAG,kBAAkB,CAYrB;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1E"}
@@ -0,0 +1,83 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export const INSTALLATION_MARKER_RELATIVE = path.join(".osva", "installation.json");
4
+ export async function assessInstallDirectory(installDir) {
5
+ let entries;
6
+ try {
7
+ entries = await readdir(installDir);
8
+ }
9
+ catch (error) {
10
+ if (error instanceof Error &&
11
+ "code" in error &&
12
+ error.code === "ENOENT") {
13
+ return { kind: "missing", marker: undefined, foreignEntries: [] };
14
+ }
15
+ throw error;
16
+ }
17
+ if (entries.length === 0) {
18
+ return { kind: "empty", marker: undefined, foreignEntries: [] };
19
+ }
20
+ const markerPath = path.join(installDir, INSTALLATION_MARKER_RELATIVE);
21
+ const marker = await readInstallationMarker(markerPath);
22
+ const recognized = new Set([
23
+ ".osva",
24
+ "compose.yml",
25
+ ".env",
26
+ ".env.example",
27
+ "README.md",
28
+ ".acceptance-bootstrap-key",
29
+ ".acceptance-setup-token",
30
+ ]);
31
+ const foreignEntries = entries.filter((entry) => !recognized.has(entry));
32
+ if (marker !== undefined) {
33
+ return { kind: "osva_installation", marker, foreignEntries };
34
+ }
35
+ if (foreignEntries.length > 0) {
36
+ return { kind: "foreign", marker: undefined, foreignEntries };
37
+ }
38
+ if (entries.every((entry) => recognized.has(entry))) {
39
+ return { kind: "empty", marker: undefined, foreignEntries: [] };
40
+ }
41
+ return { kind: "foreign", marker: undefined, foreignEntries: entries };
42
+ }
43
+ export async function readInstallationMarker(markerPath) {
44
+ try {
45
+ const raw = await readFile(markerPath, "utf8");
46
+ const parsed = JSON.parse(raw);
47
+ if (parsed.schemaVersion !== 1) {
48
+ return undefined;
49
+ }
50
+ return parsed;
51
+ }
52
+ catch (error) {
53
+ if (error instanceof Error &&
54
+ "code" in error &&
55
+ error.code === "ENOENT") {
56
+ return undefined;
57
+ }
58
+ return undefined;
59
+ }
60
+ }
61
+ export function renderInstallationMarker(input) {
62
+ const now = new Date().toISOString();
63
+ return {
64
+ schemaVersion: 1,
65
+ platformVersion: input.platformVersion,
66
+ imageRef: input.imageRef,
67
+ cliVersion: input.cliVersion,
68
+ installDir: input.installDir,
69
+ composeProjectName: input.composeProjectName,
70
+ createdAt: input.existing?.createdAt ?? now,
71
+ updatedAt: now,
72
+ };
73
+ }
74
+ export async function pathIsDirectory(targetPath) {
75
+ try {
76
+ const info = await stat(targetPath);
77
+ return info.isDirectory();
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ //# sourceMappingURL=installation-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-state.js","sourceRoot":"","sources":["../../src/setup/installation-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { WorkspaceId } from "@osva-ai/contracts";
2
+ export interface InstallationStatusSnapshot {
3
+ readonly schemaVersion: 1;
4
+ readonly workspaceCount: number;
5
+ readonly apiKeyCount: number;
6
+ readonly organizationCount: number;
7
+ readonly humanUserCount: number;
8
+ readonly pendingSetupUserCount: number;
9
+ readonly unlinkedWorkspaceIds: readonly WorkspaceId[];
10
+ }
11
+ export type AdministratorBootstrapPhase = "fresh_installation" | "workspace_without_human_administrator" | "administrator_pending_password_setup" | "administrator_ready" | "multiple_unlinked_workspaces" | "ambiguous_workspace_state";
12
+ export declare function parseInstallationStatusJson(stdout: string): InstallationStatusSnapshot;
13
+ export declare function classifyAdministratorBootstrapPhase(status: InstallationStatusSnapshot): AdministratorBootstrapPhase;
14
+ //# sourceMappingURL=installation-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-status.d.ts","sourceRoot":"","sources":["../../src/setup/installation-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,WAAW,EAAE,CAAC;CACvD;AAED,MAAM,MAAM,2BAA2B,GACnC,oBAAoB,GACpB,uCAAuC,GACvC,sCAAsC,GACtC,qBAAqB,GACrB,8BAA8B,GAC9B,2BAA2B,CAAC;AAEhC,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,GACb,0BAA0B,CAc5B;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,0BAA0B,GACjC,2BAA2B,CA2B7B"}
@@ -0,0 +1,36 @@
1
+ export function parseInstallationStatusJson(stdout) {
2
+ const trimmed = stdout.trim();
3
+ const jsonLine = trimmed
4
+ .split(/\r?\n/)
5
+ .map((line) => line.trim())
6
+ .find((line) => line.startsWith("{")) ?? trimmed;
7
+ const parsed = JSON.parse(jsonLine);
8
+ if (parsed.schemaVersion !== 1) {
9
+ throw new Error(`Unsupported installation status schema version ${String(parsed.schemaVersion)}.`);
10
+ }
11
+ return parsed;
12
+ }
13
+ export function classifyAdministratorBootstrapPhase(status) {
14
+ if (status.organizationCount > 0) {
15
+ if (status.pendingSetupUserCount > 0) {
16
+ return "administrator_pending_password_setup";
17
+ }
18
+ if (status.humanUserCount > 0) {
19
+ return "administrator_ready";
20
+ }
21
+ }
22
+ if (status.unlinkedWorkspaceIds.length === 0 && status.workspaceCount > 0) {
23
+ return "administrator_ready";
24
+ }
25
+ if (status.unlinkedWorkspaceIds.length > 1) {
26
+ return "multiple_unlinked_workspaces";
27
+ }
28
+ if (status.unlinkedWorkspaceIds.length === 1) {
29
+ return "workspace_without_human_administrator";
30
+ }
31
+ if (status.workspaceCount === 0 && status.apiKeyCount === 0) {
32
+ return "fresh_installation";
33
+ }
34
+ return "ambiguous_workspace_state";
35
+ }
36
+ //# sourceMappingURL=installation-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-status.js","sourceRoot":"","sources":["../../src/setup/installation-status.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,2BAA2B,CACzC,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,QAAQ,GACZ,OAAO;SACJ,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA+B,CAAC;IAClE,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,MAAkC;IAElC,IAAI,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,sCAAsC,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,qBAAqB,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,uCAAuC,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,2BAA2B,CAAC;AACrC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ComposeDistribution } from "./distribution.js";
2
+ import { type InstallEnvValues } from "./env-file.js";
3
+ import { type InstallDirectoryAssessment } from "./installation-state.js";
4
+ import type { SetupOptions } from "./read-options.js";
5
+ export interface MaterializeInstallResult {
6
+ readonly assessment: InstallDirectoryAssessment;
7
+ readonly envValues: InstallEnvValues;
8
+ readonly envPath: string;
9
+ readonly composePath: string;
10
+ readonly markerPath: string;
11
+ readonly preservedSecrets: boolean;
12
+ readonly wroteCompose: boolean;
13
+ readonly wroteEnv: boolean;
14
+ }
15
+ export declare function materializeInstallation(input: {
16
+ readonly options: SetupOptions;
17
+ readonly distribution: ComposeDistribution;
18
+ readonly processEnv: NodeJS.ProcessEnv;
19
+ }): Promise<MaterializeInstallResult>;
20
+ export declare class MaterializeInstallError extends Error {
21
+ readonly code: "foreign_directory" | "env_conflict";
22
+ constructor(code: "foreign_directory" | "env_conflict", message: string);
23
+ }
24
+ //# sourceMappingURL=materialize-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materialize-install.d.ts","sourceRoot":"","sources":["../../src/setup/materialize-install.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAIL,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CACxC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA6EpC;AA6CD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,cAAc,CAAC;gBAExC,IAAI,EAAE,mBAAmB,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM;CAIxE"}