@vibesdotdev/integrations-kubernetes 0.0.0-stage → 1.0.0-rc.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.
Files changed (95) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +19 -2
  3. package/dist/helm-chart.d.ts +13 -0
  4. package/dist/helm-chart.d.ts.map +1 -0
  5. package/dist/helm-chart.js +508 -0
  6. package/dist/helm-chart.js.map +1 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/k8s-configmap.d.ts +25 -0
  12. package/dist/k8s-configmap.d.ts.map +1 -0
  13. package/dist/k8s-configmap.js +168 -0
  14. package/dist/k8s-configmap.js.map +1 -0
  15. package/dist/k8s-gpu-operator.d.ts +3 -0
  16. package/dist/k8s-gpu-operator.d.ts.map +1 -0
  17. package/dist/k8s-gpu-operator.js +53 -0
  18. package/dist/k8s-gpu-operator.js.map +1 -0
  19. package/dist/k8s-namespace.d.ts +51 -0
  20. package/dist/k8s-namespace.d.ts.map +1 -0
  21. package/dist/k8s-namespace.js +280 -0
  22. package/dist/k8s-namespace.js.map +1 -0
  23. package/dist/k8s-pod-health.d.ts +60 -0
  24. package/dist/k8s-pod-health.d.ts.map +1 -0
  25. package/dist/k8s-pod-health.js +376 -0
  26. package/dist/k8s-pod-health.js.map +1 -0
  27. package/dist/k8s-secret.d.ts +55 -0
  28. package/dist/k8s-secret.d.ts.map +1 -0
  29. package/dist/k8s-secret.js +391 -0
  30. package/dist/k8s-secret.js.map +1 -0
  31. package/dist/kind-cluster.d.ts +84 -0
  32. package/dist/kind-cluster.d.ts.map +1 -0
  33. package/dist/kind-cluster.js +694 -0
  34. package/dist/kind-cluster.js.map +1 -0
  35. package/dist/kubectl-budget.client.d.ts +13 -0
  36. package/dist/kubectl-budget.client.d.ts.map +1 -0
  37. package/dist/kubectl-budget.client.js +38 -0
  38. package/dist/kubectl-budget.client.js.map +1 -0
  39. package/dist/kubectl.d.ts +59 -0
  40. package/dist/kubectl.d.ts.map +1 -0
  41. package/dist/kubectl.js +121 -0
  42. package/dist/kubectl.js.map +1 -0
  43. package/dist/port-forward-command.d.ts +6 -0
  44. package/dist/port-forward-command.d.ts.map +1 -0
  45. package/dist/port-forward-command.js +24 -0
  46. package/dist/port-forward-command.js.map +1 -0
  47. package/dist/port-forward-compat.d.ts +11 -0
  48. package/dist/port-forward-compat.d.ts.map +1 -0
  49. package/dist/port-forward-compat.js +21 -0
  50. package/dist/port-forward-compat.js.map +1 -0
  51. package/dist/port-forward-identity.d.ts +23 -0
  52. package/dist/port-forward-identity.d.ts.map +1 -0
  53. package/dist/port-forward-identity.js +72 -0
  54. package/dist/port-forward-identity.js.map +1 -0
  55. package/dist/port-forward.consumer.plugin.d.ts +3 -0
  56. package/dist/port-forward.consumer.plugin.d.ts.map +1 -0
  57. package/dist/port-forward.consumer.plugin.js +10 -0
  58. package/dist/port-forward.consumer.plugin.js.map +1 -0
  59. package/dist/port-forward.d.ts +18 -0
  60. package/dist/port-forward.d.ts.map +1 -0
  61. package/dist/port-forward.descriptor.d.ts +7 -0
  62. package/dist/port-forward.descriptor.d.ts.map +1 -0
  63. package/dist/port-forward.descriptor.js +3 -0
  64. package/dist/port-forward.descriptor.js.map +1 -0
  65. package/dist/port-forward.impl.consumer.d.ts +22 -0
  66. package/dist/port-forward.impl.consumer.d.ts.map +1 -0
  67. package/dist/port-forward.impl.consumer.js +32 -0
  68. package/dist/port-forward.impl.consumer.js.map +1 -0
  69. package/dist/port-forward.js +26 -0
  70. package/dist/port-forward.js.map +1 -0
  71. package/dist/port-forward.kind.d.ts +13 -0
  72. package/dist/port-forward.kind.d.ts.map +1 -0
  73. package/dist/port-forward.kind.js +12 -0
  74. package/dist/port-forward.kind.js.map +1 -0
  75. package/dist/resource-providers.consumer.plugin.d.ts +3 -0
  76. package/dist/resource-providers.consumer.plugin.d.ts.map +1 -0
  77. package/dist/resource-providers.consumer.plugin.js +56 -0
  78. package/dist/resource-providers.consumer.plugin.js.map +1 -0
  79. package/dist/schemas/helm-chart.d.ts +14 -0
  80. package/dist/schemas/helm-chart.d.ts.map +1 -0
  81. package/dist/schemas/helm-chart.js +12 -0
  82. package/dist/schemas/helm-chart.js.map +1 -0
  83. package/dist/schemas/k8s-pod-health.d.ts +17 -0
  84. package/dist/schemas/k8s-pod-health.d.ts.map +1 -0
  85. package/dist/schemas/k8s-pod-health.js +21 -0
  86. package/dist/schemas/k8s-pod-health.js.map +1 -0
  87. package/dist/schemas/port-forward.d.ts +62 -0
  88. package/dist/schemas/port-forward.d.ts.map +1 -0
  89. package/dist/schemas/port-forward.js +24 -0
  90. package/dist/schemas/port-forward.js.map +1 -0
  91. package/dist/tool-env.d.ts +19 -0
  92. package/dist/tool-env.d.ts.map +1 -0
  93. package/dist/tool-env.js +32 -0
  94. package/dist/tool-env.js.map +1 -0
  95. package/package.json +80 -4
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Kubernetes ConfigMap Resource Provider (k8s/configmap)
3
+ *
4
+ * Creates a ConfigMap from key/value pairs. The manifest is built in-process
5
+ * and applied on stdin (`kubectl apply -f -`, idempotent): a value never goes
6
+ * on a command line, where every process on the host can read it (SPEC:153).
7
+ *
8
+ * Readiness verifies the configmap exists by name AND that every declared
9
+ * data key is present — so a partial apply (e.g., a key dropped from the
10
+ * descriptor between deploys) surfaces as an error rather than silent drift.
11
+ */
12
+ import { CapabilityError } from '@vibesdotdev/kernel';
13
+ import * as z from 'zod/v4';
14
+ import { readJsonObject, setupErrorResult, toolFailure, toolOutputExcerpt } from '@vibesdotdev/pm/resources/tool-env';
15
+ import { runKubeCapture } from "./tool-env.js";
16
+ import { attempt } from '@vibesdotdev/pm/utils/attempt';
17
+ import { JsonObjectSchema } from '@vibesdotdev/kernel/schemas/json';
18
+ const KUBECTL_REQUEST_TIMEOUT = '5s';
19
+ const ConfigMapConfigSchema = z.object({
20
+ name: z.string().min(1),
21
+ namespace: z.string().min(1),
22
+ context: z.string().optional(),
23
+ data: z.record(z.string().min(1), z.string()).refine((d) => Object.keys(d).length > 0, {
24
+ message: 'data must contain at least one key/value pair'
25
+ })
26
+ });
27
+ async function inspectConfigMap(runtime, cfg) {
28
+ const cmd = [
29
+ 'kubectl',
30
+ 'get',
31
+ 'configmap',
32
+ cfg.name,
33
+ '--namespace',
34
+ cfg.namespace,
35
+ '--request-timeout',
36
+ KUBECTL_REQUEST_TIMEOUT,
37
+ '-o',
38
+ 'json'
39
+ ];
40
+ if (cfg.context)
41
+ cmd.push('--context', cfg.context);
42
+ const { exitCode, stdout, stderr } = await runKubeCapture(runtime, cmd[0], cmd.slice(1));
43
+ if (exitCode !== 0) {
44
+ if (stderr.includes('NotFound') || stderr.includes('not found')) {
45
+ return { exists: false, dataKeys: [] };
46
+ }
47
+ return { exists: false, dataKeys: [], error: toolOutputExcerpt(stderr, Object.values(cfg.data)) };
48
+ }
49
+ // Only the key names of the object kubectl printed are read.
50
+ const object = readJsonObject(ConfigMapObjectSchema, stdout);
51
+ if (!object) {
52
+ return { exists: false, dataKeys: [], error: `kubectl get configmap ${cfg.name} answered an unreadable object` };
53
+ }
54
+ return { exists: true, dataKeys: Object.keys(object.data ?? {}) };
55
+ }
56
+ const ConfigMapObjectSchema = z.object({ data: JsonObjectSchema.optional() });
57
+ /** A ConfigMap manifest built in-process, applied on stdin (never `--from-literal` argv). */
58
+ export function buildConfigMapManifest(name, namespace, data) {
59
+ return JSON.stringify({ apiVersion: 'v1', kind: 'ConfigMap', metadata: { name, namespace }, data });
60
+ }
61
+ /** Apply the ConfigMap manifest on stdin, then verify it is visible with every declared key. */
62
+ async function applyConfigMap(runtime, config, cfg) {
63
+ const manifest = buildConfigMapManifest(cfg.name, cfg.namespace, cfg.data);
64
+ const applyCmd = ['kubectl', 'apply', '-f', '-', '--namespace', cfg.namespace];
65
+ if (cfg.context)
66
+ applyCmd.push('--context', cfg.context);
67
+ const applyRun = await runKubeCapture(runtime, applyCmd[0], applyCmd.slice(1), { stdin: manifest });
68
+ if (applyRun.exitCode !== 0) {
69
+ throw toolFailure({ tool: 'kubectl', action: 'apply', outcome: applyRun, secrets: Object.values(cfg.data) });
70
+ }
71
+ const info = await inspectConfigMap(runtime, cfg);
72
+ if (!info.exists) {
73
+ throw new CapabilityError(`ConfigMap '${cfg.name}' was applied but is not visible`, 'UNAVAILABLE', {
74
+ reason: 'pm-configmap-not-visible',
75
+ retryable: true,
76
+ details: { name: cfg.name, namespace: cfg.namespace }
77
+ });
78
+ }
79
+ const expected = new Set(Object.keys(cfg.data));
80
+ const missing = [...expected].filter((k) => !info.dataKeys.includes(k));
81
+ if (missing.length > 0) {
82
+ throw new CapabilityError(`ConfigMap '${cfg.name}' missing expected keys: ${missing.join(', ')}`, 'UNAVAILABLE', {
83
+ reason: 'pm-configmap-keys-missing',
84
+ retryable: true,
85
+ details: { name: cfg.name, namespace: cfg.namespace, missing }
86
+ });
87
+ }
88
+ return {
89
+ state: {
90
+ id: config.id,
91
+ type: config.type,
92
+ status: 'ready',
93
+ createdAt: new Date(),
94
+ lastChecked: new Date(),
95
+ metadata: { name: cfg.name, namespace: cfg.namespace, keys: info.dataKeys }
96
+ }
97
+ };
98
+ }
99
+ export const k8sConfigMapProvider = {
100
+ type: 'k8s/configmap',
101
+ async setup(config, { runtime }) {
102
+ const cfg = ConfigMapConfigSchema.parse(config.config);
103
+ const applied = await attempt(() => applyConfigMap(runtime, config, cfg));
104
+ return applied.ok ? applied.value : setupErrorResult(config, applied.failure);
105
+ },
106
+ async teardown(id, _state, { runtime, config: providerConfig }) {
107
+ const stored = providerConfig;
108
+ if (!stored)
109
+ return;
110
+ const cfg = ConfigMapConfigSchema.parse(stored.config);
111
+ const cmd = [
112
+ 'kubectl',
113
+ 'delete',
114
+ 'configmap',
115
+ cfg.name,
116
+ '--namespace',
117
+ cfg.namespace,
118
+ '--ignore-not-found=true'
119
+ ];
120
+ if (cfg.context)
121
+ cmd.push('--context', cfg.context);
122
+ const outcome = await runKubeCapture(runtime, cmd[0], cmd.slice(1));
123
+ if (outcome.exitCode !== 0)
124
+ throw toolFailure({ tool: 'kubectl', action: 'delete configmap', outcome });
125
+ },
126
+ async status(id, { runtime, config: providerConfig }) {
127
+ const stored = providerConfig;
128
+ if (!stored)
129
+ return { status: 'missing' };
130
+ const cfg = ConfigMapConfigSchema.parse(stored.config);
131
+ const info = await inspectConfigMap(runtime, cfg);
132
+ if (info.error)
133
+ return { status: 'error', error: info.error };
134
+ if (!info.exists)
135
+ return { status: 'missing' };
136
+ const missing = Object.keys(cfg.data).filter((k) => !info.dataKeys.includes(k));
137
+ if (missing.length > 0) {
138
+ return {
139
+ status: 'error',
140
+ error: `ConfigMap exists but is missing keys: ${missing.join(', ')}`
141
+ };
142
+ }
143
+ return { status: 'ready', metadata: { keys: info.dataKeys } };
144
+ },
145
+ async checkReady(config, _state, { runtime }) {
146
+ const cfg = ConfigMapConfigSchema.parse(config.config);
147
+ const info = await inspectConfigMap(runtime, cfg);
148
+ if (!info.exists) {
149
+ return {
150
+ ready: false,
151
+ reason: `ConfigMap '${cfg.name}' not found in ${cfg.namespace}`
152
+ };
153
+ }
154
+ const missing = Object.keys(cfg.data).filter((k) => !info.dataKeys.includes(k));
155
+ if (missing.length > 0) {
156
+ return { ready: false, reason: `Missing keys: ${missing.join(', ')}` };
157
+ }
158
+ return { ready: true };
159
+ },
160
+ validateConfig(config) {
161
+ return ConfigMapConfigSchema.parse(config);
162
+ },
163
+ describe(config) {
164
+ const cfg = ConfigMapConfigSchema.parse(config.config);
165
+ return `k8s ConfigMap '${cfg.name}' in ${cfg.namespace}`;
166
+ }
167
+ };
168
+ //# sourceMappingURL=k8s-configmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-configmap.js","sourceRoot":"","sources":["../src/k8s-configmap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ResourceProvider } from '@vibesdotdev/pm/resources/provider';
2
+ export declare const k8sGpuOperatorProvider: ResourceProvider;
3
+ //# sourceMappingURL=k8s-gpu-operator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-gpu-operator.d.ts","sourceRoot":"","sources":["../src/k8s-gpu-operator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,oCAAoC,CAAC;AA2BpG,eAAO,MAAM,sBAAsB,EAAE,gBA2BpC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { CapabilityError } from '@vibesdotdev/kernel';
2
+ import { getRuntimeExecution } from '@vibesdotdev/kernel/execution';
3
+ import { resolvePMToolEnv } from '@vibesdotdev/pm/helpers/process-env';
4
+ import { pollUntil } from '@vibesdotdev/pm/utils/bounded-wait';
5
+ import { toolFailure } from '@vibesdotdev/pm/resources/tool-env';
6
+ import { KUBE_TOOL_INHERIT_ENV } from "./tool-env.js";
7
+ function readyState(config) {
8
+ return { id: config.id, type: config.type, status: 'ready', lastChecked: new Date() };
9
+ }
10
+ async function run(runtime, command, args) {
11
+ return (await getRuntimeExecution(runtime)).execute({
12
+ command,
13
+ args,
14
+ env: await resolvePMToolEnv(runtime, { inheritEnv: KUBE_TOOL_INHERIT_ENV }),
15
+ envMode: 'replace',
16
+ timeout: 120_000,
17
+ killTree: true
18
+ });
19
+ }
20
+ async function requireSuccess(runtime, command, args) {
21
+ const result = await run(runtime, command, args);
22
+ if (result.exitCode !== 0)
23
+ throw toolFailure({ tool: command, action: args.slice(0, 2).join(' '), outcome: result });
24
+ return result;
25
+ }
26
+ const probeArgs = ['get', 'ds', 'nvidia-gpu-operator', '-n', 'gpu-operator'];
27
+ export const k8sGpuOperatorProvider = {
28
+ type: 'k8s/gpu-operator',
29
+ validateConfig(config) { return config; },
30
+ async setup(config, { runtime }) {
31
+ if ((await run(runtime, 'kubectl', probeArgs)).exitCode === 0)
32
+ return { state: readyState(config) };
33
+ await requireSuccess(runtime, 'helm', ['repo', 'add', 'gpu-operator', 'https://nvidia.github.io/gpu-operator']);
34
+ await requireSuccess(runtime, 'helm', ['repo', 'update']);
35
+ await requireSuccess(runtime, 'helm', ['upgrade', '--install', 'gpu-operator', 'gpu-operator/gpu-operator', '--namespace', 'gpu-operator', '--create-namespace']);
36
+ // Bounded by the runtime lifecycle (RC07). Poll: the daemonset (owner)
37
+ // answers readiness only when asked; it publishes no event here.
38
+ const ready = await pollUntil(runtime, async () => {
39
+ const result = await run(runtime, 'kubectl', [...probeArgs, '-o', 'jsonpath={.status.numberReady}']);
40
+ return result.exitCode === 0 && Number.parseInt(result.stdout, 10) > 0;
41
+ }, { timeoutMs: 60_000, intervalMs: 2_000, reason: 'pm-gpu-operator-ready' });
42
+ if (ready)
43
+ return { state: readyState(config) };
44
+ throw new CapabilityError('GPU Operator failed to become ready after timeout', 'TIMEOUT', {
45
+ reason: 'pm-gpu-operator-not-ready',
46
+ retryable: true,
47
+ details: { timeoutMs: 60_000 }
48
+ });
49
+ },
50
+ async status(_id, { runtime }) { return { status: (await run(runtime, 'kubectl', probeArgs)).exitCode === 0 ? 'ready' : 'missing' }; },
51
+ async teardown(_id, _state, { runtime }) { await requireSuccess(runtime, 'helm', ['uninstall', 'gpu-operator', '-n', 'gpu-operator', '--ignore-not-found']); }
52
+ };
53
+ //# sourceMappingURL=k8s-gpu-operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-gpu-operator.js","sourceRoot":"","sources":["../src/k8s-gpu-operator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Kubernetes Namespace Resource Provider
3
+ * Manages K8s namespace creation and deletion
4
+ */
5
+ import * as z from 'zod/v4';
6
+ import type { ResourceProvider, ResourceProviderContext, ResourceSetupResult, ResourceStatusResult, ResourceReadyCheckResult } from '@vibesdotdev/pm/resources/provider';
7
+ import type { ProviderPayload, ResourceConfig, ResourceState } from '@vibesdotdev/pm/schemas/resource';
8
+ /**
9
+ * K8s namespace provider configuration schema
10
+ */
11
+ declare const K8sNamespaceConfigSchema: z.ZodObject<{
12
+ namespace: z.ZodOptional<z.ZodString>;
13
+ context: z.ZodOptional<z.ZodString>;
14
+ labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
15
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
16
+ }, z.core.$strip>;
17
+ type K8sNamespaceConfig = z.infer<typeof K8sNamespaceConfigSchema>;
18
+ /**
19
+ * Kubernetes Namespace Provider
20
+ * Creates and manages K8s namespaces
21
+ */
22
+ export declare class K8sNamespaceProvider implements ResourceProvider<K8sNamespaceConfig> {
23
+ readonly type = "k8s";
24
+ readonly subType = "namespace";
25
+ /**
26
+ * Setup (create or ensure) a namespace
27
+ */
28
+ setup(config: ResourceConfig, { runtime }: ResourceProviderContext): Promise<ResourceSetupResult>;
29
+ /**
30
+ * Teardown (delete) a namespace
31
+ */
32
+ teardown(id: string, state: ResourceState | undefined, { runtime }: ResourceProviderContext): Promise<void>;
33
+ /**
34
+ * Get status of a namespace
35
+ */
36
+ status(id: string, { runtime, config: storedConfig }: ResourceProviderContext): Promise<ResourceStatusResult>;
37
+ /**
38
+ * Check if namespace is ready
39
+ */
40
+ checkReady(config: ResourceConfig, _state: ResourceState, { runtime }: ResourceProviderContext): Promise<ResourceReadyCheckResult>;
41
+ /**
42
+ * Validate provider-specific configuration
43
+ */
44
+ validateConfig(config: ProviderPayload): K8sNamespaceConfig;
45
+ /**
46
+ * Get human-readable description
47
+ */
48
+ describe(config: ResourceConfig): string;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=k8s-namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-namespace.d.ts","sourceRoot":"","sources":["../src/k8s-namespace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAKvG;;GAEG;AACH,QAAA,MAAM,wBAAwB;;;;;iBAK5B,CAAC;AAEH,KAAK,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAiNnE;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB,CAAC,kBAAkB,CAAC;IAChF,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,OAAO,eAAe;IAE/B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BvG;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjH;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASnH;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA+BxI;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,kBAAkB;IAI3D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAMxC"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Kubernetes Namespace Resource Provider
3
+ * Manages K8s namespace creation and deletion
4
+ */
5
+ import { CapabilityError } from '@vibesdotdev/kernel';
6
+ import * as z from 'zod/v4';
7
+ import { attempt } from '@vibesdotdev/pm/utils/attempt';
8
+ import { providerFailureText, toolFailure, toolOutputExcerpt } from '@vibesdotdev/pm/resources/tool-env';
9
+ import { runKubeCapture } from "./tool-env.js";
10
+ /**
11
+ * K8s namespace provider configuration schema
12
+ */
13
+ const K8sNamespaceConfigSchema = z.object({
14
+ namespace: z.string().min(1).optional(), // Namespace name (defaults to resource ID)
15
+ context: z.string().optional(), // K8s context to use
16
+ labels: z.record(z.string(), z.string()).optional(), // Additional labels
17
+ annotations: z.record(z.string(), z.string()).optional() // Additional annotations
18
+ });
19
+ /** What a namespace's stored state remembers: the namespace and the context it was created in. */
20
+ const NamespaceStateMetadataSchema = z.object({
21
+ namespace: z.string().optional().catch(undefined),
22
+ context: z.string().optional().catch(undefined)
23
+ });
24
+ /** The parts of `kubectl get namespace -o json` this provider reports. */
25
+ const NamespaceObjectSchema = z.object({
26
+ status: z.object({ phase: z.string().optional() }).optional(),
27
+ metadata: z.object({ creationTimestamp: z.string().optional() }).optional()
28
+ });
29
+ /** A namespace step's failure, typed, its code and reason kept and its cause carried. */
30
+ function namespaceFailure(prefix, caught) {
31
+ const failure = CapabilityError.from(caught);
32
+ return new CapabilityError(`${prefix}: ${failure.message}`, failure.code, {
33
+ reason: failure.reason,
34
+ retryable: failure.retryable,
35
+ details: failure.details,
36
+ cause: failure
37
+ });
38
+ }
39
+ function isContextMissingError(stderr) {
40
+ return (stderr.includes('context "') ||
41
+ stderr.includes('no context exists with the name') ||
42
+ stderr.includes('context was not found'));
43
+ }
44
+ async function getNamespaceStatus(runtime, namespace, context) {
45
+ const args = ['get', 'namespace', namespace, '-o', 'json', '--request-timeout=5s'];
46
+ if (context) {
47
+ args.unshift('--context', context);
48
+ }
49
+ const { exitCode, stdout, stderr } = await runKubeCapture(runtime, 'kubectl', args);
50
+ return {
51
+ exitCode,
52
+ stdout,
53
+ stderr
54
+ };
55
+ }
56
+ /**
57
+ * Check if K8s cluster is reachable (fast check with short timeout)
58
+ */
59
+ async function checkClusterConnectivity(runtime, context) {
60
+ const args = ['cluster-info', '--request-timeout=5s'];
61
+ if (context) {
62
+ args.unshift('--context', context);
63
+ }
64
+ const probe = await attempt(() => runKubeCapture(runtime, 'kubectl', args));
65
+ if (!probe.ok) {
66
+ return { reachable: false, suggestion: 'kubectl command failed. Is kubectl installed?', failure: probe.failure };
67
+ }
68
+ {
69
+ const { exitCode, stderr } = probe.value;
70
+ if (exitCode === 0) {
71
+ return { reachable: true };
72
+ }
73
+ // Analyze error to provide helpful suggestions
74
+ let suggestion = 'Check your Kubernetes cluster status';
75
+ const isKindContext = context?.includes('kind') || context?.startsWith('kind-');
76
+ if (stderr.includes('dial tcp') ||
77
+ stderr.includes('connection refused') ||
78
+ stderr.includes('operation timed out') ||
79
+ stderr.includes('deadline exceeded') ||
80
+ stderr.includes('Unable to connect')) {
81
+ // Check if it's a kind cluster
82
+ if (isKindContext) {
83
+ const clusterName = context?.replace('kind-', '') || 'vibes-local';
84
+ suggestion =
85
+ `Kind cluster '${clusterName}' is not running. Try:\n` +
86
+ ` 1. Check Docker: docker info\n` +
87
+ ` 2. List clusters: kind get clusters\n` +
88
+ ` 3. Create cluster: kind create cluster --name ${clusterName}`;
89
+ }
90
+ else if (stderr.includes('docker')) {
91
+ suggestion = 'Docker may not be running. Start Docker Desktop or run: docker info';
92
+ }
93
+ else {
94
+ suggestion = 'Kubernetes API server is unreachable. Check if your cluster is running';
95
+ }
96
+ }
97
+ else if (stderr.includes('certificate') || stderr.includes('x509')) {
98
+ suggestion = 'Certificate error. Your kubeconfig may be stale. Try: kubectl config view';
99
+ }
100
+ return { reachable: false, error: toolOutputExcerpt(stderr), suggestion };
101
+ }
102
+ }
103
+ /** Render the namespace manifest with a client dry run, then apply it (idempotent). */
104
+ async function createNamespace(runtime, config, providerConfig, namespace, kubectlArgs) {
105
+ // Create namespace manifest
106
+ const createRun = await runKubeCapture(runtime, 'kubectl', kubectlArgs);
107
+ const createOutput = createRun.stdout;
108
+ if (createRun.exitCode !== 0) {
109
+ throw toolFailure({ tool: 'kubectl', action: 'create namespace --dry-run', outcome: createRun });
110
+ }
111
+ // Apply the manifest (idempotent)
112
+ const applyArgs = ['apply', '-f', '-'];
113
+ if (providerConfig.context) {
114
+ applyArgs.unshift('--context', providerConfig.context);
115
+ }
116
+ const applyRun = await runKubeCapture(runtime, 'kubectl', applyArgs, { stdin: createOutput });
117
+ const applyOutput = applyRun.stdout;
118
+ if (applyRun.exitCode !== 0) {
119
+ throw toolFailure({ tool: 'kubectl', action: 'apply namespace', outcome: applyRun });
120
+ }
121
+ // Return success state
122
+ const state = {
123
+ id: config.id,
124
+ type: 'k8s/namespace',
125
+ status: 'ready',
126
+ createdAt: new Date(),
127
+ lastChecked: new Date(),
128
+ metadata: {
129
+ namespace,
130
+ context: providerConfig.context,
131
+ output: applyOutput.trim()
132
+ }
133
+ };
134
+ return {
135
+ state,
136
+ metadata: {
137
+ namespace,
138
+ message: applyOutput.trim()
139
+ }
140
+ };
141
+ }
142
+ /** The namespace's status through `kubectl get`, falling back from an inferred context that does not exist. */
143
+ async function probeNamespaceStatus(runtime, namespace, preferredContext, providerConfig) {
144
+ let statusResult = await getNamespaceStatus(runtime, namespace, preferredContext);
145
+ // If inferred context is missing, fall back to current context.
146
+ if (!providerConfig?.context &&
147
+ statusResult.exitCode !== 0 &&
148
+ isContextMissingError(statusResult.stderr)) {
149
+ statusResult = await getNamespaceStatus(runtime, namespace);
150
+ }
151
+ if (statusResult.exitCode === 0) {
152
+ const ns = NamespaceObjectSchema.parse(JSON.parse(statusResult.stdout));
153
+ return {
154
+ status: 'ready',
155
+ metadata: {
156
+ phase: ns.status?.phase,
157
+ creationTimestamp: ns.metadata?.creationTimestamp,
158
+ context: preferredContext
159
+ }
160
+ };
161
+ }
162
+ if (statusResult.stderr.includes('not found')) {
163
+ return {
164
+ status: 'missing'
165
+ };
166
+ }
167
+ return {
168
+ status: 'error',
169
+ error: toolOutputExcerpt(statusResult.stderr)
170
+ };
171
+ }
172
+ /**
173
+ * Kubernetes Namespace Provider
174
+ * Creates and manages K8s namespaces
175
+ */
176
+ export class K8sNamespaceProvider {
177
+ type = 'k8s';
178
+ subType = 'namespace';
179
+ /**
180
+ * Setup (create or ensure) a namespace
181
+ */
182
+ async setup(config, { runtime }) {
183
+ const providerConfig = this.validateConfig(config.config);
184
+ const namespace = providerConfig.namespace || config.id;
185
+ // Fast cluster connectivity check (5s timeout instead of 30s)
186
+ const connectivity = await checkClusterConnectivity(runtime, providerConfig.context);
187
+ if (!connectivity.reachable) {
188
+ const contextInfo = providerConfig.context ? ` (context: ${providerConfig.context})` : '';
189
+ throw new CapabilityError(`K8s cluster unreachable${contextInfo}.`, 'UNAVAILABLE', {
190
+ reason: 'pm-k8s-cluster-unreachable',
191
+ recoveryHint: connectivity.suggestion || 'Check cluster status',
192
+ cause: connectivity.failure
193
+ });
194
+ }
195
+ // Build kubectl command
196
+ const kubectlArgs = ['create', 'namespace', namespace, '--dry-run=client', '-o', 'yaml'];
197
+ if (providerConfig.context) {
198
+ kubectlArgs.unshift('--context', providerConfig.context);
199
+ }
200
+ const created = await attempt(() => createNamespace(runtime, config, providerConfig, namespace, kubectlArgs));
201
+ if (!created.ok)
202
+ throw namespaceFailure(`Failed to set up K8s namespace '${namespace}'`, created.failure);
203
+ return created.value;
204
+ }
205
+ /**
206
+ * Teardown (delete) a namespace
207
+ */
208
+ async teardown(id, state, { runtime }) {
209
+ const remembered = NamespaceStateMetadataSchema.parse(state?.metadata ?? {});
210
+ const namespace = remembered.namespace || id;
211
+ const context = remembered.context;
212
+ const args = ['delete', 'namespace', namespace, '--ignore-not-found=true'];
213
+ if (context) {
214
+ args.unshift('--context', context);
215
+ }
216
+ const deleted = await attempt(async () => {
217
+ const { exitCode, stderr } = await runKubeCapture(runtime, 'kubectl', args);
218
+ if (exitCode !== 0 && !stderr.includes('not found')) {
219
+ throw toolFailure({ tool: 'kubectl', action: 'delete namespace', outcome: { exitCode, stderr } });
220
+ }
221
+ });
222
+ if (!deleted.ok)
223
+ throw namespaceFailure(`Failed to tear down K8s namespace '${namespace}'`, deleted.failure);
224
+ }
225
+ /**
226
+ * Get status of a namespace
227
+ */
228
+ async status(id, { runtime, config: storedConfig }) {
229
+ const providerConfig = storedConfig ? this.validateConfig(storedConfig.config) : undefined;
230
+ const namespace = providerConfig?.namespace || id;
231
+ const preferredContext = providerConfig?.context ?? `kind-${namespace}`;
232
+ const probed = await attempt(() => probeNamespaceStatus(runtime, namespace, preferredContext, providerConfig));
233
+ return probed.ok ? probed.value : { status: 'error', error: providerFailureText(probed.failure) };
234
+ }
235
+ /**
236
+ * Check if namespace is ready
237
+ */
238
+ async checkReady(config, _state, { runtime }) {
239
+ const providerConfig = this.validateConfig(config.config);
240
+ const namespace = providerConfig.namespace || config.id;
241
+ const context = providerConfig.context;
242
+ const args = ['get', 'namespace', namespace, '-o', 'jsonpath={.status.phase}'];
243
+ if (context) {
244
+ args.unshift('--context', context);
245
+ }
246
+ const probed = await attempt(() => runKubeCapture(runtime, 'kubectl', args));
247
+ if (!probed.ok) {
248
+ return {
249
+ ready: false,
250
+ reason: providerFailureText(probed.failure),
251
+ retryAfter: 2000
252
+ };
253
+ }
254
+ const { exitCode, stdout } = probed.value;
255
+ if (exitCode === 0 && stdout.trim() === 'Active') {
256
+ return { ready: true };
257
+ }
258
+ return {
259
+ ready: false,
260
+ reason: `Namespace phase: ${stdout.trim() || 'unknown'}`,
261
+ retryAfter: 1000
262
+ };
263
+ }
264
+ /**
265
+ * Validate provider-specific configuration
266
+ */
267
+ validateConfig(config) {
268
+ return K8sNamespaceConfigSchema.parse(config);
269
+ }
270
+ /**
271
+ * Get human-readable description
272
+ */
273
+ describe(config) {
274
+ const providerConfig = this.validateConfig(config.config);
275
+ const namespace = providerConfig.namespace || config.id;
276
+ const context = providerConfig.context ? ` (context: ${providerConfig.context})` : '';
277
+ return `Kubernetes namespace '${namespace}'${context}`;
278
+ }
279
+ }
280
+ //# sourceMappingURL=k8s-namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-namespace.js","sourceRoot":"","sources":["../src/k8s-namespace.ts"],"names":[],"mappings":"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"}