@aifabrix/builder 2.44.6 → 2.45.5
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.
- package/.cursor/rules/cli-layout.mdc +7 -3
- package/.cursor/rules/docs-rules.mdc +3 -1
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +1 -1
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +1 -1
- package/jest.projects.js +100 -1
- package/lib/api/agent-metadata-validation.api.js +93 -0
- package/lib/api/audit-api-helpers.js +68 -0
- package/lib/api/audit.api.js +119 -0
- package/lib/api/auth-cache.api.js +44 -0
- package/lib/api/certificates.api.js +4 -4
- package/lib/api/credential.api.js +2 -2
- package/lib/api/dataplane-health.api.js +137 -0
- package/lib/api/dataplane-sync.api.js +27 -0
- package/lib/api/datasources-core.api.js +21 -18
- package/lib/api/datasources-extended.api.js +22 -22
- package/lib/api/dimensions.api.js +3 -0
- package/lib/api/external-systems.api.js +13 -13
- package/lib/api/governance-scenarios.api.js +39 -0
- package/lib/api/groups.api.js +79 -0
- package/lib/api/index.js +45 -2
- package/lib/api/pipeline.api.js +4 -4
- package/lib/api/protection.api.js +157 -0
- package/lib/api/records-bulk.api.js +30 -0
- package/lib/api/records-search-parse.js +49 -0
- package/lib/api/records-search.api.js +29 -0
- package/lib/api/types/agent-metadata-validation.types.js +67 -0
- package/lib/api/types/audit.types.js +72 -0
- package/lib/api/types/dataplane-health.types.js +27 -0
- package/lib/api/types/dimensions.types.js +2 -0
- package/lib/api/types/governance-scenarios.types.js +39 -0
- package/lib/api/types/protection.types.js +69 -0
- package/lib/api/types/records-bulk.types.js +35 -0
- package/lib/api/types/records-search.types.js +28 -0
- package/lib/api/user-groups.api.js +50 -0
- package/lib/api/users.api.js +95 -0
- package/lib/api/validation-run.api.js +3 -3
- package/lib/api/validation-runner.js +3 -3
- package/lib/api/wizard-platform.api.js +3 -3
- package/lib/api/wizard.api.js +21 -21
- package/lib/app/deploy.js +34 -19
- package/lib/app/helpers.js +3 -3
- package/lib/app/index.js +3 -3
- package/lib/app/register.js +7 -6
- package/lib/app/restart-display.js +52 -21
- package/lib/app/rotate-secret.js +7 -6
- package/lib/app/run-helpers.js +15 -8
- package/lib/app/run.js +57 -9
- package/lib/app/show-display.js +7 -0
- package/lib/app/show.js +87 -5
- package/lib/build/index.js +9 -5
- package/lib/cli/index.js +4 -2
- package/lib/cli/infra-guided.js +62 -28
- package/lib/cli/installation-log-command.js +73 -0
- package/lib/cli/setup-app.help.js +50 -2
- package/lib/cli/setup-app.js +44 -25
- package/lib/cli/setup-app.test-commands.js +80 -21
- package/lib/cli/setup-auth.js +124 -52
- package/lib/cli/setup-external-system.js +37 -3
- package/lib/cli/setup-infra-up-dataplane-action.js +111 -0
- package/lib/cli/setup-infra-up-platform-action.js +131 -0
- package/lib/cli/setup-infra.js +60 -119
- package/lib/cli/setup-platform.js +1 -1
- package/lib/cli/setup-utility-help-after.js +45 -0
- package/lib/cli/setup-utility-resolve.js +132 -0
- package/lib/cli/setup-utility.js +148 -116
- package/lib/commands/app-logs.js +81 -33
- package/lib/commands/auth-config.js +116 -18
- package/lib/commands/auth-status-dataplane-version.js +231 -0
- package/lib/commands/auth-status-display.js +94 -0
- package/lib/commands/auth-status.js +70 -6
- package/lib/commands/credential-push.js +10 -5
- package/lib/commands/datasource-load-export-cli.js +178 -0
- package/lib/commands/datasource-test-trust-cli.js +114 -0
- package/lib/commands/datasource-unified-test-cli.js +25 -17
- package/lib/commands/datasource-unified-test-cli.options.js +18 -3
- package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +5 -5
- package/lib/commands/datasource-verify-audit-cli.js +96 -0
- package/lib/commands/datasource.js +68 -1
- package/lib/commands/dimension-value.js +43 -13
- package/lib/commands/dimension.js +38 -7
- package/lib/commands/identity-apply-sync.js +131 -0
- package/lib/commands/identity-group-cli.js +146 -0
- package/lib/commands/identity-membership-role-cache.js +175 -0
- package/lib/commands/identity-shared.js +94 -0
- package/lib/commands/identity-user-cli.js +158 -0
- package/lib/commands/identity.js +43 -0
- package/lib/commands/login.js +46 -16
- package/lib/commands/protection-cli-leaves.js +286 -0
- package/lib/commands/protection.js +50 -0
- package/lib/commands/repair.js +13 -3
- package/lib/commands/setup-modes.js +19 -6
- package/lib/commands/setup-prompts.js +41 -8
- package/lib/commands/setup.js +114 -9
- package/lib/commands/teardown.js +54 -5
- package/lib/commands/test-e2e-external.js +40 -9
- package/lib/commands/test-governance-cli-options.js +47 -0
- package/lib/commands/test-governance-command-action.js +55 -0
- package/lib/commands/test-governance-external.js +88 -0
- package/lib/commands/test-trust-cli-options.js +32 -0
- package/lib/commands/test-trust-command-action.js +118 -0
- package/lib/commands/test-trust-external.js +127 -0
- package/lib/commands/up-common.js +48 -14
- package/lib/commands/up-dataplane.js +21 -18
- package/lib/commands/up-miso.js +12 -8
- package/lib/commands/upload.js +38 -15
- package/lib/commands/wizard-core.js +3 -0
- package/lib/core/audit-logger.js +1 -34
- package/lib/core/config-admin-email.js +56 -0
- package/lib/core/config-device-dataplane.js +185 -0
- package/lib/core/config-normalize.js +60 -0
- package/lib/core/config-registered-controller-urls.js +54 -0
- package/lib/core/config.js +33 -50
- package/lib/core/secrets-ensure-infra.js +1 -1
- package/lib/core/secrets-env-content.js +86 -90
- package/lib/core/secrets-env-declarative-expand.js +170 -0
- package/lib/core/secrets-env-write.js +2 -0
- package/lib/core/secrets-load.js +106 -102
- package/lib/datasource/agent-trust-debug-log.js +45 -0
- package/lib/datasource/agent-trust-fetch.js +115 -0
- package/lib/datasource/agent-trust-map.js +101 -0
- package/lib/datasource/agent-trust-mock.js +44 -0
- package/lib/datasource/agent-trust-run.js +93 -0
- package/lib/datasource/agent-trust-timeout.js +25 -0
- package/lib/datasource/audit-evidence-display.js +80 -0
- package/lib/datasource/audit-evidence-extract-debug.js +103 -0
- package/lib/datasource/audit-evidence-extract.js +177 -0
- package/lib/datasource/audit-evidence-matrix-rows.js +158 -0
- package/lib/datasource/audit-evidence-operation-aliases.js +63 -0
- package/lib/datasource/audit-evidence-poll.js +109 -0
- package/lib/datasource/audit-evidence-run.js +177 -0
- package/lib/datasource/audit-evidence-verify-helpers.js +167 -0
- package/lib/datasource/audit-evidence-verify-matrix.js +177 -0
- package/lib/datasource/audit-evidence-verify.js +108 -0
- package/lib/datasource/bulk-loader-run-batches.js +88 -0
- package/lib/datasource/bulk-loader-service-retry.js +52 -0
- package/lib/datasource/bulk-loader-service.js +127 -0
- package/lib/datasource/capability/run-capability-dimension.js +2 -1
- package/lib/datasource/datasource-exporter-resolve.js +82 -0
- package/lib/datasource/datasource-exporter-service.js +144 -0
- package/lib/datasource/datasource-identifier.js +148 -0
- package/lib/datasource/datasource-load-export-context.js +92 -0
- package/lib/datasource/integration-context.js +6 -4
- package/lib/datasource/local-data-paths.js +145 -0
- package/lib/datasource/log-cleaner.js +241 -0
- package/lib/datasource/log-viewer.js +111 -6
- package/lib/datasource/record-file-parser.js +85 -0
- package/lib/datasource/record-mapper.js +129 -0
- package/lib/datasource/resolve-app.js +74 -55
- package/lib/datasource/test-e2e.js +26 -2
- package/lib/datasource/unified-validation-run-resolve.js +45 -12
- package/lib/datasource/unified-validation-run.js +43 -17
- package/lib/datasource/validate.js +37 -20
- package/lib/external-system/deploy.js +5 -1
- package/lib/external-system/test-system-level.js +25 -4
- package/lib/external-system/test.js +3 -1
- package/lib/governance/governance-pack-loader.js +70 -0
- package/lib/governance/governance-run-display.js +119 -0
- package/lib/identity/identity-apply-core.js +108 -0
- package/lib/identity/identity-apply-phases.js +244 -0
- package/lib/identity/identity-apply-service.js +77 -0
- package/lib/identity/identity-csv-parser.js +114 -0
- package/lib/internal/fs-real-sync.js +29 -1
- package/lib/internal/node-fs.js +2 -0
- package/lib/protection/auth-context.js +45 -0
- package/lib/protection/convert-batch.js +90 -0
- package/lib/protection/load.js +41 -0
- package/lib/protection/paths.js +158 -0
- package/lib/protection/preflight-datasource-ready.js +46 -0
- package/lib/protection/protection-create-probe-lines.js +142 -0
- package/lib/protection/protection-create-probes.js +95 -0
- package/lib/protection/protection-create-scaffold.js +281 -0
- package/lib/protection/protection-display-helpers.js +445 -0
- package/lib/protection/protection-display.js +215 -0
- package/lib/protection/protection-preset-registry.js +97 -0
- package/lib/protection/report-exit.js +62 -0
- package/lib/protection/resolve.js +202 -0
- package/lib/protection/run-commands-validate.js +130 -0
- package/lib/protection/run-commands.js +216 -0
- package/lib/protection/run-protection-create-helpers.js +134 -0
- package/lib/protection/run-protection-create-probes-flow.js +43 -0
- package/lib/protection/run-protection-create.js +191 -0
- package/lib/protection/scope.js +22 -0
- package/lib/protection/sync-after-upload.js +64 -0
- package/lib/protection/upload-batch.js +127 -0
- package/lib/protection/validate-batch.js +113 -0
- package/lib/protection/validate-local.js +65 -0
- package/lib/resolvers/dimension-file.js +29 -4
- package/lib/schema/application-schema.json +4 -0
- package/lib/schema/external-datasource.schema.json +47 -13
- package/lib/schema/flag-map-validation-run.json +2 -2
- package/lib/schema/infra.parameter.yaml +10 -0
- package/lib/schema/protection.schema.json +374 -0
- package/lib/schema/type/credential-field-registry.json +636 -0
- package/lib/schema/wizard-config.schema.json +1 -1
- package/lib/utils/agent-trust-run-display.js +231 -0
- package/lib/utils/agent-trust-run-exit.js +59 -0
- package/lib/utils/agent-trust-wait-ui.js +94 -0
- package/lib/utils/app-config-resolver.js +24 -1
- package/lib/utils/applications-config-defaults.js +206 -0
- package/lib/utils/auth-config-validator.js +2 -12
- package/lib/utils/bash-secret-env.js +1 -1
- package/lib/utils/cli-exit-codes.js +30 -0
- package/lib/utils/cli-sync-options.js +33 -0
- package/lib/utils/compose-generate-docker-compose.js +111 -6
- package/lib/utils/compose-generator.js +17 -8
- package/lib/utils/controller-url.js +50 -7
- package/lib/utils/credential-push-ui.js +90 -0
- package/lib/utils/dataplane-cli-version-gate.js +202 -0
- package/lib/utils/dataplane-cli-version-help.js +74 -0
- package/lib/utils/datasource-export-display.js +137 -0
- package/lib/utils/datasource-load-display.js +174 -0
- package/lib/utils/datasource-load-export-ui.js +120 -0
- package/lib/utils/datasource-test-run-capability-scope.js +3 -3
- package/lib/utils/datasource-test-run-display.js +3 -3
- package/lib/utils/datasource-test-run-tty-log.js +5 -1
- package/lib/utils/env-copy.js +99 -14
- package/lib/utils/env-template.js +5 -1
- package/lib/utils/health-check-url.js +18 -15
- package/lib/utils/health-check.js +7 -5
- package/lib/utils/help-builder.js +30 -24
- package/lib/utils/infra-optional-service-flags.js +69 -0
- package/lib/utils/installation-log-core.js +282 -0
- package/lib/utils/installation-log-record.js +237 -0
- package/lib/utils/installation-log.js +123 -0
- package/lib/utils/log-redaction.js +105 -0
- package/lib/utils/manifest-location.js +164 -0
- package/lib/utils/manifest-source-emit.js +184 -0
- package/lib/utils/paths.js +238 -89
- package/lib/utils/remote-secrets-loader.js +7 -1
- package/lib/utils/run-cli-flags.js +29 -0
- package/lib/utils/secrets-canonical.js +10 -3
- package/lib/utils/secrets-path.js +3 -4
- package/lib/utils/secrets-utils.js +20 -10
- package/lib/utils/semver-compare.js +127 -0
- package/lib/utils/system-builder-root.js +10 -2
- package/lib/utils/upload-pipeline-ui.js +91 -0
- package/lib/utils/url-declarative-public-base.js +80 -12
- package/lib/utils/url-declarative-resolve-build-urls.js +238 -0
- package/lib/utils/url-declarative-resolve-build.js +24 -393
- package/lib/utils/url-declarative-resolve-expand-token.js +189 -0
- package/lib/utils/url-declarative-resolve-load-doc.js +12 -3
- package/lib/utils/url-declarative-resolve-surface-state.js +102 -0
- package/lib/utils/url-declarative-resolve.js +47 -7
- package/lib/utils/url-declarative-runtime-base-path.js +21 -1
- package/lib/utils/urls-local-registry-scan.js +103 -0
- package/lib/utils/urls-local-registry.js +161 -90
- package/lib/utils/validation-poll-ui.js +14 -7
- package/lib/validation/wizard-config-validator.js +58 -19
- package/package.json +3 -1
- package/templates/applications/dataplane/application.yaml +4 -0
- package/templates/applications/dataplane/env.template +13 -1
- package/templates/applications/dataplane/rbac.yaml +4 -0
- package/templates/applications/miso-controller/application.yaml +2 -0
- package/templates/applications/miso-controller/env.template +27 -29
- package/templates/external-system/README.md.hbs +56 -8
- package/.npmrc.token +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Local AJV validation for protection manifests (shape only).
|
|
3
|
+
* @author AI Fabrix Team
|
|
4
|
+
* @version 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const Ajv = require('ajv');
|
|
11
|
+
const addFormats = require('ajv-formats');
|
|
12
|
+
|
|
13
|
+
const SCHEMA_PATH = path.join(__dirname, '..', 'schema', 'protection.schema.json');
|
|
14
|
+
|
|
15
|
+
let compiledValidator = null;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Strip AI Fabrix schema file metadata (not part of JSON Schema validation).
|
|
19
|
+
* @param {Object} raw
|
|
20
|
+
* @returns {Object}
|
|
21
|
+
*/
|
|
22
|
+
function protectionSchemaForAjv(raw) {
|
|
23
|
+
if (!raw || typeof raw !== 'object') {
|
|
24
|
+
return raw;
|
|
25
|
+
}
|
|
26
|
+
const { metadata: _meta, ...schema } = raw;
|
|
27
|
+
if (schema.$schema && String(schema.$schema).includes('2020-12')) {
|
|
28
|
+
delete schema.$schema;
|
|
29
|
+
}
|
|
30
|
+
return schema;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getValidator() {
|
|
34
|
+
if (compiledValidator) {
|
|
35
|
+
return compiledValidator;
|
|
36
|
+
}
|
|
37
|
+
const schema = protectionSchemaForAjv(require(SCHEMA_PATH));
|
|
38
|
+
const ajv = new Ajv({ allErrors: true, strict: false, strictSchema: false });
|
|
39
|
+
addFormats(ajv);
|
|
40
|
+
compiledValidator = ajv.compile(schema);
|
|
41
|
+
return compiledValidator;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {Object} manifest
|
|
46
|
+
* @returns {{ valid: boolean, errors: string[] }}
|
|
47
|
+
*/
|
|
48
|
+
function validateProtectionManifestLocal(manifest) {
|
|
49
|
+
const validate = getValidator();
|
|
50
|
+
const valid = validate(manifest);
|
|
51
|
+
if (valid) {
|
|
52
|
+
return { valid: true, errors: [] };
|
|
53
|
+
}
|
|
54
|
+
const errors = (validate.errors || []).map((err) => {
|
|
55
|
+
const at = err.instancePath || err.schemaPath || '';
|
|
56
|
+
return at ? `${at}: ${err.message}` : String(err.message || 'Schema validation failed');
|
|
57
|
+
});
|
|
58
|
+
return { valid: false, errors };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
validateProtectionManifestLocal,
|
|
63
|
+
getValidator,
|
|
64
|
+
protectionSchemaForAjv
|
|
65
|
+
};
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
11
|
-
const fs = require('fs');
|
|
12
11
|
const path = require('path');
|
|
12
|
+
const { existsSync, readFileSync } = require('../internal/fs-real-sync');
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* @typedef {Object} DimensionCreateInput
|
|
@@ -17,10 +17,28 @@ const path = require('path');
|
|
|
17
17
|
* @property {string} displayName
|
|
18
18
|
* @property {string} [description]
|
|
19
19
|
* @property {'string'|'number'|'boolean'} dataType
|
|
20
|
+
* @property {'static'|'dynamic'|'both'} [valueType]
|
|
20
21
|
* @property {boolean} [isRequired]
|
|
21
22
|
* @property {Array<{ value: string, displayName?: string, description?: string }>} [values]
|
|
22
23
|
*/
|
|
23
24
|
|
|
25
|
+
const VALUE_TYPES = new Set(['static', 'dynamic', 'both']);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {*} raw
|
|
29
|
+
* @returns {'static'|'dynamic'|'both'}
|
|
30
|
+
*/
|
|
31
|
+
function normalizeValueType(raw) {
|
|
32
|
+
if (raw === undefined || raw === null || raw === '') {
|
|
33
|
+
return 'static';
|
|
34
|
+
}
|
|
35
|
+
const vt = String(raw).trim();
|
|
36
|
+
if (!VALUE_TYPES.has(vt)) {
|
|
37
|
+
throw new Error('valueType must be one of: static, dynamic, both');
|
|
38
|
+
}
|
|
39
|
+
return /** @type {'static'|'dynamic'|'both'} */ (vt);
|
|
40
|
+
}
|
|
41
|
+
|
|
24
42
|
/**
|
|
25
43
|
* @param {string} filePath
|
|
26
44
|
* @returns {DimensionCreateInput}
|
|
@@ -30,10 +48,10 @@ function readDimensionCreateFile(filePath) {
|
|
|
30
48
|
if (!p) {
|
|
31
49
|
throw new Error('--file is required');
|
|
32
50
|
}
|
|
33
|
-
if (!
|
|
51
|
+
if (!existsSync(p)) {
|
|
34
52
|
throw new Error(`File not found: ${p}`);
|
|
35
53
|
}
|
|
36
|
-
const raw =
|
|
54
|
+
const raw = readFileSync(p, 'utf8');
|
|
37
55
|
let parsed;
|
|
38
56
|
try {
|
|
39
57
|
parsed = JSON.parse(raw);
|
|
@@ -43,10 +61,17 @@ function readDimensionCreateFile(filePath) {
|
|
|
43
61
|
if (!parsed || typeof parsed !== 'object') {
|
|
44
62
|
throw new Error(`Dimension file must be a JSON object: ${p}`);
|
|
45
63
|
}
|
|
64
|
+
if (parsed.valueType !== undefined) {
|
|
65
|
+
parsed.valueType = normalizeValueType(parsed.valueType);
|
|
66
|
+
} else {
|
|
67
|
+
parsed.valueType = 'static';
|
|
68
|
+
}
|
|
46
69
|
return parsed;
|
|
47
70
|
}
|
|
48
71
|
|
|
49
72
|
module.exports = {
|
|
50
|
-
readDimensionCreateFile
|
|
73
|
+
readDimensionCreateFile,
|
|
74
|
+
normalizeValueType,
|
|
75
|
+
VALUE_TYPES
|
|
51
76
|
};
|
|
52
77
|
|
|
@@ -534,6 +534,10 @@
|
|
|
534
534
|
"pattern": "^[a-zA-Z.$\\{\\}_-]+$",
|
|
535
535
|
"default": true
|
|
536
536
|
},
|
|
537
|
+
"internalDockerUseOriginOnly": {
|
|
538
|
+
"type": "boolean",
|
|
539
|
+
"description": "When true, declarative url://*-internal full URLs in Docker profile use http://service:containerPort only (omit frontDoorRouting.pattern). Use when the ingress path (e.g. /miso) is not part of in-container routes. Omit or false to keep pattern on internal URLs (e.g. Keycloak /auth)."
|
|
540
|
+
},
|
|
537
541
|
"certStore": {
|
|
538
542
|
"type": "string",
|
|
539
543
|
"description": "Certificate store name for wildcard certificates. Optional - only needed when using a pre-configured certificate store in Traefik.",
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"$schema":"https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id":"aifabrix://schema/external-datasource.schema.json",
|
|
4
4
|
"title":"External Data Source",
|
|
5
|
-
"description":"Configuration for AI Fabrix ExternalDataSource entities. Includes metadata schema, data dimensions, transformation mappings, OpenAPI/MCP exposure, execution logic, and sync behavior. Root externalSpec is the datasource-level authoritative reference for where to obtain the vendor or tooling API specification used for import and validation; external-system.schema.json openapi/mcp are system-level connectivity hints only.",
|
|
5
|
+
"description":"Configuration for AI Fabrix ExternalDataSource entities. Includes metadata schema, data dimensions, transformation mappings, OpenAPI/MCP exposure, execution logic, and sync behavior. Root externalSpec is the datasource-level authoritative reference for where to obtain the vendor or tooling API specification used for import and validation; external-system.schema.json openapi/mcp are system-level connectivity hints only. Agent-facing business metadata (epic 404): most hints are existing properties below; optional businessOrder orders datasources within a system; trust/confidence from agentValidation (404.5) is persisted separately—not in this config document.",
|
|
6
6
|
"metadata":{
|
|
7
7
|
"key":"external-datasource-schema",
|
|
8
8
|
"name":"External Data Source Configuration Schema",
|
|
9
9
|
"description":"JSON schema for validating ExternalDataSource configuration files",
|
|
10
|
-
"version":"2.4.
|
|
10
|
+
"version":"2.4.10",
|
|
11
11
|
"type":"schema",
|
|
12
12
|
"category":"integration",
|
|
13
13
|
"author":"AI Fabrix Team",
|
|
@@ -185,7 +185,24 @@
|
|
|
185
185
|
"breaking":false
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
|
-
"version":"2.4.
|
|
188
|
+
"version":"2.4.10",
|
|
189
|
+
"date":"2026-05-18T00:00:00Z",
|
|
190
|
+
"changes":[
|
|
191
|
+
"Added optional agentExposure.runtimeMeta (boolean, default false) to opt in to meta.business, meta.cip.steps, and meta.agentValidation safe subset on REST runtime responses (plan 404.2)."
|
|
192
|
+
],
|
|
193
|
+
"breaking":false
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"version":"2.4.9",
|
|
197
|
+
"date":"2026-05-18T00:00:00Z",
|
|
198
|
+
"changes":[
|
|
199
|
+
"Added optional root businessOrder (integer >= 1) for cross-datasource ordering within one external system (agent/integrator workflows; does not change CIP execution order).",
|
|
200
|
+
"Improved descriptions on context, exposed.filterable, fieldMappings.attributes.*.semantic, capabilities, and execution.cip.operations shape/safe documenting what integrators and agents receive on manifest vs published OpenAPI vs runtime meta vs agentValidation evidence (plan 404.0)."
|
|
201
|
+
],
|
|
202
|
+
"breaking":false
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"version":"2.4.9",
|
|
189
206
|
"date":"2026-05-10T00:00:00Z",
|
|
190
207
|
"changes":[
|
|
191
208
|
"Documented roles: root externalSpec is the datasource-level authoritative vendor/API specification provenance (fetch, import, validation); config.openapi is the runtime connector (operations, documentKey) and is the behavioral source of truth; external-system openapi/mcp remain connectivity/bootstrap only.",
|
|
@@ -254,6 +271,23 @@
|
|
|
254
271
|
"pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
255
272
|
"default":"1.0.0"
|
|
256
273
|
},
|
|
274
|
+
"businessOrder":{
|
|
275
|
+
"type":"integer",
|
|
276
|
+
"minimum":1,
|
|
277
|
+
"description":"Optional sort order of this datasource within its external system (1 = first) for agent and integrator workflows when multiple record-storage datasources exist. Does not control CIP step execution order. Published to OpenAPI governance / optional runtime meta.business.businessOrder when epic 404.2 is enabled. foreignKeys alone do not define this order."
|
|
278
|
+
},
|
|
279
|
+
"agentExposure":{
|
|
280
|
+
"type":"object",
|
|
281
|
+
"description":"Opt-in surfaces for AI agent metadata on published OpenAPI and runtime REST envelopes (plans 404.2–404.3). Does not change CIP execution.",
|
|
282
|
+
"additionalProperties":false,
|
|
283
|
+
"properties":{
|
|
284
|
+
"runtimeMeta":{
|
|
285
|
+
"type":"boolean",
|
|
286
|
+
"default":false,
|
|
287
|
+
"description":"When true, REST runtime responses include meta.business (filterable echo, derived dangerousOperations, exposed semantic fields), meta.cip.steps from execution logs, and meta.agentValidation safe subset from persisted 404.5 validation."
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
},
|
|
257
291
|
"metadataSchema":{
|
|
258
292
|
"$ref":"#/$defs/metadataSchemaNode"
|
|
259
293
|
},
|
|
@@ -347,15 +381,15 @@
|
|
|
347
381
|
},
|
|
348
382
|
"semantic":{
|
|
349
383
|
"type":"object",
|
|
350
|
-
"description":"
|
|
384
|
+
"description":"Per-field business semantics for agents (manifest + OpenAPI component descriptions). Not copied to runtime REST meta by default; use published OpenAPI or manifest fetch for discovery. Validated by deterministic rules (346/370) and optional agentValidation (404.5) which may flag missing descriptions in findings—not auto-written to config.",
|
|
351
385
|
"properties":{
|
|
352
386
|
"title":{
|
|
353
387
|
"type":"string",
|
|
354
|
-
"description":"Human-friendly label for this
|
|
388
|
+
"description":"Human-friendly label for this normalized attribute (UI and OpenAPI property titles)."
|
|
355
389
|
},
|
|
356
390
|
"description":{
|
|
357
391
|
"type":"string",
|
|
358
|
-
"description":"Business
|
|
392
|
+
"description":"Business meaning of the field and how agents should use it in filters or answers. Primary authoring surface for field-level agent hints (use this, not a separate 'meaning' property)."
|
|
359
393
|
},
|
|
360
394
|
"example":{
|
|
361
395
|
"description":"Example value for this field.",
|
|
@@ -452,7 +486,7 @@
|
|
|
452
486
|
},
|
|
453
487
|
"filterable":{
|
|
454
488
|
"type":"array",
|
|
455
|
-
"description":"
|
|
489
|
+
"description":"Canonical list of normalized attribute names agents and integrators may use as deterministic API filters. Must reference materialized fields (metadataSchema index=true or filter=true). Validated by exposed_exposure_lists_validate.py. Emitted on published OpenAPI when epic 404.3 is enabled; optional runtime echo as meta.business.recommendedFilters. agentValidation (404.5) may suggest additions in observedBusinessModel only—they are not a second config field.",
|
|
456
490
|
"items":{
|
|
457
491
|
"type":"string",
|
|
458
492
|
"pattern":"^[a-z][a-zA-Z0-9]*$"
|
|
@@ -735,11 +769,11 @@
|
|
|
735
769
|
},
|
|
736
770
|
"context":{
|
|
737
771
|
"type":"object",
|
|
738
|
-
"description":"
|
|
772
|
+
"description":"Datasource-level discovery hints for agents. Copied to COM semantic_tags and OpenAPI tags when COM build runs; not included in runtime REST meta by default. Prefer structured semanticTags and fieldMappings.*.semantic.description over naturalLanguageHints (legacy prose; do not expand in new integrations).",
|
|
739
773
|
"properties":{
|
|
740
774
|
"semanticTags":{
|
|
741
775
|
"type":"array",
|
|
742
|
-
"description":"
|
|
776
|
+
"description":"Structured tags for classification and OpenAPI tag emission (e.g. ['crm', 'sales', 'deals']).",
|
|
743
777
|
"items":{
|
|
744
778
|
"type":"string"
|
|
745
779
|
}
|
|
@@ -753,7 +787,7 @@
|
|
|
753
787
|
},
|
|
754
788
|
"naturalLanguageHints":{
|
|
755
789
|
"type":"array",
|
|
756
|
-
"description":"
|
|
790
|
+
"description":"Legacy free-form strings (wizard may still emit). Not structured agent contract metadata; avoid for new authoring (plan 404.1). Not exposed on public OpenAPI or runtime meta.",
|
|
757
791
|
"items":{
|
|
758
792
|
"type":"string"
|
|
759
793
|
}
|
|
@@ -855,7 +889,7 @@
|
|
|
855
889
|
"additionalProperties":false
|
|
856
890
|
},
|
|
857
891
|
"capabilities":{
|
|
858
|
-
"description":"
|
|
892
|
+
"description":"Declared operation keys (e.g. list, get, create, update, delete, or custom names matching execution.cip.operations and openapi.operations). Dataplane derives per-operation agent semantics at publish time: core delete and custom ops with CIP shape delete map to x-ai-intent delete and high riskLevel on published OpenAPI—not a separate dangerousOperations list in config.",
|
|
859
893
|
"type":"array",
|
|
860
894
|
"items":{
|
|
861
895
|
"type":"string",
|
|
@@ -1868,7 +1902,7 @@
|
|
|
1868
1902
|
},
|
|
1869
1903
|
"safe":{
|
|
1870
1904
|
"type":"boolean",
|
|
1871
|
-
"description":"Optional
|
|
1905
|
+
"description":"Optional override when automatic shape/fetch inference misclassifies mutating risk. When wired (plan 404.3), influences COM destructive flags and x-ai-safeToRetry on published OpenAPI. Prefer shape for create/update/delete classification."
|
|
1872
1906
|
},
|
|
1873
1907
|
"lineage":{
|
|
1874
1908
|
"$ref":"#/$defs/cipLineage"
|
|
@@ -1883,7 +1917,7 @@
|
|
|
1883
1917
|
"update",
|
|
1884
1918
|
"delete"
|
|
1885
1919
|
],
|
|
1886
|
-
"description":"
|
|
1920
|
+
"description":"Manifest classification for custom operations when fetch step inference is insufficient. Resolved by resolve_cip_write_shape (precedence over fetch inference) and drives x-ai-intent, x-ai-sideEffects, and x-ai-contract.riskLevel on published OpenAPI. shape delete marks the operation as dangerous for agent policy (with core capability delete)."
|
|
1887
1921
|
},
|
|
1888
1922
|
"steps":{
|
|
1889
1923
|
"type":"array",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
{ "cliFlag": "--no-run-scenarios", "requestField": "e2eOptions.runScenarios", "runType": "e2e" },
|
|
15
15
|
{ "cliFlag": "--no-cleanup", "requestField": "e2eOptions.cleanup", "runType": "e2e" },
|
|
16
16
|
{ "cliFlag": "--primary-key-value", "requestField": "e2eOptions.primaryKeyValue", "runType": "e2e" },
|
|
17
|
-
{ "cliFlag": "
|
|
18
|
-
{ "cliFlag": "--strict-capability-scope", "requestField": null, "runType": "e2e", "note": "Client-only: exit ≥1 when capabilities[] has >1 row while
|
|
17
|
+
{ "cliFlag": "[capabilityKey] (positional)", "requestField": "e2eOptions.capabilityKeys", "runType": "e2e", "note": "Single key forwarded as capabilityKeys array in request body when set" },
|
|
18
|
+
{ "cliFlag": "--strict-capability-scope", "requestField": null, "runType": "e2e", "note": "Client-only: exit ≥1 when capabilities[] has >1 row while [capabilityKey] is set (plan §2.3)" },
|
|
19
19
|
{ "cliFlag": "--require-cert", "requestField": null, "note": "Client-only exit code 2 gate" },
|
|
20
20
|
{ "cliFlag": "--warnings-as-errors", "requestField": null, "note": "Client-only exit code 1 on warn" },
|
|
21
21
|
{ "cliFlag": "--json", "requestField": null, "note": "Stdout prints raw DatasourceTestRun" },
|
|
@@ -342,6 +342,16 @@ parameters:
|
|
|
342
342
|
azure:
|
|
343
343
|
notes: Empty until set; user-supplied Azure OpenAI API key (not auto-generated).
|
|
344
344
|
|
|
345
|
+
# Legacy unprefixed name (scaffold / old env.template); prefer *KeyVault suffix or {appKey}-secrets-apiKeyVault (keyvault.md).
|
|
346
|
+
- key: api-key
|
|
347
|
+
scope: app
|
|
348
|
+
generator:
|
|
349
|
+
type: randomBytes32
|
|
350
|
+
ensureOn: [resolveApp]
|
|
351
|
+
azure:
|
|
352
|
+
notes: >-
|
|
353
|
+
Legacy kv://api-key; new apps should use kv://api-keyKeyVault or {appKey}-secrets-apiKeyVault.
|
|
354
|
+
|
|
345
355
|
# Legacy unprefixed name; prefer kv://{appKey}-secrets-apiKeyVault in env.template (keyvault.md secrets.apiKeyVault).
|
|
346
356
|
- key: miso-controller-secrets-apiKeyVault
|
|
347
357
|
scope: app
|