@aifabrix/builder 2.55.0 → 2.55.2

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 (70) hide show
  1. package/lib/agent-kit/host-approve.js +48 -6
  2. package/lib/agent-kit/init.js +2 -2
  3. package/lib/agent-kit/remote-prompts.js +46 -13
  4. package/lib/agent-kit/run.js +1 -1
  5. package/lib/agent-kit/start.js +310 -0
  6. package/lib/app/deploy.js +7 -4
  7. package/lib/app/offer-create-from-template.js +184 -0
  8. package/lib/cli/setup-app.js +8 -1
  9. package/lib/cli/setup-auth.js +11 -2
  10. package/lib/commands/agent-kit-help.js +74 -4
  11. package/lib/commands/agent-kit.js +83 -12
  12. package/lib/commands/auth-status-user.js +99 -0
  13. package/lib/commands/auth-status.js +14 -4
  14. package/lib/commands/datasource-load-export-cli.js +7 -2
  15. package/lib/commands/datasource-test-trust-cli.js +5 -1
  16. package/lib/commands/governance-command-action.js +5 -4
  17. package/lib/commands/identity-membership-role-cache.js +6 -1
  18. package/lib/commands/lifecycle-command-action.js +16 -15
  19. package/lib/commands/login-credentials.js +8 -3
  20. package/lib/commands/login-device.js +14 -5
  21. package/lib/commands/login.js +14 -1
  22. package/lib/commands/logout.js +50 -15
  23. package/lib/commands/role-assistant.js +24 -12
  24. package/lib/commands/verify-governance-command-action.js +9 -7
  25. package/lib/commands/verify-operations-command-action.js +9 -8
  26. package/lib/commands/verify-trust-command-action.js +6 -5
  27. package/lib/external-system/download.js +1 -2
  28. package/lib/generator/helpers.js +12 -1
  29. package/lib/integration-definition/apply-static-enterprise.js +5 -2
  30. package/lib/role-assistant/knowledge-sync-settings-push.js +172 -0
  31. package/lib/role-assistant/knowledge-sync.js +9 -126
  32. package/lib/role-assistant/test-cases-evaluate.js +12 -1
  33. package/lib/role-assistant/test-cases-evidence.js +44 -5
  34. package/lib/role-assistant/test-cases-lifecycle.js +9 -3
  35. package/lib/role-assistant/test-runner.js +3 -0
  36. package/lib/schema/infra-parameter.schema.json +51 -3
  37. package/lib/schema/infra.parameter.yaml +476 -40
  38. package/lib/schema/type/document-storage.json +1 -1
  39. package/lib/utils/api-required-permissions.js +271 -0
  40. package/lib/utils/api.js +16 -13
  41. package/lib/utils/cli-json-exit.js +41 -0
  42. package/lib/utils/cli-utils.js +23 -5
  43. package/lib/utils/controller-url.js +78 -4
  44. package/lib/utils/deployment-errors.js +15 -0
  45. package/lib/utils/deployment-validation-helpers.js +4 -1
  46. package/lib/utils/device-code.js +31 -10
  47. package/lib/utils/error-formatters/error-parser.js +16 -1
  48. package/lib/utils/error-formatters/permission-errors.js +19 -5
  49. package/lib/utils/keycloak-realm-ready.js +5 -2
  50. package/lib/utils/logger.js +1 -0
  51. package/lib/utils/paths.js +26 -5
  52. package/lib/utils/secrets-helpers.js +2 -2
  53. package/lib/utils/write-stream-and-wait.js +63 -0
  54. package/package.json +20 -6
  55. package/templates/agent-kit/agent-kit.yaml +1 -1
  56. package/templates/agent-kit/instructions/AGENTKIT.md +25 -4
  57. package/templates/agent-kit/instructions/root.AGENTS.md +1 -1
  58. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +2 -1
  59. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +1 -1
  60. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +2 -1
  61. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +1 -0
  62. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +1 -0
  63. package/templates/agent-kit/skills/shared/hosts.md +13 -26
  64. package/templates/agent-kit/skills/shared/login.md +16 -0
  65. package/templates/agent-kit/workspace/README.md +1 -1
  66. package/templates/applications/dataplane/application.yaml +1 -2
  67. package/templates/applications/dataplane/env.template +5 -5
  68. package/templates/applications/miso-controller/application.yaml +21 -2
  69. package/templates/applications/miso-controller/env.template +89 -17
  70. package/templates/applications/miso-controller/rbac.yaml +5 -0
@@ -43,12 +43,48 @@ parameters:
43
43
  azure:
44
44
  vaultSecretName: postgres-passwordKeyVault
45
45
  notes: >-
