@aifabrix/builder 2.55.0 → 2.56.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 (101) 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/api/pipeline.api.js +32 -3
  7. package/lib/app/deploy.js +13 -9
  8. package/lib/app/offer-create-from-template.js +184 -0
  9. package/lib/cli/setup-app.js +15 -7
  10. package/lib/cli/setup-auth.js +11 -2
  11. package/lib/cli/setup-external-system-help.js +15 -3
  12. package/lib/cli/setup-external-system.js +21 -3
  13. package/lib/commands/agent-kit-help.js +74 -4
  14. package/lib/commands/agent-kit.js +83 -12
  15. package/lib/commands/auth-status-user.js +99 -0
  16. package/lib/commands/auth-status.js +14 -4
  17. package/lib/commands/datasource-load-export-cli.js +7 -2
  18. package/lib/commands/datasource-test-trust-cli.js +5 -1
  19. package/lib/commands/governance-command-action.js +5 -4
  20. package/lib/commands/identity-membership-role-cache.js +6 -1
  21. package/lib/commands/lifecycle-command-action.js +16 -15
  22. package/lib/commands/login-credentials.js +8 -3
  23. package/lib/commands/login-device.js +14 -5
  24. package/lib/commands/login.js +14 -1
  25. package/lib/commands/logout.js +50 -15
  26. package/lib/commands/repair-datasource-auto-rbac.js +4 -9
  27. package/lib/commands/role-assistant.js +24 -12
  28. package/lib/commands/upload-openapi-sync-followup.js +59 -0
  29. package/lib/commands/upload-qualification-client.js +131 -0
  30. package/lib/commands/upload-qualification-followups.js +104 -0
  31. package/lib/commands/upload-qualification-poll.js +143 -0
  32. package/lib/commands/upload.js +37 -156
  33. package/lib/commands/verify-governance-command-action.js +9 -7
  34. package/lib/commands/verify-operations-command-action.js +9 -8
  35. package/lib/commands/verify-trust-command-action.js +6 -5
  36. package/lib/deployment/deploy-poll-ui.js +14 -10
  37. package/lib/deployment/deployer-status.js +4 -4
  38. package/lib/external-system/deploy.js +46 -51
  39. package/lib/external-system/download.js +1 -2
  40. package/lib/generator/helpers.js +14 -46
  41. package/lib/generator/index.js +0 -4
  42. package/lib/integration-definition/apply-static-enterprise.js +5 -2
  43. package/lib/programmatic/builder-api-request.js +8 -4
  44. package/lib/programmatic/capability-registry.js +2 -0
  45. package/lib/programmatic/get-deploy-status.js +45 -0
  46. package/lib/programmatic/get-upload-status.js +45 -0
  47. package/lib/programmatic/http-accepted-response.js +31 -0
  48. package/lib/programmatic/openapi-descriptions.js +14 -4
  49. package/lib/programmatic/request-timeout.js +21 -15
  50. package/lib/programmatic/route-handler-map.js +6 -0
  51. package/lib/programmatic/run-deploy.js +7 -3
  52. package/lib/programmatic/run-upload.js +11 -7
  53. package/lib/role-assistant/knowledge-sync-settings-push.js +172 -0
  54. package/lib/role-assistant/knowledge-sync.js +9 -126
  55. package/lib/role-assistant/test-cases-evaluate.js +12 -1
  56. package/lib/role-assistant/test-cases-evidence.js +44 -5
  57. package/lib/role-assistant/test-cases-lifecycle.js +9 -3
  58. package/lib/role-assistant/test-runner.js +3 -0
  59. package/lib/schema/infra-parameter.schema.json +51 -3
  60. package/lib/schema/infra.parameter.yaml +482 -47
  61. package/lib/schema/type/document-storage.json +1 -1
  62. package/lib/utils/api-required-permissions.js +271 -0
  63. package/lib/utils/api.js +16 -13
  64. package/lib/utils/cli-json-exit.js +41 -0
  65. package/lib/utils/cli-utils.js +26 -7
  66. package/lib/utils/controller-url.js +78 -4
  67. package/lib/utils/deployment-errors.js +15 -0
  68. package/lib/utils/deployment-validation-helpers.js +4 -1
  69. package/lib/utils/device-code.js +31 -10
  70. package/lib/utils/error-formatters/error-parser.js +16 -1
  71. package/lib/utils/error-formatters/permission-errors.js +19 -5
  72. package/lib/utils/keycloak-realm-ready.js +5 -2
  73. package/lib/utils/logger.js +1 -0
  74. package/lib/utils/paths.js +26 -5
  75. package/lib/utils/qualification-poll-ui.js +136 -0
  76. package/lib/utils/secrets-helpers.js +2 -2
  77. package/lib/utils/write-stream-and-wait.js +63 -0
  78. package/package.json +22 -7
  79. package/templates/agent-kit/agent-kit.yaml +1 -1
  80. package/templates/agent-kit/instructions/AGENTKIT.md +25 -4
  81. package/templates/agent-kit/instructions/root.AGENTS.md +1 -1
  82. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +2 -1
  83. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +1 -1
  84. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +2 -1
  85. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +1 -0
  86. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +1 -0
  87. package/templates/agent-kit/skills/shared/hosts.md +13 -26
  88. package/templates/agent-kit/skills/shared/login.md +16 -0
  89. package/templates/agent-kit/workspace/README.md +1 -1
  90. package/templates/applications/builder-api/env.template +4 -0
  91. package/templates/applications/dataplane/application.yaml +1 -2
  92. package/templates/applications/dataplane/env.template +5 -5
  93. package/templates/applications/keycloak/Dockerfile +12 -5
  94. package/templates/applications/keycloak/application.yaml +2 -2
  95. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +3 -3
  96. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +6 -6
  97. package/templates/applications/keycloak/env.template +13 -1
  98. package/templates/applications/miso-controller/application.yaml +21 -2
  99. package/templates/applications/miso-controller/env.template +97 -28
  100. package/templates/applications/miso-controller/rbac.yaml +5 -0
  101. package/lib/generator/deploy-manifest-azure-kv.js +0 -81
