@aifabrix/builder 2.54.1 → 2.55.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.
- package/README.md +8 -0
- package/lib/agent-kit/apply-ops.js +82 -0
- package/lib/agent-kit/checksums.js +28 -0
- package/lib/agent-kit/classify.js +113 -0
- package/lib/agent-kit/claude-shim.js +61 -0
- package/lib/agent-kit/constants.js +55 -0
- package/lib/agent-kit/file-list.js +103 -0
- package/lib/agent-kit/host-approve.js +130 -0
- package/lib/agent-kit/hosting/github.js +63 -0
- package/lib/agent-kit/hosts.js +71 -0
- package/lib/agent-kit/init.js +319 -0
- package/lib/agent-kit/kit-root.js +17 -0
- package/lib/agent-kit/managed-section.js +79 -0
- package/lib/agent-kit/package-load.js +45 -0
- package/lib/agent-kit/plan-ops.js +69 -0
- package/lib/agent-kit/remote-prompts.js +239 -0
- package/lib/agent-kit/render-host-markdown.js +40 -0
- package/lib/agent-kit/repo-guard.js +47 -0
- package/lib/agent-kit/report.js +107 -0
- package/lib/agent-kit/run.js +82 -0
- package/lib/agent-kit/scm/git.js +122 -0
- package/lib/agent-kit/state-file.js +83 -0
- package/lib/agent-kit/status.js +50 -0
- package/lib/agent-kit/v1-detect.js +81 -0
- package/lib/agent-kit/validate-kit.js +87 -0
- package/lib/agent-kit/workspace-name.js +40 -0
- package/lib/agent-kit/workspace-skeleton.js +103 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/work-search.api.js +31 -4
- package/lib/api/work.api.js +19 -12
- package/lib/app/list-external-systems.js +2 -1
- package/lib/app/show-display.js +33 -6
- package/lib/app/show.js +25 -2
- package/lib/channels/add-channel.js +1 -0
- package/lib/channels/approval-guides/claude.js +2 -2
- package/lib/channels/channel-add-failure.js +1 -0
- package/lib/channels/channel-add-remaining.js +15 -9
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +2 -1
- package/lib/channels/channel-install-envelope.js +4 -2
- package/lib/channels/channel-integration-generator.js +2 -0
- package/lib/channels/channel-runtime-resolver.js +14 -0
- package/lib/channels/channel-targets.js +31 -5
- package/lib/channels/claude-setup-values.js +4 -1
- package/lib/channels/slack-channel-add.js +59 -6
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/install-cli.js +14 -2
- package/lib/channels/slack-provisioning/with-curl-on-path.js +6 -1
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +3 -1
- package/lib/commands/agent-kit-help.js +79 -0
- package/lib/commands/agent-kit.js +346 -0
- package/lib/commands/channel-add-help.js +5 -5
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/repair-auth-apply.js +1 -1
- package/lib/commands/repair-datasource-key-skip.js +39 -0
- package/lib/commands/repair-datasource-keys.js +24 -12
- package/lib/commands/repair-rbac.js +16 -10
- package/lib/commands/role-assistant-copy-output.js +61 -0
- package/lib/commands/role-assistant-copy.js +155 -0
- package/lib/commands/role-assistant-test-output.js +8 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +117 -48
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-sidecar-followups.js +4 -1
- package/lib/commands/verify-operations-skip-e2e.js +131 -0
- package/lib/commands/verify-operations-step-plan.js +6 -33
- package/lib/commands/verify-operations-steps.js +3 -1
- package/lib/datasource/capability/relate-operations.js +28 -10
- package/lib/datasource/capability/run-capability-relate.js +48 -25
- package/lib/datasource/datasource-identifier.js +13 -5
- package/lib/deployment/deployer-poll-run.js +117 -35
- package/lib/external-system/deploy-dataplane-published.js +70 -0
- package/lib/external-system/deploy.js +12 -2
- package/lib/external-system/download-role-assistant.js +41 -15
- package/lib/external-system/download.js +7 -1
- package/lib/generator/wizard-datasource-key.js +54 -0
- package/lib/generator/wizard.js +55 -54
- package/lib/integration-definition/apply-datasource-keys.js +75 -0
- package/lib/integration-definition/apply-relationships.js +195 -0
- package/lib/integration-definition/apply-static-enterprise.js +229 -0
- package/lib/integration-definition/apply-system-file.js +71 -0
- package/lib/integration-definition/apply-test-endpoint.js +89 -0
- package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
- package/lib/integration-definition/apply.js +78 -59
- package/lib/integration-definition/enrich-openapi-operations.js +36 -10
- package/lib/integration-definition/enrich-openapi-pick.js +87 -0
- package/lib/lifecycle/role-assistant-governance.js +56 -21
- package/lib/programmatic/capability-registry.js +1 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +4 -1
- package/lib/programmatic/openapi-component-schemas.js +1 -0
- package/lib/programmatic/openapi-descriptions.js +9 -3
- package/lib/programmatic/openapi-envelope-examples.js +7 -0
- package/lib/programmatic/openapi-operation-bindings.js +5 -0
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +8 -5
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +1 -0
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +7 -0
- package/lib/programmatic/run-channel-catalog.js +50 -8
- package/lib/programmatic/run-channel-install-options.js +5 -1
- package/lib/programmatic/run-download.js +41 -0
- package/lib/protection/auth-context.js +3 -1
- package/lib/protection/protection-display.js +3 -2
- package/lib/protection/report-exit.js +50 -0
- package/lib/protection/run-commands.js +2 -0
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/test-case-assertion-row.js +36 -0
- package/lib/role-assistant/test-case-copy-bind.js +77 -0
- package/lib/role-assistant/test-case-copy-expected.js +127 -0
- package/lib/role-assistant/test-case-copy-from-work.js +90 -0
- package/lib/role-assistant/test-case-copy-interactions.js +67 -0
- package/lib/role-assistant/test-case-copy.js +119 -0
- package/lib/role-assistant/test-case-expected-catalog.js +135 -0
- package/lib/role-assistant/test-case-validate.js +88 -0
- package/lib/role-assistant/test-cases-bid.js +117 -4
- package/lib/role-assistant/test-cases-evaluate.js +137 -30
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +291 -0
- package/lib/role-assistant/test-cases-search-graph.js +122 -0
- package/lib/role-assistant/test-cases-search.js +20 -2
- package/lib/role-assistant/test-cases.js +34 -168
- package/lib/role-assistant/test-pack-map.js +180 -0
- package/lib/role-assistant/test-pack-sync.js +187 -0
- package/lib/role-assistant/test-runner-debug.js +54 -0
- package/lib/role-assistant/test-runner-respond-body.js +36 -0
- package/lib/role-assistant/test-runner-search.js +20 -5
- package/lib/role-assistant/test-runner-start-payload.js +63 -10
- package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
- package/lib/role-assistant/test-runner-workhub.js +45 -21
- package/lib/role-assistant/test-runner.js +50 -10
- package/lib/schema/external-datasource.schema.json +36 -5
- package/lib/schema/external-system.schema.json +20 -2
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- package/lib/search/dataplane-context.js +23 -0
- package/lib/search/search-args.js +211 -0
- package/lib/search/search-display.js +238 -0
- package/lib/search/search-errors.js +50 -0
- package/lib/search/search-prompts.js +119 -0
- package/lib/search/search-roles.js +85 -0
- package/lib/search/search-run.js +241 -0
- package/lib/search/search-skills.js +198 -0
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
- package/lib/utils/external-system-readiness-compact-display.js +30 -1
- package/lib/utils/external-system-validators.js +2 -1
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/schema-loader.js +37 -0
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +3 -2
- package/package.json +1 -1
- package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
- package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
- package/templates/agent-kit/agent-kit.yaml +45 -0
- package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
- package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
- package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
- package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
- package/templates/agent-kit/parity-inventory.yaml +188 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +78 -0
- package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
- package/templates/agent-kit/workspace/LICENSE.mit +21 -0
- package/templates/agent-kit/workspace/README.md +89 -0
- package/templates/applications/builder-api/Dockerfile +3 -1
- package/templates/applications/dataplane/application.yaml +2 -2
- package/templates/applications/dataplane/env.template +1 -1
- package/templates/applications/dataplane/rbac.yaml +28 -0
- package/templates/applications/keycloak/env.template +3 -3
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +8 -9
- package/templates/channels/claude/TROUBLESHOOTING.md +3 -0
- package/templates/channels/claude/channel.json +1 -1
- package/templates/channels/claude/install.template.md.hbs +1 -0
- package/templates/channels/claude/integration/claude-system.json +1 -1
- package/templates/channels/slack/channel.json +11 -0
- package/templates/channels/slack/install.template.md.hbs +9 -0
- package/templates/channels/slack/integration/slack-system.json +11 -0
- package/templates/channels/slack/manifest.template.json.hbs +6 -3
- package/templates/channels/teams-bot/channel.json +1 -0
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -29,12 +29,33 @@ const PILLAR_LABELS = Object.freeze({
|
|
|
29
29
|
governance: 'Governance'
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
+
/** Connected System lifecycle labels — same Draft / Published / Archived as the web. */
|
|
33
|
+
const CONNECTED_SYSTEM_LIFECYCLE_LABELS = Object.freeze({
|
|
34
|
+
draft: 'Draft',
|
|
35
|
+
published: 'Published',
|
|
36
|
+
archived: 'Archived',
|
|
37
|
+
deployed: 'Published'
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Product lifecycle label, or null when the value is not Draft/Published/Archived
|
|
42
|
+
* (controller `active` is not Published).
|
|
43
|
+
* @param {string|null|undefined} status
|
|
44
|
+
* @returns {string|null}
|
|
45
|
+
*/
|
|
46
|
+
function formatConnectedSystemLifecycleLabel(status) {
|
|
47
|
+
const raw = String(status || '').trim().toLowerCase();
|
|
48
|
+
return CONNECTED_SYSTEM_LIFECYCLE_LABELS[raw] || null;
|
|
49
|
+
}
|
|
50
|
+
|
|
32
51
|
/**
|
|
33
52
|
* @param {string|null|undefined} status
|
|
34
53
|
* @returns {string}
|
|
35
54
|
*/
|
|
36
55
|
function formatLifecycleLabel(status) {
|
|
37
56
|
const raw = String(status || 'unknown').trim().toLowerCase();
|
|
57
|
+
const lifecycle = formatConnectedSystemLifecycleLabel(raw);
|
|
58
|
+
if (lifecycle) return lifecycle;
|
|
38
59
|
if (!raw || raw === 'unknown') return 'Unknown';
|
|
39
60
|
return raw.charAt(0).toUpperCase() + raw.slice(1);
|
|
40
61
|
}
|
|
@@ -159,8 +180,14 @@ function resolveManifestAuthMethod(systemCfg) {
|
|
|
159
180
|
* @returns {string}
|
|
160
181
|
*/
|
|
161
182
|
function resolveConnectedSystemStatus(opts = {}) {
|
|
162
|
-
const fromPub = opts.publication?.system?.status;
|
|
163
183
|
const fromGet = opts.systemFromDataplane?.status;
|
|
184
|
+
if (fromGet) {
|
|
185
|
+
return formatLifecycleLabel(fromGet);
|
|
186
|
+
}
|
|
187
|
+
if (opts.command === 'upload') {
|
|
188
|
+
return formatLifecycleLabel('draft');
|
|
189
|
+
}
|
|
190
|
+
const fromPub = opts.publication?.system?.status;
|
|
164
191
|
return formatLifecycleLabel(fromGet || fromPub || opts.status);
|
|
165
192
|
}
|
|
166
193
|
|
|
@@ -307,6 +334,8 @@ function logCompactTip(opts) {
|
|
|
307
334
|
|
|
308
335
|
module.exports = {
|
|
309
336
|
PILLAR_LABELS,
|
|
337
|
+
CONNECTED_SYSTEM_LIFECYCLE_LABELS,
|
|
338
|
+
formatConnectedSystemLifecycleLabel,
|
|
310
339
|
formatLifecycleLabel,
|
|
311
340
|
truncateKeyList,
|
|
312
341
|
formatCredentialPushLine,
|
|
@@ -80,6 +80,7 @@ const CATEGORIES = [
|
|
|
80
80
|
{ name: 'resource-type' },
|
|
81
81
|
{ name: 'role' },
|
|
82
82
|
{ name: 'role-assistant' },
|
|
83
|
+
{ name: 'search' },
|
|
83
84
|
{ name: 'evidence-kind' },
|
|
84
85
|
{ name: 'enterprise-knowledge' },
|
|
85
86
|
{ name: 'identity' },
|
|
@@ -133,7 +134,8 @@ const CATEGORIES = [
|
|
|
133
134
|
{ name: 'dev' },
|
|
134
135
|
{ name: 'secret' },
|
|
135
136
|
{ name: 'npm', term: 'npm config' },
|
|
136
|
-
{ name: 'secure' }
|
|
137
|
+
{ name: 'secure' },
|
|
138
|
+
{ name: 'agent-kit' }
|
|
137
139
|
]
|
|
138
140
|
}
|
|
139
141
|
];
|
|
@@ -19,6 +19,7 @@ const addFormats = require('ajv-formats');
|
|
|
19
19
|
let externalSystemValidator = null;
|
|
20
20
|
let externalDataSourceValidator = null;
|
|
21
21
|
let roleAssistantSettingsValidator = null;
|
|
22
|
+
let roleAssistantTestCaseValidator = null;
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Reset validators cache (for testing)
|
|
@@ -28,6 +29,7 @@ function resetValidators() {
|
|
|
28
29
|
externalSystemValidator = null;
|
|
29
30
|
externalDataSourceValidator = null;
|
|
30
31
|
roleAssistantSettingsValidator = null;
|
|
32
|
+
roleAssistantTestCaseValidator = null;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -172,6 +174,37 @@ function loadRoleAssistantSettingsSchema() {
|
|
|
172
174
|
return roleAssistantSettingsValidator;
|
|
173
175
|
}
|
|
174
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Loads and compiles role-assistant test-case schema.
|
|
179
|
+
* @function loadRoleAssistantTestCaseSchema
|
|
180
|
+
* @returns {Function}
|
|
181
|
+
*/
|
|
182
|
+
function loadRoleAssistantTestCaseSchema() {
|
|
183
|
+
if (roleAssistantTestCaseValidator) {
|
|
184
|
+
return roleAssistantTestCaseValidator;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const schemaPath = path.join(__dirname, '..', 'schema', 'role-assistant-test-case.schema.json');
|
|
188
|
+
let schema;
|
|
189
|
+
try {
|
|
190
|
+
schema = JSON.parse(fsRealSync.readFileSync(schemaPath, 'utf8'));
|
|
191
|
+
} catch (error) {
|
|
192
|
+
try {
|
|
193
|
+
schema = require('../schema/role-assistant-test-case.schema.json');
|
|
194
|
+
} catch {
|
|
195
|
+
if (error && error.code === 'ENOENT') {
|
|
196
|
+
throw new Error(`Role assistant test-case schema not found: ${schemaPath}`);
|
|
197
|
+
}
|
|
198
|
+
throw new Error(`Invalid JSON in role-assistant-test-case.schema.json: ${error.message}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const ajv = new Ajv({ allErrors: true, verbose: true, strict: false, strictSchema: false });
|
|
203
|
+
addFormats(ajv);
|
|
204
|
+
roleAssistantTestCaseValidator = ajv.compile(schema);
|
|
205
|
+
return roleAssistantTestCaseValidator;
|
|
206
|
+
}
|
|
207
|
+
|
|
175
208
|
/**
|
|
176
209
|
* Detect schema type from $id field
|
|
177
210
|
* @param {Object} parsed - Parsed JSON object
|
|
@@ -194,6 +227,9 @@ function detectFromId(parsed) {
|
|
|
194
227
|
if (parsed.$id.includes('role-assistant-settings')) {
|
|
195
228
|
return 'role-assistant-settings';
|
|
196
229
|
}
|
|
230
|
+
if (parsed.$id.includes('role-assistant-test-case')) {
|
|
231
|
+
return 'role-assistant-test-case';
|
|
232
|
+
}
|
|
197
233
|
|
|
198
234
|
return null;
|
|
199
235
|
}
|
|
@@ -388,6 +424,7 @@ module.exports = {
|
|
|
388
424
|
loadExternalSystemSchema,
|
|
389
425
|
loadExternalDataSourceSchema,
|
|
390
426
|
loadRoleAssistantSettingsSchema,
|
|
427
|
+
loadRoleAssistantTestCaseSchema,
|
|
391
428
|
registerExternalDatasourceAjvDependencies,
|
|
392
429
|
detectSchemaType,
|
|
393
430
|
detectSchemaTypeFromParsed,
|
|
@@ -13,7 +13,8 @@ const yaml = require('js-yaml');
|
|
|
13
13
|
const {
|
|
14
14
|
loadExternalSystemSchema,
|
|
15
15
|
loadExternalDataSourceSchema,
|
|
16
|
-
loadRoleAssistantSettingsSchema
|
|
16
|
+
loadRoleAssistantSettingsSchema,
|
|
17
|
+
loadRoleAssistantTestCaseSchema
|
|
17
18
|
} = require('../utils/schema-loader');
|
|
18
19
|
const { formatValidationErrors } = require('../utils/error-formatter');
|
|
19
20
|
const { validateFieldReferences } = require('../datasource/field-reference-validator');
|
|
@@ -60,6 +61,9 @@ function getValidatorForType(normalizedType) {
|
|
|
60
61
|
if (normalizedType === 'role-assistant-settings') {
|
|
61
62
|
return loadRoleAssistantSettingsSchema();
|
|
62
63
|
}
|
|
64
|
+
if (normalizedType === 'role-assistant-test-case') {
|
|
65
|
+
return loadRoleAssistantTestCaseSchema();
|
|
66
|
+
}
|
|
63
67
|
throw new Error(`Unknown file type: ${normalizedType}`);
|
|
64
68
|
}
|
|
65
69
|
|
|
@@ -27,6 +27,7 @@ const {
|
|
|
27
27
|
isRoleAssistantWorkspace,
|
|
28
28
|
isEnterpriseKnowledgeWorkspace
|
|
29
29
|
} = require('../utils/platform-shell-package');
|
|
30
|
+
const { validateRoleAssistantPackage } = require('../role-assistant/package-validate');
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* Validates a file path (detects type and validates)
|
|
@@ -335,7 +336,7 @@ function skippedComponentsStep() {
|
|
|
335
336
|
return { valid: true, errors: [], warnings: [], files: [], skipped: true };
|
|
336
337
|
}
|
|
337
338
|
|
|
338
|
-
async function validatePlatformShellPackage(
|
|
339
|
+
async function validatePlatformShellPackage(_appName, baseDir, appPath, _options) {
|
|
339
340
|
if (isEnterpriseKnowledgeWorkspace(baseDir)) {
|
|
340
341
|
return aggregateExternalValidationSteps({
|
|
341
342
|
application: skippedValidationStep(),
|
|
@@ -348,7 +349,7 @@ async function validatePlatformShellPackage(appName, baseDir, appPath, options)
|
|
|
348
349
|
}
|
|
349
350
|
return aggregateExternalValidationSteps({
|
|
350
351
|
application: skippedValidationStep(),
|
|
351
|
-
components: await
|
|
352
|
+
components: await validateRoleAssistantPackage(appPath),
|
|
352
353
|
manifest: skippedValidationStep()
|
|
353
354
|
}, appPath);
|
|
354
355
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
@AGENTS.md
|
|
2
|
+
|
|
3
|
+
Delivery skills: `/aifabrix-plan`, `/aifabrix-connected-system`, `/aifabrix-role-assistant`, `/aifabrix-prove`.
|
|
4
|
+
The skill body lives under `.agents/skills/`. Do not invent a parallel workflow.
|
|
5
|
+
Local vs SSH (tmux, Remote Control): `.agents/skills/shared/hosts.md`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
schemaVersion: "1"
|
|
2
|
+
kitVersion: "1.1.1"
|
|
3
|
+
minimumBuilderVersion: "2.54.2"
|
|
4
|
+
skills:
|
|
5
|
+
- aifabrix-plan
|
|
6
|
+
- aifabrix-connected-system
|
|
7
|
+
- aifabrix-role-assistant
|
|
8
|
+
- aifabrix-prove
|
|
9
|
+
managed:
|
|
10
|
+
- source: skills
|
|
11
|
+
target: .agents/skills
|
|
12
|
+
mode: tree
|
|
13
|
+
- source: instructions/root.AGENTS.md
|
|
14
|
+
target: AGENTS.md
|
|
15
|
+
mode: managed-section
|
|
16
|
+
- source: instructions/integration.AGENTS.md
|
|
17
|
+
target: integration/AGENTS.md
|
|
18
|
+
mode: managed-section
|
|
19
|
+
- source: instructions/role-assistant.AGENTS.md
|
|
20
|
+
target: role-assistant/AGENTS.md
|
|
21
|
+
mode: managed-section
|
|
22
|
+
- source: instructions/AGENTKIT.md
|
|
23
|
+
target: AGENTKIT.md
|
|
24
|
+
mode: file
|
|
25
|
+
render: hosts
|
|
26
|
+
- source: workspace/README.md
|
|
27
|
+
target: README.md
|
|
28
|
+
mode: if-missing
|
|
29
|
+
optional:
|
|
30
|
+
- source: adapters/cursor/commands
|
|
31
|
+
target: .cursor/commands
|
|
32
|
+
mode: tree
|
|
33
|
+
when: v1-migration
|
|
34
|
+
- source: adapters/claude/root.CLAUDE.md
|
|
35
|
+
target: CLAUDE.md
|
|
36
|
+
mode: managed-section
|
|
37
|
+
when: host-claude
|
|
38
|
+
- source: adapters/claude/nested.CLAUDE.md
|
|
39
|
+
target: integration/CLAUDE.md
|
|
40
|
+
mode: managed-section
|
|
41
|
+
when: host-claude
|
|
42
|
+
- source: adapters/claude/nested.CLAUDE.md
|
|
43
|
+
target: role-assistant/CLAUDE.md
|
|
44
|
+
mode: managed-section
|
|
45
|
+
when: host-claude
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Agent Kit
|
|
2
|
+
|
|
3
|
+
Builder-owned. `aifabrix agent-kit update` refreshes this file. If workspace `README.md` is missing, install/update creates it. An existing README is never overwritten.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
From this git repository (Builder CLI on PATH):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
aifabrix agent-kit install --host {{hostFlag}}{{#if autoApprove}} --approve-all --yes{{/if}}
|
|
11
|
+
aifabrix agent-kit status
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`--host` may be `all`, `cursor`, `codex`, or `claude`. Shared skills always land in `.agents/skills/`.
|
|
15
|
+
{{#if claude}}
|
|
16
|
+
`claude` also writes `CLAUDE.md` and thin `.claude/skills` pointers.
|
|
17
|
+
{{/if}}
|
|
18
|
+
|
|
19
|
+
## Update
|
|
20
|
+
|
|
21
|
+
When this CLI is newer than the workspace kit, or you add or switch coding hosts:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
aifabrix agent-kit update --host {{hostFlag}}{{#if autoApprove}} --approve-all --yes{{/if}}
|
|
25
|
+
aifabrix agent-kit validate
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Omit `--host` to keep the hosts already recorded. Pass `--host` when the developer changes Cursor / Claude Code / Codex.
|
|
29
|
+
|
|
30
|
+
New workspace instead of an existing repo: `aifabrix agent-kit init <workspaceName> --host {{hostFlag}}`.
|
|
31
|
+
|
|
32
|
+
## Activate hosts
|
|
33
|
+
|
|
34
|
+
Install the coding app, then sign in. How to **run** it locally or over SSH is in `.agents/skills/shared/hosts.md` (linked from every Agent Kit skill).
|
|
35
|
+
{{#if autoApprove}}
|
|
36
|
+
|
|
37
|
+
On TTY, install **asks** to auto-approve tool permissions **in this workspace**. Claude Code also allows `Bash(aifabrix *)` (delivery CLI) and `Read(~/**)` (home Read). Silent (`--yes` / non-TTY) writes them; `--skip-approve-all` skips.
|
|
38
|
+
{{#if claude}}
|
|
39
|
+
- Claude Code writes `.claude/settings.local.json` (gitignored).
|
|
40
|
+
{{/if}}
|
|
41
|
+
{{#if codex}}
|
|
42
|
+
- Codex writes `.codex/config.toml` (gitignored).
|
|
43
|
+
{{/if}}
|
|
44
|
+
{{/if}}
|
|
45
|
+
{{#if cursor}}
|
|
46
|
+
|
|
47
|
+
### Cursor
|
|
48
|
+
|
|
49
|
+
Open this folder in Cursor (this machine, or Cursor Remote SSH). Skills: `/aifabrix-plan`, `/aifabrix-connected-system`, `/aifabrix-role-assistant`, `/aifabrix-prove`.
|
|
50
|
+
{{/if}}
|
|
51
|
+
{{#if claude}}
|
|
52
|
+
|
|
53
|
+
### Claude Code
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
57
|
+
claude auth login
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Skills: same `/aifabrix-*` names. First `claude` must run inside this workspace, not your home directory.
|
|
61
|
+
{{/if}}
|
|
62
|
+
{{#if codex}}
|
|
63
|
+
|
|
64
|
+
### Codex
|
|
65
|
+
|
|
66
|
+
Install the Codex CLI, then sign in with your Codex account. Skills: `$aifabrix-plan` (and the other `$aifabrix-*` names). Codex reads `AGENTS.md`.
|
|
67
|
+
{{/if}}
|
|
68
|
+
|
|
69
|
+
## Auth for delivery CLI
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
aifabrix auth status
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
If still unauthenticated, run `aifabrix login` (the agent cannot log in for you).
|
|
76
|
+
|
|
77
|
+
## How to start
|
|
78
|
+
|
|
79
|
+
After this folder is open in the coding host, follow **How to start** in the workspace `README.md` (how to use prompts, then plan → validate/build → publish, then Role Assistant).
|
|
80
|
+
|
|
81
|
+
## Docs
|
|
82
|
+
|
|
83
|
+
Agents load the public index from `AGENTS.md`. Humans: the workspace `README.md` Docs section.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Connected System laws
|
|
2
|
+
|
|
3
|
+
Load when working under `integration/`. Follow skill `aifabrix-connected-system` and its references.
|
|
4
|
+
|
|
5
|
+
## Builder-first packages
|
|
6
|
+
|
|
7
|
+
Generate EDS with BID apply, wizard, repair, or `aifabrix json`. Do not hand-seed greenfield `*-system.json` / `*-datasource-*.json` / `application.*`. Manual deltas need `INTEGRATION_CHANGELOG.md`.
|
|
8
|
+
|
|
9
|
+
## Contract
|
|
10
|
+
|
|
11
|
+
- `exposed` needs `filterable`, real `profiles`, and `schema`. Schema-only is not BUILT.
|
|
12
|
+
- Every `exposed.filterable` field has `metadataSchema.properties.<field>.filter: true`.
|
|
13
|
+
- Foreign keys sit on the child (`from`) only; `targetFields: ["externalId"]`. No reverse parent FKs. Empty FK on business storage is not READY/BUILT unless config, logs, documented root, or self-tree (field only).
|
|
14
|
+
- Partitioned and current-state views need FK + dimensions (`type: fk`) + usually `accessControl.abac.applicability: required`.
|
|
15
|
+
- `roles[].value` must be a COM catalog key from `aifabrix role list`. Never invent `*-reader`.
|
|
16
|
+
|
|
17
|
+
## Publish
|
|
18
|
+
|
|
19
|
+
`aifabrix upload` is a draft application. `aifabrix deploy` publishes. Dataplane `show --online` status **published** is truth. Ignore upload banners that say Published.
|
|
20
|
+
|
|
21
|
+
## Safety
|
|
22
|
+
|
|
23
|
+
One designated mutation subject from the integration README. Credential-deferred live E2E may skip honestly; failed sync with a secret present is FAIL. See `production-safety.md` in the connected-system skill.
|
|
24
|
+
|
|
25
|
+
Do not bulk-sync views as storage. Do not invent a Connected System key starting with `ra-` or `ek-`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Role Assistant laws
|
|
2
|
+
|
|
3
|
+
Load when working under `role-assistant/`. Follow skill `aifabrix-role-assistant`.
|
|
4
|
+
|
|
5
|
+
## Packages are separate
|
|
6
|
+
|
|
7
|
+
Connected Systems live under `integration/<systemKey>/`.
|
|
8
|
+
Role Assistants live under `role-assistant/ra-<catalogRole>/`.
|
|
9
|
+
Do not keep CS manifests inside an RA folder. Do not run `aifabrix convert` on RA packages.
|
|
10
|
+
|
|
11
|
+
## Authority
|
|
12
|
+
|
|
13
|
+
The catalog Business Role must exist (`aifabrix role list`). Package key is `ra-<catalogRole>`.
|
|
14
|
+
Download an existing assistant before editing generated yaml.
|
|
15
|
+
Candidate Evidence is not certified Evidence.
|
|
16
|
+
Missing CS capability is fixed on the Connected System, then re-subscribed — never as an RA-local operation.
|
|
17
|
+
|
|
18
|
+
## Publish and prove
|
|
19
|
+
|
|
20
|
+
CS must be dataplane **published** (deploy, not upload-only) before subscription-driven capabilities exist.
|
|
21
|
+
Do not upload or deploy an RA unless the user explicitly asks in this turn.
|
|
22
|
+
Agent prompts never supply the actor. Verified backend identity is authoritative.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# AI Fabrix customer workspace
|
|
2
|
+
|
|
3
|
+
This repository delivers Connected Systems and Role Assistants with the Builder CLI.
|
|
4
|
+
Do not edit platform product source (`aifabrix-dataplane`, `aifabrix-miso`, `aifabrix-builder`) from this workspace.
|
|
5
|
+
|
|
6
|
+
## Ownership
|
|
7
|
+
|
|
8
|
+
| Owner | Holds |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| This repository | Customer facts, specifications, plans, fixtures, tests, learning |
|
|
11
|
+
| Agent Kit | Reusable delivery behavior (installed skills and these managed sections) |
|
|
12
|
+
| Builder CLI | Commands, package validation, install/update of this kit |
|
|
13
|
+
| Dataplane / controller | Auth, RBAC, ABAC, Protection, publication, Runtime execution |
|
|
14
|
+
|
|
15
|
+
Vendor limits, tenant ids, credentials, PII stance, partitions, and the designated mutation subject live only in `integration/<systemKey>/README.md`.
|
|
16
|
+
|
|
17
|
+
## Secrets
|
|
18
|
+
|
|
19
|
+
Use `kv://` and `aifabrix secret`. Never store, print, ask for, or commit secret values.
|
|
20
|
+
Missing vendor secret: upload a draft, print the Authentication tab link, stop. Do not collect credentials in chat.
|
|
21
|
+
|
|
22
|
+
## Verdicts
|
|
23
|
+
|
|
24
|
+
`PLAN_READY` · `READY` · `BUILT` · `PASS` · `PASS_WITH_SKIPS` · `NEEDS_DECISIONS` · `NEEDS_FIXES` · `BLOCKED` · `ABORTED`
|
|
25
|
+
|
|
26
|
+
Do not collapse these into a generic success boolean. Do not start the next lifecycle phase unless the user selects it.
|
|
27
|
+
|
|
28
|
+
## Coding hosts
|
|
29
|
+
|
|
30
|
+
Cursor, Claude Code, and Codex — local machine or SSH (tmux, Claude Remote Control): `.agents/skills/shared/hosts.md`.
|
|
31
|
+
Install and sign-in: `AGENTKIT.md`.
|
|
32
|
+
|
|
33
|
+
## Docs
|
|
34
|
+
|
|
35
|
+
Integrator hub: https://docs.aifabrix.ai/docs/build-ai-ready-systems
|
|
36
|
+
CLI workflow: https://docs.aifabrix.ai/docs/build-ai-ready-systems-validate-test-cli-workflow
|
|
37
|
+
Index: https://docs.aifabrix.ai/llms.txt
|