46
- Shared Docker Postgres admin password for local up-infra. This is separate from Keycloak’s
47
- Azure Postgres admin secret `{appKey}-postgres-admin-password` in aifabrix-miso
48
- infrastructure/bicep/modules/07_keycloak-webapp.bicep.
46
+ Local Docker Postgres admin password for up-infra. Azure application deployment does not
47
+ consume this name; use the system-scoped postgres-adminPassword entry for Azure.
48
+
49
+ - key: postgres-adminPassword
50
+ category: PostgreSQL
51
+ sensitive: true
52
+ valueSource: onboardingInput
53
+ requiredOnSystemOnboarding: true
54
+ scope: system
55
+ generator:
56
+ type: emptyString
57
+ ensureOn: [resolveApp]
58
+ azure:
59
+ vaultSecretName: postgres-adminPassword
60
+ legacyVaultSecretNames:
61
+ - '{serviceName}-postgres-admin-password'
62
+ notes: >-
63
+ Canonical Azure SDK PostgreSQL administrator password. The Marketplace alias
64
+ `{serviceName}-postgres-admin-password` is also accepted by the SDK, but Settings writes
65
+ this canonical name. Updating this stored value does not rotate the live PostgreSQL server.
66
+
67
+ - key: postgres-connectionString
68
+ category: PostgreSQL
69
+ sensitive: true
70
+ valueSource: providerOutput
71
+ requiredOnSystemOnboarding: false
72
+ scope: system
73
+ generator:
74
+ type: emptyString
75
+ ensureOn: [resolveApp]
76
+ azure:
77
+ vaultSecretName: postgres-connectionString
78
+ notes: >-
79
+ Azure SDK administrator connection string for the default postgres database. This contains
80
+ the administrator username and password; application runtime databases use separate users.
49
81
 
50
82
  - key: redis-passwordKeyVault
51
- scope: infra
83
+ category: Redis
84
+ sensitive: true
85
+ valueSource: optionalInput
86
+ requiredOnSystemOnboarding: false
87
+ scope: system
52
88
  generator:
53
89
  type: emptyAllowed
54
90
  ensureOn: [upInfra, resolveApp]
@@ -59,29 +95,151 @@ parameters:
59
95
  Set a value in secrets when using authenticated Redis or Azure.
60
96
 
61
97
  - key: redis-url
62
- scope: infra
98
+ category: Redis
99
+ sensitive: true
100
+ valueSource: providerOutput
101
+ requiredOnSystemOnboarding: true
102
+ scope: system
63
103
  generator:
64
104
  type: literal
65
105
  value: 'redis://${REDIS_HOST}:${REDIS_PORT}'
66
106
  ensureOn: [upInfra, resolveApp]
67
107
  azure:
68
- notes: Not a Key Vault secret in local dev; URL built from infra endpoints in Azure.
108
+ notes: >-
109
+ Local up-infra resolves the REDIS_HOST/REDIS_PORT placeholders. Azure application deploy
110
+ must leave this key absent so the Azure SDK derives the rediss URL and credential.
111
+
112
+ - key: storage-keyKeyVault
113
+ category: Storage
114
+ sensitive: true
115
+ valueSource: providerOutput
116
+ requiredOnSystemOnboarding: false
117
+ scope: system
118
+ generator:
119
+ type: emptyString
120
+ ensureOn: [resolveApp]
121
+ azure:
122
+ vaultSecretName: storage-keyKeyVault
123
+ notes: Azure SDK-derived primary storage account key.
124
+
125
+ - key: storage-connectionStringKeyVault
126
+ category: Storage
127
+ sensitive: true
128
+ valueSource: providerOutput
129
+ requiredOnSystemOnboarding: false
130
+ scope: system
131
+ generator:
132
+ type: emptyString
133
+ ensureOn: [resolveApp]
134
+ azure:
135
+ vaultSecretName: storage-connectionStringKeyVault
136
+ notes: Azure SDK-derived storage account connection string.
137
+
138
+ - key: storage-account-key
139
+ category: Storage
140
+ sensitive: true
141
+ valueSource: providerOutput
142
+ requiredOnSystemOnboarding: false
143
+ scope: system
144
+ generator:
145
+ type: emptyString
146
+ ensureOn: [resolveApp]
147
+ azure:
148
+ vaultSecretName: storage-account-key
149
+ notes: Marketplace Bicep storage-account key name retained for installed-stack diagnostics.
150
+
151
+ - key: acr-server
152
+ category: Container Registry
153
+ sensitive: false
154
+ valueSource: providerOutput
155
+ requiredOnSystemOnboarding: false
156
+ scope: system
157
+ generator:
158
+ type: emptyString
159
+ ensureOn: [resolveApp]
160
+ azure:
161
+ vaultSecretName: acr-server
162
+ notes: Azure SDK-derived container registry login server.
163
+
164
+ - key: acr-username
165
+ category: Container Registry
166
+ sensitive: false
167
+ valueSource: providerOutput
168
+ requiredOnSystemOnboarding: false
169
+ scope: system
170
+ generator:
171
+ type: emptyString
172
+ ensureOn: [resolveApp]
173
+ azure:
174
+ vaultSecretName: acr-username
175
+ notes: Azure SDK-derived container registry username when password authentication is enabled.
176
+
177
+ - key: acr-passwordKeyVault
178
+ category: Container Registry
179
+ sensitive: true
180
+ valueSource: providerOutput
181
+ requiredOnSystemOnboarding: false
182
+ scope: system
183
+ generator:
184
+ type: emptyString
185
+ ensureOn: [resolveApp]
186
+ azure:
187
+ vaultSecretName: acr-passwordKeyVault
188
+ legacyVaultSecretNames:
189
+ - '{serviceName}-acr-registry-password'
190
+ notes: Azure SDK-derived container registry password when password authentication is enabled.
191
+
192
+ - key: frontdoor-url
193
+ category: Front Door
194
+ sensitive: false
195
+ valueSource: providerOutput
196
+ requiredOnSystemOnboarding: false
197
+ scope: system
198
+ generator:
199
+ type: emptyString
200
+ ensureOn: [resolveApp]
201
+ azure:
202
+ vaultSecretName: frontdoor-url
203
+ notes: Azure Front Door public URL when materialized by the environment deployment.
204
+
205
+ - key: frontdoor-host
206
+ category: Front Door
207
+ sensitive: false
208
+ valueSource: providerOutput
209
+ requiredOnSystemOnboarding: false
210
+ scope: system
211
+ generator:
212
+ type: emptyString
213
+ ensureOn: [resolveApp]
214
+ azure:
215
+ vaultSecretName: frontdoor-host
216
+ notes: Azure Front Door hostname when materialized by the environment deployment.
69
217
 
