@alexberardi/jarvis-admin 0.1.66 → 0.1.68

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 (39) hide show
  1. package/package.json +1 -1
  2. package/public/assets/{index-DBEZIFbZ.js → index-BYNrDxao.js} +13 -13
  3. package/public/index.html +1 -1
  4. package/server/dist/data/image-digests.json +16 -16
  5. package/server/dist/data/service-registry.json +410 -79
  6. package/server/dist/routes/install.d.ts.map +1 -1
  7. package/server/dist/routes/install.js +10 -2
  8. package/server/dist/routes/install.js.map +1 -1
  9. package/server/dist/routes/nodes.d.ts.map +1 -1
  10. package/server/dist/routes/nodes.js +5 -1
  11. package/server/dist/routes/nodes.js.map +1 -1
  12. package/server/dist/routes/traces.d.ts.map +1 -1
  13. package/server/dist/routes/traces.js +9 -2
  14. package/server/dist/routes/traces.js.map +1 -1
  15. package/server/dist/services/commandCenter.d.ts +11 -0
  16. package/server/dist/services/commandCenter.d.ts.map +1 -0
  17. package/server/dist/services/commandCenter.js +20 -0
  18. package/server/dist/services/commandCenter.js.map +1 -0
  19. package/server/dist/services/generators/compose-generator.d.ts +2 -3
  20. package/server/dist/services/generators/compose-generator.d.ts.map +1 -1
  21. package/server/dist/services/generators/compose-generator.js +41 -11
  22. package/server/dist/services/generators/compose-generator.js.map +1 -1
  23. package/server/dist/services/generators/env-generator.d.ts.map +1 -1
  24. package/server/dist/services/generators/env-generator.js +17 -0
  25. package/server/dist/services/generators/env-generator.js.map +1 -1
  26. package/server/dist/services/upgrade/compose-upgrader.d.ts +14 -2
  27. package/server/dist/services/upgrade/compose-upgrader.d.ts.map +1 -1
  28. package/server/dist/services/upgrade/compose-upgrader.js +38 -3
  29. package/server/dist/services/upgrade/compose-upgrader.js.map +1 -1
  30. package/server/dist/services/upgrade/image-digest-resolver.d.ts +16 -0
  31. package/server/dist/services/upgrade/image-digest-resolver.d.ts.map +1 -0
  32. package/server/dist/services/upgrade/image-digest-resolver.js +80 -0
  33. package/server/dist/services/upgrade/image-digest-resolver.js.map +1 -0
  34. package/server/dist/services/upgrade/state-reconstructor.d.ts.map +1 -1
  35. package/server/dist/services/upgrade/state-reconstructor.js +12 -0
  36. package/server/dist/services/upgrade/state-reconstructor.js.map +1 -1
  37. package/server/dist/types/wizard.d.ts +9 -0
  38. package/server/dist/types/wizard.d.ts.map +1 -1
  39. package/server/src/data/service-registry.json +411 -80
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "3.0.0",
3
- "platformVersion": "0.1.66",
3
+ "platformVersion": "0.1.68",
4
4
  "services": [
5
5
  {
6
6
  "id": "jarvis-config-service",
@@ -11,15 +11,42 @@
11
11
  "image": "ghcr.io/alexberardi/jarvis-config-service:latest",
12
12
  "healthCheck": "/health",
13
13
  "migrate": true,
14
- "dependsOn": ["postgres"],
14
+ "dependsOn": [
15
+ "postgres"
16
+ ],
15
17
  "database": "jarvis_config",
16
18
  "dbDriverPrefix": "postgresql://",
17
19
  "envVars": [
18
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
19
- { "name": "MIGRATIONS_DATABASE_URL", "description": "PostgreSQL URL for Alembic migrations", "required": true },
20
- { "name": "JARVIS_CONFIG_ADMIN_TOKEN", "description": "Admin token for write operations", "required": true, "secret": true, "secretRef": "JARVIS_CONFIG_ADMIN_TOKEN" },
21
- { "name": "JARVIS_AUTH_ADMIN_TOKEN", "description": "Token for auth admin endpoints", "required": true, "secret": true, "secretRef": "JARVIS_AUTH_ADMIN_TOKEN" },
22
- { "name": "JARVIS_AUTH_URL", "description": "Auth service URL", "required": false, "default": "http://jarvis-auth:8000" }
20
+ {
21
+ "name": "DATABASE_URL",
22
+ "description": "PostgreSQL connection string",
23
+ "required": true
24
+ },
25
+ {
26
+ "name": "MIGRATIONS_DATABASE_URL",
27
+ "description": "PostgreSQL URL for Alembic migrations",
28
+ "required": true
29
+ },
30
+ {
31
+ "name": "JARVIS_CONFIG_ADMIN_TOKEN",
32
+ "description": "Admin token for write operations",
33
+ "required": true,
34
+ "secret": true,
35
+ "secretRef": "JARVIS_CONFIG_ADMIN_TOKEN"
36
+ },
37
+ {
38
+ "name": "JARVIS_AUTH_ADMIN_TOKEN",
39
+ "description": "Token for auth admin endpoints",
40
+ "required": true,
41
+ "secret": true,
42
+ "secretRef": "JARVIS_AUTH_ADMIN_TOKEN"
43
+ },
44
+ {
45
+ "name": "JARVIS_AUTH_URL",
46
+ "description": "Auth service URL",
47
+ "required": false,
48
+ "default": "http://jarvis-auth:8000"
49
+ }
23
50
  ]
24
51
  },
25
52
  {
@@ -32,14 +59,38 @@
32
59
  "image": "ghcr.io/alexberardi/jarvis-auth:latest",
33
60
  "healthCheck": "/health",
34
61
  "migrate": true,
35
- "dependsOn": ["postgres", "jarvis-config-service"],
62
+ "dependsOn": [
63
+ "postgres",
64
+ "jarvis-config-service"
65
+ ],
36
66
  "database": "jarvis_auth",
37
67
  "dbDriverPrefix": "postgresql+psycopg2://",
38
68
  "envVars": [
39
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
40
- { "name": "AUTH_SECRET_KEY", "description": "JWT signing key", "required": true, "secret": true, "secretRef": "AUTH_SECRET_KEY" },
41
- { "name": "JARVIS_AUTH_ADMIN_TOKEN", "description": "Admin token for auth endpoints", "required": true, "secret": true, "secretRef": "JARVIS_AUTH_ADMIN_TOKEN" },
42
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" }
69
+ {
70
+ "name": "DATABASE_URL",
71
+ "description": "PostgreSQL connection string",
72
+ "required": true
73
+ },
74
+ {
75
+ "name": "AUTH_SECRET_KEY",
76
+ "description": "JWT signing key",
77
+ "required": true,
78
+ "secret": true,
79
+ "secretRef": "AUTH_SECRET_KEY"
80
+ },
81
+ {
82
+ "name": "JARVIS_AUTH_ADMIN_TOKEN",
83
+ "description": "Admin token for auth endpoints",
84
+ "required": true,
85
+ "secret": true,
86
+ "secretRef": "JARVIS_AUTH_ADMIN_TOKEN"
87
+ },
88
+ {
89
+ "name": "JARVIS_CONFIG_URL",
90
+ "description": "Config service URL",
91
+ "required": false,
92
+ "default": "http://jarvis-config-service:7700"
93
+ }
43
94
  ]
44
95
  },
45
96
  {
@@ -50,11 +101,29 @@
50
101
  "port": 7702,
51
102
  "image": "ghcr.io/alexberardi/jarvis-logs:latest",
52
103
  "healthCheck": "/health",
53
- "dependsOn": ["loki", "jarvis-auth"],
104
+ "dependsOn": [
105
+ "loki",
106
+ "jarvis-auth"
107
+ ],
54
108
  "envVars": [
55
- { "name": "LOKI_URL", "description": "Loki push endpoint", "required": true, "default": "http://loki:3100" },
56
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
57
- { "name": "JARVIS_AUTH_BASE_URL", "description": "Auth service URL", "required": false, "default": "http://jarvis-auth:8000" }
109
+ {
110
+ "name": "LOKI_URL",
111
+ "description": "Loki push endpoint",
112
+ "required": true,
113
+ "default": "http://loki:3100"
114
+ },
115
+ {
116
+ "name": "JARVIS_CONFIG_URL",
117
+ "description": "Config service URL",
118
+ "required": false,
119
+ "default": "http://jarvis-config-service:7700"
120
+ },
121
+ {
122
+ "name": "JARVIS_AUTH_BASE_URL",
123
+ "description": "Auth service URL",
124
+ "required": false,
125
+ "default": "http://jarvis-auth:8000"
126
+ }
58
127
  ]
59
128
  },
60
129
  {
@@ -67,23 +136,80 @@
67
136
  "image": "ghcr.io/alexberardi/jarvis-command-center:latest",
68
137
  "healthCheck": "/health",
69
138
  "migrate": true,
70
- "dependsOn": ["postgres", "mosquitto", "jarvis-auth", "jarvis-config-service"],
139
+ "dependsOn": [
140
+ "postgres",
141
+ "mosquitto",
142
+ "jarvis-auth",
143
+ "jarvis-config-service"
144
+ ],
71
145
  "database": "jarvis_command_center",
72
146
  "dbDriverPrefix": "postgresql://",
73
- "volumes": ["command-center-prompt-providers:/app/core/prompt_providers_custom"],
147
+ "volumes": [
148
+ "command-center-prompt-providers:/app/core/prompt_providers_custom"
149
+ ],
74
150
  "llmInterfaceOptions": [
75
- { "id": "JarvisToolModel", "name": "Llama Tool Model", "description": "Full tool descriptions with all examples (default)", "default": true },
76
- { "id": "Qwen25MediumUntrained", "name": "Qwen 2.5 Medium", "description": "Optimized for Qwen 2.5 7B-14B models" },
77
- { "id": "HermesMediumUntrained", "name": "Hermes 8B Instruct", "description": "Hermes 3 with native function calling" }
151
+ {
152
+ "id": "JarvisToolModel",
153
+ "name": "Llama Tool Model",
154
+ "description": "Full tool descriptions with all examples (default)",
155
+ "default": true
156
+ },
157
+ {
158
+ "id": "Qwen25MediumUntrained",
159
+ "name": "Qwen 2.5 Medium",
160
+ "description": "Optimized for Qwen 2.5 7B-14B models"
161
+ },
162
+ {
163
+ "id": "HermesMediumUntrained",
164
+ "name": "Hermes 8B Instruct",
165
+ "description": "Hermes 3 with native function calling"
166
+ }
78
167
  ],
79
168
  "envVars": [
80
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
81
- { "name": "ADMIN_API_KEY", "description": "Admin endpoint protection", "required": true, "secret": true, "secretRef": "ADMIN_API_KEY" },
82
- { "name": "JARVIS_AUTH_SECRET_KEY", "description": "JWT signing key (shared with jarvis-auth)", "required": true, "secret": true, "secretRef": "AUTH_SECRET_KEY" },
83
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
84
- { "name": "JARVIS_MQTT_BROKER_URL", "description": "MQTT broker URL for node communication", "required": false, "default": "mqtt://mosquitto:1884" },
85
- { "name": "MQTT_USERNAME", "description": "Shared broker username", "required": false, "default": "jarvis" },
86
- { "name": "MQTT_PASSWORD", "description": "Shared broker password (authenticates CC to mosquitto)", "required": true, "secret": true, "secretRef": "MQTT_PASSWORD" }
169
+ {
170
+ "name": "DATABASE_URL",
171
+ "description": "PostgreSQL connection string",
172
+ "required": true
173
+ },
174
+ {
175
+ "name": "ADMIN_API_KEY",
176
+ "description": "Admin endpoint protection",
177
+ "required": true,
178
+ "secret": true,
179
+ "secretRef": "ADMIN_API_KEY"
180
+ },
181
+ {
182
+ "name": "JARVIS_AUTH_SECRET_KEY",
183
+ "description": "JWT signing key (shared with jarvis-auth)",
184
+ "required": true,
185
+ "secret": true,
186
+ "secretRef": "AUTH_SECRET_KEY"
187
+ },
188
+ {
189
+ "name": "JARVIS_CONFIG_URL",
190
+ "description": "Config service URL",
191
+ "required": false,
192
+ "default": "http://jarvis-config-service:7700"
193
+ },
194
+ {
195
+ "name": "JARVIS_MQTT_BROKER_URL",
196
+ "description": "MQTT broker URL for node communication",
197
+ "required": false,
198
+ "default": "mqtt://mosquitto:1884"
199
+ },
200
+ {
201
+ "name": "MQTT_USERNAME",
202
+ "description": "Shared broker username",
203
+ "required": false,
204
+ "default": "jarvis"
205
+ },
206
+ {
207
+ "name": "MQTT_PASSWORD",
208
+ "description": "Shared broker password (authenticates CC to mosquitto)",
209
+ "required": true,
210
+ "secret": true,
211
+ "secretRef": "MQTT_PASSWORD"
212
+ }
87
213
  ]
88
214
  },
89
215
  {
@@ -95,23 +221,61 @@
95
221
  "image": "ghcr.io/alexberardi/jarvis-whisper-api:latest",
96
222
  "healthCheck": "/health",
97
223
  "migrate": true,
98
- "dependsOn": ["postgres", "jarvis-auth", "jarvis-config-service"],
224
+ "dependsOn": [
225
+ "postgres",
226
+ "jarvis-auth",
227
+ "jarvis-config-service"
228
+ ],
99
229
  "database": "jarvis_whisper",
100
230
  "dbDriverPrefix": "postgresql+psycopg2://",
101
231
  "gpu": true,
102
232
  "cpuFallback": true,
103
233
  "nativeCapable": true,
104
- "volumes": ["whisper-voice-profiles:/app/voice_profiles"],
234
+ "volumes": [
235
+ "whisper-voice-profiles:/app/voice_profiles"
236
+ ],
105
237
  "modelOptions": [
106
- { "id": "base.en", "name": "Base English", "size": "~140MB", "default": true, "builtin": true },
107
- { "id": "small.en", "name": "Small English", "size": "~460MB" },
108
- { "id": "medium.en", "name": "Medium English", "size": "~1.5GB" },
109
- { "id": "large-v3", "name": "Large v3 (Multilingual)", "size": "~3GB" }
238
+ {
239
+ "id": "base.en",
240
+ "name": "Base English",
241
+ "size": "~140MB",
242
+ "default": true,
243
+ "builtin": true
244
+ },
245
+ {
246
+ "id": "small.en",
247
+ "name": "Small English",
248
+ "size": "~460MB"
249
+ },
250
+ {
251
+ "id": "medium.en",
252
+ "name": "Medium English",
253
+ "size": "~1.5GB"
254
+ },
255
+ {
256
+ "id": "large-v3",
257
+ "name": "Large v3 (Multilingual)",
258
+ "size": "~3GB"
259
+ }
110
260
  ],
111
261
  "envVars": [
112
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
113
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
114
- { "name": "JARVIS_AUTH_BASE_URL", "description": "Auth service URL", "required": false, "default": "http://jarvis-auth:8000" }
262
+ {
263
+ "name": "DATABASE_URL",
264
+ "description": "PostgreSQL connection string",
265
+ "required": true
266
+ },
267
+ {
268
+ "name": "JARVIS_CONFIG_URL",
269
+ "description": "Config service URL",
270
+ "required": false,
271
+ "default": "http://jarvis-config-service:7700"
272
+ },
273
+ {
274
+ "name": "JARVIS_AUTH_BASE_URL",
275
+ "description": "Auth service URL",
276
+ "required": false,
277
+ "default": "http://jarvis-auth:8000"
278
+ }
115
279
  ]
116
280
  },
117
281
  {
@@ -122,18 +286,43 @@
122
286
  "port": 7707,
123
287
  "image": "ghcr.io/alexberardi/jarvis-tts:latest",
124
288
  "healthCheck": "/health",
125
- "dependsOn": ["postgres", "jarvis-auth", "jarvis-config-service"],
289
+ "dependsOn": [
290
+ "postgres",
291
+ "jarvis-auth",
292
+ "jarvis-config-service"
293
+ ],
126
294
  "database": "jarvis_tts",
127
295
  "dbDriverPrefix": "postgresql+psycopg2://",
128
296
  "migrate": true,
129
297
  "envVars": [
130
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
131
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
132
- { "name": "TTS_PROVIDER", "description": "Active TTS provider (piper, kokoro)", "required": false, "default": "kokoro" },
133
- { "name": "HF_HOME", "description": "HuggingFace cache dir for Kokoro voice weights", "required": false, "default": "/app/models/hf_cache" }
298
+ {
299
+ "name": "DATABASE_URL",
300
+ "description": "PostgreSQL connection string",
301
+ "required": true
302
+ },
303
+ {
304
+ "name": "JARVIS_CONFIG_URL",
305
+ "description": "Config service URL",
306
+ "required": false,
307
+ "default": "http://jarvis-config-service:7700"
308
+ },
309
+ {
310
+ "name": "TTS_PROVIDER",
311
+ "description": "Active TTS provider (piper, kokoro)",
312
+ "required": false,
313
+ "default": "kokoro"
314
+ },
315
+ {
316
+ "name": "HF_HOME",
317
+ "description": "HuggingFace cache dir for Kokoro voice weights",
318
+ "required": false,
319
+ "default": "/app/models/hf_cache"
320
+ }
134
321
  ],
135
322
  "nativeCapable": true,
136
- "volumes": ["jarvis-tts-hf-cache:/app/models/hf_cache"]
323
+ "volumes": [
324
+ "jarvis-tts-hf-cache:/app/models/hf_cache"
325
+ ]
137
326
  },
138
327
  {
139
328
  "id": "jarvis-llm-proxy-api",
@@ -144,15 +333,32 @@
144
333
  "image": "ghcr.io/alexberardi/jarvis-llm-proxy-api:latest",
145
334
  "healthCheck": "/health",
146
335
  "migrate": true,
147
- "dependsOn": ["postgres", "jarvis-auth", "jarvis-config-service"],
336
+ "dependsOn": [
337
+ "postgres",
338
+ "jarvis-auth",
339
+ "jarvis-config-service"
340
+ ],
148
341
  "database": "jarvis_llm_proxy",
149
342
  "dbDriverPrefix": "postgresql+psycopg2://",
150
343
  "gpu": true,
151
344
  "nativeCapable": true,
152
345
  "envVars": [
153
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
154
- { "name": "MIGRATIONS_DATABASE_URL", "description": "PostgreSQL URL for Alembic migrations", "required": true },
155
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" }
346
+ {
347
+ "name": "DATABASE_URL",
348
+ "description": "PostgreSQL connection string",
349
+ "required": true
350
+ },
351
+ {
352
+ "name": "MIGRATIONS_DATABASE_URL",
353
+ "description": "PostgreSQL URL for Alembic migrations",
354
+ "required": true
355
+ },
356
+ {
357
+ "name": "JARVIS_CONFIG_URL",
358
+ "description": "Config service URL",
359
+ "required": false,
360
+ "default": "http://jarvis-config-service:7700"
361
+ }
156
362
  ],
157
363
  "ipc": "host",
158
364
  "shmSize": "8gb",
@@ -178,16 +384,51 @@
178
384
  "image": "ghcr.io/alexberardi/jarvis-notifications:latest",
179
385
  "healthCheck": "/health",
180
386
  "migrate": true,
181
- "dependsOn": ["postgres", "jarvis-auth", "jarvis-config-service"],
387
+ "dependsOn": [
388
+ "postgres",
389
+ "jarvis-auth",
390
+ "jarvis-config-service"
391
+ ],
182
392
  "database": "jarvis_notifications",
183
393
  "dbDriverPrefix": "postgresql+psycopg2://",
184
394
  "envVars": [
185
- { "name": "DATABASE_URL", "description": "PostgreSQL connection string", "required": true },
186
- { "name": "NOTIFICATIONS_PORT", "description": "Server port", "required": false, "default": "7712" },
187
- { "name": "AUTH_SECRET_KEY", "description": "JWT signing key (must match jarvis-auth)", "required": true, "secret": true, "secretRef": "AUTH_SECRET_KEY" },
188
- { "name": "ADMIN_API_KEY", "description": "Admin endpoint protection", "required": true, "secret": true, "secretRef": "ADMIN_API_KEY" },
189
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
190
- { "name": "JARVIS_AUTH_BASE_URL", "description": "Auth service URL", "required": false, "default": "http://jarvis-auth:8000" }
395
+ {
396
+ "name": "DATABASE_URL",
397
+ "description": "PostgreSQL connection string",
398
+ "required": true
399
+ },
400
+ {
401
+ "name": "NOTIFICATIONS_PORT",
402
+ "description": "Server port",
403
+ "required": false,
404
+ "default": "7712"
405
+ },
406
+ {
407
+ "name": "AUTH_SECRET_KEY",
408
+ "description": "JWT signing key (must match jarvis-auth)",
409
+ "required": true,
410
+ "secret": true,
411
+ "secretRef": "AUTH_SECRET_KEY"
412
+ },
413
+ {
414
+ "name": "ADMIN_API_KEY",
415
+ "description": "Admin endpoint protection",
416
+ "required": true,
417
+ "secret": true,
418
+ "secretRef": "ADMIN_API_KEY"
419
+ },
420
+ {
421
+ "name": "JARVIS_CONFIG_URL",
422
+ "description": "Config service URL",
423
+ "required": false,
424
+ "default": "http://jarvis-config-service:7700"
425
+ },
426
+ {
427
+ "name": "JARVIS_AUTH_BASE_URL",
428
+ "description": "Auth service URL",
429
+ "required": false,
430
+ "default": "http://jarvis-auth:8000"
431
+ }
191
432
  ]
192
433
  },
193
434
  {
@@ -198,9 +439,17 @@
198
439
  "port": 7708,
199
440
  "image": "ghcr.io/alexberardi/jarvis-settings-server:latest",
200
441
  "healthCheck": "/health",
201
- "dependsOn": ["jarvis-auth", "jarvis-config-service"],
442
+ "dependsOn": [
443
+ "jarvis-auth",
444
+ "jarvis-config-service"
445
+ ],
202
446
  "envVars": [
203
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" }
447
+ {
448
+ "name": "JARVIS_CONFIG_URL",
449
+ "description": "Config service URL",
450
+ "required": false,
451
+ "default": "http://jarvis-config-service:7700"
452
+ }
204
453
  ]
205
454
  },
206
455
  {
@@ -211,9 +460,17 @@
211
460
  "port": 7722,
212
461
  "image": "ghcr.io/alexberardi/jarvis-web:latest",
213
462
  "healthCheck": "/",
214
- "dependsOn": ["jarvis-auth", "jarvis-command-center"],
463
+ "dependsOn": [
464
+ "jarvis-auth",
465
+ "jarvis-command-center"
466
+ ],
215
467
  "envVars": [
216
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" }
468
+ {
469
+ "name": "JARVIS_CONFIG_URL",
470
+ "description": "Config service URL",
471
+ "required": false,
472
+ "default": "http://jarvis-config-service:7700"
473
+ }
217
474
  ]
218
475
  },
219
476
  {
@@ -224,10 +481,30 @@
224
481
  "port": 7710,
225
482
  "image": "ghcr.io/alexberardi/jarvis-admin:latest",
226
483
  "healthCheck": "/health",
227
- "dependsOn": ["jarvis-auth", "jarvis-config-service"],
484
+ "dependsOn": [
485
+ "jarvis-auth",
486
+ "jarvis-config-service"
487
+ ],
228
488
  "envVars": [
229
- { "name": "JARVIS_CONFIG_URL", "description": "Config service URL", "required": false, "default": "http://jarvis-config-service:7700" },
230
- { "name": "JARVIS_COMPOSE_PATH", "description": "Where the host's docker-compose.yml + .env live (mounted into the container)", "required": false, "default": "/host/compose" }
489
+ {
490
+ "name": "JARVIS_CONFIG_URL",
491
+ "description": "Config service URL",
492
+ "required": false,
493
+ "default": "http://jarvis-config-service:7700"
494
+ },
495
+ {
496
+ "name": "JARVIS_COMPOSE_PATH",
497
+ "description": "Where the host's docker-compose.yml + .env live (mounted into the container)",
498
+ "required": false,
499
+ "default": "/host/compose"
500
+ },
501
+ {
502
+ "name": "COMMAND_CENTER_ADMIN_KEY",
503
+ "description": "Admin API key for command-center admin endpoints (traces, node detail); shares the ADMIN_API_KEY secret",
504
+ "required": true,
505
+ "secret": true,
506
+ "secretRef": "ADMIN_API_KEY"
507
+ }
231
508
  ],
232
509
  "volumes": [
233
510
  "/var/run/docker.sock:/var/run/docker.sock",
@@ -250,59 +527,113 @@
250
527
  {
251
528
  "id": "postgres",
252
529
  "name": "PostgreSQL",
253
- "description": "Primary database stores users, commands, settings, and service config",
530
+ "description": "Primary database \u2014 stores users, commands, settings, and service config",
254
531
  "image": "pgvector/pgvector:pg16",
255
532
  "port": 5432,
256
533
  "envVars": [
257
- { "name": "POSTGRES_USER", "description": "Database superuser", "required": true, "default": "jarvis" },
258
- { "name": "POSTGRES_PASSWORD", "description": "Database password", "required": true, "secret": true, "secretRef": "POSTGRES_PASSWORD" },
259
- { "name": "POSTGRES_DB", "description": "Default database name", "required": true, "default": "jarvis_config" }
534
+ {
535
+ "name": "POSTGRES_USER",
536
+ "description": "Database superuser",
537
+ "required": true,
538
+ "default": "jarvis"
539
+ },
540
+ {
541
+ "name": "POSTGRES_PASSWORD",
542
+ "description": "Database password",
543
+ "required": true,
544
+ "secret": true,
545
+ "secretRef": "POSTGRES_PASSWORD"
546
+ },
547
+ {
548
+ "name": "POSTGRES_DB",
549
+ "description": "Default database name",
550
+ "required": true,
551
+ "default": "jarvis_config"
552
+ }
260
553
  ],
261
- "volumes": ["jarvis-postgres-data:/var/lib/postgresql/data"]
554
+ "volumes": [
555
+ "jarvis-postgres-data:/var/lib/postgresql/data"
556
+ ]
262
557
  },
263
558
  {
264
559
  "id": "redis",
265
560
  "name": "Redis",
266
- "description": "Task queue used for long-running jobs and async pipelines",
561
+ "description": "Task queue \u2014 used for long-running jobs and async pipelines",
267
562
  "image": "redis:7-alpine",
268
563
  "port": 6379,
269
564
  "envVars": [
270
- { "name": "REDIS_PASSWORD", "description": "Redis password", "required": true, "secret": true, "secretRef": "REDIS_PASSWORD" }
565
+ {
566
+ "name": "REDIS_PASSWORD",
567
+ "description": "Redis password",
568
+ "required": true,
569
+ "secret": true,
570
+ "secretRef": "REDIS_PASSWORD"
571
+ }
271
572
  ],
272
- "volumes": ["jarvis-redis-data:/data"]
573
+ "volumes": [
574
+ "jarvis-redis-data:/data"
575
+ ]
273
576
  },
274
577
  {
275
578
  "id": "loki",
276
579
  "name": "Loki",
277
- "description": "Logging database collects and indexes logs from all services",
580
+ "description": "Logging database \u2014 collects and indexes logs from all services",
278
581
  "image": "grafana/loki:2.9.0",
279
582
  "port": 3100,
280
583
  "envVars": [],
281
- "volumes": ["jarvis-loki-data:/loki"]
584
+ "volumes": [
585
+ "jarvis-loki-data:/loki"
586
+ ]
282
587
  },
283
588
  {
284
589
  "id": "mosquitto",
285
590
  "name": "Mosquitto",
286
- "description": "MQTT message broker node-to-service communication for TTS, commands, and settings",
591
+ "description": "MQTT message broker \u2014 node-to-service communication for TTS, commands, and settings",
287
592
  "image": "eclipse-mosquitto:2.0",
288
593
  "port": 1884,
289
594
  "envVars": [
290
- { "name": "MQTT_USERNAME", "description": "Shared broker username", "required": false, "default": "jarvis" },
291
- { "name": "MQTT_PASSWORD", "description": "Shared broker password (hashed into the password_file at startup)", "required": true, "secret": true, "secretRef": "MQTT_PASSWORD" },
292
- { "name": "MQTT_ALLOW_ANON", "description": "Accept anonymous clients (transition window). Set false to lock the broker.", "required": false, "default": "true" }
595
+ {
596
+ "name": "MQTT_USERNAME",
597
+ "description": "Shared broker username",
598
+ "required": false,
599
+ "default": "jarvis"
600
+ },
601
+ {
602
+ "name": "MQTT_PASSWORD",
603
+ "description": "Shared broker password (hashed into the password_file at startup)",
604
+ "required": true,
605
+ "secret": true,
606
+ "secretRef": "MQTT_PASSWORD"
607
+ },
608
+ {
609
+ "name": "MQTT_ALLOW_ANON",
610
+ "description": "Accept anonymous clients (transition window). Set false to lock the broker.",
611
+ "required": false,
612
+ "default": "true"
613
+ }
293
614
  ],
294
- "volumes": ["jarvis-mosquitto-data:/mosquitto/data"]
615
+ "volumes": [
616
+ "jarvis-mosquitto-data:/mosquitto/data"
617
+ ]
295
618
  },
296
619
  {
297
620
  "id": "grafana",
298
621
  "name": "Grafana",
299
- "description": "Monitoring dashboard visualize logs and service health metrics",
622
+ "description": "Monitoring dashboard \u2014 visualize logs and service health metrics",
300
623
  "image": "grafana/grafana:latest",
301
624
  "port": 3000,
302
625
  "envVars": [
303
- { "name": "GF_SECURITY_ADMIN_PASSWORD", "description": "Grafana admin password", "required": true, "secret": true, "secretRef": "GRAFANA_ADMIN_PASSWORD" }
626
+ {
627
+ "name": "GF_SECURITY_ADMIN_PASSWORD",
628
+ "description": "Grafana admin password",
629
+ "required": true,
630
+ "secret": true,
631
+ "secretRef": "GRAFANA_ADMIN_PASSWORD"
632
+ }
304
633
  ],
305
- "volumes": ["jarvis-grafana-data:/var/lib/grafana"]
634
+ "volumes": [
635
+ "jarvis-grafana-data:/var/lib/grafana"
636
+ ]
306
637
  }
307
638
  ]
308
639
  }