deepdebug-local-agent 0.3.18 → 1.0.3
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/.dockerignore +38 -21
- package/.github/workflows/npm-publish.yml +76 -0
- package/Dockerfile +55 -27
- package/build.sh +123 -0
- package/docker-compose.yml +104 -0
- package/docs/ENTERPRISE_DEPLOYMENT_GUIDE.md +462 -0
- package/docs/QUICKSTART.md +193 -0
- package/docs/SECURITY_WHITEPAPER.md +249 -0
- package/env.example +41 -0
- package/helm/Chart.yaml +17 -0
- package/helm/templates/_helpers.tpl +60 -0
- package/helm/templates/deployment.yaml +95 -0
- package/helm/templates/secret.yaml +9 -0
- package/helm/templates/service.yaml +18 -0
- package/helm/values.yaml +162 -0
- package/package.json +49 -19
- package/src/mcp-http-server.js +3 -99
- package/src/runtimes/base-runtime.js +1 -1
- package/src/runtimes/java/java-integrations.js +1 -1
- package/src/runtimes/node/node-integrations.js +1 -1
- package/src/server.js +81 -10
- package/src/workspace/detect-port.js +1 -0
- package/.idea/deepdebug-local-agent.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- /package/{cloudbuild.yaml → cloudbuild.yaml.deprecated} +0 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# DeepDebug Local Agent - Security Whitepaper
|
|
2
|
+
|
|
3
|
+
**Version:** 1.0
|
|
4
|
+
**Date:** February 2026
|
|
5
|
+
**Classification:** Public
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
DeepDebug Local Agent is designed with enterprise security requirements in mind. This document outlines the security architecture, data handling practices, and compliance considerations for organizations evaluating DeepDebug for their development workflows.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Architecture Overview
|
|
16
|
+
|
|
17
|
+
### 1.1 Deployment Model
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
21
|
+
│ Customer Environment │
|
|
22
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
23
|
+
│ │ Local Agent │ │
|
|
24
|
+
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
|
25
|
+
│ │ │ Code Reader │────│ Analyzer │────│ API Client │ │ │
|
|
26
|
+
│ │ │ (Read-Only) │ │ (Local) │ │ (HTTPS) │ │ │
|
|
27
|
+
│ │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ │
|
|
28
|
+
│ └───────────────────────────────────────────────┼──────────┘ │
|
|
29
|
+
│ │ │
|
|
30
|
+
│ ┌───────────────────────────────────────────────┼──────────┐ │
|
|
31
|
+
│ │ Source Code Repositories │ │ │
|
|
32
|
+
│ │ (Never leaves customer environment) │ │ │
|
|
33
|
+
│ └───────────────────────────────────────────────┼──────────┘ │
|
|
34
|
+
└──────────────────────────────────────────────────┼──────────────┘
|
|
35
|
+
│ HTTPS/TLS 1.3
|
|
36
|
+
▼
|
|
37
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
38
|
+
│ DeepDebug Cloud │
|
|
39
|
+
│ ┌─────────────────┐ ┌─────────────────┐ │
|
|
40
|
+
│ │ API Gateway │────│ AI Analysis │ │
|
|
41
|
+
│ │ (Encrypted) │ │ (Ephemeral) │ │
|
|
42
|
+
│ └─────────────────┘ └─────────────────┘ │
|
|
43
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 1.2 Key Security Principles
|
|
47
|
+
|
|
48
|
+
1. **Minimal Data Transfer**: Only relevant code snippets are sent for analysis
|
|
49
|
+
2. **Ephemeral Processing**: Code is processed in memory and not persisted
|
|
50
|
+
3. **Read-Only Access**: Agent only reads source code, never modifies directly
|
|
51
|
+
4. **Encrypted Transit**: All communications use TLS 1.3
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 2. Data Handling
|
|
56
|
+
|
|
57
|
+
### 2.1 What Data is Processed
|
|
58
|
+
|
|
59
|
+
| Data Type | Stored Locally | Sent to Cloud | Persisted in Cloud |
|
|
60
|
+
|-----------|----------------|---------------|-------------------|
|
|
61
|
+
| Full source code | ✅ Yes | ❌ No | ❌ No |
|
|
62
|
+
| Error snippets (< 500 lines) | ✅ Yes | ✅ Yes (encrypted) | ❌ No |
|
|
63
|
+
| Stack traces | ✅ Yes | ✅ Yes (encrypted) | ❌ No |
|
|
64
|
+
| File paths | ✅ Yes | ⚠️ Anonymized | ❌ No |
|
|
65
|
+
| Fix suggestions | ✅ Yes | ✅ Generated | ⏱️ 24h max |
|
|
66
|
+
| Usage metrics | ❌ No | ✅ Aggregated | ✅ Yes |
|
|
67
|
+
|
|
68
|
+
### 2.2 Data Retention
|
|
69
|
+
|
|
70
|
+
- **Code snippets**: Not stored after analysis (ephemeral)
|
|
71
|
+
- **Analysis results**: 24 hours (configurable to 0)
|
|
72
|
+
- **Audit logs**: 90 days (compliance requirement)
|
|
73
|
+
- **Usage metrics**: Aggregated, anonymized, indefinite
|
|
74
|
+
|
|
75
|
+
### 2.3 Data Residency
|
|
76
|
+
|
|
77
|
+
Available regions:
|
|
78
|
+
- 🇪🇺 Europe (eu-west-1) - GDPR compliant
|
|
79
|
+
- 🇺🇸 United States (us-east-1)
|
|
80
|
+
- 🇦🇪 Middle East (me-south-1) - Coming Q2 2026
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. Container Security
|
|
85
|
+
|
|
86
|
+
### 3.1 Image Security
|
|
87
|
+
|
|
88
|
+
- **Base Image**: `node:20-alpine` (minimal attack surface)
|
|
89
|
+
- **Non-root User**: Runs as UID 1001
|
|
90
|
+
- **Read-only Filesystem**: Container filesystem is immutable
|
|
91
|
+
- **No Shell Access**: Production images have no shell
|
|
92
|
+
|
|
93
|
+
### 3.2 Runtime Security
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
security_opt:
|
|
97
|
+
- no-new-privileges:true
|
|
98
|
+
read_only: true
|
|
99
|
+
cap_drop:
|
|
100
|
+
- ALL
|
|
101
|
+
cap_add:
|
|
102
|
+
- NET_BIND_SERVICE # Only capability needed
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 3.3 Vulnerability Scanning
|
|
106
|
+
|
|
107
|
+
- Images scanned with Trivy before release
|
|
108
|
+
- No HIGH or CRITICAL vulnerabilities allowed
|
|
109
|
+
- Weekly automated scans of released images
|
|
110
|
+
- CVE response SLA: 48 hours for CRITICAL
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Network Security
|
|
115
|
+
|
|
116
|
+
### 4.1 Outbound Connections
|
|
117
|
+
|
|
118
|
+
The agent only connects to:
|
|
119
|
+
|
|
120
|
+
| Destination | Port | Purpose |
|
|
121
|
+
|------------|------|---------|
|
|
122
|
+
| api.deepdebug.ai | 443 | API communication |
|
|
123
|
+
| (customer git server) | 443/22 | Optional: Git operations |
|
|
124
|
+
|
|
125
|
+
### 4.2 Inbound Connections
|
|
126
|
+
|
|
127
|
+
| Port | Purpose | Binding |
|
|
128
|
+
|------|---------|---------|
|
|
129
|
+
| 5055 | Agent API | localhost only (default) |
|
|
130
|
+
|
|
131
|
+
### 4.3 Firewall Rules
|
|
132
|
+
|
|
133
|
+
Minimal required rules:
|
|
134
|
+
```
|
|
135
|
+
ALLOW OUTBOUND TCP 443 TO api.deepdebug.ai
|
|
136
|
+
ALLOW INBOUND TCP 5055 FROM localhost (optional)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 5. Authentication & Authorization
|
|
142
|
+
|
|
143
|
+
### 5.1 Agent Authentication
|
|
144
|
+
|
|
145
|
+
- API Key per tenant (rotatable)
|
|
146
|
+
- JWT tokens for session management
|
|
147
|
+
- Mutual TLS available for enterprise
|
|
148
|
+
|
|
149
|
+
### 5.2 User Authentication
|
|
150
|
+
|
|
151
|
+
- SSO integration (SAML 2.0, OIDC)
|
|
152
|
+
- MFA support
|
|
153
|
+
- RBAC with customizable roles
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 6. Compliance
|
|
158
|
+
|
|
159
|
+
### 6.1 Current Certifications
|
|
160
|
+
|
|
161
|
+
| Certification | Status | Date |
|
|
162
|
+
|--------------|--------|------|
|
|
163
|
+
| SOC 2 Type I | In Progress | Q2 2026 |
|
|
164
|
+
| SOC 2 Type II | Planned | Q4 2026 |
|
|
165
|
+
| ISO 27001 | Planned | Q1 2027 |
|
|
166
|
+
| GDPR | Compliant | Current |
|
|
167
|
+
|
|
168
|
+
### 6.2 Compliance Features
|
|
169
|
+
|
|
170
|
+
- Audit logging (immutable)
|
|
171
|
+
- Data export on request
|
|
172
|
+
- Right to deletion
|
|
173
|
+
- DPA available
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 7. Incident Response
|
|
178
|
+
|
|
179
|
+
### 7.1 Security Incident SLAs
|
|
180
|
+
|
|
181
|
+
| Severity | Response Time | Resolution Target |
|
|
182
|
+
|----------|--------------|-------------------|
|
|
183
|
+
| Critical | 1 hour | 4 hours |
|
|
184
|
+
| High | 4 hours | 24 hours |
|
|
185
|
+
| Medium | 24 hours | 72 hours |
|
|
186
|
+
| Low | 72 hours | 1 week |
|
|
187
|
+
|
|
188
|
+
### 7.2 Contact
|
|
189
|
+
|
|
190
|
+
Security issues: security@deepdebug.ai
|
|
191
|
+
PGP Key: Available on request
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 8. Penetration Testing
|
|
196
|
+
|
|
197
|
+
- Annual third-party penetration test
|
|
198
|
+
- Continuous automated scanning
|
|
199
|
+
- Bug bounty program (coming Q3 2026)
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 9. Enterprise Deployment Options
|
|
204
|
+
|
|
205
|
+
### 9.1 Cloud (Multi-tenant)
|
|
206
|
+
|
|
207
|
+
- Shared infrastructure
|
|
208
|
+
- Logical isolation
|
|
209
|
+
- Suitable for: Most organizations
|
|
210
|
+
|
|
211
|
+
### 9.2 Dedicated Cloud
|
|
212
|
+
|
|
213
|
+
- Dedicated infrastructure
|
|
214
|
+
- Single-tenant
|
|
215
|
+
- Suitable for: Financial services, healthcare
|
|
216
|
+
|
|
217
|
+
### 9.3 On-Premise
|
|
218
|
+
|
|
219
|
+
- Customer-hosted
|
|
220
|
+
- Air-gapped option available
|
|
221
|
+
- Suitable for: Government, defense, highly regulated
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 10. FAQ
|
|
226
|
+
|
|
227
|
+
**Q: Does DeepDebug have access to our full codebase?**
|
|
228
|
+
A: No. The Local Agent only sends relevant snippets for analysis. Full code never leaves your environment.
|
|
229
|
+
|
|
230
|
+
**Q: Can we run DeepDebug in an air-gapped environment?**
|
|
231
|
+
A: Yes. Contact sales for our on-premise deployment option.
|
|
232
|
+
|
|
233
|
+
**Q: How long is code retained?**
|
|
234
|
+
A: Code snippets are processed ephemerally and not stored. Analysis results are retained for 24 hours by default (configurable).
|
|
235
|
+
|
|
236
|
+
**Q: Is DeepDebug GDPR compliant?**
|
|
237
|
+
A: Yes. We offer EU data residency and full GDPR compliance including DPA.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Contact
|
|
242
|
+
|
|
243
|
+
**Sales**: sales@deepdebug.ai
|
|
244
|
+
**Security**: security@deepdebug.ai
|
|
245
|
+
**Support**: support@deepdebug.ai
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
*This document is subject to change. Last updated: February 2026*
|
package/env.example
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
# ║ DeepDebug Local Agent - Environment Configuration ║
|
|
3
|
+
# ╚══════════════════════════════════════════════════════════════╝
|
|
4
|
+
#
|
|
5
|
+
# Copy this file to .env and configure your settings
|
|
6
|
+
#
|
|
7
|
+
# cp .env.example .env
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
# ─────────────────────────────────────────
|
|
11
|
+
# Required Settings
|
|
12
|
+
# ─────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
# Your DeepDebug tenant ID (from dashboard)
|
|
15
|
+
DEEPDEBUG_TENANT_ID=your-tenant-id-here
|
|
16
|
+
|
|
17
|
+
# Path to your project(s) on the host machine
|
|
18
|
+
PROJECT_PATH=/path/to/your/projects
|
|
19
|
+
|
|
20
|
+
# ─────────────────────────────────────────
|
|
21
|
+
# Optional Settings
|
|
22
|
+
# ─────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
# DeepDebug API URL (change for on-premise)
|
|
25
|
+
DEEPDEBUG_API_URL=https://api.deepdebug.ai
|
|
26
|
+
|
|
27
|
+
# Agent version to use
|
|
28
|
+
AGENT_VERSION=latest
|
|
29
|
+
|
|
30
|
+
# Log level (debug, info, warn, error)
|
|
31
|
+
LOG_LEVEL=info
|
|
32
|
+
|
|
33
|
+
# ─────────────────────────────────────────
|
|
34
|
+
# Enterprise / On-Premise Settings
|
|
35
|
+
# ─────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
# For air-gapped environments, point to your internal registry
|
|
38
|
+
# AGENT_IMAGE=your-registry.company.com/deepdebug/local-agent:1.0.0
|
|
39
|
+
|
|
40
|
+
# For on-premise DeepDebug server
|
|
41
|
+
# DEEPDEBUG_API_URL=https://deepdebug.internal.company.com
|
package/helm/Chart.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
apiVersion: v2
|
|
2
|
+
name: deepdebug-agent
|
|
3
|
+
description: DeepDebug Local Agent for enterprise code debugging and analysis
|
|
4
|
+
type: application
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
appVersion: "1.0.0"
|
|
7
|
+
keywords:
|
|
8
|
+
- debugging
|
|
9
|
+
- ai
|
|
10
|
+
- code-analysis
|
|
11
|
+
- enterprise
|
|
12
|
+
home: https://deepdebug.ai
|
|
13
|
+
sources:
|
|
14
|
+
- https://github.com/williambella/deepdebug-local-agent
|
|
15
|
+
maintainers:
|
|
16
|
+
- name: InspTech AI
|
|
17
|
+
email: support@deepdebug.ai
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{{/*
|
|
2
|
+
Expand the name of the chart.
|
|
3
|
+
*/}}
|
|
4
|
+
{{- define "deepdebug-agent.name" -}}
|
|
5
|
+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
|
6
|
+
{{- end }}
|
|
7
|
+
|
|
8
|
+
{{/*
|
|
9
|
+
Create a default fully qualified app name.
|
|
10
|
+
*/}}
|
|
11
|
+
{{- define "deepdebug-agent.fullname" -}}
|
|
12
|
+
{{- if .Values.fullnameOverride }}
|
|
13
|
+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
|
14
|
+
{{- else }}
|
|
15
|
+
{{- $name := default .Chart.Name .Values.nameOverride }}
|
|
16
|
+
{{- if contains $name .Release.Name }}
|
|
17
|
+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
|
18
|
+
{{- else }}
|
|
19
|
+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
|
20
|
+
{{- end }}
|
|
21
|
+
{{- end }}
|
|
22
|
+
{{- end }}
|
|
23
|
+
|
|
24
|
+
{{/*
|
|
25
|
+
Create chart name and version as used by the chart label.
|
|
26
|
+
*/}}
|
|
27
|
+
{{- define "deepdebug-agent.chart" -}}
|
|
28
|
+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
29
|
+
{{- end }}
|
|
30
|
+
|
|
31
|
+
{{/*
|
|
32
|
+
Common labels
|
|
33
|
+
*/}}
|
|
34
|
+
{{- define "deepdebug-agent.labels" -}}
|
|
35
|
+
helm.sh/chart: {{ include "deepdebug-agent.chart" . }}
|
|
36
|
+
{{ include "deepdebug-agent.selectorLabels" . }}
|
|
37
|
+
{{- if .Chart.AppVersion }}
|
|
38
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
39
|
+
{{- end }}
|
|
40
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
41
|
+
{{- end }}
|
|
42
|
+
|
|
43
|
+
{{/*
|
|
44
|
+
Selector labels
|
|
45
|
+
*/}}
|
|
46
|
+
{{- define "deepdebug-agent.selectorLabels" -}}
|
|
47
|
+
app.kubernetes.io/name: {{ include "deepdebug-agent.name" . }}
|
|
48
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
49
|
+
{{- end }}
|
|
50
|
+
|
|
51
|
+
{{/*
|
|
52
|
+
Create the name of the service account to use
|
|
53
|
+
*/}}
|
|
54
|
+
{{- define "deepdebug-agent.serviceAccountName" -}}
|
|
55
|
+
{{- if .Values.serviceAccount.create }}
|
|
56
|
+
{{- default (include "deepdebug-agent.fullname" .) .Values.serviceAccount.name }}
|
|
57
|
+
{{- else }}
|
|
58
|
+
{{- default "default" .Values.serviceAccount.name }}
|
|
59
|
+
{{- end }}
|
|
60
|
+
{{- end }}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: Deployment
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ include "deepdebug-agent.fullname" . }}
|
|
5
|
+
labels:
|
|
6
|
+
{{- include "deepdebug-agent.labels" . | nindent 4 }}
|
|
7
|
+
spec:
|
|
8
|
+
replicas: {{ .Values.replicaCount }}
|
|
9
|
+
selector:
|
|
10
|
+
matchLabels:
|
|
11
|
+
{{- include "deepdebug-agent.selectorLabels" . | nindent 6 }}
|
|
12
|
+
template:
|
|
13
|
+
metadata:
|
|
14
|
+
annotations:
|
|
15
|
+
{{- toYaml .Values.podAnnotations | nindent 8 }}
|
|
16
|
+
labels:
|
|
17
|
+
{{- include "deepdebug-agent.selectorLabels" . | nindent 8 }}
|
|
18
|
+
spec:
|
|
19
|
+
{{- with .Values.image.pullSecrets }}
|
|
20
|
+
imagePullSecrets:
|
|
21
|
+
{{- toYaml . | nindent 8 }}
|
|
22
|
+
{{- end }}
|
|
23
|
+
serviceAccountName: {{ include "deepdebug-agent.serviceAccountName" . }}
|
|
24
|
+
securityContext:
|
|
25
|
+
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
|
26
|
+
containers:
|
|
27
|
+
- name: {{ .Chart.Name }}
|
|
28
|
+
securityContext:
|
|
29
|
+
{{- toYaml .Values.securityContext | nindent 12 }}
|
|
30
|
+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
|
31
|
+
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
32
|
+
ports:
|
|
33
|
+
- name: http
|
|
34
|
+
containerPort: 5055
|
|
35
|
+
protocol: TCP
|
|
36
|
+
env:
|
|
37
|
+
- name: NODE_ENV
|
|
38
|
+
value: "production"
|
|
39
|
+
- name: PORT
|
|
40
|
+
value: "5055"
|
|
41
|
+
- name: DEEPDEBUG_API_URL
|
|
42
|
+
value: {{ .Values.config.apiUrl | quote }}
|
|
43
|
+
- name: DEEPDEBUG_TENANT_ID
|
|
44
|
+
valueFrom:
|
|
45
|
+
secretKeyRef:
|
|
46
|
+
name: {{ include "deepdebug-agent.fullname" . }}-secret
|
|
47
|
+
key: tenant-id
|
|
48
|
+
- name: DEEPDEBUG_WORKSPACE_PATH
|
|
49
|
+
value: {{ .Values.config.workspacePath | quote }}
|
|
50
|
+
- name: LOG_LEVEL
|
|
51
|
+
value: {{ .Values.config.logLevel | quote }}
|
|
52
|
+
livenessProbe:
|
|
53
|
+
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
|
54
|
+
readinessProbe:
|
|
55
|
+
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
|
56
|
+
resources:
|
|
57
|
+
{{- toYaml .Values.resources | nindent 12 }}
|
|
58
|
+
volumeMounts:
|
|
59
|
+
- name: tmp
|
|
60
|
+
mountPath: /tmp
|
|
61
|
+
{{- if .Values.volumes.workspace.enabled }}
|
|
62
|
+
- name: workspace
|
|
63
|
+
mountPath: /workspace
|
|
64
|
+
readOnly: true
|
|
65
|
+
{{- end }}
|
|
66
|
+
volumes:
|
|
67
|
+
- name: tmp
|
|
68
|
+
emptyDir: {}
|
|
69
|
+
{{- if .Values.volumes.workspace.enabled }}
|
|
70
|
+
- name: workspace
|
|
71
|
+
{{- if .Values.volumes.workspace.persistentVolumeClaim }}
|
|
72
|
+
persistentVolumeClaim:
|
|
73
|
+
claimName: {{ .Values.volumes.workspace.persistentVolumeClaim.claimName }}
|
|
74
|
+
{{- else if .Values.volumes.workspace.hostPath }}
|
|
75
|
+
hostPath:
|
|
76
|
+
path: {{ .Values.volumes.workspace.hostPath.path }}
|
|
77
|
+
type: {{ .Values.volumes.workspace.hostPath.type | default "Directory" }}
|
|
78
|
+
{{- else if .Values.volumes.workspace.nfs }}
|
|
79
|
+
nfs:
|
|
80
|
+
server: {{ .Values.volumes.workspace.nfs.server }}
|
|
81
|
+
path: {{ .Values.volumes.workspace.nfs.path }}
|
|
82
|
+
{{- end }}
|
|
83
|
+
{{- end }}
|
|
84
|
+
{{- with .Values.nodeSelector }}
|
|
85
|
+
nodeSelector:
|
|
86
|
+
{{- toYaml . | nindent 8 }}
|
|
87
|
+
{{- end }}
|
|
88
|
+
{{- with .Values.affinity }}
|
|
89
|
+
affinity:
|
|
90
|
+
{{- toYaml . | nindent 8 }}
|
|
91
|
+
{{- end }}
|
|
92
|
+
{{- with .Values.tolerations }}
|
|
93
|
+
tolerations:
|
|
94
|
+
{{- toYaml . | nindent 8 }}
|
|
95
|
+
{{- end }}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
kind: Service
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ include "deepdebug-agent.fullname" . }}
|
|
5
|
+
labels:
|
|
6
|
+
{{- include "deepdebug-agent.labels" . | nindent 4 }}
|
|
7
|
+
spec:
|
|
8
|
+
type: {{ .Values.service.type }}
|
|
9
|
+
ports:
|
|
10
|
+
- port: {{ .Values.service.port }}
|
|
11
|
+
targetPort: http
|
|
12
|
+
protocol: TCP
|
|
13
|
+
name: http
|
|
14
|
+
{{- if and (eq .Values.service.type "NodePort") .Values.service.nodePort }}
|
|
15
|
+
nodePort: {{ .Values.service.nodePort }}
|
|
16
|
+
{{- end }}
|
|
17
|
+
selector:
|
|
18
|
+
{{- include "deepdebug-agent.selectorLabels" . | nindent 4 }}
|
package/helm/values.yaml
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
# ║ DeepDebug Local Agent - Helm Chart Values ║
|
|
3
|
+
# ╚══════════════════════════════════════════════════════════════╝
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# helm install deepdebug-agent ./deepdebug-agent -f values.yaml
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
# ─────────────────────────────────────────
|
|
10
|
+
# Image Configuration
|
|
11
|
+
# ─────────────────────────────────────────
|
|
12
|
+
image:
|
|
13
|
+
repository: deepdebug/local-agent
|
|
14
|
+
tag: "1.0.0"
|
|
15
|
+
pullPolicy: IfNotPresent
|
|
16
|
+
# For private registries
|
|
17
|
+
# pullSecrets:
|
|
18
|
+
# - name: registry-credentials
|
|
19
|
+
|
|
20
|
+
# ─────────────────────────────────────────
|
|
21
|
+
# Replica Configuration
|
|
22
|
+
# ─────────────────────────────────────────
|
|
23
|
+
replicaCount: 1
|
|
24
|
+
|
|
25
|
+
# ─────────────────────────────────────────
|
|
26
|
+
# DeepDebug Configuration
|
|
27
|
+
# ─────────────────────────────────────────
|
|
28
|
+
config:
|
|
29
|
+
tenantId: "" # Required: Your tenant ID
|
|
30
|
+
apiUrl: "https://api.deepdebug.ai"
|
|
31
|
+
logLevel: "info"
|
|
32
|
+
|
|
33
|
+
# Workspace paths to monitor (mounted via PVC or hostPath)
|
|
34
|
+
workspacePath: "/workspace"
|
|
35
|
+
|
|
36
|
+
# ─────────────────────────────────────────
|
|
37
|
+
# Service Configuration
|
|
38
|
+
# ─────────────────────────────────────────
|
|
39
|
+
service:
|
|
40
|
+
type: ClusterIP
|
|
41
|
+
port: 5055
|
|
42
|
+
# For direct access (not recommended in production)
|
|
43
|
+
# type: NodePort
|
|
44
|
+
# nodePort: 30055
|
|
45
|
+
|
|
46
|
+
# ─────────────────────────────────────────
|
|
47
|
+
# Resource Limits
|
|
48
|
+
# ─────────────────────────────────────────
|
|
49
|
+
resources:
|
|
50
|
+
limits:
|
|
51
|
+
cpu: "2"
|
|
52
|
+
memory: "2Gi"
|
|
53
|
+
requests:
|
|
54
|
+
cpu: "500m"
|
|
55
|
+
memory: "512Mi"
|
|
56
|
+
|
|
57
|
+
# ─────────────────────────────────────────
|
|
58
|
+
# Security Context (Enterprise)
|
|
59
|
+
# ─────────────────────────────────────────
|
|
60
|
+
securityContext:
|
|
61
|
+
runAsNonRoot: true
|
|
62
|
+
runAsUser: 1001
|
|
63
|
+
runAsGroup: 1001
|
|
64
|
+
fsGroup: 1001
|
|
65
|
+
readOnlyRootFilesystem: true
|
|
66
|
+
allowPrivilegeEscalation: false
|
|
67
|
+
capabilities:
|
|
68
|
+
drop:
|
|
69
|
+
- ALL
|
|
70
|
+
|
|
71
|
+
# ─────────────────────────────────────────
|
|
72
|
+
# Pod Security Context
|
|
73
|
+
# ─────────────────────────────────────────
|
|
74
|
+
podSecurityContext:
|
|
75
|
+
seccompProfile:
|
|
76
|
+
type: RuntimeDefault
|
|
77
|
+
|
|
78
|
+
# ─────────────────────────────────────────
|
|
79
|
+
# Volume Mounts
|
|
80
|
+
# ─────────────────────────────────────────
|
|
81
|
+
volumes:
|
|
82
|
+
# Workspace volume (configure based on your setup)
|
|
83
|
+
workspace:
|
|
84
|
+
# Option 1: PersistentVolumeClaim
|
|
85
|
+
# persistentVolumeClaim:
|
|
86
|
+
# claimName: workspace-pvc
|
|
87
|
+
|
|
88
|
+
# Option 2: HostPath (for development)
|
|
89
|
+
# hostPath:
|
|
90
|
+
# path: /path/to/projects
|
|
91
|
+
# type: Directory
|
|
92
|
+
|
|
93
|
+
# Option 3: NFS (enterprise)
|
|
94
|
+
# nfs:
|
|
95
|
+
# server: nfs.company.com
|
|
96
|
+
# path: /exports/projects
|
|
97
|
+
enabled: false
|
|
98
|
+
|
|
99
|
+
# ─────────────────────────────────────────
|
|
100
|
+
# Health Checks
|
|
101
|
+
# ─────────────────────────────────────────
|
|
102
|
+
livenessProbe:
|
|
103
|
+
httpGet:
|
|
104
|
+
path: /health
|
|
105
|
+
port: 5055
|
|
106
|
+
initialDelaySeconds: 10
|
|
107
|
+
periodSeconds: 30
|
|
108
|
+
timeoutSeconds: 10
|
|
109
|
+
failureThreshold: 3
|
|
110
|
+
|
|
111
|
+
readinessProbe:
|
|
112
|
+
httpGet:
|
|
113
|
+
path: /health
|
|
114
|
+
port: 5055
|
|
115
|
+
initialDelaySeconds: 5
|
|
116
|
+
periodSeconds: 10
|
|
117
|
+
timeoutSeconds: 5
|
|
118
|
+
failureThreshold: 3
|
|
119
|
+
|
|
120
|
+
# ─────────────────────────────────────────
|
|
121
|
+
# Network Policies (Enterprise)
|
|
122
|
+
# ─────────────────────────────────────────
|
|
123
|
+
networkPolicy:
|
|
124
|
+
enabled: true
|
|
125
|
+
# Allow egress only to DeepDebug API
|
|
126
|
+
egressRules:
|
|
127
|
+
- to:
|
|
128
|
+
- ipBlock:
|
|
129
|
+
cidr: 0.0.0.0/0
|
|
130
|
+
ports:
|
|
131
|
+
- protocol: TCP
|
|
132
|
+
port: 443
|
|
133
|
+
|
|
134
|
+
# ─────────────────────────────────────────
|
|
135
|
+
# Pod Disruption Budget
|
|
136
|
+
# ─────────────────────────────────────────
|
|
137
|
+
podDisruptionBudget:
|
|
138
|
+
enabled: false
|
|
139
|
+
minAvailable: 1
|
|
140
|
+
|
|
141
|
+
# ─────────────────────────────────────────
|
|
142
|
+
# Service Account
|
|
143
|
+
# ─────────────────────────────────────────
|
|
144
|
+
serviceAccount:
|
|
145
|
+
create: true
|
|
146
|
+
name: ""
|
|
147
|
+
annotations: {}
|
|
148
|
+
|
|
149
|
+
# ─────────────────────────────────────────
|
|
150
|
+
# Node Selection
|
|
151
|
+
# ─────────────────────────────────────────
|
|
152
|
+
nodeSelector: {}
|
|
153
|
+
tolerations: []
|
|
154
|
+
affinity: {}
|
|
155
|
+
|
|
156
|
+
# ─────────────────────────────────────────
|
|
157
|
+
# Annotations
|
|
158
|
+
# ─────────────────────────────────────────
|
|
159
|
+
podAnnotations:
|
|
160
|
+
prometheus.io/scrape: "true"
|
|
161
|
+
prometheus.io/port: "5055"
|
|
162
|
+
prometheus.io/path: "/metrics"
|