70
218
  - key: keycloak-admin-passwordKeyVault
71
- scope: shared-service
219
+ category: Keycloak
220
+ sensitive: true
221
+ valueSource: legacyMigration
222
+ requiredOnSystemOnboarding: true
223
+ scope: system
72
224
  generator:
73
225
  type: literal
74
226
  value: '{{adminPassword}}'
75
227
  ensureOn: [upInfra, resolveApp]
76
228
  azure:
77
- vaultSecretNamePattern: '{appKey}-keycloak-admin-password'
229
+ vaultSecretName: keycloak-admin-passwordKeyVault
230
+ legacyVaultSecretNames:
231
+ - '{serviceName}-keycloak-admin-password'
78
232
  notes: >-
79
233
  Local kv:// and secrets.local.yaml use the *KeyVault suffix. Miso install Bicep references
80
234
  SecretName `${prefix}-keycloak-admin-password` (no KeyVault suffix) in
81
235
  infrastructure/bicep/modules/05_miso-webapp.bicep and 07_keycloak-webapp.bicep.
82
236
 
83
237
  - key: keycloak-web-server-url
84
- scope: shared-service
238
+ category: Keycloak
239
+ sensitive: false
240
+ valueSource: providerOutput
241
+ requiredOnSystemOnboarding: true
242
+ scope: system
85
243
  generator:
86
244
  type: emptyString
87
245
  ensureOn: [upInfra, resolveApp]
@@ -92,7 +250,11 @@ parameters:
92
250
  Shipped miso-controller/dataplane env templates use url://keycloak-public instead of this kv:// for local resolve.
93
251
 
94
252
  - key: keycloak-internal-server-url
95
- scope: shared-service
253
+ category: Keycloak
254
+ sensitive: false
255
+ valueSource: providerOutput
256
+ requiredOnSystemOnboarding: true
257
+ scope: system
96
258
  generator:
97
259
  type: emptyString
98
260
  ensureOn: [upInfra, resolveApp]
@@ -102,9 +264,67 @@ parameters:
102
264
  Bicep (05_miso-webapp.bicep) uses unprefixed SecretName `keycloak-internal-server-url`.
103
265
  Shipped templates use url://keycloak-internal for local resolve.
104
266
 