@@ -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,41 +434,48 @@ 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
- # LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault — local default skips Mori/JWT license checks.
208
- # Controller ignores DEVELOPMENT when DEPLOYMENT=azure.
463
+ # LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault — empty means Community edition.
464
+ # Set only to a real signed offline licence JWT.
209
465
  - key: miso-controller-jwt-licenseKeyVault
466
+ ownerAppKey: miso-controller
210
467
  scope: app
211
468
  generator:
212
- type: literal
213
- value: 'DEVELOPMENT'
469
+ type: emptyString
214
470
  ensureOn: [upInfra, resolveApp]
215
471
  azure:
216
472
  notes: >-
217
- Local/dev default DEVELOPMENT disables license validation (no Mori/JWT required).
218
- Ignored when DEPLOYMENT=azure. Override with a real offline license JWT (or empty for Mori) in non-dev.
473
+ Empty means the unlicensed Community edition (DEV, size S, shared resources).
474
+ Override only with a real signed offline license JWT.
219
475
 
220
476
  # Exact entry so this is not caught by *KeyVault → randomBytes32 (invalid email).
221
477
  - key: miso-controller-admin-emailKeyVault
478
+ ownerAppKey: miso-controller
222
479
  scope: app
223
480
  generator:
224
481
  type: literal
@@ -229,19 +486,26 @@ parameters:
229
486
 
230
487
  # Local first-time install / onboarding default (change in production).
231
488
  - key: miso-controller-admin-passwordKeyVault
489
+ ownerAppKey: miso-controller
232
490
  scope: app
233
491
  generator:
234
492
  type: literal
235
493
  value: '{{adminPassword}}'
236
494
  ensureOn: [upInfra, resolveApp]
237
495
  azure:
496
+ legacyVaultSecretNames:
497
+ - '{serviceName}-onboarding-admin-password'
238
498
  notes: >-
239
499
  Matches controller onboarding default; override in secrets for non-dev.
240
500
  Same secret backs ONBOARDING_ADMIN_PASSWORD and MISO_ADMIN_PASSWORD in env.template.
241
501
 
242
502
  # DEPLOYMENT=azure only; local/docker leave empty (do not generate random placeholders).
243
503
  - key: azure-subscription-idKeyVault
244
- scope: infra
504
+ category: Azure
505
+ sensitive: false
506
+ valueSource: onboardingInput
507
+ requiredOnSystemOnboarding: false
508
+ scope: system
245
509
  generator:
246
510
  type: emptyString
247
511
  ensureOn: [upInfra, resolveApp]
@@ -249,7 +513,11 @@ parameters:
249
513
  notes: Production Key Vault / app settings; empty locally.
250
514
 
251
515
  - key: azure-tenant-idKeyVault
252
- scope: infra
516
+ category: Azure
517
+ sensitive: false
518
+ valueSource: onboardingInput
519
+ requiredOnSystemOnboarding: false
520
+ scope: system
253
521
  generator:
254
522
  type: emptyString
255
523
  ensureOn: [upInfra, resolveApp]
@@ -257,7 +525,11 @@ parameters:
257
525
  notes: Production only; empty locally.
258
526
 
259
527
  - key: azure-service-nameKeyVault
260
- scope: infra
528
+ category: Azure
529
+ sensitive: false
530
+ valueSource: onboardingInput
531
+ requiredOnSystemOnboarding: false
532
+ scope: system
261
533
  generator:
262
534
  type: emptyString
263
535
  ensureOn: [upInfra, resolveApp]
@@ -270,7 +542,7 @@ parameters:
270
542
  type: emptyString
271
543
  ensureOn: [upInfra, resolveApp]
272
544
  azure:
273
- notes: Production only; empty locally.
545
+ notes: Optional service-principal override for local/tooling use; Azure App Service uses managed identity.
274
546
 
275
547
  - key: azure-client-secretKeyVault
276
548
  scope: infra
@@ -278,7 +550,7 @@ parameters:
278
550
  type: emptyString
279
551
  ensureOn: [upInfra, resolveApp]
280
552
  azure:
281
- notes: Production only; empty locally.
553
+ notes: Optional service-principal override for local/tooling use; Azure App Service uses managed identity.
282
554
 
283
555
  # Optional private npm; local scaffold leaves empty.
284
556
  - key: BASH_NPM_TOKEN
@@ -300,16 +572,20 @@ parameters:
300
572
 
301
573
  # Default client id for controller app in local multi-service layout; override after register if needed.
302
574
  - key: miso-controller-client-idKeyVault
575
+ ownerAppKey: miso-controller
303
576
  scope: app
304
577
  generator:
305
578
  type: literal
306
579
  value: 'miso-controller-miso-miso-controller'
307
580
  ensureOn: [upInfra, resolveApp]
308
581
  azure:
582
+ legacyVaultSecretNames:
583
+ - '{serviceName}-miso-clientIdKeyVault'
309
584
  notes: >-
310
585
  Per-app OAuth client id from controller registration; literal default matches local Keycloak client naming.
311
586
 
312
587
  - key: miso-controller-client-secretKeyVault
588
+ ownerAppKey: miso-controller
313
589
  scope: app
314
590
  generator:
315
591
  type: randomBytes32
@@ -321,6 +597,7 @@ parameters:
321
597
 
322
598
  # Dataplane ↔ controller OAuth (builder/dataplane env.template MISO_CLIENTID / MISO_CLIENTSECRET).
323
599
  - key: dataplane-client-idKeyVault
600
+ ownerAppKey: dataplane
324
601
  scope: app
325
602
  generator:
326
603
  type: literal
@@ -332,6 +609,7 @@ parameters:
332
609
  (override for environments such as miso-controller-dev-dataplane).
333
610
 
334
611
  - key: dataplane-client-secretKeyVault
612
+ ownerAppKey: dataplane
335
613
  scope: app
336
614
  generator:
337
615
  type: randomBytes32
@@ -340,10 +618,14 @@ parameters:
340
618
  vaultSecretName: dataplane-client-secretKeyVault
341
619
  notes: Per-app OAuth client secret for dataplane; generated on first ensure.
342
620
 
343
- # Mori / telemetry: optional locally (LICENSE_JWT via miso-controller-jwt-licenseKeyVault=DEVELOPMENT skips Mori).
621
+ # Mori / telemetry is optional for an unlicensed Community installation.
344
622
  # MORI_AUTH_METHOD=kv://mori-controller-auth-methodKeyVault — local default apiKey.
345
623
  - key: mori-controller-auth-methodKeyVault
346
- scope: infra
624
+ category: Mori
625
+ sensitive: false
626
+ valueSource: optionalInput
627
+ requiredOnSystemOnboarding: false
628
+ scope: system
347
629
  generator:
348
630
  type: literal
349
631
  value: 'apiKey'
@@ -353,7 +635,11 @@ parameters:
353
635
  Local/dev default apiKey. Override when using Mori basic auth or other methods.
354
636
 
355
637
  - key: mori-controller-api-keyKeyVault
356
- scope: infra
638
+ category: Mori
639
+ sensitive: true
640
+ valueSource: optionalInput
641
+ requiredOnSystemOnboarding: false
642
+ scope: system
357
643
  generator:
358
644
  type: emptyString
359
645
  ensureOn: [upInfra, resolveApp]
@@ -361,7 +647,11 @@ parameters:
361
647
  notes: Empty locally; set when calling Mori with API key auth.
362
648
 
363
649
  - key: mori-controller-basic-usernameKeyVault
364
- scope: infra
650
+ category: Mori
651
+ sensitive: false
652
+ valueSource: optionalInput
653
+ requiredOnSystemOnboarding: false
654
+ scope: system
365
655
  generator:
366
656
  type: emptyString
367
657
  ensureOn: [upInfra, resolveApp]
@@ -369,7 +659,11 @@ parameters:
369
659
  notes: Empty locally; Mori basic auth optional.
370
660
 
371
661
  - key: mori-controller-basic-passwordKeyVault
372
- scope: infra
662
+ category: Mori
663
+ sensitive: true
664
+ valueSource: optionalInput
665
+ requiredOnSystemOnboarding: false
666
+ scope: system
373
667
  generator:
374
668
  type: emptyString
375
669
  ensureOn: [upInfra, resolveApp]
@@ -377,7 +671,11 @@ parameters:
377
671
  notes: Empty locally; Mori basic auth optional.
378
672
 
379
673
  - key: appinsights-connectionStringKeyVault
380
- scope: infra
674
+ category: Observability
675
+ sensitive: true
676
+ valueSource: providerOutput
677
+ requiredOnSystemOnboarding: false
678
+ scope: system
381
679
  generator:
382
680
  type: emptyString
383
681
  ensureOn: [upInfra, resolveApp]
@@ -386,14 +684,70 @@ parameters:
386
684
  notes: >-
387
685
  Aligns with keyvault.md / Azure naming (appinsights.connectionStringKeyVault). Empty locally until set from Azure Portal.
388
686
 
687
+ - key: appinsights-keyKeyVault
688
+ category: Observability
689
+ sensitive: true
690
+ valueSource: providerOutput
691
+ requiredOnSystemOnboarding: false
692
+ scope: system
693
+ generator:
694
+ type: emptyString
695
+ ensureOn: [resolveApp]
696
+ azure:
697
+ vaultSecretName: appinsights-keyKeyVault
698
+ notes: Azure SDK-derived Application Insights instrumentation key.
699
+
700
+ - key: loganalytics-workspace-id
701
+ category: Observability
702
+ sensitive: false
703
+ valueSource: providerOutput
704
+ requiredOnSystemOnboarding: false
705
+ scope: system
706
+ generator:
707
+ type: emptyString
708
+ ensureOn: [resolveApp]
709
+ azure:
710
+ vaultSecretName: loganalytics-workspace-id
711
+ notes: Azure SDK-derived Log Analytics workspace customer identifier.
712
+
713
+ - key: azureopenai-endpoint
714
+ category: Azure OpenAI
715
+ sensitive: false
716
+ valueSource: optionalInput
717
+ requiredOnSystemOnboarding: false
718
+ scope: system
719
+ generator:
720
+ type: emptyString
721
+ ensureOn: [resolveApp]
722
+ azure:
723
+ vaultSecretName: azureopenai-endpoint
724
+ notes: Azure OpenAI endpoint produced by the environment infrastructure deployment.
725
+
726
+ - key: azureopenai-apikey
727
+ category: Azure OpenAI
728
+ sensitive: true
729
+ valueSource: optionalInput
730
+ requiredOnSystemOnboarding: false
731
+ scope: system
732
+ generator:
733
+ type: emptyString
734
+ ensureOn: [resolveApp]
735
+ azure:
736
+ vaultSecretName: azureopenai-apikey
737
+ notes: Azure OpenAI API key produced by the environment infrastructure deployment.
738
+
389
739
  # Dataplane builder/dataplane env.template (AI/LLM); optional until OpenAI or Azure OpenAI is configured.
390
740
  - key: secrets-openaiApiKeyVault
391
- scope: app
741
+ category: OpenAI
742
+ sensitive: true
743
+ valueSource: optionalInput
744
+ requiredOnSystemOnboarding: false
745
+ scope: system
392
746
  generator:
393
747
  type: emptyString
394
- ensureOn: [upInfra, resolveApp]
748
+ ensureOn: [resolveApp]
395
749
  azure:
396
- notes: Empty until set; user-supplied OpenAI API key (not auto-generated).
750
+ notes: Optional shared OpenAI API key; empty until supplied and never auto-generated.
397
751
 
398
752
  - key: azure-openaiapi-urlKeyVault
399
753
  scope: app
@@ -411,6 +765,31 @@ parameters:
411
765
  azure:
412
766
  notes: Empty until set; user-supplied Azure OpenAI API key (not auto-generated).
413
767
 
768
+ # Dataplane RS256 signing identity. The two rows are generated as one linked pair.
769
+ - key: secrets-certificatePrivateKeyVault
770
+ ownerAppKey: dataplane
771
+ scope: app
772
+ generator:
773
+ type: rsaKeyPair
774
+ pairId: dataplane-signing
775
+ part: private
776
+ ensureOn: [resolveApp]
777
+ azure:
778
+ vaultSecretName: secrets-certificatePrivateKeyVault
779
+ notes: PKCS#8 PEM private key generated with the matching public key.
780
+
781
+ - key: secrets-certificatePublicKeyVault
782
+ ownerAppKey: dataplane
783
+ scope: app
784
+ generator:
785
+ type: rsaKeyPair
786
+ pairId: dataplane-signing
787
+ part: public
788
+ ensureOn: [resolveApp]
789
+ azure:
790
+ vaultSecretName: secrets-certificatePublicKeyVault
791
+ notes: SPKI PEM public key derived from the linked private key.
792
+
414
793
  # Legacy unprefixed name (scaffold / old env.template); prefer *KeyVault suffix or {appKey}-secrets-apiKeyVault (keyvault.md).
415
794
  - key: api-key
416
795
  scope: app
@@ -423,13 +802,26 @@ parameters:
423
802
 
424
803
  # Legacy unprefixed name; prefer kv://{appKey}-secrets-apiKeyVault in env.template (keyvault.md secrets.apiKeyVault).
425
804
  - key: miso-controller-secrets-apiKeyVault
805
+ scope: infra
806
+ generator:
807
+ type: emptyAllowed
808
+ ensureOn: [upInfra]
809
+ azure:
810
+ notes: >-
811
+ Optional local testing/development bearer bypass. A supplied local value is resolved; when absent,
812
+ local and Azure application deployment resolve it as empty and do not fail.
813
+
814
+ - key: mori-callback-api-keyKeyVault
815
+ ownerAppKey: miso-controller
426
816
  scope: app
427
817
  generator:
428
818
  type: randomBytes32
