elsabro 2.3.0 → 3.7.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.
Files changed (67) hide show
  1. package/README.md +668 -20
  2. package/bin/install.js +0 -0
  3. package/flows/development-flow.json +452 -0
  4. package/flows/quick-flow.json +118 -0
  5. package/package.json +3 -2
  6. package/references/SYSTEM_INDEX.md +379 -5
  7. package/references/agent-marketplace.md +2274 -0
  8. package/references/agent-protocol.md +1126 -0
  9. package/references/ai-code-suggestions.md +2413 -0
  10. package/references/checkpointing.md +595 -0
  11. package/references/collaboration-patterns.md +851 -0
  12. package/references/collaborative-sessions.md +1081 -0
  13. package/references/configuration-management.md +1810 -0
  14. package/references/cost-tracking.md +1095 -0
  15. package/references/enterprise-sso.md +2001 -0
  16. package/references/error-contracts-v2.md +968 -0
  17. package/references/event-driven.md +1031 -0
  18. package/references/flow-orchestration.md +940 -0
  19. package/references/flow-visualization.md +1557 -0
  20. package/references/ide-integrations.md +3513 -0
  21. package/references/interrupt-system.md +681 -0
  22. package/references/kubernetes-deployment.md +3099 -0
  23. package/references/memory-system.md +683 -0
  24. package/references/mobile-companion.md +3236 -0
  25. package/references/multi-llm-providers.md +2494 -0
  26. package/references/multi-project-memory.md +1182 -0
  27. package/references/observability.md +793 -0
  28. package/references/output-schemas.md +858 -0
  29. package/references/performance-profiler.md +955 -0
  30. package/references/plugin-system.md +1526 -0
  31. package/references/prompt-management.md +292 -0
  32. package/references/sandbox-execution.md +303 -0
  33. package/references/security-system.md +1253 -0
  34. package/references/streaming.md +696 -0
  35. package/references/testing-framework.md +1151 -0
  36. package/references/time-travel.md +802 -0
  37. package/references/tool-registry.md +886 -0
  38. package/references/voice-commands.md +3296 -0
  39. package/templates/agent-marketplace-config.json +220 -0
  40. package/templates/agent-protocol-config.json +136 -0
  41. package/templates/ai-suggestions-config.json +100 -0
  42. package/templates/checkpoint-state.json +61 -0
  43. package/templates/collaboration-config.json +157 -0
  44. package/templates/collaborative-sessions-config.json +153 -0
  45. package/templates/configuration-config.json +245 -0
  46. package/templates/cost-tracking-config.json +148 -0
  47. package/templates/enterprise-sso-config.json +438 -0
  48. package/templates/events-config.json +148 -0
  49. package/templates/flow-visualization-config.json +196 -0
  50. package/templates/ide-integrations-config.json +442 -0
  51. package/templates/kubernetes-config.json +764 -0
  52. package/templates/memory-state.json +84 -0
  53. package/templates/mobile-companion-config.json +600 -0
  54. package/templates/multi-llm-config.json +544 -0
  55. package/templates/multi-project-memory-config.json +145 -0
  56. package/templates/observability-config.json +109 -0
  57. package/templates/performance-profiler-config.json +125 -0
  58. package/templates/plugin-config.json +170 -0
  59. package/templates/prompt-management-config.json +86 -0
  60. package/templates/sandbox-config.json +185 -0
  61. package/templates/schemas-config.json +65 -0
  62. package/templates/security-config.json +120 -0
  63. package/templates/streaming-config.json +72 -0
  64. package/templates/testing-config.json +81 -0
  65. package/templates/timetravel-config.json +62 -0
  66. package/templates/tool-registry-config.json +109 -0
  67. package/templates/voice-commands-config.json +658 -0