267
+ - key: keycloak-vdir-public
268
+ category: Keycloak
269
+ sensitive: false
270
+ valueSource: providerOutput
271
+ requiredOnSystemOnboarding: false
272
+ scope: system
273
+ generator:
274
+ type: emptyString
275
+ ensureOn: [resolveApp]
276
+ azure:
277
+ vaultSecretName: keycloak-vdir-public
278
+ notes: Public Keycloak virtual-directory path produced by the platform Bicep deployment.
279
+
280
+ - key: miso-controller-web-server-url
281
+ category: Platform URLs
282
+ sensitive: false
283
+ valueSource: providerOutput
284
+ requiredOnSystemOnboarding: true
285
+ scope: system
286
+ generator:
287
+ type: emptyString
288
+ ensureOn: [resolveApp]
289
+ azure:
290
+ vaultSecretName: miso-controller-web-server-url
291
+ notes: Public Miso Controller URL produced by the platform Bicep deployment.
292
+
293
+ - key: miso-controller-internal-server-url
294
+ category: Platform URLs
295
+ sensitive: false
296
+ valueSource: providerOutput
297
+ requiredOnSystemOnboarding: true
298
+ scope: system
299
+ generator:
300
+ type: emptyString
301
+ ensureOn: [resolveApp]
302
+ azure:
303
+ vaultSecretName: miso-controller-internal-server-url
304
+ legacyVaultSecretNames:
305
+ - miso-controller-internal-server-urlKeyVault
306
+ notes: Internal Miso Controller URL under the direct manifest name.
307
+
308
+ - key: miso-controller-vdir-public
309
+ category: Platform URLs
310
+ sensitive: false
311
+ valueSource: providerOutput
312
+ requiredOnSystemOnboarding: true
313
+ scope: system
314
+ generator:
315
+ type: emptyString
316
+ ensureOn: [resolveApp]
317
+ azure:
318
+ vaultSecretName: miso-controller-vdir-public
319
+ notes: Public Miso Controller virtual-directory path produced by the platform Bicep deployment.
320
+
105
321
  # When env.template uses kv://keycloak-client-idKeyVault (multi-realm / dev naming).
106
322
  - key: keycloak-client-idKeyVault
107
- scope: shared-service
323
+ category: Keycloak
324
+ sensitive: false
325
+ valueSource: generated
326
+ requiredOnSystemOnboarding: true
327
+ scope: system
108
328
  generator:
109
329
  type: literal
110
330
  value: 'miso-controller-miso-keycloak'
@@ -114,7 +334,11 @@ parameters:
114
334
  Default OAuth client id for controller ↔ Keycloak when resolved from secrets; override per environment.
115
335
 
116
336
  - key: keycloak-client-secretKeyVault
117
- scope: shared-service
337
+ category: Keycloak
338
+ sensitive: true
339
+ valueSource: generated
340
+ requiredOnSystemOnboarding: true
341
+ scope: system
118
342
  generator:
119
343
  type: randomBytes32
120
344
  ensureOn: [upInfra, resolveApp]
@@ -125,7 +349,11 @@ parameters:
125
349
  # Miso-controller Entra ID onboarding (vendor multi-tenant app). Empty client/callback values
126
350
  # allow local resolve and start-dev; set real values before Entra admin-consent flows.
127
351
  - key: entra-callback-state-secret
128
- scope: shared-service
352
+ category: Microsoft Entra ID
353
+ sensitive: true
354
+ valueSource: generated
355
+ requiredOnSystemOnboarding: true
356
+ scope: system
129
357
  generator:
130
358
  type: randomBytes32
131
359
  ensureOn: [upInfra, resolveApp]
@@ -135,7 +363,11 @@ parameters:
135
363
  maps to ENTRA_CALLBACK_STATE_SECRET in miso-controller env.template.
136
364
 
137
365
  - key: entra-callback-uri
138
- scope: shared-service
366
+ category: Microsoft Entra ID
367
+ sensitive: false
368
+ valueSource: optionalInput
369
+ requiredOnSystemOnboarding: false
370
+ scope: system
139
371
  generator:
140
372
  type: emptyString
141
373
  ensureOn: [upInfra, resolveApp]
@@ -145,7 +377,11 @@ parameters:
145
377
  empty locally until Mori URL is configured.
146
378
 
147
379
  - key: entra-client-idKeyVault
148
- scope: shared-service
380
+ category: Microsoft Entra ID
381
+ sensitive: false
382
+ valueSource: optionalInput
383
+ requiredOnSystemOnboarding: false
384
+ scope: system
149
385
  generator:
150
386
  type: emptyString
151
387
  ensureOn: [upInfra, resolveApp]
@@ -154,18 +390,28 @@ parameters:
154
390
  Vendor Entra app client id (ENTRA_ID_CLIENT_ID); empty for local dev without Entra flows.
155
391
 
156
392
  - key: entra-client-secretKeyVault
157
- scope: shared-service
393
+ category: Microsoft Entra ID
394
+ sensitive: true
395
+ valueSource: optionalInput
396
+ requiredOnSystemOnboarding: false
397
+ scope: system
158
398
  generator:
159
399
  type: emptyString
160
400
  ensureOn: [upInfra, resolveApp]
161
401
  azure:
402
+ legacyVaultSecretNames:
403
+ - entra-vendor-client-secret
162
404
  notes: >-
163
405
  Vendor Entra app client secret (ENTRA_ID_CLIENT_SECRET); empty for local dev without Entra flows.
164
406
 
165
407
  # Keycloak events: webhook signature secret used by miso-controller (KEYCLOAK_EVENTS_SECRET).
166
408
  # This must exist on first boot because up-platform runs containers from templates (no prior resolve).
167
409
  - key: keycloak-events-secretKeyVault
168
- scope: shared-service
410
+ category: Keycloak
411
+ sensitive: true
412
+ valueSource: generated
413
+ requiredOnSystemOnboarding: true
414
+ scope: system
169
415
  generator:
