@numa-tech/numa 1.22.1 → 1.23.1
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.
- package/README.md +14 -1
- package/dist/ai-registry/commands.js +5 -2
- package/dist/ai-registry/commands.js.map +1 -1
- package/dist/ai-registry/namespace.d.ts +4 -0
- package/dist/ai-registry/namespace.js +17 -3
- package/dist/ai-registry/namespace.js.map +1 -1
- package/dist/ai-registry/skill-installer.js +35 -5
- package/dist/ai-registry/skill-installer.js.map +1 -1
- package/dist/ai-registry/tui.js +15 -4
- package/dist/ai-registry/tui.js.map +1 -1
- package/dist/authorization/application-client.d.ts +808 -7
- package/dist/authorization/application-client.js +36 -8
- package/dist/authorization/application-client.js.map +1 -1
- package/dist/authorization/application-commands.d.ts +3 -1
- package/dist/authorization/application-commands.js +8 -2
- package/dist/authorization/application-commands.js.map +1 -1
- package/dist/authorization/application-schemas.d.ts +235 -14
- package/dist/authorization/application-schemas.js +76 -15
- package/dist/authorization/application-schemas.js.map +1 -1
- package/dist/authorization/environment-governance-client.d.ts +155 -0
- package/dist/authorization/environment-governance-client.js +86 -0
- package/dist/authorization/environment-governance-client.js.map +1 -0
- package/dist/authorization/environment-governance-commands.d.ts +6 -0
- package/dist/authorization/environment-governance-commands.js +58 -0
- package/dist/authorization/environment-governance-commands.js.map +1 -0
- package/dist/authorization/environment-governance-schemas.d.ts +79 -0
- package/dist/authorization/environment-governance-schemas.js +15 -0
- package/dist/authorization/environment-governance-schemas.js.map +1 -0
- package/dist/authorization/runtime-artifact-client.d.ts +36 -0
- package/dist/authorization/runtime-artifact-client.js +135 -0
- package/dist/authorization/runtime-artifact-client.js.map +1 -0
- package/dist/authorization/runtime-artifact-commands.d.ts +6 -0
- package/dist/authorization/runtime-artifact-commands.js +29 -0
- package/dist/authorization/runtime-artifact-commands.js.map +1 -0
- package/dist/command-catalog.js +254 -0
- package/dist/command-catalog.js.map +1 -1
- package/dist/compatibility/index.d.ts +1 -0
- package/dist/compatibility/index.js +3 -0
- package/dist/compatibility/index.js.map +1 -0
- package/dist/compatibility/registry-instance.d.ts +17 -0
- package/dist/compatibility/registry-instance.js +93 -0
- package/dist/compatibility/registry-instance.js.map +1 -0
- package/dist/gitops/client.d.ts +359 -0
- package/dist/gitops/client.js +164 -1
- package/dist/gitops/client.js.map +1 -1
- package/dist/gitops/commands.js +46 -3
- package/dist/gitops/commands.js.map +1 -1
- package/dist/gitops/schemas.d.ts +35 -0
- package/dist/gitops/schemas.js +23 -0
- package/dist/gitops/schemas.js.map +1 -1
- package/dist/gitops/workload-commands.d.ts +9 -0
- package/dist/gitops/workload-commands.js +190 -0
- package/dist/gitops/workload-commands.js.map +1 -0
- package/dist/gitops/workload-input.d.ts +22 -0
- package/dist/gitops/workload-input.js +125 -0
- package/dist/gitops/workload-input.js.map +1 -0
- package/dist/gitops/workload-schemas.d.ts +217 -0
- package/dist/gitops/workload-schemas.js +68 -0
- package/dist/gitops/workload-schemas.js.map +1 -0
- package/dist/interactive/prompts.d.ts +4 -2
- package/dist/interactive/prompts.js +36 -4
- package/dist/interactive/prompts.js.map +1 -1
- package/dist/interactive/registry-namespace.d.ts +7 -0
- package/dist/interactive/registry-namespace.js +51 -0
- package/dist/interactive/registry-namespace.js.map +1 -0
- package/dist/interactive/registry.js +35 -26
- package/dist/interactive/registry.js.map +1 -1
- package/docs/authorization-configuration-publication.md +4 -1
- package/docs/environment-configuration-publication.md +95 -0
- package/docs/gitops-configuration.md +122 -0
- package/package.json +7 -5
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { GitOpsError, redactGitOpsText } from "./errors.js";
|
|
3
|
+
const ROOTS = new Set(["/replicaCount", "/resources", "/env", "/envs", "/envFrom", "/service", "/ingress",
|
|
4
|
+
"/livenessProbe", "/readinessProbe", "/startupProbe", "/image/repository", "/image/tag"]);
|
|
5
|
+
const SENSITIVE = /(?:password|passwd|secret|token|credential|api.?key|access.?key|private.?key)/iu;
|
|
6
|
+
const SECRET_REFERENCES = new Set(["secretKeyRef", "secretRef"]);
|
|
7
|
+
const SECRET_REFERENCE_NAMES = new Set(["secretName", "existingSecret"]);
|
|
8
|
+
const MAX_BYTES = 1024 * 1024;
|
|
9
|
+
export function workloadInteger(value, name, minimum = 0) {
|
|
10
|
+
if (!/^(0|[1-9][0-9]*)$/u.test(value) || !Number.isSafeInteger(Number(value)) || Number(value) < minimum) {
|
|
11
|
+
throw new GitOpsError(`${name} must be an integer of at least ${minimum}.`, "GITOPS_CLI_INPUT_INVALID");
|
|
12
|
+
}
|
|
13
|
+
return Number(value);
|
|
14
|
+
}
|
|
15
|
+
export async function readWorkloadJson(path) {
|
|
16
|
+
try {
|
|
17
|
+
const info = await stat(path);
|
|
18
|
+
if (!info.isFile() || info.size > MAX_BYTES)
|
|
19
|
+
throw new Error("size");
|
|
20
|
+
const text = await readFile(path, "utf8");
|
|
21
|
+
if (Buffer.byteLength(text) > MAX_BYTES)
|
|
22
|
+
throw new Error("size");
|
|
23
|
+
return JSON.parse(text);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
throw new GitOpsError("Configuration input must be a valid JSON file no larger than 1 MiB.", "GITOPS_SPEC_INVALID");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function rejectSecrets(value, reference = false) {
|
|
30
|
+
if (Array.isArray(value)) {
|
|
31
|
+
value.forEach((item) => rejectSecrets(item));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!value || typeof value !== "object")
|
|
35
|
+
return;
|
|
36
|
+
const object = value;
|
|
37
|
+
if (String(object.kind ?? "").toLowerCase() === "secret" && ("data" in object || "stringData" in object)) {
|
|
38
|
+
throw new GitOpsError("Secret values are forbidden; supply an existing Secret reference.", "GITOPS_SECRET_DATA_FORBIDDEN");
|
|
39
|
+
}
|
|
40
|
+
if (typeof object.name === "string" && SENSITIVE.test(object.name) && "value" in object) {
|
|
41
|
+
throw new GitOpsError("Sensitive environment values require valueFrom.secretKeyRef.", "GITOPS_SECRET_DATA_FORBIDDEN");
|
|
42
|
+
}
|
|
43
|
+
for (const [key, item] of Object.entries(object)) {
|
|
44
|
+
if (["__proto__", "constructor", "prototype"].includes(key)) {
|
|
45
|
+
throw new GitOpsError("Unsafe configuration key.", "GITOPS_SPEC_INVALID");
|
|
46
|
+
}
|
|
47
|
+
if (!reference && SENSITIVE.test(key) && !SECRET_REFERENCES.has(key) && !SECRET_REFERENCE_NAMES.has(key) && item != null && typeof item !== "object") {
|
|
48
|
+
throw new GitOpsError("Sensitive configuration values require an existing Secret reference.", "GITOPS_SECRET_DATA_FORBIDDEN");
|
|
49
|
+
}
|
|
50
|
+
rejectSecrets(item, SECRET_REFERENCES.has(key));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function validateWorkloadChanges(input) {
|
|
54
|
+
if (!Array.isArray(input) || input.length === 0 || input.length > 40) {
|
|
55
|
+
throw new GitOpsError("changes must be a non-empty JSON array with at most 40 pointer/value entries.", "GITOPS_SPEC_INVALID");
|
|
56
|
+
}
|
|
57
|
+
const pointers = [];
|
|
58
|
+
return input.map((raw) => {
|
|
59
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
60
|
+
throw new GitOpsError("Every change must contain pointer and value.", "GITOPS_SPEC_INVALID");
|
|
61
|
+
}
|
|
62
|
+
const change = raw;
|
|
63
|
+
if (Object.keys(change).some((key) => key !== "pointer" && key !== "value") || !Object.hasOwn(change, "value")) {
|
|
64
|
+
throw new GitOpsError("Only pointer and value are accepted in a change.", "GITOPS_SPEC_INVALID");
|
|
65
|
+
}
|
|
66
|
+
const pointer = change.pointer;
|
|
67
|
+
if (typeof pointer !== "string" || (!ROOTS.has(pointer)
|
|
68
|
+
&& !/^\/resources\/(?:requests|limits)\/(?:cpu|memory|ephemeral-storage)$/u.test(pointer)
|
|
69
|
+
&& !/^\/service\/(?:type|port|targetPort)$/u.test(pointer))) {
|
|
70
|
+
throw new GitOpsError("Unsupported configuration pointer; use replicas, resources, env, probes, service, ingress or image fields.", "GITOPS_SPEC_INVALID");
|
|
71
|
+
}
|
|
72
|
+
if (pointers.some((previous) => previous === pointer || previous.startsWith(`${pointer}/`) || pointer.startsWith(`${previous}/`))) {
|
|
73
|
+
throw new GitOpsError("Duplicate or overlapping configuration pointers are not allowed.", "GITOPS_SPEC_INVALID");
|
|
74
|
+
}
|
|
75
|
+
pointers.push(pointer);
|
|
76
|
+
if (pointer === "/replicaCount" && (!Number.isInteger(change.value) || Number(change.value) < 0 || Number(change.value) > 10000)) {
|
|
77
|
+
throw new GitOpsError("replicas must be an integer between 0 and 10000.", "GITOPS_CLI_INPUT_INVALID");
|
|
78
|
+
}
|
|
79
|
+
if (pointer.startsWith("/image/") && (typeof change.value !== "string" || !change.value.trim() || /[\s\u0000-\u001f]/u.test(change.value))) {
|
|
80
|
+
throw new GitOpsError("Image repository/tag must be a non-empty value without whitespace.", "GITOPS_CLI_INPUT_INVALID");
|
|
81
|
+
}
|
|
82
|
+
rejectSecrets(change.value);
|
|
83
|
+
return { pointer, value: change.value };
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export async function workloadChanges(options) {
|
|
87
|
+
const changes = [];
|
|
88
|
+
if (options.changes) {
|
|
89
|
+
const input = await readWorkloadJson(options.changes);
|
|
90
|
+
if (!Array.isArray(input))
|
|
91
|
+
throw new GitOpsError("changes file must contain an array.", "GITOPS_SPEC_INVALID");
|
|
92
|
+
changes.push(...input);
|
|
93
|
+
}
|
|
94
|
+
if (options.replicas != null)
|
|
95
|
+
changes.push({ pointer: "/replicaCount", value: workloadInteger(options.replicas, "replicas") });
|
|
96
|
+
if (options.imageRepository != null)
|
|
97
|
+
changes.push({ pointer: "/image/repository", value: options.imageRepository });
|
|
98
|
+
if (options.imageTag != null)
|
|
99
|
+
changes.push({ pointer: "/image/tag", value: options.imageTag });
|
|
100
|
+
for (const key of ["resources", "env", "envs", "envFrom", "service", "ingress", "livenessProbe", "readinessProbe", "startupProbe"]) {
|
|
101
|
+
if (options[key])
|
|
102
|
+
changes.push({ pointer: `/${key}`, value: await readWorkloadJson(options[key]) });
|
|
103
|
+
}
|
|
104
|
+
return validateWorkloadChanges(changes);
|
|
105
|
+
}
|
|
106
|
+
/** Preserve user configuration keys while converting only DTO metadata to CLI snake_case. */
|
|
107
|
+
export function workloadPublicOutput(value, opaque = false) {
|
|
108
|
+
if (typeof value === "string")
|
|
109
|
+
return redactGitOpsText(value);
|
|
110
|
+
if (Array.isArray(value))
|
|
111
|
+
return value.map((item) => workloadPublicOutput(item, opaque));
|
|
112
|
+
if (!value || typeof value !== "object")
|
|
113
|
+
return value;
|
|
114
|
+
const object = value;
|
|
115
|
+
const sensitiveValue = (typeof object.name === "string" && SENSITIVE.test(object.name))
|
|
116
|
+
|| (typeof object.pointer === "string" && SENSITIVE.test(object.pointer));
|
|
117
|
+
return Object.fromEntries(Object.entries(object).map(([key, item]) => {
|
|
118
|
+
const outputKey = opaque ? key : key.replace(/([a-z0-9])([A-Z])/gu, "$1_$2").toLowerCase();
|
|
119
|
+
const reference = SECRET_REFERENCES.has(key) || SECRET_REFERENCE_NAMES.has(key);
|
|
120
|
+
const redact = (sensitiveValue && ["value", "before", "after"].includes(key))
|
|
121
|
+
|| (!reference && SENSITIVE.test(key));
|
|
122
|
+
return [outputKey, redact ? "[REDACTED]" : workloadPublicOutput(item, opaque || reference || ["value", "before", "after"].includes(key))];
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=workload-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-input.js","sourceRoot":"","sources":["../../src/gitops/workload-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const GitOpsUnitInputSchema: z.ZodObject<{
|
|
3
|
+
unitKey: z.ZodString;
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
gitopsRepositoryId: z.ZodNumber;
|
|
6
|
+
branch: z.ZodString;
|
|
7
|
+
path: z.ZodString;
|
|
8
|
+
scope: z.ZodEnum<{
|
|
9
|
+
CLUSTER: "CLUSTER";
|
|
10
|
+
ENVIRONMENT: "ENVIRONMENT";
|
|
11
|
+
STANDALONE: "STANDALONE";
|
|
12
|
+
}>;
|
|
13
|
+
tier: z.ZodDefault<z.ZodEnum<{
|
|
14
|
+
DEVELOP: "DEVELOP";
|
|
15
|
+
PRODUCTION: "PRODUCTION";
|
|
16
|
+
STAGING: "STAGING";
|
|
17
|
+
UNKNOWN: "UNKNOWN";
|
|
18
|
+
}>>;
|
|
19
|
+
environmentId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
20
|
+
clusterId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
21
|
+
fluxInstallationId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
22
|
+
targetId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
23
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
24
|
+
ACTIVE: "ACTIVE";
|
|
25
|
+
DISABLED: "DISABLED";
|
|
26
|
+
}>>;
|
|
27
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
export declare const GitOpsUnitSchema: z.ZodObject<{
|
|
30
|
+
id: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
31
|
+
unitKey: z.ZodString;
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
gitopsRepositoryId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
34
|
+
branch: z.ZodString;
|
|
35
|
+
path: z.ZodString;
|
|
36
|
+
scope: z.ZodEnum<{
|
|
37
|
+
CLUSTER: "CLUSTER";
|
|
38
|
+
ENVIRONMENT: "ENVIRONMENT";
|
|
39
|
+
STANDALONE: "STANDALONE";
|
|
40
|
+
}>;
|
|
41
|
+
tier: z.ZodEnum<{
|
|
42
|
+
DEVELOP: "DEVELOP";
|
|
43
|
+
PRODUCTION: "PRODUCTION";
|
|
44
|
+
STAGING: "STAGING";
|
|
45
|
+
UNKNOWN: "UNKNOWN";
|
|
46
|
+
}>;
|
|
47
|
+
environmentId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
48
|
+
clusterId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
49
|
+
fluxInstallationId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
50
|
+
targetId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
51
|
+
status: z.ZodEnum<{
|
|
52
|
+
ACTIVE: "ACTIVE";
|
|
53
|
+
DISABLED: "DISABLED";
|
|
54
|
+
}>;
|
|
55
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
56
|
+
version: z.ZodNumber;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
export declare const GitOpsUnitListSchema: z.ZodArray<z.ZodObject<{
|
|
59
|
+
id: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
60
|
+
unitKey: z.ZodString;
|
|
61
|
+
name: z.ZodString;
|
|
62
|
+
gitopsRepositoryId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
63
|
+
branch: z.ZodString;
|
|
64
|
+
path: z.ZodString;
|
|
65
|
+
scope: z.ZodEnum<{
|
|
66
|
+
CLUSTER: "CLUSTER";
|
|
67
|
+
ENVIRONMENT: "ENVIRONMENT";
|
|
68
|
+
STANDALONE: "STANDALONE";
|
|
69
|
+
}>;
|
|
70
|
+
tier: z.ZodEnum<{
|
|
71
|
+
DEVELOP: "DEVELOP";
|
|
72
|
+
PRODUCTION: "PRODUCTION";
|
|
73
|
+
STAGING: "STAGING";
|
|
74
|
+
UNKNOWN: "UNKNOWN";
|
|
75
|
+
}>;
|
|
76
|
+
environmentId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
77
|
+
clusterId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
78
|
+
fluxInstallationId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
79
|
+
targetId: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>>;
|
|
80
|
+
status: z.ZodEnum<{
|
|
81
|
+
ACTIVE: "ACTIVE";
|
|
82
|
+
DISABLED: "DISABLED";
|
|
83
|
+
}>;
|
|
84
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
85
|
+
version: z.ZodNumber;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
export type GitOpsUnitInput = z.infer<typeof GitOpsUnitInputSchema>;
|
|
88
|
+
export declare const GitOpsWorkloadSchema: z.ZodObject<{
|
|
89
|
+
id: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
90
|
+
unitId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
91
|
+
serviceName: z.ZodString;
|
|
92
|
+
namespace: z.ZodString;
|
|
93
|
+
ownerTeamId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
94
|
+
applicationId: z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>;
|
|
95
|
+
basePath: z.ZodString;
|
|
96
|
+
overlayPath: z.ZodString;
|
|
97
|
+
status: z.ZodString;
|
|
98
|
+
version: z.ZodNumber;
|
|
99
|
+
configRevision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
export declare const GitOpsWorkloadListSchema: z.ZodObject<{
|
|
102
|
+
items: z.ZodArray<z.ZodObject<{
|
|
103
|
+
id: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
104
|
+
unitId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
105
|
+
serviceName: z.ZodString;
|
|
106
|
+
namespace: z.ZodString;
|
|
107
|
+
ownerTeamId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
108
|
+
applicationId: z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>;
|
|
109
|
+
basePath: z.ZodString;
|
|
110
|
+
overlayPath: z.ZodString;
|
|
111
|
+
status: z.ZodString;
|
|
112
|
+
version: z.ZodNumber;
|
|
113
|
+
configRevision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
114
|
+
}, z.core.$strip>>;
|
|
115
|
+
total: z.ZodNumber;
|
|
116
|
+
page: z.ZodNumber;
|
|
117
|
+
pageSize: z.ZodNumber;
|
|
118
|
+
}, z.core.$strip>;
|
|
119
|
+
export declare const GitOpsWorkloadDiscoverySchema: z.ZodObject<{
|
|
120
|
+
unitId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
121
|
+
revision: z.ZodString;
|
|
122
|
+
total: z.ZodNumber;
|
|
123
|
+
page: z.ZodNumber;
|
|
124
|
+
pageSize: z.ZodNumber;
|
|
125
|
+
candidates: z.ZodArray<z.ZodObject<{
|
|
126
|
+
serviceName: z.ZodString;
|
|
127
|
+
namespace: z.ZodString;
|
|
128
|
+
basePath: z.ZodString;
|
|
129
|
+
overlayPath: z.ZodString;
|
|
130
|
+
managedWorkloadId: z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>;
|
|
131
|
+
editable: z.ZodBoolean;
|
|
132
|
+
issues: z.ZodArray<z.ZodString>;
|
|
133
|
+
}, z.core.$strip>>;
|
|
134
|
+
}, z.core.$strip>;
|
|
135
|
+
export declare const GitOpsWorkloadConfigurationSchema: z.ZodObject<{
|
|
136
|
+
workload: z.ZodObject<{
|
|
137
|
+
id: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
138
|
+
unitId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
139
|
+
serviceName: z.ZodString;
|
|
140
|
+
namespace: z.ZodString;
|
|
141
|
+
ownerTeamId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
142
|
+
applicationId: z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>;
|
|
143
|
+
basePath: z.ZodString;
|
|
144
|
+
overlayPath: z.ZodString;
|
|
145
|
+
status: z.ZodString;
|
|
146
|
+
version: z.ZodNumber;
|
|
147
|
+
configRevision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
148
|
+
}, z.core.$strip>;
|
|
149
|
+
revision: z.ZodString;
|
|
150
|
+
valuesResolved: z.ZodBoolean;
|
|
151
|
+
workloadRendered: z.ZodLiteral<false>;
|
|
152
|
+
layers: z.ZodArray<z.ZodObject<{
|
|
153
|
+
file: z.ZodNullable<z.ZodString>;
|
|
154
|
+
pointer: z.ZodString;
|
|
155
|
+
role: z.ZodString;
|
|
156
|
+
}, z.core.$strip>>;
|
|
157
|
+
references: z.ZodArray<z.ZodObject<{
|
|
158
|
+
kind: z.ZodString;
|
|
159
|
+
name: z.ZodString;
|
|
160
|
+
valuesKey: z.ZodString;
|
|
161
|
+
sourceFile: z.ZodNullable<z.ZodString>;
|
|
162
|
+
resolved: z.ZodBoolean;
|
|
163
|
+
}, z.core.$strip>>;
|
|
164
|
+
fields: z.ZodArray<z.ZodObject<{
|
|
165
|
+
pointer: z.ZodString;
|
|
166
|
+
value: z.ZodJSONSchema;
|
|
167
|
+
source: z.ZodNullable<z.ZodObject<{
|
|
168
|
+
file: z.ZodNullable<z.ZodString>;
|
|
169
|
+
pointer: z.ZodString;
|
|
170
|
+
role: z.ZodString;
|
|
171
|
+
}, z.core.$strip>>;
|
|
172
|
+
editable: z.ZodBoolean;
|
|
173
|
+
owner: z.ZodString;
|
|
174
|
+
}, z.core.$strip>>;
|
|
175
|
+
issues: z.ZodArray<z.ZodString>;
|
|
176
|
+
}, z.core.$strip>;
|
|
177
|
+
export declare const GitOpsWorkloadPlanSchema: z.ZodObject<{
|
|
178
|
+
planNumber: z.ZodString;
|
|
179
|
+
workloadId: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>;
|
|
180
|
+
planHash: z.ZodString;
|
|
181
|
+
state: z.ZodEnum<{
|
|
182
|
+
APPLYING: "APPLYING";
|
|
183
|
+
FAILED: "FAILED";
|
|
184
|
+
PLANNED: "PLANNED";
|
|
185
|
+
STALE: "STALE";
|
|
186
|
+
SUCCEEDED: "SUCCEEDED";
|
|
187
|
+
WAITING_REVIEW: "WAITING_REVIEW";
|
|
188
|
+
}>;
|
|
189
|
+
baseRevision: z.ZodString;
|
|
190
|
+
resultRevision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
191
|
+
reviewUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
192
|
+
changes: z.ZodArray<z.ZodObject<{
|
|
193
|
+
file: z.ZodString;
|
|
194
|
+
pointer: z.ZodString;
|
|
195
|
+
before: z.ZodJSONSchema;
|
|
196
|
+
after: z.ZodJSONSchema;
|
|
197
|
+
}, z.core.$strip>>;
|
|
198
|
+
files: z.ZodArray<z.ZodObject<{
|
|
199
|
+
path: z.ZodString;
|
|
200
|
+
operation: z.ZodEnum<{
|
|
201
|
+
CREATE: "CREATE";
|
|
202
|
+
DELETE: "DELETE";
|
|
203
|
+
UPDATE: "UPDATE";
|
|
204
|
+
}>;
|
|
205
|
+
beforeDigest: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
206
|
+
afterDigest: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
207
|
+
}, z.core.$strip>>;
|
|
208
|
+
issues: z.ZodArray<z.ZodString>;
|
|
209
|
+
failureCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
210
|
+
failureReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
211
|
+
expiresAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
212
|
+
}, z.core.$strip>;
|
|
213
|
+
export type GitOpsWorkloadChange = {
|
|
214
|
+
pointer: string;
|
|
215
|
+
value: z.infer<ReturnType<typeof z.json>>;
|
|
216
|
+
};
|
|
217
|
+
export type GitOpsWorkloadPlan = z.infer<typeof GitOpsWorkloadPlanSchema>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const Identifier = z.union([z.string().trim().min(1), z.number().int().positive()]).transform(String);
|
|
3
|
+
const Text = z.string().min(1);
|
|
4
|
+
const NullableText = z.string().nullable().optional();
|
|
5
|
+
const Source = z.object({ file: z.string().nullable(), pointer: z.string(), role: z.string() });
|
|
6
|
+
const UnitScope = z.enum(["ENVIRONMENT", "CLUSTER", "STANDALONE"]);
|
|
7
|
+
export const GitOpsUnitInputSchema = z.object({
|
|
8
|
+
unitKey: Text, name: Text, gitopsRepositoryId: z.number().int().positive(),
|
|
9
|
+
branch: Text, path: Text, scope: UnitScope,
|
|
10
|
+
tier: z.enum(["DEVELOP", "STAGING", "PRODUCTION", "UNKNOWN"]).default("UNKNOWN"),
|
|
11
|
+
environmentId: z.number().int().positive().nullable().optional(),
|
|
12
|
+
clusterId: z.number().int().positive().nullable().optional(),
|
|
13
|
+
fluxInstallationId: z.number().int().positive().nullable().optional(),
|
|
14
|
+
targetId: z.number().int().positive().nullable().optional(),
|
|
15
|
+
status: z.enum(["ACTIVE", "DISABLED"]).default("ACTIVE"), description: NullableText
|
|
16
|
+
}).strict();
|
|
17
|
+
export const GitOpsUnitSchema = z.object({
|
|
18
|
+
id: Identifier, unitKey: Text, name: Text, gitopsRepositoryId: Identifier,
|
|
19
|
+
branch: Text, path: Text, scope: UnitScope,
|
|
20
|
+
tier: z.enum(["DEVELOP", "STAGING", "PRODUCTION", "UNKNOWN"]),
|
|
21
|
+
environmentId: Identifier.nullable().optional(), clusterId: Identifier.nullable().optional(),
|
|
22
|
+
fluxInstallationId: Identifier.nullable().optional(), targetId: Identifier.nullable().optional(),
|
|
23
|
+
status: z.enum(["ACTIVE", "DISABLED"]), description: NullableText, version: z.number().int().nonnegative()
|
|
24
|
+
});
|
|
25
|
+
export const GitOpsUnitListSchema = z.array(GitOpsUnitSchema);
|
|
26
|
+
export const GitOpsWorkloadSchema = z.object({
|
|
27
|
+
id: Identifier, unitId: Identifier, serviceName: Text,
|
|
28
|
+
namespace: z.string(),
|
|
29
|
+
ownerTeamId: Identifier, applicationId: Identifier.nullable(),
|
|
30
|
+
basePath: Text, overlayPath: Text, status: Text,
|
|
31
|
+
version: z.number().int().nonnegative(), configRevision: NullableText
|
|
32
|
+
});
|
|
33
|
+
export const GitOpsWorkloadListSchema = z.object({
|
|
34
|
+
items: z.array(GitOpsWorkloadSchema), total: z.number().int().nonnegative(),
|
|
35
|
+
page: z.number().int().positive(), pageSize: z.number().int().positive()
|
|
36
|
+
});
|
|
37
|
+
export const GitOpsWorkloadDiscoverySchema = z.object({
|
|
38
|
+
unitId: Identifier, revision: Text, total: z.number().int().nonnegative(),
|
|
39
|
+
page: z.number().int().positive(), pageSize: z.number().int().positive(),
|
|
40
|
+
candidates: z.array(z.object({
|
|
41
|
+
serviceName: Text, namespace: z.string(), basePath: Text, overlayPath: Text,
|
|
42
|
+
managedWorkloadId: Identifier.nullable(), editable: z.boolean(), issues: z.array(z.string())
|
|
43
|
+
}))
|
|
44
|
+
});
|
|
45
|
+
export const GitOpsWorkloadConfigurationSchema = z.object({
|
|
46
|
+
workload: GitOpsWorkloadSchema, revision: Text,
|
|
47
|
+
valuesResolved: z.boolean(), workloadRendered: z.literal(false),
|
|
48
|
+
layers: z.array(Source),
|
|
49
|
+
references: z.array(z.object({
|
|
50
|
+
kind: z.string(), name: z.string(), valuesKey: z.string(), sourceFile: z.string().nullable(), resolved: z.boolean()
|
|
51
|
+
})),
|
|
52
|
+
fields: z.array(z.object({
|
|
53
|
+
pointer: z.string(), value: z.json(), source: Source.nullable(), editable: z.boolean(), owner: z.string()
|
|
54
|
+
})),
|
|
55
|
+
issues: z.array(z.string())
|
|
56
|
+
});
|
|
57
|
+
export const GitOpsWorkloadPlanSchema = z.object({
|
|
58
|
+
planNumber: Text, workloadId: Identifier, planHash: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
59
|
+
state: z.enum(["PLANNED", "APPLYING", "SUCCEEDED", "WAITING_REVIEW", "STALE", "FAILED"]),
|
|
60
|
+
baseRevision: Text, resultRevision: NullableText, reviewUrl: NullableText,
|
|
61
|
+
changes: z.array(z.object({ file: Text, pointer: z.string(), before: z.json(), after: z.json() })),
|
|
62
|
+
files: z.array(z.object({
|
|
63
|
+
path: Text, operation: z.enum(["CREATE", "UPDATE", "DELETE"]),
|
|
64
|
+
beforeDigest: NullableText, afterDigest: NullableText
|
|
65
|
+
})),
|
|
66
|
+
issues: z.array(z.string()), failureCode: NullableText, failureReason: NullableText, expiresAt: NullableText
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=workload-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-schemas.js","sourceRoot":"","sources":["../../src/gitops/workload-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export interface Choice {
|
|
|
5
5
|
hint?: string;
|
|
6
6
|
}
|
|
7
7
|
export interface InstallUi {
|
|
8
|
-
choose(message: string, choices: Choice[], initial?: string): Promise<string>;
|
|
8
|
+
choose(message: string, choices: Choice[], initial?: string, shortcut?: Choice): Promise<string>;
|
|
9
9
|
multiple(message: string, choices: Choice[], initial?: string[]): Promise<string[]>;
|
|
10
10
|
text(message: string, initial?: string): Promise<string>;
|
|
11
11
|
secret(message: string): Promise<string>;
|
|
@@ -17,10 +17,12 @@ export declare class InstallCancelled extends AiRegistryError {
|
|
|
17
17
|
}
|
|
18
18
|
export declare function safeTerminal(value: string): string;
|
|
19
19
|
export declare const terminalUi: InstallUi;
|
|
20
|
+
/** Tab exits only this prompt, then the caller opens its existing menu. */
|
|
21
|
+
export declare function chooseWithShortcut(shortcut: Choice | undefined, prompt: (signal?: AbortSignal, input?: NodeJS.ReadStream) => Promise<string | symbol>, input?: NodeJS.ReadStream): Promise<string>;
|
|
20
22
|
export declare function useInteractive(options: {
|
|
21
23
|
interactive?: boolean;
|
|
22
24
|
}, missing: boolean, json: boolean, tty?: boolean): boolean;
|
|
23
25
|
export declare function requireInput(condition: unknown, message: string): asserts condition;
|
|
24
|
-
export declare function confirmInstall(ui: InstallUi, plan: unknown): Promise<void>;
|
|
26
|
+
export declare function confirmInstall(ui: InstallUi, plan: unknown, message?: string): Promise<void>;
|
|
25
27
|
export declare function startWizard(title: string): void;
|
|
26
28
|
export declare function chooseEnvironment(ui: InstallUi, existing?: string[]): Promise<string[]>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { autocomplete, autocompleteMultiselect, text, confirm, note, isCancel, intro, password, } from "@clack/prompts";
|
|
2
2
|
import { safeMcpOutput, parseEnvironment } from "../mcp/environment.js";
|
|
3
3
|
import { AiRegistryError } from "../ai-registry/errors.js";
|
|
4
|
+
import { Transform } from "node:stream";
|
|
4
5
|
export class InstallCancelled extends AiRegistryError {
|
|
5
6
|
constructor() {
|
|
6
7
|
super("已取消安装;尚未确认的操作不会执行。", "cli_cancelled");
|
|
@@ -15,8 +16,8 @@ function value(answer) {
|
|
|
15
16
|
return answer;
|
|
16
17
|
}
|
|
17
18
|
export const terminalUi = {
|
|
18
|
-
choose: async (message, options, initialValue) =>
|
|
19
|
-
message,
|
|
19
|
+
choose: async (message, options, initialValue, shortcut) => chooseWithShortcut(shortcut, (signal, input) => autocomplete({
|
|
20
|
+
message: shortcut ? `${message} · Tab ${shortcut.label}` : message,
|
|
20
21
|
options: options.map((o) => ({
|
|
21
22
|
...o,
|
|
22
23
|
label: safeTerminal(o.label),
|
|
@@ -24,6 +25,8 @@ export const terminalUi = {
|
|
|
24
25
|
})),
|
|
25
26
|
initialValue,
|
|
26
27
|
output: process.stderr,
|
|
28
|
+
signal,
|
|
29
|
+
input,
|
|
27
30
|
filter: (search, option) => `${option.label} ${option.hint ?? ""} ${option.value}`
|
|
28
31
|
.toLowerCase()
|
|
29
32
|
.includes(search.toLowerCase()),
|
|
@@ -43,6 +46,35 @@ export const terminalUi = {
|
|
|
43
46
|
confirm: async (message) => value(await confirm({ message, initialValue: false, output: process.stderr })),
|
|
44
47
|
note: (message, title) => note(message, title, { output: process.stderr }),
|
|
45
48
|
};
|
|
49
|
+
/** Tab exits only this prompt, then the caller opens its existing menu. */
|
|
50
|
+
export async function chooseWithShortcut(shortcut, prompt, input = process.stdin) {
|
|
51
|
+
if (!shortcut)
|
|
52
|
+
return value(await prompt());
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
let selected = false;
|
|
55
|
+
// Consume Tab before Clack's search input sees it. All other bytes retain
|
|
56
|
+
// the existing prompt's navigation, search and cancellation behavior.
|
|
57
|
+
const filtered = Object.assign(new Transform({
|
|
58
|
+
transform(chunk, _encoding, next) {
|
|
59
|
+
if (chunk.includes(9)) {
|
|
60
|
+
selected = true;
|
|
61
|
+
queueMicrotask(() => controller.abort());
|
|
62
|
+
next();
|
|
63
|
+
}
|
|
64
|
+
else
|
|
65
|
+
next(null, chunk);
|
|
66
|
+
},
|
|
67
|
+
}), { isTTY: input.isTTY, setRawMode: (mode) => input.setRawMode(mode) });
|
|
68
|
+
input.pipe(filtered);
|
|
69
|
+
try {
|
|
70
|
+
const answer = await prompt(controller.signal, filtered);
|
|
71
|
+
return selected ? shortcut.value : value(answer);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
input.unpipe(filtered);
|
|
75
|
+
filtered.destroy();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
46
78
|
export function useInteractive(options, missing, json, tty = Boolean(process.stdin.isTTY && process.stderr.isTTY)) {
|
|
47
79
|
if (options.interactive === true && (json || !tty))
|
|
48
80
|
throw new AiRegistryError("交互安装需要 TTY 且不能使用 --json;请提供完整参数,使用 --plan --json 核对。", "cli_interactive_required");
|
|
@@ -55,9 +87,9 @@ export function requireInput(condition, message) {
|
|
|
55
87
|
if (!condition)
|
|
56
88
|
throw new AiRegistryError(`${message};交互终端可不带参数启动向导,脚本请提供完整参数。`, "cli_input_required");
|
|
57
89
|
}
|
|
58
|
-
export async function confirmInstall(ui, plan) {
|
|
90
|
+
export async function confirmInstall(ui, plan, message = "按上述范围安装?") {
|
|
59
91
|
ui.note(JSON.stringify(safeMcpOutput(plan), null, 2), "安装计划");
|
|
60
|
-
if (!(await ui.confirm(
|
|
92
|
+
if (!(await ui.confirm(message)))
|
|
61
93
|
throw new InstallCancelled();
|
|
62
94
|
}
|
|
63
95
|
export function startWizard(title) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/interactive/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/interactive/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AiRegistryClient } from "../ai-registry/client.js";
|
|
2
|
+
import { type ResolveRegistryNamespaceOptions } from "../ai-registry/namespace.js";
|
|
3
|
+
import { type InstallUi } from "./prompts.js";
|
|
4
|
+
type NamespaceClient = Pick<AiRegistryClient, "getCapabilities" | "resolveNamespace">;
|
|
5
|
+
export declare function chooseRegistryNamespace(client: NamespaceClient, options: ResolveRegistryNamespaceOptions, ui: InstallUi): Promise<import("../ai-registry/namespace.js").RegistryNamespaceContext>;
|
|
6
|
+
export declare function initialRegistryNamespace(client: NamespaceClient, options: ResolveRegistryNamespaceOptions, ui: InstallUi): Promise<import("../ai-registry/namespace.js").RegistryNamespaceContext>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { AiRegistryError } from "../ai-registry/errors.js";
|
|
2
|
+
import { resolveRegistryNamespace } from "../ai-registry/namespace.js";
|
|
3
|
+
import { requireInput } from "./prompts.js";
|
|
4
|
+
export async function chooseRegistryNamespace(client, options, ui) {
|
|
5
|
+
const capabilities = await client.getCapabilities();
|
|
6
|
+
const allowed = capabilities.namespaces.filter((n) => (!options.requiredAction || n.actions.includes(options.requiredAction)) &&
|
|
7
|
+
(!options.instance || n.instanceCode === options.instance));
|
|
8
|
+
requireInput(allowed.length, "当前身份没有可用的 namespace");
|
|
9
|
+
const selected = await ui.choose("更换 namespace:选择已授权的来源空间", allowed.map((n, i) => ({
|
|
10
|
+
value: String(i),
|
|
11
|
+
label: `${n.displayName} (${n.namespaceKey})`,
|
|
12
|
+
hint: `${n.instanceCode ?? "默认实例"} · ${n.environment}`,
|
|
13
|
+
})));
|
|
14
|
+
const n = allowed[Number(selected)];
|
|
15
|
+
requireInput(n, "请选择有效 namespace");
|
|
16
|
+
return active(await resolveRegistryNamespace(client, {
|
|
17
|
+
...options, namespace: n.namespaceKey, instance: n.instanceCode ?? options.instance,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
export async function initialRegistryNamespace(client, options, ui) {
|
|
21
|
+
try {
|
|
22
|
+
const context = active(await resolveRegistryNamespace(client, options));
|
|
23
|
+
if (context.migratedInstance)
|
|
24
|
+
ui.note(`${context.namespace.namespaceKey}: ${context.migratedInstance.from} → ${context.migratedInstance.to}\n已更新项目来源并保留 .bak 备份;锁定版本及 SHA-256 不变。`, "旧配置已自动迁移");
|
|
25
|
+
return context;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (!(error instanceof AiRegistryError))
|
|
29
|
+
throw error;
|
|
30
|
+
if (error.code === "ai_registry_namespace_required")
|
|
31
|
+
return chooseRegistryNamespace(client, options, ui);
|
|
32
|
+
// Explicit CLI targets remain authoritative. A stale implicit default can
|
|
33
|
+
// recover only through a user's selection, never an automatic fallback.
|
|
34
|
+
if (options.namespace?.trim() || options.instance?.trim() || ![
|
|
35
|
+
"ai_registry_namespace_forbidden",
|
|
36
|
+
"ai_registry_namespace_ambiguous",
|
|
37
|
+
"ai_registry_action_forbidden",
|
|
38
|
+
"ai_registry_namespace_unavailable",
|
|
39
|
+
].includes(error.code))
|
|
40
|
+
throw error;
|
|
41
|
+
ui.note(`${error.message}\n请选择本次使用的 namespace;项目清单、锁文件和默认配置保持不变。`, "默认来源不可用");
|
|
42
|
+
return chooseRegistryNamespace(client, options, ui);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function active(context) {
|
|
46
|
+
if (context.namespace.status !== "ACTIVE" || context.namespace.instanceStatus !== "ACTIVE") {
|
|
47
|
+
throw new AiRegistryError("所选来源未启用。", "ai_registry_namespace_unavailable");
|
|
48
|
+
}
|
|
49
|
+
return context;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=registry-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-namespace.js","sourceRoot":"","sources":["../../src/interactive/registry-namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAwC,MAAM,6BAA6B,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAkB,MAAM,cAAc,CAAC;AAI5D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAuB,EACvB,OAAwC,EACxC,EAAa;IAEb,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACvE,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAC3D,CAAC;IACF,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChB,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,YAAY,GAAG;QAC7C,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE;KACvD,CAAC,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC,YAAY,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE;QACnD,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ;KACpF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAuB,EACvB,OAAwC,EACxC,EAAa;IAEb,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,gBAAgB;YAAE,EAAE,CAAC,IAAI,CACnC,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,gBAAgB,CAAC,IAAI,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAE,wCAAwC,EAC5I,UAAU,CACX,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC;YAAE,MAAM,KAAK,CAAC;QACrD,IAAI,KAAK,CAAC,IAAI,KAAK,gCAAgC;YAAE,OAAO,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACzG,0EAA0E;QAC1E,wEAAwE;QACxE,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;YAC5D,iCAAiC;YACjC,iCAAiC;YACjC,8BAA8B;YAC9B,mCAAmC;SACpC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAC;QACpC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,yCAAyC,EAAE,SAAS,CAAC,CAAC;QAC9E,OAAO,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAA6D;IAC3E,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC3F,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|