@vfarcic/dot-ai 0.185.0 → 0.186.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.
@@ -40,6 +40,12 @@ export interface SystemStatus {
40
40
  documentsCount?: number;
41
41
  error?: string;
42
42
  };
43
+ resources: {
44
+ exists: boolean;
45
+ documentsCount?: number;
46
+ syncedTypes?: string[];
47
+ error?: string;
48
+ };
43
49
  };
44
50
  };
45
51
  embedding: {
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,7 @@ const path_1 = require("path");
49
49
  const zod_1 = require("zod");
50
50
  const k8s = __importStar(require("@kubernetes/client-node"));
51
51
  const index_1 = require("../core/index");
52
+ const resource_vector_service_1 = require("../core/resource-vector-service");
52
53
  const discovery_1 = require("../core/discovery");
53
54
  const kubernetes_utils_1 = require("../core/kubernetes-utils");
54
55
  const tracing_1 = require("../core/tracing");
@@ -78,7 +79,8 @@ async function getVectorDBStatus() {
78
79
  collections: {
79
80
  patterns: { exists: false, error: 'Vector DB not accessible' },
80
81
  policies: { exists: false, error: 'Vector DB not accessible' },
81
- capabilities: { exists: false, error: 'Vector DB not accessible' }
82
+ capabilities: { exists: false, error: 'Vector DB not accessible' },
83
+ resources: { exists: false, error: 'Vector DB not accessible' }
82
84
  }
83
85
  };
84
86
  }
@@ -101,13 +103,16 @@ async function getVectorDBStatus() {
101
103
  const capabilityService = new index_1.CapabilityVectorService();
102
104
  return capabilityService.getCapabilitiesCount();
103
105
  });
106
+ // Test resources collection and get synced types
107
+ const resourcesStatus = await testResourcesCollectionStatus(embeddingService);
104
108
  return {
105
109
  connected: true,
106
110
  url: config.url || 'unknown',
107
111
  collections: {
108
112
  patterns: patternsStatus,
109
113
  policies: policiesStatus,
110
- capabilities: capabilitiesStatus
114
+ capabilities: capabilitiesStatus,
115
+ resources: resourcesStatus
111
116
  }
112
117
  };
113
118
  }
@@ -119,7 +124,8 @@ async function getVectorDBStatus() {
119
124
  collections: {
120
125
  patterns: { exists: false, error: 'Vector DB connection failed' },
121
126
  policies: { exists: false, error: 'Vector DB connection failed' },
122
- capabilities: { exists: false, error: 'Vector DB connection failed' }
127
+ capabilities: { exists: false, error: 'Vector DB connection failed' },
128
+ resources: { exists: false, error: 'Vector DB connection failed' }
123
129
  }
124
130
  };
125
131
  }
@@ -147,6 +153,40 @@ async function testCollectionStatus(collectionName, getCountFn) {
147
153
  };
148
154
  }
149
155
  }