170
416
  type: randomBytes32
171
417
  ensureOn: [upInfra, resolveApp]
@@ -174,7 +420,11 @@ parameters:
174
420
  Shared secret for Keycloak event signature verification. Generated on first ensure for local bootstrap.
175
421
 
176
422
  - key: keycloak-default-passwordKeyVault
177
- scope: shared-service
423
+ category: Keycloak
424
+ sensitive: true
425
+ valueSource: generated
426
+ requiredOnSystemOnboarding: true
427
+ scope: system
178
428
  generator:
179
429
  type: literal
180
430
  value: '{{userPassword}}'
@@ -184,29 +434,36 @@ parameters:
184
434
  Keycloak default-user password for local/bootstrap; explicit literal so it is not randomBytes32.
185
435
 
186
436
  - key: miso-controller-secrets-encryptionKeyVault
437
+ ownerAppKey: miso-controller
187
438
  scope: app
188
439
  generator:
189
440
  type: randomBytes32
190
441
  ensureOn: [upInfra, resolveApp]
191
442
  azure:
192
- vaultSecretNamePattern: '{appKey}-secrets-encryptionKeyVault'
443
+ vaultSecretName: miso-controller-secrets-encryptionKeyVault
444
+ legacyVaultSecretNames:
445
+ - '{serviceName}-encryption-keyKeyVault'
193
446
  notes: >-
194
447
  32-byte secret as base64; generated on first ensure. Rotate in production.
195
448
 
196
449
  # Local kv:// name matches miso-controller env.template (JWT_SECRET); not the generic {appKey}-secrets-jwtKeyVault Azure name.
197
450
  - key: miso-controller-jwt-secretKeyVault
451
+ ownerAppKey: miso-controller
198
452
  scope: app
199
453
  generator:
200
454
  type: randomBytes32
201
455
  ensureOn: [upInfra, resolveApp]
202
456
  azure:
203
- vaultSecretNamePattern: '{appKey}-secrets-jwtKeyVault'
457
+ vaultSecretName: miso-controller-jwt-secretKeyVault
458
+ legacyVaultSecretNames:
459
+ - '{serviceName}-secrets-jwtKeyVault'
204
460
  notes: >-
205
461
  JWT signing secret; generated on first ensure. Azure Bicep typically uses `${prefix}-secrets-jwtKeyVault`.
206
462
 
207
463
  # LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault — local default skips Mori/JWT license checks.
208
464
  # Controller ignores DEVELOPMENT when DEPLOYMENT=azure.
209
465
  - key: miso-controller-jwt-licenseKeyVault
466
+ ownerAppKey: miso-controller
210
467
  scope: app
211
468
  generator:
212
469
  type: literal
@@ -219,6 +476,7 @@ parameters:
219
476
 
220
477
  # Exact entry so this is not caught by *KeyVault → randomBytes32 (invalid email).
221
478
  - key: miso-controller-admin-emailKeyVault
479
+ ownerAppKey: miso-controller
222
480
  scope: app
223
481
  generator:
224
482
  type: literal
@@ -229,19 +487,26 @@ parameters:
229
487
 
230
488
  # Local first-time install / onboarding default (change in production).
231
489
  - key: miso-controller-admin-passwordKeyVault
490
+ ownerAppKey: miso-controller
232
491
  scope: app
233
492
  generator:
234
493
  type: literal
235
494
  value: '{{adminPassword}}'
236
495
  ensureOn: [upInfra, resolveApp]
237
496
  azure:
497
+ legacyVaultSecretNames:
498
+ - '{serviceName}-onboarding-admin-password'
238
499
  notes: >-
239
500
  Matches controller onboarding default; override in secrets for non-dev.
240
501
  Same secret backs ONBOARDING_ADMIN_PASSWORD and MISO_ADMIN_PASSWORD in env.template.
241
502
 
242
503
  # DEPLOYMENT=azure only; local/docker leave empty (do not generate random placeholders).
243
504
  - key: azure-subscription-idKeyVault
244
- scope: infra
505
+ category: Azure
506
+ sensitive: false
507
+ valueSource: onboardingInput
508
+ requiredOnSystemOnboarding: false
509
+ scope: system
245
510
  generator:
246
511
  type: emptyString
247
512
  ensureOn: [upInfra, resolveApp]
@@ -249,7 +514,11 @@ parameters:
249
514
  notes: Production Key Vault / app settings; empty locally.
250
515
 
251
516
  - key: azure-tenant-idKeyVault
252
- scope: infra
517
+ category: Azure
518
+ sensitive: false
519
+ valueSource: onboardingInput
520
+ requiredOnSystemOnboarding: false
521
+ scope: system
253
522
  generator:
254
523
  type: emptyString
255
524
  ensureOn: [upInfra, resolveApp]
@@ -257,7 +526,11 @@ parameters:
257
526
  notes: Production only; empty locally.
