@vfarcic/dot-ai 0.171.0 → 0.172.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.
package/README.md CHANGED
@@ -39,6 +39,13 @@ DevOps AI Toolkit brings AI-powered intelligence to platform engineering, Kubern
39
39
  - Automated repository setup with governance files
40
40
  - Shared prompt libraries for consistent workflows
41
41
 
42
+ ## Deployment Options
43
+
44
+ - **[Kubernetes Setup](https://devopstoolkit.ai/docs/mcp/setup/kubernetes-setup/)** - Recommended: Full features with autonomous capability scanning
45
+ - **[ToolHive Setup](https://devopstoolkit.ai/docs/mcp/setup/kubernetes-toolhive-setup/)** - Operator-managed Kubernetes deployment
46
+ - **[Docker Setup](https://devopstoolkit.ai/docs/mcp/setup/docker-setup/)** - Local development (manual capability scanning only)
47
+ - **[NPX Setup](https://devopstoolkit.ai/docs/mcp/setup/npx-setup/)** - Quick trials with Node.js
48
+
42
49
  [Read the Documentation](https://devopstoolkit.ai/docs/mcp/)
43
50
 
44
51
  ## Support
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
@@ -413,12 +413,34 @@ class KubernetesDiscovery {
413
413
  // Parse the standard kubectl api-resources format:
414
414
  // NAME SHORTNAMES APIVERSION NAMESPACED KIND
415
415
  // pods po v1 true Pod
416
+ // bindings v1 true Binding (no shortname)
416
417
  const parts = line.trim().split(/\s+/);
417
- if (parts.length < 5) {
418
- // Skip malformed lines
418
+ if (parts.length < 4) {
419
+ // Skip truly malformed lines (need at least name, apiVersion, namespaced, kind)
419
420
  return null;
420
421
  }
421
- const [name, shortNames, apiVersion, namespaced, kind] = parts;
422
+ let name, shortNames, apiVersion, namespaced, kind;
423
+ if (parts.length === 4) {
424
+ // No shortnames column: name, apiVersion, namespaced, kind
425
+ [name, apiVersion, namespaced, kind] = parts;
426
+ shortNames = '';
427
+ }
428
+ else {
429
+ // parts.length >= 5: Has shortnames column: name, shortNames, apiVersion, namespaced, kind
430
+ // But need to verify column 2 is actually shortnames, not apiVersion
431
+ // apiVersion matches patterns like "v1", "apps/v1", "networking.k8s.io/v1"
432
+ const col2 = parts[1];
433
+ const looksLikeApiVersion = col2.includes('/') || /^v\d/.test(col2);
434
+ if (looksLikeApiVersion) {
435
+ // Column 2 is apiVersion, no shortnames
436
+ [name, apiVersion, namespaced, kind] = parts;
437
+ shortNames = '';
438
+ }
439
+ else {
440
+ // Column 2 is shortnames
441
+ [name, shortNames, apiVersion, namespaced, kind] = parts;
442
+ }
443
+ }
422
444
  // Extract group from apiVersion (e.g., "apps/v1" -> "apps", "v1" -> "")
423
445
  let group = '';
424
446
  if (apiVersion && apiVersion.includes('/')) {
@@ -40,6 +40,9 @@ export declare const ORGANIZATIONAL_DATA_TOOL_INPUT_SCHEMA: {
40
40
  apiVersion: z.ZodString;
41
41
  }, z.core.$strip>>;
42
42
  resourceList: z.ZodOptional<z.ZodString>;
43
+ mode: z.ZodOptional<z.ZodEnum<{
44
+ full: "full";
45
+ }>>;
43
46
  collection: z.ZodOptional<z.ZodString>;
44
47
  interaction_id: z.ZodOptional<z.ZodString>;
45
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"organizational-data.d.ts","sourceRoot":"","sources":["../../src/tools/organizational-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAehD,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAC7D,eAAO,MAAM,oCAAoC,+jBAAyjB,CAAC;AAG3mB,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjD,CAAC;AAklBF;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,KAAK,GAAG,IAAI,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA0Hd"}
1
+ {"version":3,"file":"organizational-data.d.ts","sourceRoot":"","sources":["../../src/tools/organizational-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAehD,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAC7D,eAAO,MAAM,oCAAoC,+jBAAyjB,CAAC;AAG3mB,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BjD,CAAC;AA0sBF;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,KAAK,GAAG,IAAI,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA0Hd"}
@@ -78,8 +78,10 @@ exports.ORGANIZATIONAL_DATA_TOOL_INPUT_SCHEMA = {
78
78
  group: zod_1.z.string(),
79
79
  apiVersion: zod_1.z.string()
80
80
  }).optional().describe('Kubernetes resource reference (for capabilities operations)'),
81
- // Resource list for specific resource scanning
82
- resourceList: zod_1.z.string().optional().describe('Comma-separated list of resources to scan (format: Kind.group or Kind for core resources)'),
81
+ // Resource list for specific resource scanning (fire-and-forget when no sessionId)
82
+ resourceList: zod_1.z.string().optional().describe('Comma-separated list of resources to scan (format: Kind.group or Kind for core resources). When provided without sessionId, triggers a fire-and-forget targeted scan.'),
83
+ // Fire-and-forget scan mode (for controller integration)
84
+ mode: zod_1.z.enum(['full']).optional().describe('Scan mode: "full" triggers a fire-and-forget full cluster scan that returns immediately and scans all resources in the cluster. Mutually exclusive with resourceList.'),
83
85
  // Collection name for capabilities (allows using different collections for different purposes)
84
86
  collection: zod_1.z.string().optional().describe('Collection name for capabilities operations (default: "capabilities", use "capabilities-policies" for pre-populated test data)'),
85
87
  interaction_id: zod_1.z.string().optional().describe('INTERNAL ONLY - Do not populate. Used for evaluation dataset generation.')
@@ -197,6 +199,85 @@ function createCapabilityScanCompletionResponse(sessionId, totalProcessed, succe
197
199
  userNote: "The above options are available for you to choose from - the system will not execute them automatically."
198
200
  };
199
201
  }
202
+ /**
203
+ * Handle fire-and-forget capability scanning (PRD #216 - Controller Integration)
204
+ *
205
+ * This function provides a simplified API for automated controllers to trigger
206
+ * capability scans without going through the interactive workflow.
207
+ *
208
+ * Two modes:
209
+ * 1. mode: "full" - Triggers full cluster scan
210
+ * 2. resourceList: "Kind.group,Kind.group" - Triggers targeted scan
211
+ *
212
+ * Both modes return immediately with { status: "started" } and run scanning in background.
213
+ */
214
+ async function handleFireAndForgetScan(args, logger, requestId, capabilityService) {
215
+ const isFullScan = args.mode === 'full';
216
+ const isTargetedScan = !!args.resourceList;
217
+ logger.info('Fire-and-forget scan initiated', {
218
+ requestId,
219
+ mode: isFullScan ? 'full' : 'targeted',
220
+ resourceList: args.resourceList
221
+ });
222
+ // Create a session for progress tracking (controllers can optionally poll for status)
223
+ const sessionId = `cap-scan-${Date.now()}-${(0, crypto_1.randomUUID)().substring(0, 8)}`;
224
+ const session = {
225
+ sessionId,
226
+ currentStep: 'scanning',
227
+ startedAt: new Date().toISOString(),
228
+ lastActivity: new Date().toISOString(),
229
+ selectedResources: isFullScan ? 'all' : undefined,
230
+ resourceList: args.resourceList,
231
+ currentResourceIndex: 0
232
+ };
233
+ // If targeted scan, parse and validate resources
234
+ const parsedResources = isTargetedScan && !isFullScan
235
+ ? args.resourceList.split(',').map((r) => r.trim()).filter((r) => r.length > 0)
236
+ : [];
237
+ if (isTargetedScan && !isFullScan) {
238
+ if (parsedResources.length === 0) {
239
+ return {
240
+ success: false,
241
+ operation: 'scan',
242
+ dataType: 'capabilities',
243
+ error: {
244
+ message: 'Empty resource list',
245
+ details: 'resourceList parameter must contain at least one resource'
246
+ }
247
+ };
248
+ }
249
+ session.selectedResources = parsedResources;
250
+ }
251
+ // Save session for progress tracking
252
+ saveCapabilitySession(session);
253
+ // Start scanning in background (don't await) - fire and forget
254
+ (0, capability_scan_workflow_1.handleScanning)(session, { ...args, response: undefined }, logger, requestId, capabilityService, parseNumericResponse, transitionCapabilitySession, cleanupCapabilitySession, createCapabilityScanCompletionResponse).catch(error => {
255
+ logger.error('Background fire-and-forget scan failed', error, {
256
+ requestId,
257
+ sessionId: session.sessionId,
258
+ mode: isFullScan ? 'full' : 'targeted'
259
+ });
260
+ });
261
+ // Return immediately - don't wait for scan to complete
262
+ const resourceCount = parsedResources.length > 0 ? parsedResources.length : undefined;
263
+ return {
264
+ success: true,
265
+ operation: 'scan',
266
+ dataType: 'capabilities',
267
+ status: 'started',
268
+ mode: isFullScan ? 'full' : 'targeted',
269
+ sessionId: session.sessionId,
270
+ message: isFullScan
271
+ ? 'Full cluster scan initiated. Scan runs in background.'
272
+ : `Scan initiated for ${resourceCount} resource(s). Scan runs in background.`,
273
+ ...(resourceCount && { resourceCount }),
274
+ checkProgress: {
275
+ dataType: 'capabilities',
276
+ operation: 'progress',
277
+ sessionId: session.sessionId
278
+ }
279
+ };
280
+ }
200
281
  /**
201
282
  * Handle capabilities operations - PRD #48 Implementation
202
283
  */
@@ -481,6 +562,19 @@ async function handleCapabilityScan(args, logger, requestId) {
481
562
  vectorDB: 'healthy',
482
563
  embeddings: 'available'
483
564
  });
565
+ // ============================================================================
566
+ // FIRE-AND-FORGET MODE (PRD #216 - Controller Integration)
567
+ // ============================================================================
568
+ // Check for fire-and-forget parameters BEFORE interactive workflow
569
+ // This allows controllers to trigger scans without going through the interactive steps
570
+ // ============================================================================
571
+ const isFireAndForget = !args.sessionId && (args.mode === 'full' || args.resourceList);
572
+ if (isFireAndForget) {
573
+ return await handleFireAndForgetScan(args, logger, requestId, capabilityService);
574
+ }
575
+ // ============================================================================
576
+ // INTERACTIVE WORKFLOW MODE (Existing behavior for human users)
577
+ // ============================================================================
484
578
  // Get or create session with step-based state management
485
579
  const session = getOrCreateCapabilitySession(args.sessionId, args, logger, requestId);
486
580
  // Validate client is on correct step - only for existing sessions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vfarcic/dot-ai",
3
- "version": "0.171.0",
3
+ "version": "0.172.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",
@@ -82,7 +82,7 @@ Proceed with closure? (yes/no)
82
82
 
83
83
  ### Step 3: Update PRD File
84
84
 
85
- Update the PRD metadata and add completion work log:
85
+ Update the PRD metadata:
86
86
 
87
87
  **Metadata Updates:**
88
88
  ```markdown
@@ -91,34 +91,6 @@ Update the PRD metadata and add completion work log:
91
91
  **Completed**: [Current Date] [or] **Closed**: [Current Date]
92
92
  ```
93
93
 
94
- **Add Work Log Entry:**
95
- ```markdown
96
- ### [Date]: PRD Closure - [Reason Category]
97
- **Duration**: N/A (administrative closure)
98
- **Status**: [Complete/Closed]
99
-
100
- **Closure Summary**:
101
- [Explain why PRD is being closed]
102
-
103
- **Implementation Evidence**: [If applicable]
104
- [Link to external project, previous PR, or existing functionality]
105
-
106
- **Key Points**:
107
- - [What was requested in original PRD]
108
- - [How/where it was implemented, or why no longer needed]
109
- - [Any gaps or differences from original requirements]
110
-
111
- [If "Already Implemented"]
112
- **Functionality Delivered**:
113
- - [Feature 1] - Implemented in [location/project]
114
- - [Feature 2] - Implemented in [location/project]
115
-
116
- [If "No Longer Needed"]
117
- **Reason for Closure**:
118
- - [Why requirements changed]
119
- - [What superseded this PRD]
120
- ```
121
-
122
94
  ### Step 4: Move PRD to Archive
123
95
 
124
96
  Move the PRD file to the done directory and update roadmap:
@@ -219,7 +191,6 @@ git commit -m "docs(prd-[number]): close PRD #[number] - [brief reason] [skip ci
219
191
 
220
192
  - Moved PRD to prds/done/ directory
221
193
  - Updated PRD status to [Complete/Closed]
222
- - Added work log documenting [closure reason]
223
194
  - Updated GitHub issue description with new path
224
195
  - [Implementation details or reason]
225
196
 
@@ -296,7 +267,7 @@ Requirements have evolved and this PRD is out of scope.
296
267
 
297
268
  ## Success Criteria
298
269
 
299
- ✅ **PRD file updated** with completion/closure metadata and work log
270
+ ✅ **PRD file updated** with completion/closure metadata
300
271
  ✅ **PRD archived** to `prds/done/` directory
301
272
  ✅ **GitHub issue updated** with new PRD path
302
273
  ✅ **GitHub issue closed** with comprehensive closure comment
@@ -307,6 +278,6 @@ Requirements have evolved and this PRD is out of scope.
307
278
 
308
279
  - **No PR required**: This workflow commits directly to main for documentation-only changes
309
280
  - **Skip CI**: Always include `[skip ci]` to avoid unnecessary CI runs
310
- - **Comprehensive documentation**: Ensure work log and issue comment clearly explain closure
281
+ - **Comprehensive documentation**: Ensure issue comment clearly explains closure reason
311
282
  - **Implementation references**: Link to external projects, repos, or PRs where functionality exists
312
283
  - **Gap acknowledgment**: Be honest about what's implemented vs. what's missing
@@ -17,7 +17,7 @@ You are helping update an existing Product Requirements Document (PRD) based on
17
17
  3. **Map Changes to PRD Items** - Intelligently connect work to requirements
18
18
  4. **Propose Updates** - Suggest checkbox completions and requirement changes
19
19
  5. **User Confirmation** - Verify proposals and handle edge cases
20
- 6. **Update PRD** - Apply changes and add work log entry
20
+ 6. **Update PRD** - Apply changes to checkboxes and status
21
21
  7. **Flag Divergences** - Alert when actual work differs from planned work
22
22
  8. **Commit Progress Updates** - Preserve progress checkpoint
23
23
  9. **Continue to Next Task** - Prompt user to run /prd-next
@@ -181,26 +181,6 @@ Present a comprehensive breakdown:
181
181
  **CLEARLY list what still needs to be done.**
182
182
  **DO NOT claim "everything is done" unless ALL items are truly complete.**
183
183
 
184
- ### Work Log Updates
185
- Propose adding a work log entry summarizing completed work:
186
- ```markdown
187
- ### [Date]: Implementation Progress Update
188
- **Duration**: [X hours estimated based on commit timestamps]
189
- **Commits**: [X commits]
190
- **Primary Focus**: [Main area of work based on file changes]
191
-
192
- **Completed PRD Items**:
193
- - [x] [Requirement] - Evidence: [specific files/changes]
194
- - [x] [Second requirement] - Evidence: [specific files/changes]
195
-
196
- **Additional Work Done**:
197
- - [Unexpected work that emerged during implementation]
198
- - [Refactoring or improvements not originally planned]
199
-
200
- **Next Session Priorities**:
201
- - [Items that should be worked on next based on current state]
202
- ```
203
-
204
184
  ## Step 5: Implementation vs Plan Analysis
205
185
 
206
186
  ### Divergence Detection
@@ -243,10 +223,9 @@ Wait for user confirmation before making changes, and handle:
243
223
 
244
224
  When applying updates:
245
225
  1. **Update only confirmed items** - Don't make assumptions
246
- 2. **Add detailed work log entry** with evidence links
247
- 3. **Update status sections** to reflect current phase
248
- 4. **Preserve unchecked items** that still need work
249
- 5. **Update completion percentages** realistically
226
+ 2. **Update status sections** to reflect current phase
227
+ 3. **Preserve unchecked items** that still need work
228
+ 4. **Update completion percentages** realistically
250
229
 
251
230
  ## Step 7.5: Code Example Validation
252
231
 
@@ -299,7 +278,6 @@ git commit -m "feat(prd-X): implement [brief description of completed work]
299
278
 
300
279
  - [Brief list of key implementation achievements]
301
280
  - Updated PRD checkboxes for completed items
302
- - Added work log entry with progress summary
303
281
 
304
282
  Progress: X% complete - [next major milestone]"
305
283
  ```