156
+ /**
157
+ * Test resources collection status and get unique synced resource types
158
+ */
159
+ async function testResourcesCollectionStatus(embeddingService) {
160
+ try {
161
+ const resourceVectorDB = new index_1.VectorDBService({ collectionName: 'resources' });
162
+ const resourceService = new resource_vector_service_1.ResourceVectorService('resources', resourceVectorDB, embeddingService);
163
+ const resources = await resourceService.listResources();
164
+ const documentsCount = resources.length;
165
+ // Extract unique resource types as "kind.group" (e.g., "Deployment.apps", "Service.")
166
+ const typeSet = new Set();
167
+ for (const resource of resources) {
168
+ const group = resource.apiGroup || '';
169
+ const syncedType = group ? `${resource.kind}.${group}` : resource.kind;
170
+ typeSet.add(syncedType);
171
+ }
172
+ const syncedTypes = Array.from(typeSet).sort();
173
+ return {
174
+ exists: true,
175
+ documentsCount,
176
+ syncedTypes
177
+ };
178
+ }
179
+ catch (error) {
180
+ const errorMessage = error instanceof Error ? error.message : String(error);
181
+ const collectionNotExists = errorMessage.toLowerCase().includes('collection') &&
182
+ (errorMessage.toLowerCase().includes('not exist') ||
183
+ errorMessage.toLowerCase().includes('does not exist'));
184
+ return {
185
+ exists: false,
186
+ error: collectionNotExists ? 'resources collection does not exist' : errorMessage
187
+ };
188
+ }
189
+ }
150
190
  /**
151
191
  * Test embedding service status
152
192
  * Performs actual embedding generation test to verify service works
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vfarcic/dot-ai",
3
- "version": "0.185.0",
3
+ "version": "0.186.0",
4
4
  "description": "AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance",
5
5
  "mcpName": "io.github.vfarcic/dot-ai",
6
6
  "main": "dist/index.js",
package/scripts/dot-ai.nu CHANGED
@@ -1,57 +1,6 @@
1
1
  #!/usr/bin/env nu
2
2
 
3
- # Installs DevOps AI Controller
4
- #
5
- # Examples:
6
- # > main apply dot-ai-controller
7
- # > main apply dot-ai-controller --controller-version 0.17.0
8
- def "main apply dot-ai-controller" [
9
- --controller-version = "0.39.0"
10
- ] {
11
-
12
- (
13
- helm upgrade --install dot-ai-controller
14
- $"oci://ghcr.io/vfarcic/dot-ai-controller/charts/dot-ai-controller:($controller_version)"
15
- --namespace dot-ai --create-namespace
16
- --wait
17
- )
18
-
19
- # Create CapabilityScanConfig for autonomous capability discovery
20
- "apiVersion: dot-ai.devopstoolkit.live/v1alpha1
21
- kind: CapabilityScanConfig
22
- metadata:
23
- name: default-scan
24
- namespace: dot-ai
25
- spec:
26
- mcp:
27
- endpoint: http://dot-ai-mcp.dot-ai.svc.cluster.local:3456/api/v1/tools/manageOrgData
28
- authSecretRef:
29
- name: dot-ai-secrets
30
- key: auth-token
31
- " | kubectl apply --filename -
32
-
33
- # Create ResourceSyncConfig for semantic search across cluster resources
34
- "apiVersion: dot-ai.devopstoolkit.live/v1alpha1
35
- kind: ResourceSyncConfig
36
- metadata:
37
- name: default-sync
38
- namespace: dot-ai
39
- spec:
40
- mcpEndpoint: http://dot-ai-mcp.dot-ai.svc.cluster.local:3456/api/v1/resources/sync
41
- mcpAuthSecretRef:
42
- name: dot-ai-secrets
43
- key: auth-token
44
- debounceWindowSeconds: 10
45
- resyncIntervalMinutes: 60
46
- " | kubectl apply --filename -
47
-
48
- print $"DevOps AI Controller (ansi yellow_bold)($controller_version)(ansi reset) installed in (ansi yellow_bold)dot-ai(ansi reset) namespace"
49
- print $"CapabilityScanConfig created for autonomous capability discovery"
50
- print $"ResourceSyncConfig created for semantic search across cluster resources"
51
-
52
- }
53
-
54
- # Installs DevOps AI Toolkit with MCP server support and controller
3
+ # Installs DevOps AI Toolkit stack (MCP server, controller, and UI)
55
4
  #
56
5
  # Examples:
57
6
  # > main apply dot-ai --host dot-ai.127.0.0.1.nip.io
@@ -66,8 +15,8 @@ def "main apply dot-ai" [
66
15
  --ingress-enabled = true,
67
16
  --ingress-class = "nginx",
68
17
  --host = "dot-ai.127.0.0.1.nip.io",
69
- --version = "0.179.0",
70
- --controller-version = "0.39.0",
18
+ --ui-host = "dot-ai-ui.127.0.0.1.nip.io",
19
+ --stack-version = "0.9.0",
71
20
  --enable-tracing = false
72
21
  ] {
73
22
 
@@ -85,42 +34,40 @@ def "main apply dot-ai" [
85
34
 
86
35
  let tracing_flags = if $enable_tracing {
87
36
  [
88
- --set 'extraEnv[0].name=OTEL_TRACING_ENABLED'
89
- --set-string 'extraEnv[0].value=true'
90
- --set 'extraEnv[1].name=OTEL_EXPORTER_OTLP_ENDPOINT'
91
- --set 'extraEnv[1].value=http://jaeger-collector.observability.svc.cluster.local:4318/v1/traces'
92
- --set 'extraEnv[2].name=OTEL_SERVICE_NAME'
93
- --set 'extraEnv[2].value=dot-ai-mcp'
37
+ --set 'dot-ai.extraEnv[0].name=OTEL_TRACING_ENABLED'
38
+ --set-string 'dot-ai.extraEnv[0].value=true'
39
+ --set 'dot-ai.extraEnv[1].name=OTEL_EXPORTER_OTLP_ENDPOINT'
40
+ --set 'dot-ai.extraEnv[1].value=http://jaeger-collector.observability.svc.cluster.local:4318/v1/traces'
41
+ --set 'dot-ai.extraEnv[2].name=OTEL_SERVICE_NAME'
42
+ --set 'dot-ai.extraEnv[2].value=dot-ai-mcp'
94
43
  ]
95
44
  } else {
96
45
  []
97
46
  }
98
47
 
99
- # Install MCP first (creates service and secrets needed by controller's CapabilityScanConfig)
100
48
  (
101
- helm upgrade --install dot-ai-mcp
102
- $"oci://ghcr.io/vfarcic/dot-ai/charts/dot-ai:($version)"
103
- --set $"secrets.anthropic.apiKey=($anthropic_key)"
104
- --set $"secrets.openai.apiKey=($openai_key)"
105
- --set $"secrets.auth.token=($auth_token)"
106
- --set $"ai.provider=($provider)"
107
- --set $"ai.model=($model)"
108
- --set $"ingress.enabled=($ingress_enabled)"
109
- --set $"ingress.className=($ingress_class)"
110
- --set $"ingress.host=($host)"
111
- --set "controller.enabled=true"
49
+ helm upgrade --install dot-ai-stack
50
+ $"oci://ghcr.io/vfarcic/dot-ai-stack/charts/dot-ai-stack:($stack_version)"
51
+ --set $"dot-ai.secrets.anthropic.apiKey=($anthropic_key)"
52
+ --set $"dot-ai.secrets.openai.apiKey=($openai_key)"
53
+ --set $"dot-ai.secrets.auth.token=($auth_token)"
54
+ --set $"dot-ai.ai.provider=($provider)"
55
+ --set $"dot-ai.ai.model=($model)"
56
+ --set $"dot-ai.ingress.enabled=($ingress_enabled)"
57
+ --set $"dot-ai.ingress.className=($ingress_class)"
58
+ --set $"dot-ai.ingress.host=($host)"
59
+ --set $"dot-ai-ui.ingress.enabled=($ingress_enabled)"
60
+ --set $"dot-ai-ui.ingress.host=($ui_host)"
112
61
  ...$tracing_flags
113
62
  --namespace dot-ai --create-namespace
114
63
  --wait
115
64
  )
116
65
 
117
- # Install controller after MCP (CapabilityScanConfig references MCP service and secrets)
118
- main apply dot-ai-controller --controller-version $controller_version
119
-
120
66
  print $"DevOps AI Toolkit is available at (ansi yellow_bold)http://($host)(ansi reset)"
67
+ print $"DevOps AI UI is available at (ansi yellow_bold)http://($ui_host)(ansi reset)"
121
68
 
122
69
  # Update .env with auth token for MCP clients
123
- $"DOT_AI_AUTH_TOKEN=($auth_token)\n" | save --force .env
70
+ $"DOT_AI_AUTH_TOKEN=($auth_token)\n" | save --append .env
124
71
 
125
72
  if $enable_tracing {
126
73
  print $"Tracing enabled: Traces will be sent to (ansi yellow_bold)Jaeger in observability namespace(ansi reset)"