258
527
 
259
528
  - key: azure-service-nameKeyVault
260
- scope: infra
529
+ category: Azure
530
+ sensitive: false
531
+ valueSource: onboardingInput
532
+ requiredOnSystemOnboarding: false
533
+ scope: system
261
534
  generator:
262
535
  type: emptyString
263
536
  ensureOn: [upInfra, resolveApp]
@@ -270,7 +543,7 @@ parameters:
270
543
  type: emptyString
271
544
  ensureOn: [upInfra, resolveApp]
272
545
  azure:
273
- notes: Production only; empty locally.
546
+ notes: Optional service-principal override for local/tooling use; Azure App Service uses managed identity.
274
547
 
275
548
  - key: azure-client-secretKeyVault
276
549
  scope: infra
@@ -278,7 +551,7 @@ parameters:
278
551
  type: emptyString
279
552
  ensureOn: [upInfra, resolveApp]
280
553
  azure:
281
- notes: Production only; empty locally.
554
+ notes: Optional service-principal override for local/tooling use; Azure App Service uses managed identity.
282
555
 
283
556
  # Optional private npm; local scaffold leaves empty.
284
557
  - key: BASH_NPM_TOKEN
@@ -300,16 +573,20 @@ parameters:
300
573
 
301
574
  # Default client id for controller app in local multi-service layout; override after register if needed.
302
575
  - key: miso-controller-client-idKeyVault
576
+ ownerAppKey: miso-controller
303
577
  scope: app
304
578
  generator:
305
579
  type: literal
306
580
  value: 'miso-controller-miso-miso-controller'
307
581
  ensureOn: [upInfra, resolveApp]
308
582
  azure:
583
+ legacyVaultSecretNames:
584
+ - '{serviceName}-miso-clientIdKeyVault'
309
585
  notes: >-
310
586
  Per-app OAuth client id from controller registration; literal default matches local Keycloak client naming.
311
587
 
312
588
  - key: miso-controller-client-secretKeyVault
589
+ ownerAppKey: miso-controller
313
590
  scope: app
314
591
  generator:
315
592
  type: randomBytes32
@@ -321,6 +598,7 @@ parameters:
321
598
 
322
599
  # Dataplane ↔ controller OAuth (builder/dataplane env.template MISO_CLIENTID / MISO_CLIENTSECRET).
323
600
  - key: dataplane-client-idKeyVault
601
+ ownerAppKey: dataplane
324
602
  scope: app
325
603
  generator:
326
604
  type: literal
@@ -332,6 +610,7 @@ parameters:
332
610
  (override for environments such as miso-controller-dev-dataplane).
333
611
 
334
612
  - key: dataplane-client-secretKeyVault
613
+ ownerAppKey: dataplane
335
614
  scope: app
336
615
  generator:
337
616
  type: randomBytes32
@@ -343,7 +622,11 @@ parameters:
343
622
  # Mori / telemetry: optional locally (LICENSE_JWT via miso-controller-jwt-licenseKeyVault=DEVELOPMENT skips Mori).
344
623
  # MORI_AUTH_METHOD=kv://mori-controller-auth-methodKeyVault — local default apiKey.
345
624
  - key: mori-controller-auth-methodKeyVault
346
- scope: infra
625
+ category: Mori
626
+ sensitive: false
627
+ valueSource: optionalInput
628
+ requiredOnSystemOnboarding: false
629
+ scope: system
347
630
  generator:
348
631
  type: literal
349
632
  value: 'apiKey'
@@ -353,7 +636,11 @@ parameters:
353
636
  Local/dev default apiKey. Override when using Mori basic auth or other methods.
354
637
 
355
638
  - key: mori-controller-api-keyKeyVault
356
- scope: infra
639
+ category: Mori
640
+ sensitive: true
641
+ valueSource: optionalInput
642
+ requiredOnSystemOnboarding: false
643
+ scope: system
357
644
  generator:
358
645
  type: emptyString
359
646
  ensureOn: [upInfra, resolveApp]
@@ -361,7 +648,11 @@ parameters:
361
648
  notes: Empty locally; set when calling Mori with API key auth.
362
649
 
363
650
  - key: mori-controller-basic-usernameKeyVault
364
- scope: infra
651
+ category: Mori
652
+ sensitive: false
653
+ valueSource: optionalInput
654
+ requiredOnSystemOnboarding: false
655
+ scope: system
365
656
  generator:
366
657
  type: emptyString
367
658
  ensureOn: [upInfra, resolveApp]
@@ -369,7 +660,11 @@ parameters:
369
660
  notes: Empty locally; Mori basic auth optional.
370
661
 
371
662
  - key: mori-controller-basic-passwordKeyVault
372
- scope: infra
663
+ category: Mori
664
+ sensitive: true
665
+ valueSource: optionalInput
666
+ requiredOnSystemOnboarding: false
667
+ scope: system
373
668
  generator:
