@vfarcic/dot-ai 0.4.9 → 0.5.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 (145) hide show
  1. package/.claude/commands/context-load.md +11 -0
  2. package/.claude/commands/context-save.md +16 -0
  3. package/.claude/commands/prd-done.md +115 -0
  4. package/.claude/commands/prd-get.md +25 -0
  5. package/.claude/commands/prd-start.md +87 -0
  6. package/.claude/commands/task-done.md +77 -0
  7. package/.claude/commands/tests-reminder.md +32 -0
  8. package/.claude/settings.local.json +20 -0
  9. package/.eslintrc.json +25 -0
  10. package/.github/workflows/ci.yml +170 -0
  11. package/.prettierrc.json +10 -0
  12. package/.teller.yml +8 -0
  13. package/CLAUDE.md +162 -0
  14. package/assets/images/logo.png +0 -0
  15. package/bin/dot-ai.ts +47 -0
  16. package/destroy.sh +45 -0
  17. package/devbox.json +13 -0
  18. package/devbox.lock +225 -0
  19. package/docs/API.md +449 -0
  20. package/docs/CONTEXT.md +49 -0
  21. package/docs/DEVELOPMENT.md +203 -0
  22. package/docs/NEXT_STEPS.md +97 -0
  23. package/docs/STAGE_BASED_API.md +97 -0
  24. package/docs/cli-guide.md +798 -0
  25. package/docs/design.md +750 -0
  26. package/docs/discovery-engine.md +515 -0
  27. package/docs/error-handling.md +429 -0
  28. package/docs/function-registration.md +157 -0
  29. package/docs/mcp-guide.md +416 -0
  30. package/package.json +2 -123
  31. package/renovate.json +51 -0
  32. package/setup.sh +111 -0
  33. package/{dist/cli.js → src/cli.ts} +26 -19
  34. package/src/core/claude.ts +280 -0
  35. package/src/core/deploy-operation.ts +127 -0
  36. package/src/core/discovery.ts +900 -0
  37. package/src/core/error-handling.ts +562 -0
  38. package/src/core/index.ts +143 -0
  39. package/src/core/kubernetes-utils.ts +218 -0
  40. package/src/core/memory.ts +148 -0
  41. package/src/core/schema.ts +830 -0
  42. package/src/core/session-utils.ts +97 -0
  43. package/src/core/workflow.ts +234 -0
  44. package/src/index.ts +18 -0
  45. package/src/interfaces/cli.ts +872 -0
  46. package/src/interfaces/mcp.ts +183 -0
  47. package/src/mcp/server.ts +131 -0
  48. package/src/tools/answer-question.ts +807 -0
  49. package/src/tools/choose-solution.ts +169 -0
  50. package/src/tools/deploy-manifests.ts +94 -0
  51. package/src/tools/generate-manifests.ts +502 -0
  52. package/src/tools/index.ts +41 -0
  53. package/src/tools/recommend.ts +370 -0
  54. package/tests/__mocks__/@kubernetes/client-node.ts +106 -0
  55. package/tests/build-system.test.ts +345 -0
  56. package/tests/configuration.test.ts +226 -0
  57. package/tests/core/deploy-operation.test.ts +38 -0
  58. package/tests/core/discovery.test.ts +1648 -0
  59. package/tests/core/error-handling.test.ts +632 -0
  60. package/tests/core/schema.test.ts +1658 -0
  61. package/tests/core/session-utils.test.ts +245 -0
  62. package/tests/core.test.ts +439 -0
  63. package/tests/fixtures/configmap-no-labels.yaml +8 -0
  64. package/tests/fixtures/crossplane-app-configuration.yaml +6 -0
  65. package/tests/fixtures/crossplane-providers.yaml +45 -0
  66. package/tests/fixtures/crossplane-rbac.yaml +48 -0
  67. package/tests/fixtures/invalid-configmap.yaml +8 -0
  68. package/tests/fixtures/invalid-deployment.yaml +17 -0
  69. package/tests/fixtures/test-deployment.yaml +28 -0
  70. package/tests/fixtures/valid-configmap.yaml +15 -0
  71. package/tests/infrastructure.test.ts +426 -0
  72. package/tests/interfaces/cli.test.ts +1036 -0
  73. package/tests/interfaces/mcp.test.ts +139 -0
  74. package/tests/kubernetes-utils.test.ts +200 -0
  75. package/tests/mcp/server.test.ts +126 -0
  76. package/tests/setup.ts +31 -0
  77. package/tests/tools/answer-question.test.ts +367 -0
  78. package/tests/tools/choose-solution.test.ts +481 -0
  79. package/tests/tools/deploy-manifests.test.ts +185 -0
  80. package/tests/tools/generate-manifests.test.ts +441 -0
  81. package/tests/tools/index.test.ts +111 -0
  82. package/tests/tools/recommend.test.ts +180 -0
  83. package/tsconfig.json +34 -0
  84. package/dist/cli.d.ts +0 -3
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/core/claude.d.ts +0 -42
  87. package/dist/core/claude.d.ts.map +0 -1
  88. package/dist/core/claude.js +0 -229
  89. package/dist/core/deploy-operation.d.ts +0 -38
  90. package/dist/core/deploy-operation.d.ts.map +0 -1
  91. package/dist/core/deploy-operation.js +0 -101
  92. package/dist/core/discovery.d.ts +0 -162
  93. package/dist/core/discovery.d.ts.map +0 -1
  94. package/dist/core/discovery.js +0 -758
  95. package/dist/core/error-handling.d.ts +0 -167
  96. package/dist/core/error-handling.d.ts.map +0 -1
  97. package/dist/core/error-handling.js +0 -399
  98. package/dist/core/index.d.ts +0 -42
  99. package/dist/core/index.d.ts.map +0 -1
  100. package/dist/core/index.js +0 -123
  101. package/dist/core/kubernetes-utils.d.ts +0 -38
  102. package/dist/core/kubernetes-utils.d.ts.map +0 -1
  103. package/dist/core/kubernetes-utils.js +0 -177
  104. package/dist/core/memory.d.ts +0 -45
  105. package/dist/core/memory.d.ts.map +0 -1
  106. package/dist/core/memory.js +0 -113
  107. package/dist/core/schema.d.ts +0 -187
  108. package/dist/core/schema.d.ts.map +0 -1
  109. package/dist/core/schema.js +0 -655
  110. package/dist/core/session-utils.d.ts +0 -29
  111. package/dist/core/session-utils.d.ts.map +0 -1
  112. package/dist/core/session-utils.js +0 -121
  113. package/dist/core/workflow.d.ts +0 -70
  114. package/dist/core/workflow.d.ts.map +0 -1
  115. package/dist/core/workflow.js +0 -161
  116. package/dist/index.d.ts +0 -15
  117. package/dist/index.d.ts.map +0 -1
  118. package/dist/index.js +0 -32
  119. package/dist/interfaces/cli.d.ts +0 -74
  120. package/dist/interfaces/cli.d.ts.map +0 -1
  121. package/dist/interfaces/cli.js +0 -769
  122. package/dist/interfaces/mcp.d.ts +0 -30
  123. package/dist/interfaces/mcp.d.ts.map +0 -1
  124. package/dist/interfaces/mcp.js +0 -105
  125. package/dist/mcp/server.d.ts +0 -9
  126. package/dist/mcp/server.d.ts.map +0 -1
  127. package/dist/mcp/server.js +0 -151
  128. package/dist/tools/answer-question.d.ts +0 -27
  129. package/dist/tools/answer-question.d.ts.map +0 -1
  130. package/dist/tools/answer-question.js +0 -696
  131. package/dist/tools/choose-solution.d.ts +0 -23
  132. package/dist/tools/choose-solution.d.ts.map +0 -1
  133. package/dist/tools/choose-solution.js +0 -171
  134. package/dist/tools/deploy-manifests.d.ts +0 -25
  135. package/dist/tools/deploy-manifests.d.ts.map +0 -1
  136. package/dist/tools/deploy-manifests.js +0 -74
  137. package/dist/tools/generate-manifests.d.ts +0 -23
  138. package/dist/tools/generate-manifests.d.ts.map +0 -1
  139. package/dist/tools/generate-manifests.js +0 -424
  140. package/dist/tools/index.d.ts +0 -11
  141. package/dist/tools/index.d.ts.map +0 -1
  142. package/dist/tools/index.js +0 -34
  143. package/dist/tools/recommend.d.ts +0 -23
  144. package/dist/tools/recommend.d.ts.map +0 -1
  145. package/dist/tools/recommend.js +0 -332