429
- ensureOn: [upInfra, resolveApp]
819
+ ensureOn: [resolveApp]
430
820
  azure:
431
- notes: >-
432
- Prefer {appKey}-secrets-apiKeyVault locally; dataplane shares miso-controller's entry for pipeline Bearer bypass.
821
+ vaultSecretName: mori-callback-api-keyKeyVault
822
+ legacyVaultSecretNames:
823
+ - marketplace-mori-callback-api-key
824
+ notes: Miso Controller callback credential; generated only when its resolved manifest requires it.
433
825
 
434
826
  # App semver when env.template / conversion yields kv://version (local secrets backfill).
435
827
  - key: version
@@ -442,15 +834,57 @@ parameters:
442
834
  notes: >-
443
835
  Default application version for kv://version; override in secrets when needed.
444
836
 
445
- # Per-index database secrets (local names). Index must match requires.databases order in application.yaml.
837
+ # Exact Miso Controller rows retain Marketplace infrastructure-name aliases.
838
+ - key: databases-miso-controller-0-urlKeyVault
839
+ ownerAppKey: miso-controller
840
+ scope: app
841
+ generator:
842
+ type: databaseUrl
843
+ ensureOn: [upInfra, resolveApp]
844
+ azure:
845
+ vaultSecretName: databases-miso-controller-0-urlKeyVault
846
+ legacyVaultSecretNames:
847
+ - '{serviceName}-databases-0-urlKeyVault'
848
+
849
+ - key: databases-miso-controller-0-passwordKeyVault
850
+ ownerAppKey: miso-controller
851
+ scope: app
852
+ generator:
853
+ type: databasePassword
854
+ ensureOn: [upInfra, resolveApp]
855
+ azure:
856
+ vaultSecretName: databases-miso-controller-0-passwordKeyVault
857
+
858
+ - key: databases-miso-controller-1-urlKeyVault
859
+ ownerAppKey: miso-controller
860
+ scope: app
861
+ generator:
862
+ type: databaseUrl
863
+ ensureOn: [upInfra, resolveApp]
864
+ azure:
865
+ vaultSecretName: databases-miso-controller-1-urlKeyVault
866
+ legacyVaultSecretNames:
867
+ - '{serviceName}-databases-1-urlKeyVault'
868
+
869
+ - key: databases-miso-controller-1-passwordKeyVault
870
+ ownerAppKey: miso-controller
871
+ scope: app
872
+ generator:
873
+ type: databasePassword
874
+ ensureOn: [upInfra, resolveApp]
875
+ azure:
876
+ vaultSecretName: databases-miso-controller-1-passwordKeyVault
877
+
878
+ # Per-index database secrets. Index must match requires.databases order in application.yaml.
446
879
  - keyPattern: '^databases-[a-z0-9-]+-\d+-urlKeyVault$'
447
880
  scope: app
448
881
  generator:
449
882
  type: databaseUrl
450
883
  ensureOn: [upInfra, resolveApp]
451
884
  azure:
452
- vaultSecretNamePattern: '{appKey}-databases-{index}-urlKeyVault'
453
- notes: Azure vault secret name prefixes app key; local kv:// key has no app prefix.
885
+ legacyVaultSecretNames:
886
+ - '{appKey}-databases-{index}-urlKeyVault'
887
+ notes: The direct manifest key is canonical; the app-prefixed form is migration-only.
454
888
 
455
889
  - keyPattern: '^databases-[a-z0-9-]+-\d+-passwordKeyVault$'
456
890
  scope: app
@@ -458,7 +892,8 @@ parameters:
458
892
  type: databasePassword
459
893
  ensureOn: [upInfra, resolveApp]
460
894
  azure:
461
- vaultSecretNamePattern: '{appKey}-databases-{index}-passwordKeyVault'
895
+ legacyVaultSecretNames:
896
+ - '{appKey}-databases-{index}-passwordKeyVault'
462
897
 
463
898
  # Keycloak and other *-url keys (non-database).
464
899
  - keyPattern: '^keycloak-.+-url$'