374
669
  type: emptyString
375
670
  ensureOn: [upInfra, resolveApp]
@@ -377,7 +672,11 @@ parameters:
377
672
  notes: Empty locally; Mori basic auth optional.
378
673
 
379
674
  - key: appinsights-connectionStringKeyVault
380
- scope: infra
675
+ category: Observability
676
+ sensitive: true
677
+ valueSource: providerOutput
678
+ requiredOnSystemOnboarding: false
679
+ scope: system
381
680
  generator:
382
681
  type: emptyString
383
682
  ensureOn: [upInfra, resolveApp]
@@ -386,14 +685,70 @@ parameters:
386
685
  notes: >-
387
686
  Aligns with keyvault.md / Azure naming (appinsights.connectionStringKeyVault). Empty locally until set from Azure Portal.
388
687
 
688
+ - key: appinsights-keyKeyVault
689
+ category: Observability
690
+ sensitive: true
691
+ valueSource: providerOutput
692
+ requiredOnSystemOnboarding: false
693
+ scope: system
694
+ generator:
695
+ type: emptyString
696
+ ensureOn: [resolveApp]
697
+ azure:
698
+ vaultSecretName: appinsights-keyKeyVault
699
+ notes: Azure SDK-derived Application Insights instrumentation key.
700
+
701
+ - key: loganalytics-workspace-id
702
+ category: Observability
703
+ sensitive: false
704
+ valueSource: providerOutput
705
+ requiredOnSystemOnboarding: false
706
+ scope: system
707
+ generator:
708
+ type: emptyString
709
+ ensureOn: [resolveApp]
710
+ azure:
711
+ vaultSecretName: loganalytics-workspace-id
712
+ notes: Azure SDK-derived Log Analytics workspace customer identifier.
713
+
714
+ - key: azureopenai-endpoint
715
+ category: Azure OpenAI
716
+ sensitive: false
717
+ valueSource: optionalInput
718
+ requiredOnSystemOnboarding: false
719
+ scope: system
720
+ generator:
721
+ type: emptyString
722
+ ensureOn: [resolveApp]
723
+ azure:
724
+ vaultSecretName: azureopenai-endpoint
725
+ notes: Azure OpenAI endpoint produced by the environment infrastructure deployment.
726
+
727
+ - key: azureopenai-apikey
728
+ category: Azure OpenAI
729
+ sensitive: true
730
+ valueSource: optionalInput
731
+ requiredOnSystemOnboarding: false
732
+ scope: system
733
+ generator:
734
+ type: emptyString
735
+ ensureOn: [resolveApp]
736
+ azure:
737
+ vaultSecretName: azureopenai-apikey
738
+ notes: Azure OpenAI API key produced by the environment infrastructure deployment.
739
+
389
740
  # Dataplane builder/dataplane env.template (AI/LLM); optional until OpenAI or Azure OpenAI is configured.
390
741
  - key: secrets-openaiApiKeyVault
391
- scope: app
742
+ category: OpenAI
743
+ sensitive: true
744
+ valueSource: optionalInput
745
+ requiredOnSystemOnboarding: false
746
+ scope: system
392
747
  generator:
393
748
  type: emptyString
394
- ensureOn: [upInfra, resolveApp]
749
+ ensureOn: [resolveApp]
395
750
  azure:
396
- notes: Empty until set; user-supplied OpenAI API key (not auto-generated).
751
+ notes: Optional shared OpenAI API key; empty until supplied and never auto-generated.
397
752
 
398
753
  - key: azure-openaiapi-urlKeyVault
399
754
  scope: app
@@ -411,6 +766,31 @@ parameters:
411
766
  azure:
412
767
  notes: Empty until set; user-supplied Azure OpenAI API key (not auto-generated).
413
768
 
769
+ # Dataplane RS256 signing identity. The two rows are generated as one linked pair.
770
+ - key: secrets-certificatePrivateKeyVault
771
+ ownerAppKey: dataplane
772
+ scope: app
773
+ generator:
774
+ type: rsaKeyPair
775
+ pairId: dataplane-signing
776
+ part: private
777
+ ensureOn: [resolveApp]
778
+ azure:
779
+ vaultSecretName: secrets-certificatePrivateKeyVault
780
+ notes: PKCS#8 PEM private key generated with the matching public key.
781
+
782
+ - key: secrets-certificatePublicKeyVault
783
+ ownerAppKey: dataplane
784
+ scope: app
785
+ generator:
786
+ type: rsaKeyPair
787
+ pairId: dataplane-signing
788
+ part: public
789
+ ensureOn: [resolveApp]
790
+ azure:
791
+ vaultSecretName: secrets-certificatePublicKeyVault
792
+ notes: SPKI PEM public key derived from the linked private key.
793
+
414
794
  # Legacy unprefixed name (scaffold / old env.template); prefer *KeyVault suffix or {appKey}-secrets-apiKeyVault (keyvault.md).
