@numa-tech/numa 1.22.0 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +14 -1
  2. package/dist/ai-registry/commands.js +5 -2
  3. package/dist/ai-registry/commands.js.map +1 -1
  4. package/dist/ai-registry/namespace.d.ts +4 -0
  5. package/dist/ai-registry/namespace.js +17 -3
  6. package/dist/ai-registry/namespace.js.map +1 -1
  7. package/dist/ai-registry/skill-installer.js +35 -5
  8. package/dist/ai-registry/skill-installer.js.map +1 -1
  9. package/dist/ai-registry/tui.js +15 -4
  10. package/dist/ai-registry/tui.js.map +1 -1
  11. package/dist/authorization/application-client.d.ts +808 -7
  12. package/dist/authorization/application-client.js +36 -8
  13. package/dist/authorization/application-client.js.map +1 -1
  14. package/dist/authorization/application-commands.d.ts +3 -1
  15. package/dist/authorization/application-commands.js +8 -2
  16. package/dist/authorization/application-commands.js.map +1 -1
  17. package/dist/authorization/application-schemas.d.ts +235 -14
  18. package/dist/authorization/application-schemas.js +76 -15
  19. package/dist/authorization/application-schemas.js.map +1 -1
  20. package/dist/authorization/environment-governance-client.d.ts +155 -0
  21. package/dist/authorization/environment-governance-client.js +86 -0
  22. package/dist/authorization/environment-governance-client.js.map +1 -0
  23. package/dist/authorization/environment-governance-commands.d.ts +6 -0
  24. package/dist/authorization/environment-governance-commands.js +58 -0
  25. package/dist/authorization/environment-governance-commands.js.map +1 -0
  26. package/dist/authorization/environment-governance-schemas.d.ts +79 -0
  27. package/dist/authorization/environment-governance-schemas.js +15 -0
  28. package/dist/authorization/environment-governance-schemas.js.map +1 -0
  29. package/dist/authorization/runtime-artifact-client.d.ts +36 -0
  30. package/dist/authorization/runtime-artifact-client.js +135 -0
  31. package/dist/authorization/runtime-artifact-client.js.map +1 -0
  32. package/dist/authorization/runtime-artifact-commands.d.ts +6 -0
  33. package/dist/authorization/runtime-artifact-commands.js +29 -0
  34. package/dist/authorization/runtime-artifact-commands.js.map +1 -0
  35. package/dist/command-catalog.js +254 -0
  36. package/dist/command-catalog.js.map +1 -1
  37. package/dist/compatibility/index.d.ts +1 -0
  38. package/dist/compatibility/index.js +3 -0
  39. package/dist/compatibility/index.js.map +1 -0
  40. package/dist/compatibility/registry-instance.d.ts +17 -0
  41. package/dist/compatibility/registry-instance.js +93 -0
  42. package/dist/compatibility/registry-instance.js.map +1 -0
  43. package/dist/gitops/client.d.ts +359 -0
  44. package/dist/gitops/client.js +164 -1
  45. package/dist/gitops/client.js.map +1 -1
  46. package/dist/gitops/commands.js +46 -3
  47. package/dist/gitops/commands.js.map +1 -1
  48. package/dist/gitops/schemas.d.ts +35 -0
  49. package/dist/gitops/schemas.js +23 -0
  50. package/dist/gitops/schemas.js.map +1 -1
  51. package/dist/gitops/workload-commands.d.ts +9 -0
  52. package/dist/gitops/workload-commands.js +188 -0
  53. package/dist/gitops/workload-commands.js.map +1 -0
  54. package/dist/gitops/workload-input.d.ts +22 -0
  55. package/dist/gitops/workload-input.js +125 -0
  56. package/dist/gitops/workload-input.js.map +1 -0
  57. package/dist/gitops/workload-schemas.d.ts +217 -0
  58. package/dist/gitops/workload-schemas.js +68 -0
  59. package/dist/gitops/workload-schemas.js.map +1 -0
  60. package/dist/interactive/prompts.d.ts +4 -2
  61. package/dist/interactive/prompts.js +36 -4
  62. package/dist/interactive/prompts.js.map +1 -1
  63. package/dist/interactive/registry-namespace.d.ts +7 -0
  64. package/dist/interactive/registry-namespace.js +51 -0
  65. package/dist/interactive/registry-namespace.js.map +1 -0
  66. package/dist/interactive/registry.js +35 -26
  67. package/dist/interactive/registry.js.map +1 -1
  68. package/docs/authorization-configuration-publication.md +4 -1
  69. package/docs/environment-configuration-publication.md +95 -0
  70. package/docs/gitops-configuration.md +122 -0
  71. package/package.json +7 -5
  72. package/examples/oss/__pycache__/roundtrip.cpython-314.pyc +0 -0
  73. package/examples/oss/__pycache__/test_roundtrip.cpython-314.pyc +0 -0
@@ -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) => value(await autocomplete({
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":"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"}
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":"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"}