package/CLAUDE.md ADDED
@@ -0,0 +1,162 @@
1
+ # DevOps AI Toolkit Project - Claude Code Integration Guide
2
+
3
+ ## ⚠️ MANDATORY TASK COMPLETION CHECKLIST ⚠️
4
+
5
+ **🔴 BEFORE MARKING ANY TASK/SUBTASK AS COMPLETE:**
6
+
7
+ □ **Tests Written**: Write tests for new functionality (can be after implementation)
8
+ □ **All Tests Pass**: Run `npm test` - ALL 562+ tests must pass
9
+ □ **No Test Failures**: Fix any failing tests before proceeding
10
+ □ **CLAUDE.md Updated**: Update this file if new features/commands/structure added
11
+
12
+ **❌ TASK IS NOT COMPLETE IF:**
13
+ - Any tests are failing
14
+ - New code lacks test coverage
15
+ - You haven't run `npm test` to verify
16
+
17
+ ## PERMANENT INSTRUCTIONS
18
+
19
+ **CRITICAL DEVELOPMENT RULES - NEVER OVERRIDE:**
20
+
21
+ 1. **Always Write Tests**: When making code changes, you MUST write or update tests to validate the changes
22
+ 2. **Always Run All Tests**: Before marking any task as complete, run `npm test` to ensure all tests pass
23
+ 3. **Never Claim Done with Failing Tests**: A task is NOT complete if any tests are failing - fix all test failures first
24
+ 4. **Test-Driven Validation**: Changes are only considered successful when validated by passing tests
25
+ 5. **Always Update CLAUDE.md**: After finishing any task, check if CLAUDE.md needs updates to reflect new features, commands, structure changes, or documentation
26
+
27
+ ## 🛑 TESTING REMINDERS
28
+
29
+ - **Current test suite**: 562+ tests across 21 suites - maintain this standard
30
+ - **Implementation flow**: Code → Tests → `npm test` → Mark complete
31
+ - **Pattern matching**: Look at `tests/schema.test.ts`, `tests/cli.test.ts` for testing patterns
32
+ - **Test organization**: Mirror source code structure - tests should be organized using the same naming convention as the code they're testing
33
+ - `src/core/schema.ts` → `tests/core/schema.test.ts`
34
+ - `src/interfaces/cli.ts` → `tests/interfaces/cli.test.ts`
35
+ - `src/mcp/server.ts` → `tests/mcp/server.test.ts`
36
+ - Keep integration tests separate in `tests/integration/`
37
+
38
+ ## Project Overview
39
+
40
+ **DevOps AI Toolkit** is an intelligent Kubernetes application deployment agent that discovers cluster capabilities and provides AI-powered recommendations for deploying applications using available resources.
41
+
42
+ ### Core Features
43
+ - **Cluster Discovery**: Automatically discovers Kubernetes resources and custom operators
44
+ - **AI Recommendations**: Get intelligent deployment recommendations based on your intent
45
+ - **Solution Enhancement**: Process open-ended user requirements to enhance configurations
46
+ - **Operator Integration**: Leverages custom operators like Crossplane, ArgoCD when available
47
+
48
+ ### Key Commands
49
+
50
+ ```bash
51
+ # Core dot-ai commands
52
+ dot-ai discover # Discover cluster resources
53
+ dot-ai recommend --intent "description" # Get AI-powered recommendations
54
+ dot-ai enhance --solution solution.json # Enhance solutions with user requirements
55
+ dot-ai explain Pod # Get detailed resource schema
56
+ dot-ai fingerprint # Analyze cluster capabilities
57
+
58
+ # Development commands
59
+ npm test # Run all tests
60
+ npm run build # Build the project
61
+ npm run mcp:start # Start MCP server
62
+ ```
63
+
64
+ ## AI Prompt Management 🤖
65
+
66
+ **CRITICAL DEVELOPMENT RULE: NEVER hard-code AI prompts in source code**
67
+
68
+ All AI prompts are stored as markdown files in the `prompts/` directory and loaded dynamically:
69
+
70
+ ### Prompt File Structure
71
+ ```
72
+ prompts/
73
+ ├── intent-validation.md # Validates user intent specificity
74
+ ├── resource-selection.md # AI resource candidate selection
75
+ ├── resource-solution-ranking.md # AI resource ranking/scoring
76
+ ├── question-generation.md # Generate configuration questions
77
+ ├── solution-enhancement.md # Enhance solutions with requirements
78
+ ├── resource-analysis.md # Analyze resource capabilities
79
+ └── tool-instructions/ # Agent instructions for tools
80
+ ├── recommend.md # User interaction requirements
81
+ ├── enhance-solution.md # Enhancement tool instructions
82
+ └── recommendation-workflow.md # Workflow instructions
83
+ ```
84
+
85
+ ### Loading Pattern (ALWAYS USE THIS)
86
+ ```typescript
87
+ // Load prompt template from file
88
+ const fs = await import('fs');
89
+ const path = await import('path');
90
+
91
+ const promptPath = path.join(process.cwd(), 'prompts', 'your-prompt.md');
92
+ const template = fs.readFileSync(promptPath, 'utf8');
93
+
94
+ // Replace template variables
95
+ const finalPrompt = template
96
+ .replace('{variable1}', value1)
97
+ .replace('{variable2}', value2);
98
+
99
+ // Send to AI
100
+ const response = await claudeIntegration.sendMessage(finalPrompt);
101
+ ```
102
+
103
+ ### Template Variables
104
+ - Use `{variableName}` format in markdown files
105
+ - Replace with `.replace('{variableName}', actualValue)`
106
+ - Keep prompts readable and maintainable
107
+
108
+ ### Why File-Based Prompts?
109
+ - **Version control**: Track prompt changes in git
110
+ - **Collaboration**: Non-technical team members can edit prompts
111
+ - **Testing**: Easy to test different prompt variations
112
+ - **Maintainability**: Separate concerns (logic vs. prompts)
113
+ - **Consistency**: Standardized approach across all AI features
114
+
115
+ ### Adding New AI Features
116
+ 1. **Create prompt file**: `prompts/your-feature.md`
117
+ 2. **Use template variables**: `{intent}`, `{context}`, etc.
118
+ 3. **Load in code**: Follow the standard loading pattern above
119
+ 4. **Never hardcode**: Always load from file system
120
+
121
+ ### Project Structure
122
+
123
+ ```
124
+ src/
125
+ ├── core/
126
+ │ ├── discovery.ts # Cluster discovery engine
127
+ │ ├── schema.ts # Resource schema parsing & AI recommendations
128
+ │ ├── claude.ts # Claude AI integration
129
+ │ └── ...
130
+ ├── interfaces/
131
+ │ ├── cli.ts # CLI interface
132
+ │ └── mcp.ts # MCP server interface
133
+ └── ...
134
+
135
+ docs/ # All documentation
136
+ tests/ # Comprehensive test suite (349+ tests)
137
+ prompts/ # AI prompt templates
138
+ ```
139
+
140
+ ### Testing & Development
141
+
142
+ **MANDATORY TESTING WORKFLOW:**
143
+ - **Always write tests** for code changes before considering work complete
144
+ - **Always run all tests** with `npm test` before marking tasks as done
145
+ - **Never mark task complete** if any tests are failing
146
+ - **Always check CLAUDE.md** after task completion for needed updates
147
+
148
+ **Commands:**
149
+ - **Run tests**: `npm test` (351+ tests across 10 suites)
150
+ - **Build**: `npm run build`
151
+ - **Manual testing**: Follow examples in CLI and MCP guides
152
+ - **Documentation**: See `docs/` directory for complete guides
153
+
154
+ ### Environment Setup
155
+
156
+ ```bash
157
+ # Required for AI features
158
+ export ANTHROPIC_API_KEY=your_api_key_here
159
+
160
+ # Optional: Custom kubeconfig
161
+ export KUBECONFIG=/path/to/kubeconfig.yaml
162
+ ```
Binary file
package/bin/dot-ai.ts ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { DotAI } from '../dist/core/index.js';
4
+ import { CliInterface } from '../dist/interfaces/cli.js';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname } from 'path';
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+
11
+ /**
12
+ * CLI Binary Entry Point
13
+ *
14
+ * Sets up the DevOps AI Toolkit and CLI interface for command line usage
15
+ */
16
+
17
+ async function main() {
18
+ try {
19
+ // Parse kubeconfig option early for DotAI initialization
20
+ const kubeconfigIndex = process.argv.indexOf('--kubeconfig');
21
+ let kubeconfigPath: string | undefined;
22
+
23
+ if (kubeconfigIndex !== -1 && kubeconfigIndex + 1 < process.argv.length) {
24
+ kubeconfigPath = process.argv[kubeconfigIndex + 1];
25
+ }
26
+
27
+ // Initialize the DevOps AI Toolkit with kubeconfig if provided
28
+ const dotAI = new DotAI(kubeconfigPath ? { kubernetesConfig: kubeconfigPath } : {});
29
+ await dotAI.initialize();
30
+
31
+ // Create CLI interface
32
+ const cli = new CliInterface(dotAI);
33
+
34
+ // Run CLI with full process.argv (commander.js handles parsing)
35
+ await cli.run(process.argv);
36
+ } catch (error) {
37
+ console.error('Fatal error:', error instanceof Error ? error.message : String(error));
38
+ process.exit(1);
39
+ }
40
+ }
41
+
42
+ // Run if this module is executed directly
43
+ if (import.meta.url === `file://${process.argv[1]}`) {
44
+ main();
45
+ }
46
+
47
+ export { main };
package/destroy.sh ADDED
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+
3
+ # destroy.sh - Cleanup script for DevOps AI Toolkit Kubernetes cluster
4
+ # This script destroys the kind cluster and cleans up resources created by setup.sh
5
+
6
+ set -e # Exit on any error
7
+
8
+ KUBECONFIG_PATH="$PWD/kubeconfig.yaml"
9
+ CLUSTER_NAME="dot-ai-test"
10
+
11
+ echo "🧹 Destroying DevOps AI Toolkit Kubernetes cluster..."
12
+
13
+ # Check if kind is available
14
+ if ! command -v kind &> /dev/null; then
15
+ echo "❌ Error: kind is not installed"
16
+ echo "Cannot destroy cluster without kind CLI tool"
17
+ exit 1
18
+ fi
19
+
20
+ # Delete the kind cluster
21
+ echo "🗑️ Deleting kind cluster '$CLUSTER_NAME'..."
22
+ if kind get clusters | grep -q "^$CLUSTER_NAME$"; then
23
+ kind delete cluster --name "$CLUSTER_NAME"
24
+ echo "✅ Cluster '$CLUSTER_NAME' deleted successfully"
25
+ else
26
+ echo "ℹ️ Cluster '$CLUSTER_NAME' not found (may already be deleted)"
27
+ fi
28
+
29
+ # Remove kubeconfig file
30
+ if [ -f "$KUBECONFIG_PATH" ]; then
31
+ echo "🗑️ Removing kubeconfig file..."
32
+ rm -f "$KUBECONFIG_PATH"
33
+ echo "✅ Kubeconfig file '$KUBECONFIG_PATH' removed"
34
+ else
35
+ echo "ℹ️ Kubeconfig file '$KUBECONFIG_PATH' not found"
36
+ fi
37
+
38
+ # Clean up any helm repositories that were added (optional cleanup)
39
+ echo "🧹 Cleaning up helm repositories..."
40
+ helm repo remove crossplane-stable 2>/dev/null || echo "ℹ️ crossplane-stable repo not found"
41
+ helm repo remove crossplane-preview 2>/dev/null || echo "ℹ️ crossplane-preview repo not found"
42
+
43
+ echo "🎉 Cleanup complete!"
44
+ echo "💡 If you had KUBECONFIG exported, you may want to unset it:"
45
+ echo " unset KUBECONFIG"
package/devbox.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.2/.schema/devbox.schema.json",
3
+ "packages": [
4
+ "kind@0.29.0",
5
+ "git@2.49.0",
6
+ "teller@2.0.7",
7
+ "kubernetes-helm@3.18.3"
8
+ ],
9
+ "shell": {
10
+ "init_hook": [],
11
+ "scripts": {}
12
+ }
13
+ }
package/devbox.lock ADDED
@@ -0,0 +1,225 @@
1
+ {
2
+ "lockfile_version": "1",
3
+ "packages": {
4
+ "git@2.49.0": {
5
+ "last_modified": "2025-06-20T02:24:11Z",
6
+ "resolved": "github:NixOS/nixpkgs/076e8c6678d8c54204abcb4b1b14c366835a58bb#git",
7
+ "source": "devbox-search",
8
+ "version": "2.49.0",
9
+ "systems": {
10
+ "aarch64-darwin": {
11
+ "outputs": [
12
+ {
13
+ "name": "out",
14
+ "path": "/nix/store/ir2bhb7n3ngh0dg7p6jbhm1wa4d8gkb7-git-2.49.0",
15
+ "default": true
16
+ },
17
+ {
18
+ "name": "doc",
19
+ "path": "/nix/store/f0bi1v08ki7pq6a4rzhjhnp5szj3940k-git-2.49.0-doc"
20
+ }
21
+ ],
22
+ "store_path": "/nix/store/ir2bhb7n3ngh0dg7p6jbhm1wa4d8gkb7-git-2.49.0"
23
+ },
24
+ "aarch64-linux": {
25
+ "outputs": [
26
+ {
27
+ "name": "out",
28
+ "path": "/nix/store/5p8ljxbgnk31zxbz8hvrfkg1qfgiv3qi-git-2.49.0",
29
+ "default": true
30
+ },
31
+ {
32
+ "name": "debug",
33
+ "path": "/nix/store/isw51rw1b78yw6k454m7h402k88n291w-git-2.49.0-debug"
34
+ },
35
+ {
36
+ "name": "doc",
37
+ "path": "/nix/store/hxw5vli42579b8bkxv6nq2p2z4vjvw97-git-2.49.0-doc"
38
+ }
39
+ ],
40
+ "store_path": "/nix/store/5p8ljxbgnk31zxbz8hvrfkg1qfgiv3qi-git-2.49.0"
41
+ },
42
+ "x86_64-darwin": {
43
+ "outputs": [
44
+ {
45
+ "name": "out",
46
+ "path": "/nix/store/72qfjivfnm6kzdfbiavvici8bi3jzrs6-git-2.49.0",
47
+ "default": true
48
+ },
49
+ {
50
+ "name": "doc",
51
+ "path": "/nix/store/900nidzjyaa0950wk104vzgb82h5wspi-git-2.49.0-doc"
52
+ }
53
+ ],
54
+ "store_path": "/nix/store/72qfjivfnm6kzdfbiavvici8bi3jzrs6-git-2.49.0"
55
+ },
56
+ "x86_64-linux": {
57
+ "outputs": [
58
+ {
59
+ "name": "out",
60
+ "path": "/nix/store/rzqvhv48m3nh8g3j4k6jmz6yqy8apr95-git-2.49.0",
61
+ "default": true
62
+ },
63
+ {
64
+ "name": "debug",
65
+ "path": "/nix/store/201xjz2py285323n3y7r30frdwbdnb6q-git-2.49.0-debug"
66
+ },
67
+ {
68
+ "name": "doc",
69
+ "path": "/nix/store/zcjdp82yx46w8yp1inxkkzb3a3k05a0m-git-2.49.0-doc"
70
+ }
71
+ ],
72
+ "store_path": "/nix/store/rzqvhv48m3nh8g3j4k6jmz6yqy8apr95-git-2.49.0"
73
+ }
74
+ }
75
+ },
76
+ "github:NixOS/nixpkgs/nixpkgs-unstable": {
77
+ "last_modified": "2025-06-01T15:36:18Z",
78
+ "resolved": "github:NixOS/nixpkgs/5929de975bcf4c7c8d8b5ca65c8cd9ef9e44523e?lastModified=1748792178&narHash=sha256-BHmgfHlCJVNisJShVaEmfDIr%2FIp58i%2F4oFGlD1iK6lk%3D"
79
+ },
80
+ "kind@0.29.0": {
81
+ "last_modified": "2025-06-20T02:24:11Z",
82
+ "resolved": "github:NixOS/nixpkgs/076e8c6678d8c54204abcb4b1b14c366835a58bb#kind",
83
+ "source": "devbox-search",
84
+ "version": "0.29.0",
85
+ "systems": {
86
+ "aarch64-darwin": {
87
+ "outputs": [
88
+ {
89
+ "name": "out",
90
+ "path": "/nix/store/ndl4z2y9nsn7n5ii7hs49ddg79p2pb6a-kind-0.29.0",
91
+ "default": true
92
+ }
93
+ ],
94
+ "store_path": "/nix/store/ndl4z2y9nsn7n5ii7hs49ddg79p2pb6a-kind-0.29.0"
95
+ },
96
+ "aarch64-linux": {
97
+ "outputs": [
98
+ {
99
+ "name": "out",
100
+ "path": "/nix/store/j9sdb4vkf9ck1kvfy8vvn17cq3a21s6a-kind-0.29.0",
101
+ "default": true
102
+ }
103
+ ],
104
+ "store_path": "/nix/store/j9sdb4vkf9ck1kvfy8vvn17cq3a21s6a-kind-0.29.0"
105
+ },
106
+ "x86_64-darwin": {
107
+ "outputs": [
108
+ {
109
+ "name": "out",
110
+ "path": "/nix/store/161h1s9n2260g2lr3dsjmfczv8gjx5q9-kind-0.29.0",
111
+ "default": true
112
+ }
113
+ ],
114
+ "store_path": "/nix/store/161h1s9n2260g2lr3dsjmfczv8gjx5q9-kind-0.29.0"
115
+ },
116
+ "x86_64-linux": {
117
+ "outputs": [
118
+ {
119
+ "name": "out",
120
+ "path": "/nix/store/swafyrx3qn2xjdz3sp7dy8pg7bxpfn3h-kind-0.29.0",
121
+ "default": true
122
+ }
123
+ ],
124
+ "store_path": "/nix/store/swafyrx3qn2xjdz3sp7dy8pg7bxpfn3h-kind-0.29.0"
125
+ }
126
+ }
127
+ },
128
+ "kubernetes-helm@3.18.3": {
129
+ "last_modified": "2025-06-22T15:15:55Z",
130
+ "resolved": "github:NixOS/nixpkgs/3078b9a9e75f1790e6d6ef9955fdc6a2d1740cc6#kubernetes-helm",
131
+ "source": "devbox-search",
132
+ "version": "3.18.3",
133
+ "systems": {
134
+ "aarch64-darwin": {
135
+ "outputs": [
136
+ {
137
+ "name": "out",
138
+ "path": "/nix/store/pq4scdg2cz3pxv1v8l89xsbx5ca7i48d-kubernetes-helm-3.18.3",
139
+ "default": true
140
+ }
141
+ ],
142
+ "store_path": "/nix/store/pq4scdg2cz3pxv1v8l89xsbx5ca7i48d-kubernetes-helm-3.18.3"
143
+ },
144
+ "aarch64-linux": {
145
+ "outputs": [
146
+ {
147
+ "name": "out",
148
+ "path": "/nix/store/v4p0yq3dc21dhh8mlws3dwlqqk74a4f8-kubernetes-helm-3.18.3",
149
+ "default": true
150
+ }
151
+ ],
152
+ "store_path": "/nix/store/v4p0yq3dc21dhh8mlws3dwlqqk74a4f8-kubernetes-helm-3.18.3"
153
+ },
154
+ "x86_64-darwin": {
155
+ "outputs": [
156
+ {
157
+ "name": "out",
158
+ "path": "/nix/store/6000mdd9sz6yqax9wd2qz451qj13bmip-kubernetes-helm-3.18.3",
159
+ "default": true
160
+ }
161
+ ],
162
+ "store_path": "/nix/store/6000mdd9sz6yqax9wd2qz451qj13bmip-kubernetes-helm-3.18.3"
163
+ },
164
+ "x86_64-linux": {
165
+ "outputs": [
166
+ {
167
+ "name": "out",
168
+ "path": "/nix/store/r1r9fz9nf0yniwqc2b51zi36cz4d7ala-kubernetes-helm-3.18.3",
169
+ "default": true
170
+ }
171
+ ],
172
+ "store_path": "/nix/store/r1r9fz9nf0yniwqc2b51zi36cz4d7ala-kubernetes-helm-3.18.3"
173
+ }
174
+ }
175
+ },
176
+ "teller@2.0.7": {
177
+ "last_modified": "2025-06-20T02:24:11Z",
178
+ "resolved": "github:NixOS/nixpkgs/076e8c6678d8c54204abcb4b1b14c366835a58bb#teller",
179
+ "source": "devbox-search",
180
+ "version": "2.0.7",
181
+ "systems": {
182
+ "aarch64-darwin": {
183
+ "outputs": [
184
+ {
185
+ "name": "out",
186
+ "path": "/nix/store/7ri6fgskrzxxkzvxrqiarbica997zzlp-teller-2.0.7",
187
+ "default": true
188
+ }
189
+ ],
190
+ "store_path": "/nix/store/7ri6fgskrzxxkzvxrqiarbica997zzlp-teller-2.0.7"
191
+ },
192
+ "aarch64-linux": {
193
+ "outputs": [
194
+ {
195
+ "name": "out",
196
+ "path": "/nix/store/rzakhwmvhxf62aarw25281qrzpkvjqvw-teller-2.0.7",
197
+ "default": true
198
+ }
199
+ ],
200
+ "store_path": "/nix/store/rzakhwmvhxf62aarw25281qrzpkvjqvw-teller-2.0.7"
201
+ },
202
+ "x86_64-darwin": {
203
+ "outputs": [
204
+ {
205
+ "name": "out",
206
+ "path": "/nix/store/7n5i7rd8fdiv4kbfnbj44q6fc7m4sqic-teller-2.0.7",
207
+ "default": true
208
+ }
209
+ ],
210
+ "store_path": "/nix/store/7n5i7rd8fdiv4kbfnbj44q6fc7m4sqic-teller-2.0.7"
211
+ },
212
+ "x86_64-linux": {
213
+ "outputs": [
214
+ {
215
+ "name": "out",
216
+ "path": "/nix/store/25pl4iwnnv16dbdb6yir78p9ahjfj987-teller-2.0.7",
217
+ "default": true
218
+ }
219
+ ],
220
+ "store_path": "/nix/store/25pl4iwnnv16dbdb6yir78p9ahjfj987-teller-2.0.7"
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }