@aifabrix/builder 2.55.2 → 2.57.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 (88) hide show
  1. package/lib/agent-kit/session-report.js +76 -0
  2. package/lib/agent-kit/start.js +124 -57
  3. package/lib/agent-kit/tmux-sessions.js +163 -0
  4. package/lib/api/environments.api.js +38 -0
  5. package/lib/api/marketplace-bootstrap.api.js +31 -0
  6. package/lib/api/pipeline.api.js +32 -3
  7. package/lib/app/deploy.js +6 -5
  8. package/lib/cli/setup-app.js +7 -6
  9. package/lib/cli/setup-environment.js +76 -19
  10. package/lib/cli/setup-external-system-help.js +15 -3
  11. package/lib/cli/setup-external-system.js +21 -3
  12. package/lib/commands/agent-kit-help.js +32 -15
  13. package/lib/commands/agent-kit.js +90 -8
  14. package/lib/commands/repair-datasource-auto-rbac.js +4 -9
  15. package/lib/commands/upload-openapi-sync-followup.js +59 -0
  16. package/lib/commands/upload-qualification-client.js +131 -0
  17. package/lib/commands/upload-qualification-followups.js +104 -0
  18. package/lib/commands/upload-qualification-poll.js +143 -0
  19. package/lib/commands/upload.js +37 -156
  20. package/lib/deployment/deploy-poll-ui.js +14 -10
  21. package/lib/deployment/deployer-status.js +4 -4
  22. package/lib/deployment/installation/azure-infra-stage.js +160 -0
  23. package/lib/deployment/installation/azure-preflight.js +102 -0
  24. package/lib/deployment/installation/azure-readiness.js +71 -0
  25. package/lib/deployment/installation/docker-register.js +112 -0
  26. package/lib/deployment/installation/environment-auth.js +76 -0
  27. package/lib/deployment/installation/environment-manifest.js +165 -0
  28. package/lib/deployment/installation/environment-stage.js +191 -0
  29. package/lib/deployment/installation/index.js +39 -0
  30. package/lib/deployment/installation/infra-catalog.js +165 -0
  31. package/lib/deployment/installation/infra-manifest.js +161 -0
  32. package/lib/deployment/installation/infra-projection.js +86 -0
  33. package/lib/deployment/installation/public-ip.js +65 -0
  34. package/lib/deployment/installation/stage-input.js +169 -0
  35. package/lib/deployment/installation/stage-output.js +53 -0
  36. package/lib/deployment/installation/workspace-env.js +76 -0
  37. package/lib/deployment/installation/workspace-files.js +178 -0
  38. package/lib/deployment/installation/workspace-schema.js +40 -0
  39. package/lib/deployment/installation/workspace-secrets.js +66 -0
  40. package/lib/deployment/installation/workspace.js +128 -0
  41. package/lib/deployment/marketplace-environment.js +305 -0
  42. package/lib/external-system/deploy.js +46 -51
  43. package/lib/generator/builders.js +4 -0
  44. package/lib/generator/helpers.js +55 -99
  45. package/lib/generator/index.js +0 -4
  46. package/lib/generator/split-variables.js +11 -5
  47. package/lib/internal/fs-real-sync.js +29 -0
  48. package/lib/programmatic/builder-api-request.js +8 -4
  49. package/lib/programmatic/capability-registry.js +2 -0
  50. package/lib/programmatic/get-deploy-status.js +45 -0
  51. package/lib/programmatic/get-upload-status.js +45 -0
  52. package/lib/programmatic/http-accepted-response.js +31 -0
  53. package/lib/programmatic/openapi-descriptions.js +14 -4
  54. package/lib/programmatic/request-timeout.js +21 -15
  55. package/lib/programmatic/route-handler-map.js +6 -0
  56. package/lib/programmatic/run-deploy.js +7 -3
  57. package/lib/programmatic/run-upload.js +11 -7
  58. package/lib/role-assistant/package-validate.js +4 -0
  59. package/lib/role-assistant/test-runner-clarification-resubmit.js +149 -0
  60. package/lib/role-assistant/test-runner.js +14 -17
  61. package/lib/schema/application-schema.json +20 -2
  62. package/lib/schema/infra-parameter.schema.json +7 -0
  63. package/lib/schema/infra.parameter.yaml +32 -43
  64. package/lib/schema/infrastructure-schema.json +1480 -399
  65. package/lib/schema/installation-environment.schema.json +601 -0
  66. package/lib/utils/cli-utils.js +3 -2
  67. package/lib/utils/qualification-poll-ui.js +136 -0
  68. package/lib/utils/variable-transformer.js +3 -0
  69. package/lib/validation/required-variables.js +41 -0
  70. package/lib/validation/validator.js +8 -5
  71. package/package.json +7 -2
  72. package/templates/README.md +4 -0
  73. package/templates/agent-kit/instructions/AGENTKIT.md +6 -6
  74. package/templates/agent-kit/skills/shared/hosts.md +10 -10
  75. package/templates/applications/builder-api/env.template +4 -0
  76. package/templates/applications/dataplane/application.yaml +1 -1
  77. package/templates/applications/dataplane/env.template +1 -1
  78. package/templates/applications/keycloak/Dockerfile +12 -5
  79. package/templates/applications/keycloak/application.yaml +2 -2
  80. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +3 -3
  81. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +6 -6
  82. package/templates/applications/keycloak/env.template +13 -1
  83. package/templates/applications/miso-controller/application.yaml +3 -2
  84. package/templates/applications/miso-controller/env.template +28 -22
  85. package/templates/marketplace/createUiDefinition.json +77 -0
  86. package/templates/marketplace/install.parameters.example.json +9 -0
  87. package/templates/marketplace/main.json +4087 -0
  88. package/lib/generator/deploy-manifest-azure-kv.js +0 -81
@@ -177,7 +177,7 @@ IDENTITY_LOCAL_PASSWORD_MODE=admin-reveal
177
177
  # Both onboarding modes use Mori's AI Fabrix-owned sender. MORI_API_KEY below is the
178
178
  # existing installation service key; no notification-specific secret is created.
179
179
  NOTIFICATION_BINDING=aifabrixManaged
180
- MORI_ENVIRONMENT_ID=
180
+ MORI_ENVIRONMENT_ID=kv://mori-controller-environment-idKeyVault
181
181
 
182
182
  # Keycloak Events Configuration
183
183
  KEYCLOAK_EVENTS_ENABLED=true
@@ -213,12 +213,6 @@ MISO_ENVIRONMENT=miso
213
213
  MISO_CLIENTID=kv://miso-controller-client-idKeyVault
214
214
  MISO_CLIENTSECRET=kv://miso-controller-client-secretKeyVault
215
215
 
216
- # Evaluation mode (optional .env override of DB controller.configuration.evaluation):
217
- # When true (default if DB omits flag), infra deploy may coerce :envKey to `miso` — e2e poll on `dev` can 404.
218
- # Set false locally to force path envKey to match deploy + GET .../deployments/:id.
219
- # Unset = use DB only.
220
- CONTROLLER_EVALUATION=
221
-
222
216
  # =============================================================================
223
217
  # ENTRA ID ONBOARDING (vendor multi-tenant app — admin consent) — [always]
224
218
  # =============================================================================
@@ -237,7 +231,7 @@ CONTROLLER_EVALUATION=
237
231
  #
238
232
  # Delegated Graph (second redirect URI on the same vendor app): see section below.
239
233
  ENTRA_CALLBACK_STATE_SECRET=kv://entra-callback-state-secret
240
- ENTRA_ID_CENTRAL_CALLBACK_URI=https://aifabrix-pro-miso-mori.azurewebsites.net/entra-id-concent/callback
234
+ ENTRA_ID_CENTRAL_CALLBACK_URI=https://dev01.aifabrix.dev/mori/entra-id-concent/callback
241
235
  ENTRA_ID_CLIENT_ID=kv://entra-client-idKeyVault
242
236
  ENTRA_ID_CLIENT_SECRET=kv://entra-client-secretKeyVault
243
237
 
@@ -323,8 +317,10 @@ SHOW_TA_COUNT_DOWN=false
323
317
  # Encryption Key for Database Secrets
324
318
  ENCRYPTION_KEY=kv://miso-controller-secrets-encryptionKeyVault
325
319
 
326
- # Comma-separated application keys allowed for POST .../applications/bootstrap (install-time only)
327
- BOOTSTRAP_APPKEYS=dataplane,builder-api
320
+ # Comma-separated application keys allowed for POST .../applications/bootstrap (install-time only).
321
+ # Environment placement is a separate controller rule: workloads (dataplane, builder-api) install into
322
+ # dev/tst/pro but never `miso`; miso-controller and keycloak only into `miso`; mori-controller anywhere.
323
+ BOOTSTRAP_APPKEYS=dataplane,builder-api,mori-controller
328
324
 
329
325
  # Key Vault Integration (for security parameter encryption)
330
326
  # Set to true to enable Azure Key Vault for storing security parameters
@@ -347,26 +343,39 @@ API_KEY=kv://miso-controller-secrets-apiKeyVault
347
343
  # =============================================================================
348
344
  # LICENSE CONFIGURATION — [always]
349
345
  # =============================================================================
350
- # [saasDirect] Must use the Mori flow (never DEVELOPMENT): Mori issues and owns the
346
+ # [saasDirect] Must use the Mori flow: Mori issues and owns the
351
347
  # 30-day STANDARD / M trial, and sales later updates the same subscription.
352
348
  #
353
349
  # Offline JWT license (optional):
354
350
  # - If set, controller validates license offline (RS256) without Mori subscription status call.
355
351
  # - Value can be literal JWT or kv:// reference.
356
- # - If not set, controller falls back to existing Mori subscription validation flow.
357
- #
358
- # Development: set to DEVELOPMENT to disable license validation (no Mori/JWT required):
359
- # LICENSE_JWT=DEVELOPMENT
360
- # - Use only for local development (DEPLOYMENT=local|database|azure-mock).
361
- # - Ignored when DEPLOYMENT=azure (Azure marketplace / App Service installs).
352
+ # - If empty and no stored licence exists, controller runs as Community edition
353
+ # (DEV environment, size S, shared resources).
354
+ # - Set only to a real signed offline licence JWT. Controlled tests may use the separate
355
+ # LICENSE_VALIDATION_DISABLED=true switch; do not use it in deployed installations.
362
356
  LICENSE_JWT=kv://miso-controller-jwt-licenseKeyVault
363
357
 
358
+ # Signed licenses require a Mori issuer key trusted independently of the JWT.
359
+ # Provision the SPKI PEM public key and exact issuer during installation, before
360
+ # pasting LICENSE_JWT or using Update license. An embedded JWT publicKey/jwk or Mori URL
361
+ # is not a trust source. For disconnected installs, deliver the key through the
362
+ # authenticated installation package or another operator-verified channel.
363
+ # Azure resolves this from Key Vault using the app's managed identity.
364
+ # Builder Docker resolves the same kv:// catalog key from the installer's local
365
+ # secrets store before starting the container. Provision a trusted Mori public key
366
+ # there first; the empty catalog default is only for unlicensed Community mode.
367
+ MORI_LICENSE_PUBLIC_KEY=kv://mori-license-public-keyKeyVault
368
+ # Plain docker run can instead leave MORI_LICENSE_PUBLIC_KEY unset and use a
369
+ # trusted, read-only PEM mount at this path.
370
+ # MORI_LICENSE_PUBLIC_KEY_FILE=/run/secrets/mori-license-public-key.pem
371
+ MORI_LICENSE_ISSUER=mori-controller
372
+
364
373
  # =============================================================================
365
374
  # ENTRA ID ONBOARDING (delegated Graph via Mori)
366
375
  # =============================================================================
367
376
  # Must match a Web redirect URI on the vendor multi-tenant app and Mori’s route
368
377
  # …/entra-graph-delegated/callback. Shared pro Mori addon (CICD *-miso-rg):
369
- ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix-pro-miso-mori.azurewebsites.net/entra-graph-delegated/callback
378
+ ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://dev01.aifabrix.dev/mori/entra-graph-delegated/callback
370
379
 
371
380
  # Optional delegated Graph scopes for GET …/graph-auth-url (space- or comma-separated).
372
381
  # ENTRA_GRAPH_DELEGATED_SCOPES=https://graph.microsoft.com/Application.ReadWrite.All,https://graph.microsoft.com/Group.ReadWrite.All,https://graph.microsoft.com/Synchronization.ReadWrite.All,openid,profile,offline_access
@@ -381,12 +390,9 @@ ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix-pro-miso-mori.azurewebsites.
381
390
  # only works when a local Mori app is registered and running for this developer.
382
391
  # MORI_CALLBACK_API_KEY must be the same secret as Mori MORI_CONTROLLER_CALLBACK_API_KEY
383
392
  # (both resolve from kv://mori-callback-api-keyKeyVault — do not generate separate values).
384
- MORI_BASE_URL=https://aifabrix-pro-miso-mori.azurewebsites.net
385
- MORI_AUTH_METHOD=kv://mori-controller-auth-methodKeyVault
393
+ MORI_BASE_URL=kv://mori-controller-web-server-url
386
394
  MORI_CALLBACK_API_KEY=kv://mori-callback-api-keyKeyVault
387
395
  MORI_API_KEY=kv://mori-controller-api-keyKeyVault
388
- MORI_USERNAME=kv://mori-controller-basic-usernameKeyVault
389
- MORI_PASSWORD=kv://mori-controller-basic-passwordKeyVault
390
396
 
391
397
  # =============================================================================
392
398
  # LOGGING CONFIGURATION
@@ -0,0 +1,77 @@
1
+ {
2
+ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
3
+ "handler": "Microsoft.Azure.CreateUIDef",
4
+ "version": "0.1.2-preview",
5
+ "parameters": {
6
+ "config": {
7
+ "basics": {
8
+ "description": "Choose subscription, resource group, and region above. Under **Application resources Resource group name**, enter your install id (for example `aifabrixpoc02`). That managed resource group name is the naming prefix: resources become `{rg}-miso-asp`, `{rg}-miso-miso`, and so on. Set the Azure **Application name** to the same id when the portal asks. Enter the initial platform administrator password and choose the license below. Container images are pulled with the web apps' managed identities; no registry credential is needed."
9
+ }
10
+ },
11
+ "basics": [
12
+ {
13
+ "name": "adminPassword",
14
+ "type": "Microsoft.Common.PasswordBox",
15
+ "label": "Administrator password",
16
+ "toolTip": "Password for the initial AI Fabrix platform administrator (user admin). PostgreSQL, Keycloak, and encryption secrets are generated automatically and stored in Key Vault — do not reuse this password for infrastructure.",
17
+ "constraints": {
18
+ "required": true,
19
+ "regex": "^.{8,128}$",
20
+ "validationMessage": "Password must be 8–128 characters."
21
+ },
22
+ "options": {
23
+ "hideConfirmation": false
24
+ }
25
+ },
26
+ {
27
+ "name": "licenseChoice",
28
+ "type": "Microsoft.Common.DropDown",
29
+ "label": "License",
30
+ "toolTip": "License AI Fabrix requests during tenant activation. Community is permanent. Standard or Enterprise requested by name is a 30-day evaluation. For a purchased plan, choose 'Purchased Marketplace subscription' and enter its subscription ID; the edition is then resolved from the purchased plan.",
31
+ "defaultValue": "Community",
32
+ "constraints": {
33
+ "required": true,
34
+ "allowedValues": [
35
+ {
36
+ "label": "Community",
37
+ "value": "COMMUNITY"
38
+ },
39
+ {
40
+ "label": "Standard (30-day evaluation)",
41
+ "value": "STANDARD"
42
+ },
43
+ {
44
+ "label": "Enterprise (30-day evaluation)",
45
+ "value": "ENTERPRISE"
46
+ },
47
+ {
48
+ "label": "Purchased Marketplace subscription",
49
+ "value": "SUBSCRIPTION_ID"
50
+ }
51
+ ]
52
+ }
53
+ },
54
+ {
55
+ "name": "licenseSubscriptionKey",
56
+ "type": "Microsoft.Common.TextBox",
57
+ "label": "Marketplace subscription ID",
58
+ "toolTip": "The ID (GUID) of the purchased AI Fabrix Azure Marketplace subscription.",
59
+ "defaultValue": "",
60
+ "visible": "[equals(basics('licenseChoice'), 'SUBSCRIPTION_ID')]",
61
+ "constraints": {
62
+ "required": "[equals(basics('licenseChoice'), 'SUBSCRIPTION_ID')]",
63
+ "regex": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
64
+ "validationMessage": "Enter the Marketplace subscription ID as a GUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)."
65
+ }
66
+ }
67
+ ],
68
+ "steps": [],
69
+ "outputs": {
70
+ "location": "[location()]",
71
+ "deploymentEnvironment": "evaluation",
72
+ "adminPassword": "[basics('adminPassword')]",
73
+ "licenseEdition": "[if(equals(basics('licenseChoice'), 'SUBSCRIPTION_ID'), basics('licenseSubscriptionKey'), basics('licenseChoice'))]",
74
+ "acrResourceId": "__MARKETPLACE_ACR_RESOURCE_ID__"
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
3
+ "contentVersion": "1.0.0.0",
4
+ "parameters": {
5
+ "adminPassword": { "value": "" },
6
+ "marketplaceSubscriptionId": { "value": "" },
7
+ "location": { "value": "swedencentral" }
8
+ }
9
+ }