415
795
  - key: api-key
416
796
  scope: app
@@ -423,13 +803,26 @@ parameters:
423
803
 
424
804
  # Legacy unprefixed name; prefer kv://{appKey}-secrets-apiKeyVault in env.template (keyvault.md secrets.apiKeyVault).
425
805
  - key: miso-controller-secrets-apiKeyVault
806
+ scope: infra
807
+ generator:
808
+ type: emptyAllowed
809
+ ensureOn: [upInfra]
810
+ azure:
811
+ notes: >-
812
+ Optional local testing/development bearer bypass. A supplied local value is resolved; when absent,
813
+ local and Azure application deployment resolve it as empty and do not fail.
814
+
815
+ - key: mori-callback-api-keyKeyVault
816
+ ownerAppKey: miso-controller
426
817
  scope: app
427
818
  generator:
428
819
  type: randomBytes32
429
- ensureOn: [upInfra, resolveApp]
820
+ ensureOn: [resolveApp]
430
821
  azure:
431
- notes: >-
432
- Prefer {appKey}-secrets-apiKeyVault locally; dataplane shares miso-controller's entry for pipeline Bearer bypass.
822
+ vaultSecretName: mori-callback-api-keyKeyVault
823
+ legacyVaultSecretNames:
824
+ - marketplace-mori-callback-api-key
825
+ notes: Miso Controller callback credential; generated only when its resolved manifest requires it.
433
826
 
434
827
  # App semver when env.template / conversion yields kv://version (local secrets backfill).
435
828
  - key: version
@@ -442,15 +835,57 @@ parameters:
442
835
  notes: >-
443
836
  Default application version for kv://version; override in secrets when needed.
444
837
 
445
- # Per-index database secrets (local names). Index must match requires.databases order in application.yaml.
838
+ # Exact Miso Controller rows retain Marketplace infrastructure-name aliases.
839
+ - key: databases-miso-controller-0-urlKeyVault
840
+ ownerAppKey: miso-controller
841
+ scope: app
842
+ generator:
843
+ type: databaseUrl
844
+ ensureOn: [upInfra, resolveApp]
845
+ azure:
846
+ vaultSecretName: databases-miso-controller-0-urlKeyVault
847
+ legacyVaultSecretNames:
848
+ - '{serviceName}-databases-0-urlKeyVault'
849
+
850
+ - key: databases-miso-controller-0-passwordKeyVault
851
+ ownerAppKey: miso-controller
852
+ scope: app
853
+ generator:
854
+ type: databasePassword
855
+ ensureOn: [upInfra, resolveApp]
856
+ azure:
857
+ vaultSecretName: databases-miso-controller-0-passwordKeyVault
858
+
859
+ - key: databases-miso-controller-1-urlKeyVault
860
+ ownerAppKey: miso-controller
861
+ scope: app
862
+ generator:
863
+ type: databaseUrl
864
+ ensureOn: [upInfra, resolveApp]
865
+ azure:
866
+ vaultSecretName: databases-miso-controller-1-urlKeyVault
867
+ legacyVaultSecretNames:
868
+ - '{serviceName}-databases-1-urlKeyVault'
869
+
870
+ - key: databases-miso-controller-1-passwordKeyVault
871
+ ownerAppKey: miso-controller
872
+ scope: app
873
+ generator:
874
+ type: databasePassword
875
+ ensureOn: [upInfra, resolveApp]
876
+ azure:
877
+ vaultSecretName: databases-miso-controller-1-passwordKeyVault
878
+
879
+ # Per-index database secrets. Index must match requires.databases order in application.yaml.
446
880
  - keyPattern: '^databases-[a-z0-9-]+-\d+-urlKeyVault$'
447
881
  scope: app
448
882
  generator:
449
883
  type: databaseUrl
450
884
  ensureOn: [upInfra, resolveApp]
451
885
  azure:
452
- vaultSecretNamePattern: '{appKey}-databases-{index}-urlKeyVault'
453
- notes: Azure vault secret name prefixes app key; local kv:// key has no app prefix.
886
+ legacyVaultSecretNames:
887
+ - '{appKey}-databases-{index}-urlKeyVault'
888
+ notes: The direct manifest key is canonical; the app-prefixed form is migration-only.
454
889
 
455
890
  - keyPattern: '^databases-[a-z0-9-]+-\d+-passwordKeyVault$'
456
891
  scope: app
@@ -458,7 +893,8 @@ parameters:
458
893
  type: databasePassword
459
894
  ensureOn: [upInfra, resolveApp]
460
895
  azure:
461
- vaultSecretNamePattern: '{appKey}-databases-{index}-passwordKeyVault'
896
+ legacyVaultSecretNames:
897
+ - '{appKey}-databases-{index}-passwordKeyVault'
462
898
 
463
899
  # Keycloak and other *-url keys (non-database).
464
900
  - keyPattern: '^keycloak-.+-url$'