@@ -0,0 +1,764 @@
1
+ {
2
+ "kubernetes": {
3
+ "enabled": true,
4
+ "version": "3.6.0",
5
+
6
+ "deployment": {
7
+ "name": "elsabro",
8
+ "namespace": "elsabro",
9
+ "replicas": {
10
+ "default": 2,
11
+ "min": 1,
12
+ "max": 50
13
+ },
14
+ "image": {
15
+ "registry": "ghcr.io",
16
+ "repository": "cubait/elsabro",
17
+ "tag": "3.6.0",
18
+ "pullPolicy": "IfNotPresent",
19
+ "pullSecrets": []
20
+ },
21
+ "strategy": {
22
+ "type": "RollingUpdate",
23
+ "rollingUpdate": {
24
+ "maxSurge": "25%",
25
+ "maxUnavailable": "25%"
26
+ }
27
+ },
28
+ "labels": {
29
+ "app.kubernetes.io/name": "elsabro",
30
+ "app.kubernetes.io/component": "api",
31
+ "app.kubernetes.io/managed-by": "elsabro-deployer"
32
+ },
33
+ "annotations": {
34
+ "prometheus.io/scrape": "true",
35
+ "prometheus.io/port": "9090",
36
+ "prometheus.io/path": "/metrics"
37
+ }
38
+ },
39
+
40
+ "resources": {
41
+ "default": {
42
+ "requests": {
43
+ "cpu": "500m",
44
+ "memory": "512Mi"
45
+ },
46
+ "limits": {
47
+ "cpu": "2000m",
48
+ "memory": "2Gi"
49
+ }
50
+ },
51
+ "environments": {
52
+ "dev": {
53
+ "requests": {
54
+ "cpu": "250m",
55
+ "memory": "256Mi"
56
+ },
57
+ "limits": {
58
+ "cpu": "1000m",
59
+ "memory": "1Gi"
60
+ }
61
+ },
62
+ "staging": {
63
+ "requests": {
64
+ "cpu": "500m",
65
+ "memory": "512Mi"
66
+ },
67
+ "limits": {
68
+ "cpu": "2000m",
69
+ "memory": "2Gi"
70
+ }
71
+ },
72
+ "prod": {
73
+ "requests": {
74
+ "cpu": "1000m",
75
+ "memory": "2Gi"
76
+ },
77
+ "limits": {
78
+ "cpu": "4000m",
79
+ "memory": "8Gi"
80
+ }
81
+ }
82
+ }
83
+ },
84
+
85
+ "autoscaling": {
86
+ "hpa": {
87
+ "enabled": true,
88
+ "minReplicas": 2,
89
+ "maxReplicas": 20,
90
+ "metrics": {
91
+ "cpu": {
92
+ "enabled": true,
93
+ "targetUtilization": 70
94
+ },
95
+ "memory": {
96
+ "enabled": true,
97
+ "targetUtilization": 80
98
+ },
99
+ "custom": [
100
+ {
101
+ "name": "elsabro_queue_length",
102
+ "type": "Pods",
103
+ "targetAverageValue": 100
104
+ },
105
+ {
106
+ "name": "elsabro_active_agents",
107
+ "type": "Pods",
108
+ "targetAverageValue": 5
109
+ }
110
+ ]
111
+ },
112
+ "behavior": {
113
+ "scaleDown": {
114
+ "stabilizationWindowSeconds": 300,
115
+ "policies": [
116
+ {
117
+ "type": "Percent",
118
+ "value": 10,
119
+ "periodSeconds": 60
120
+ }
121
+ ]
122
+ },
123
+ "scaleUp": {
124
+ "stabilizationWindowSeconds": 0,
125
+ "policies": [
126
+ {
127
+ "type": "Percent",
128
+ "value": 100,
129
+ "periodSeconds": 15
130
+ },
131
+ {
132
+ "type": "Pods",
133
+ "value": 4,
134
+ "periodSeconds": 15
135
+ }
136
+ ],
137
+ "selectPolicy": "Max"
138
+ }
139
+ }
140
+ },
141
+ "vpa": {
142
+ "enabled": false,
143
+ "updateMode": "Auto",
144
+ "resourcePolicy": {
145
+ "containerPolicies": [
146
+ {
147
+ "containerName": "elsabro",
148
+ "minAllowed": {
149
+ "cpu": "250m",
150
+ "memory": "256Mi"
151
+ },
152
+ "maxAllowed": {
153
+ "cpu": "4000m",
154
+ "memory": "8Gi"
155
+ },
156
+ "controlledResources": ["cpu", "memory"],
157
+ "controlledValues": "RequestsAndLimits"
158
+ }
159
+ ]
160
+ }
161
+ }
162
+ },
163
+
164
+ "service": {
165
+ "type": "ClusterIP",
166
+ "ports": {
167
+ "http": {
168
+ "port": 8080,
169
+ "targetPort": 8080,
170
+ "protocol": "TCP"
171
+ },
172
+ "metrics": {
173
+ "port": 9090,
174
+ "targetPort": 9090,
175
+ "protocol": "TCP"
176
+ }
177
+ },
178
+ "sessionAffinity": "None",
179
+ "annotations": {}
180
+ },
181
+
182
+ "ingress": {
183
+ "enabled": false,
184
+ "className": "nginx",
185
+ "annotations": {
186
+ "nginx.ingress.kubernetes.io/ssl-redirect": "true",
187
+ "nginx.ingress.kubernetes.io/proxy-body-size": "100m",
188
+ "nginx.ingress.kubernetes.io/proxy-read-timeout": "600",
189
+ "nginx.ingress.kubernetes.io/proxy-send-timeout": "600",
190
+ "nginx.ingress.kubernetes.io/rate-limit": "100",
191
+ "nginx.ingress.kubernetes.io/rate-limit-window": "1m",
192
+ "cert-manager.io/cluster-issuer": "letsencrypt-prod"
193
+ },
194
+ "hosts": [
195
+ {
196
+ "host": "api.elsabro.io",
197
+ "paths": [
198
+ {
199
+ "path": "/",
200
+ "pathType": "Prefix",
201
+ "backend": {
202
+ "service": "elsabro",
203
+ "port": 8080
204
+ }
205
+ }
206
+ ]
207
+ }
208
+ ],
209
+ "tls": [
210
+ {
211
+ "secretName": "elsabro-tls",
212
+ "hosts": ["api.elsabro.io"]
213
+ }
214
+ ]
215
+ },
216
+
217
+ "probes": {
218
+ "liveness": {
219
+ "enabled": true,
220
+ "httpGet": {
221
+ "path": "/health/live",
222
+ "port": 8080,
223
+ "scheme": "HTTP"
224
+ },
225
+ "initialDelaySeconds": 15,
226
+ "periodSeconds": 20,
227
+ "timeoutSeconds": 5,
228
+ "failureThreshold": 3,
229
+ "successThreshold": 1
230
+ },
231
+ "readiness": {
232
+ "enabled": true,
233
+ "httpGet": {
234
+ "path": "/health/ready",
235
+ "port": 8080,
236
+ "scheme": "HTTP"
237
+ },
238
+ "initialDelaySeconds": 5,
239
+ "periodSeconds": 10,
240
+ "timeoutSeconds": 3,
241
+ "failureThreshold": 3,
242
+ "successThreshold": 1
243
+ },
244
+ "startup": {
245
+ "enabled": true,
246
+ "httpGet": {
247
+ "path": "/health/startup",
248
+ "port": 8080,
249
+ "scheme": "HTTP"
250
+ },
251
+ "initialDelaySeconds": 10,
252
+ "periodSeconds": 5,
253
+ "timeoutSeconds": 3,
254
+ "failureThreshold": 30
255
+ }
256
+ },
257
+
258
+ "security": {
259
+ "podSecurityContext": {
260
+ "runAsNonRoot": true,
261
+ "runAsUser": 1000,
262
+ "runAsGroup": 1000,
263
+ "fsGroup": 1000
264
+ },
265
+ "containerSecurityContext": {
266
+ "allowPrivilegeEscalation": false,
267
+ "readOnlyRootFilesystem": true,
268
+ "runAsNonRoot": true,
269
+ "runAsUser": 1000,
270
+ "capabilities": {
271
+ "drop": ["ALL"]
272
+ }
273
+ },
274
+ "networkPolicy": {
275
+ "enabled": true,
276
+ "ingress": [
277
+ {
278
+ "from": [
279
+ {
280
+ "namespaceSelector": {
281
+ "matchLabels": {
282
+ "name": "ingress-nginx"
283
+ }
284
+ }
285
+ },
286
+ {
287
+ "podSelector": {
288
+ "matchLabels": {
289
+ "app.kubernetes.io/name": "prometheus"
290
+ }
291
+ }
292
+ }
293
+ ],
294
+ "ports": [
295
+ {"port": 8080, "protocol": "TCP"},
296
+ {"port": 9090, "protocol": "TCP"}
297
+ ]
298
+ }
299
+ ],
300
+ "egress": [
301
+ {
302
+ "to": [{"namespaceSelector": {}}],
303
+ "ports": [
304
+ {"port": 443, "protocol": "TCP"},
305
+ {"port": 5432, "protocol": "TCP"},
306
+ {"port": 6379, "protocol": "TCP"},
307
+ {"port": 5672, "protocol": "TCP"}
308
+ ]
309
+ }
310
+ ]
311
+ }
312
+ },
313
+
314
+ "serviceAccount": {
315
+ "create": true,
316
+ "name": "elsabro-sa",
317
+ "automountServiceAccountToken": true,
318
+ "annotations": {}
319
+ },
320
+
321
+ "rbac": {
322
+ "create": true,
323
+ "rules": [
324
+ {
325
+ "apiGroups": [""],
326
+ "resources": ["configmaps", "secrets"],
327
+ "verbs": ["get", "list", "watch"]
328
+ },
329
+ {
330
+ "apiGroups": [""],
331
+ "resources": ["pods", "pods/log"],
332
+ "verbs": ["get", "list", "watch"]
333
+ }
334
+ ]
335
+ },
336
+
337
+ "configMap": {
338
+ "name": "elsabro-config",
339
+ "data": {
340
+ "LOG_LEVEL": "info",
341
+ "LOG_FORMAT": "json",
342
+ "TELEMETRY_ENABLED": "true",
343
+ "METRICS_ENABLED": "true",
344
+ "TRACING_ENABLED": "true",
345
+ "CACHE_TTL": "3600",
346
+ "SESSION_TTL": "86400",
347
+ "MAX_CONCURRENT_AGENTS": "10",
348
+ "MAX_TOKENS_PER_REQUEST": "100000",
349
+ "DEFAULT_MODEL": "claude-opus-4-5-20251101"
350
+ }
351
+ },
352
+
353
+ "secrets": {
354
+ "create": true,
355
+ "name": "elsabro-secrets",
356
+ "keys": [
357
+ "ANTHROPIC_API_KEY",
358
+ "DATABASE_URL",
359
+ "REDIS_URL",
360
+ "RABBITMQ_URL",
361
+ "JWT_SECRET"
362
+ ],
363
+ "externalSecrets": {
364
+ "enabled": false,
365
+ "secretStoreRef": {
366
+ "name": "vault-backend",
367
+ "kind": "SecretStore"
368
+ }
369
+ }
370
+ },
371
+
372
+ "podDisruptionBudget": {
373
+ "enabled": true,
374
+ "minAvailable": 1,
375
+ "maxUnavailable": null
376
+ },
377
+
378
+ "affinity": {
379
+ "podAntiAffinity": {
380
+ "preferredDuringSchedulingIgnoredDuringExecution": [
381
+ {
382
+ "weight": 100,
383
+ "podAffinityTerm": {
384
+ "labelSelector": {
385
+ "matchExpressions": [
386
+ {
387
+ "key": "app.kubernetes.io/name",
388
+ "operator": "In",
389
+ "values": ["elsabro"]
390
+ }
391
+ ]
392
+ },
393
+ "topologyKey": "kubernetes.io/hostname"
394
+ }
395
+ }
396
+ ]
397
+ }
398
+ },
399
+
400
+ "topologySpreadConstraints": [
401
+ {
402
+ "maxSkew": 1,
403
+ "topologyKey": "topology.kubernetes.io/zone",
404
+ "whenUnsatisfiable": "ScheduleAnyway",
405
+ "labelSelector": {
406
+ "matchLabels": {
407
+ "app.kubernetes.io/name": "elsabro"
408
+ }
409
+ }
410
+ }
411
+ ],
412
+
413
+ "nodeSelector": {},
414
+ "tolerations": [],
415
+
416
+ "volumes": [
417
+ {
418
+ "name": "tmp",
419
+ "emptyDir": {}
420
+ },
421
+ {
422
+ "name": "logs",
423
+ "emptyDir": {}
424
+ },
425
+ {
426
+ "name": "config",
427
+ "configMap": {
428
+ "name": "elsabro-config"
429
+ }
430
+ }
431
+ ],
432
+
433
+ "volumeMounts": [
434
+ {
435
+ "name": "tmp",
436
+ "mountPath": "/tmp"
437
+ },
438
+ {
439
+ "name": "logs",
440
+ "mountPath": "/app/logs"
441
+ },
442
+ {
443
+ "name": "config",
444
+ "mountPath": "/app/config",
445
+ "readOnly": true
446
+ }
447
+ ],
448
+
449
+ "infrastructure": {
450
+ "redis": {
451
+ "enabled": true,
452
+ "architecture": "standalone",
453
+ "auth": {
454
+ "enabled": true
455
+ },
456
+ "master": {
457
+ "persistence": {
458
+ "enabled": true,
459
+ "size": "8Gi"
460
+ },
461
+ "resources": {
462
+ "requests": {
463
+ "cpu": "100m",
464
+ "memory": "128Mi"
465
+ },
466
+ "limits": {
467
+ "cpu": "500m",
468
+ "memory": "512Mi"
469
+ }
470
+ }
471
+ },
472
+ "replica": {
473
+ "replicaCount": 0
474
+ }
475
+ },
476
+ "postgresql": {
477
+ "enabled": true,
478
+ "architecture": "standalone",
479
+ "auth": {
480
+ "username": "elsabro",
481
+ "database": "elsabro"
482
+ },
483
+ "primary": {
484
+ "persistence": {
485
+ "enabled": true,
486
+ "size": "20Gi"
487
+ },
488
+ "resources": {
489
+ "requests": {
490
+ "cpu": "250m",
491
+ "memory": "256Mi"
492
+ },
493
+ "limits": {
494
+ "cpu": "1000m",
495
+ "memory": "1Gi"
496
+ }
497
+ }
498
+ },
499
+ "readReplicas": {
500
+ "replicaCount": 0
501
+ }
502
+ },
503
+ "rabbitmq": {
504
+ "enabled": true,
505
+ "replicaCount": 1,
506
+ "auth": {
507
+ "username": "elsabro"
508
+ },
509
+ "persistence": {
510
+ "enabled": true,
511
+ "size": "8Gi"
512
+ },
513
+ "resources": {
514
+ "requests": {
515
+ "cpu": "100m",
516
+ "memory": "256Mi"
517
+ },
518
+ "limits": {
519
+ "cpu": "500m",
520
+ "memory": "512Mi"
521
+ }
522
+ },
523
+ "clustering": {
524
+ "enabled": false
525
+ }
526
+ }
527
+ },
528
+
529
+ "monitoring": {
530
+ "serviceMonitor": {
531
+ "enabled": true,
532
+ "interval": "30s",
533
+ "scrapeTimeout": "10s",
534
+ "path": "/metrics",
535
+ "port": "metrics",
536
+ "labels": {}
537
+ },
538
+ "prometheusRule": {
539
+ "enabled": true,
540
+ "rules": [
541
+ {
542
+ "alert": "ElsabroHighErrorRate",
543
+ "expr": "sum(rate(elsabro_errors_total{severity=\"critical\"}[5m])) / sum(rate(elsabro_requests_total[5m])) > 0.05",
544
+ "for": "5m",
545
+ "severity": "critical",
546
+ "summary": "ELSABRO high error rate",
547
+ "description": "Error rate exceeds 5%"
548
+ },
549
+ {
550
+ "alert": "ElsabroHighLatency",
551
+ "expr": "histogram_quantile(0.95, sum(rate(elsabro_request_duration_seconds_bucket[5m])) by (le)) > 5",
552
+ "for": "5m",
553
+ "severity": "warning",
554
+ "summary": "ELSABRO high latency",
555
+ "description": "P95 latency exceeds 5 seconds"
556
+ },
557
+ {
558
+ "alert": "ElsabroQueueBacklog",
559
+ "expr": "elsabro_queue_length > 1000",
560
+ "for": "10m",
561
+ "severity": "warning",
562
+ "summary": "ELSABRO queue backlog",
563
+ "description": "Queue has more than 1000 pending tasks"
564
+ },
565
+ {
566
+ "alert": "ElsabroAgentFailures",
567
+ "expr": "sum(rate(elsabro_agent_invocations_total{status=\"failed\"}[5m])) / sum(rate(elsabro_agent_invocations_total[5m])) > 0.1",
568
+ "for": "5m",
569
+ "severity": "critical",
570
+ "summary": "ELSABRO high agent failure rate",
571
+ "description": "Agent failure rate exceeds 10%"
572
+ },
573
+ {
574
+ "alert": "ElsabroPodNotReady",
575
+ "expr": "kube_pod_status_ready{namespace=\"elsabro\", condition=\"true\"} == 0",
576
+ "for": "5m",
577
+ "severity": "critical",
578
+ "summary": "ELSABRO pod not ready",
579
+ "description": "Pod has been not ready for 5 minutes"
580
+ },
581
+ {
582
+ "alert": "ElsabroHighMemoryUsage",
583
+ "expr": "container_memory_usage_bytes{container=\"elsabro\"} / container_spec_memory_limit_bytes{container=\"elsabro\"} > 0.9",
584
+ "for": "5m",
585
+ "severity": "warning",
586
+ "summary": "ELSABRO high memory usage",
587
+ "description": "Memory usage exceeds 90% of limit"
588
+ },
589
+ {
590
+ "alert": "ElsabroPodCrashLooping",
591
+ "expr": "rate(kube_pod_container_status_restarts_total{container=\"elsabro\"}[15m]) > 0",
592
+ "for": "15m",
593
+ "severity": "critical",
594
+ "summary": "ELSABRO pod crash looping",
595
+ "description": "Pod is restarting frequently"
596
+ }
597
+ ]
598
+ },
599
+ "grafanaDashboard": {
600
+ "enabled": true,
601
+ "uid": "elsabro-overview",
602
+ "title": "ELSABRO Overview"
603
+ }
604
+ },
605
+
606
+ "helm": {
607
+ "chart": {
608
+ "name": "elsabro",
609
+ "version": "3.6.0",
610
+ "appVersion": "3.6.0"
611
+ },
612
+ "repository": {
613
+ "url": "https://charts.elsabro.dev",
614
+ "name": "elsabro"
615
+ },
616
+ "dependencies": [
617
+ {
618
+ "name": "redis",
619
+ "version": "18.x.x",
620
+ "repository": "https://charts.bitnami.com/bitnami",
621
+ "condition": "infrastructure.redis.enabled"
622
+ },
623
+ {
624
+ "name": "postgresql",
625
+ "version": "14.x.x",
626
+ "repository": "https://charts.bitnami.com/bitnami",
627
+ "condition": "infrastructure.postgresql.enabled"
628
+ },
629
+ {
630
+ "name": "rabbitmq",
631
+ "version": "12.x.x",
632
+ "repository": "https://charts.bitnami.com/bitnami",
633
+ "condition": "infrastructure.rabbitmq.enabled"
634
+ }
635
+ ]
636
+ },
637
+
638
+ "docker": {
639
+ "image": {
640
+ "registry": "ghcr.io",
641
+ "repository": "cubait/elsabro",
642
+ "tag": "3.6.0"
643
+ },
644
+ "build": {
645
+ "target": "production",
646
+ "context": ".",
647
+ "dockerfile": "Dockerfile",
648
+ "args": {
649
+ "SKIP_TESTS": "false"
650
+ }
651
+ },
652
+ "compose": {
653
+ "services": ["elsabro", "postgres", "redis", "rabbitmq"],
654
+ "networks": ["elsabro-network"],
655
+ "volumes": ["postgres-data", "redis-data", "rabbitmq-data"]
656
+ }
657
+ },
658
+
659
+ "cli": {
660
+ "commands": {
661
+ "deploy": {
662
+ "description": "Deploy ELSABRO to Kubernetes",
663
+ "options": {
664
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
665
+ "replicas": {"default": null, "description": "Number of replicas"},
666
+ "image-tag": {"default": "latest", "description": "Docker image tag"},
667
+ "values": {"default": null, "description": "Custom values file"},
668
+ "dry-run": {"default": false, "description": "Preview without applying"},
669
+ "wait": {"default": false, "description": "Wait for deployment"}
670
+ }
671
+ },
672
+ "scale": {
673
+ "description": "Scale ELSABRO deployment",
674
+ "options": {
675
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
676
+ "deployment": {"default": "elsabro", "description": "Deployment name"}
677
+ }
678
+ },
679
+ "status": {
680
+ "description": "Get deployment status",
681
+ "options": {
682
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
683
+ "watch": {"default": false, "description": "Watch for changes"},
684
+ "output": {"default": "table", "description": "Output format"}
685
+ }
686
+ },
687
+ "logs": {
688
+ "description": "View pod logs",
689
+ "options": {
690
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
691
+ "pod": {"default": null, "description": "Specific pod name"},
692
+ "container": {"default": null, "description": "Container name"},
693
+ "follow": {"default": false, "description": "Follow log output"},
694
+ "tail": {"default": 100, "description": "Number of lines"},
695
+ "since": {"default": null, "description": "Show logs since duration"}
696
+ }
697
+ },
698
+ "rollout": {
699
+ "description": "Manage rollouts",
700
+ "actions": ["status", "restart", "undo", "pause", "resume"],
701
+ "options": {
702
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
703
+ "to-revision": {"default": null, "description": "Revision to rollback to"}
704
+ }
705
+ },
706
+ "port-forward": {
707
+ "description": "Forward ports to local machine",
708
+ "options": {
709
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
710
+ "port": {"default": "8080:8080", "description": "Port mapping"},
711
+ "pod": {"default": null, "description": "Specific pod"}
712
+ }
713
+ },
714
+ "exec": {
715
+ "description": "Execute command in pod",
716
+ "options": {
717
+ "namespace": {"default": "elsabro", "description": "Target namespace"},
718
+ "pod": {"default": null, "description": "Specific pod"},
719
+ "interactive": {"default": false, "description": "Interactive mode"}
720
+ }
721
+ }
722
+ }
723
+ },
724
+
725
+ "environments": {
726
+ "dev": {
727
+ "namespace": "elsabro-dev",
728
+ "replicas": 1,
729
+ "autoscaling": {"enabled": false},
730
+ "ingress": {"enabled": false},
731
+ "resources": "environments.dev",
732
+ "infrastructure": {
733
+ "redis": {"architecture": "standalone"},
734
+ "postgresql": {"architecture": "standalone"},
735
+ "rabbitmq": {"replicaCount": 1}
736
+ }
737
+ },
738
+ "staging": {
739
+ "namespace": "elsabro-staging",
740
+ "replicas": 2,
741
+ "autoscaling": {"enabled": true, "minReplicas": 2, "maxReplicas": 5},
742
+ "ingress": {"enabled": true, "host": "staging.elsabro.io"},
743
+ "resources": "environments.staging",
744
+ "infrastructure": {
745
+ "redis": {"architecture": "standalone"},
746
+ "postgresql": {"architecture": "standalone"},
747
+ "rabbitmq": {"replicaCount": 1}
748
+ }
749
+ },
750
+ "prod": {
751
+ "namespace": "elsabro-prod",
752
+ "replicas": 5,
753
+ "autoscaling": {"enabled": true, "minReplicas": 5, "maxReplicas": 50},
754
+ "ingress": {"enabled": true, "host": "api.elsabro.io"},
755
+ "resources": "environments.prod",
756
+ "infrastructure": {
757
+ "redis": {"architecture": "replication", "replica": {"replicaCount": 3}},
758
+ "postgresql": {"architecture": "replication", "readReplicas": {"replicaCount": 2}},
759
+ "rabbitmq": {"replicaCount": 3, "clustering": {"enabled": true}}
760
+ }
761
+ }
762
+ }
763
+ }
764
+ }