@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.
Files changed (210) hide show
  1. package/README.md +8 -0
  2. package/lib/agent-kit/apply-ops.js +82 -0
  3. package/lib/agent-kit/checksums.js +28 -0
  4. package/lib/agent-kit/classify.js +113 -0
  5. package/lib/agent-kit/claude-shim.js +61 -0
  6. package/lib/agent-kit/constants.js +55 -0
  7. package/lib/agent-kit/file-list.js +103 -0
  8. package/lib/agent-kit/host-approve.js +130 -0
  9. package/lib/agent-kit/hosting/github.js +63 -0
  10. package/lib/agent-kit/hosts.js +71 -0
  11. package/lib/agent-kit/init.js +319 -0
  12. package/lib/agent-kit/kit-root.js +17 -0
  13. package/lib/agent-kit/managed-section.js +79 -0
  14. package/lib/agent-kit/package-load.js +45 -0
  15. package/lib/agent-kit/plan-ops.js +69 -0
  16. package/lib/agent-kit/remote-prompts.js +239 -0
  17. package/lib/agent-kit/render-host-markdown.js +40 -0
  18. package/lib/agent-kit/repo-guard.js +47 -0
  19. package/lib/agent-kit/report.js +107 -0
  20. package/lib/agent-kit/run.js +82 -0
  21. package/lib/agent-kit/scm/git.js +122 -0
  22. package/lib/agent-kit/state-file.js +83 -0
  23. package/lib/agent-kit/status.js +50 -0
  24. package/lib/agent-kit/v1-detect.js +81 -0
  25. package/lib/agent-kit/validate-kit.js +87 -0
  26. package/lib/agent-kit/workspace-name.js +40 -0
  27. package/lib/agent-kit/workspace-skeleton.js +103 -0
  28. package/lib/api/role-assistant-test-pack.api.js +86 -0
  29. package/lib/api/work-search.api.js +31 -4
  30. package/lib/api/work.api.js +19 -12
  31. package/lib/app/list-external-systems.js +2 -1
  32. package/lib/app/show-display.js +33 -6
  33. package/lib/app/show.js +25 -2
  34. package/lib/channels/add-channel.js +1 -0
  35. package/lib/channels/approval-guides/claude.js +2 -2
  36. package/lib/channels/channel-add-failure.js +1 -0
  37. package/lib/channels/channel-add-remaining.js +15 -9
  38. package/lib/channels/channel-definition-status.js +115 -0
  39. package/lib/channels/channel-description.js +2 -1
  40. package/lib/channels/channel-install-envelope.js +4 -2
  41. package/lib/channels/channel-integration-generator.js +2 -0
  42. package/lib/channels/channel-runtime-resolver.js +14 -0
  43. package/lib/channels/channel-targets.js +31 -5
  44. package/lib/channels/claude-setup-values.js +4 -1
  45. package/lib/channels/slack-channel-add.js +59 -6
  46. package/lib/channels/slack-mcp-callback.js +51 -0
  47. package/lib/channels/slack-mcp-runtime.js +156 -0
  48. package/lib/channels/slack-provisioning/install-cli.js +14 -2
  49. package/lib/channels/slack-provisioning/with-curl-on-path.js +6 -1
  50. package/lib/cli/index.js +4 -0
  51. package/lib/cli/setup-certification-commands.js +2 -2
  52. package/lib/cli/setup-certification.help.js +3 -1
  53. package/lib/commands/agent-kit-help.js +79 -0
  54. package/lib/commands/agent-kit.js +346 -0
  55. package/lib/commands/channel-add-help.js +5 -5
  56. package/lib/commands/datasource-capability-relate-cli.js +5 -4
  57. package/lib/commands/repair-auth-apply.js +1 -1
  58. package/lib/commands/repair-datasource-key-skip.js +39 -0
  59. package/lib/commands/repair-datasource-keys.js +24 -12
  60. package/lib/commands/repair-rbac.js +16 -10
  61. package/lib/commands/role-assistant-copy-output.js +61 -0
  62. package/lib/commands/role-assistant-copy.js +155 -0
  63. package/lib/commands/role-assistant-test-output.js +8 -9
  64. package/lib/commands/role-assistant-test-result-rows.js +42 -0
  65. package/lib/commands/role-assistant.js +117 -48
  66. package/lib/commands/search.js +143 -0
  67. package/lib/commands/test-trust-external.js +7 -5
  68. package/lib/commands/upload-sidecar-followups.js +4 -1
  69. package/lib/commands/verify-operations-skip-e2e.js +131 -0
  70. package/lib/commands/verify-operations-step-plan.js +6 -33
  71. package/lib/commands/verify-operations-steps.js +3 -1
  72. package/lib/datasource/capability/relate-operations.js +28 -10
  73. package/lib/datasource/capability/run-capability-relate.js +48 -25
  74. package/lib/datasource/datasource-identifier.js +13 -5
  75. package/lib/deployment/deployer-poll-run.js +117 -35
  76. package/lib/external-system/deploy-dataplane-published.js +70 -0
  77. package/lib/external-system/deploy.js +12 -2
  78. package/lib/external-system/download-role-assistant.js +41 -15
  79. package/lib/external-system/download.js +7 -1
  80. package/lib/generator/wizard-datasource-key.js +54 -0
  81. package/lib/generator/wizard.js +55 -54
  82. package/lib/integration-definition/apply-datasource-keys.js +75 -0
  83. package/lib/integration-definition/apply-relationships.js +195 -0
  84. package/lib/integration-definition/apply-static-enterprise.js +229 -0
  85. package/lib/integration-definition/apply-system-file.js +71 -0
  86. package/lib/integration-definition/apply-test-endpoint.js +89 -0
  87. package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
  88. package/lib/integration-definition/apply.js +78 -59
  89. package/lib/integration-definition/enrich-openapi-operations.js +36 -10
  90. package/lib/integration-definition/enrich-openapi-pick.js +87 -0
  91. package/lib/lifecycle/role-assistant-governance.js +56 -21
  92. package/lib/programmatic/capability-registry.js +1 -0
  93. package/lib/programmatic/index.js +2 -0
  94. package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
  95. package/lib/programmatic/openapi-channel-install-schemas.js +4 -1
  96. package/lib/programmatic/openapi-component-schemas.js +1 -0
  97. package/lib/programmatic/openapi-descriptions.js +9 -3
  98. package/lib/programmatic/openapi-envelope-examples.js +7 -0
  99. package/lib/programmatic/openapi-operation-bindings.js +5 -0
  100. package/lib/programmatic/openapi-request-schemas.js +5 -0
  101. package/lib/programmatic/openapi-schema-descriptions-channel.js +8 -5
  102. package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
  103. package/lib/programmatic/openapi-spec.js +1 -0
  104. package/lib/programmatic/request-timeout.js +3 -0
  105. package/lib/programmatic/route-handler-map.js +7 -0
  106. package/lib/programmatic/run-channel-catalog.js +50 -8
  107. package/lib/programmatic/run-channel-install-options.js +5 -1
  108. package/lib/programmatic/run-download.js +41 -0
  109. package/lib/protection/auth-context.js +3 -1
  110. package/lib/protection/protection-display.js +3 -2
  111. package/lib/protection/report-exit.js +50 -0
  112. package/lib/protection/run-commands.js +2 -0
  113. package/lib/role-assistant/package-validate.js +175 -0
  114. package/lib/role-assistant/test-case-assertion-row.js +36 -0
  115. package/lib/role-assistant/test-case-copy-bind.js +77 -0
  116. package/lib/role-assistant/test-case-copy-expected.js +127 -0
  117. package/lib/role-assistant/test-case-copy-from-work.js +90 -0
  118. package/lib/role-assistant/test-case-copy-interactions.js +67 -0
  119. package/lib/role-assistant/test-case-copy.js +119 -0
  120. package/lib/role-assistant/test-case-expected-catalog.js +135 -0
  121. package/lib/role-assistant/test-case-validate.js +88 -0
  122. package/lib/role-assistant/test-cases-bid.js +117 -4
  123. package/lib/role-assistant/test-cases-evaluate.js +137 -30
  124. package/lib/role-assistant/test-cases-honesty.js +155 -6
  125. package/lib/role-assistant/test-cases-lifecycle.js +291 -0
  126. package/lib/role-assistant/test-cases-search-graph.js +122 -0
  127. package/lib/role-assistant/test-cases-search.js +20 -2
  128. package/lib/role-assistant/test-cases.js +34 -168
  129. package/lib/role-assistant/test-pack-map.js +180 -0
  130. package/lib/role-assistant/test-pack-sync.js +187 -0
  131. package/lib/role-assistant/test-runner-debug.js +54 -0
  132. package/lib/role-assistant/test-runner-respond-body.js +36 -0
  133. package/lib/role-assistant/test-runner-search.js +20 -5
  134. package/lib/role-assistant/test-runner-start-payload.js +63 -10
  135. package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
  136. package/lib/role-assistant/test-runner-workhub.js +45 -21
  137. package/lib/role-assistant/test-runner.js +50 -10
  138. package/lib/schema/external-datasource.schema.json +36 -5
  139. package/lib/schema/external-system.schema.json +20 -2
  140. package/lib/schema/role-assistant-test-case.schema.json +408 -0
  141. package/lib/search/dataplane-context.js +23 -0
  142. package/lib/search/search-args.js +211 -0
  143. package/lib/search/search-display.js +238 -0
  144. package/lib/search/search-errors.js +50 -0
  145. package/lib/search/search-prompts.js +119 -0
  146. package/lib/search/search-roles.js +85 -0
  147. package/lib/search/search-run.js +241 -0
  148. package/lib/search/search-skills.js +198 -0
  149. package/lib/utils/authentication-slot-show.js +153 -0
  150. package/lib/utils/credential-display.js +43 -1
  151. package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
  152. package/lib/utils/external-system-readiness-compact-display.js +30 -1
  153. package/lib/utils/external-system-validators.js +2 -1
  154. package/lib/utils/help-builder.js +3 -1
  155. package/lib/utils/schema-loader.js +37 -0
  156. package/lib/validation/validate-external-file.js +5 -1
  157. package/lib/validation/validate.js +3 -2
  158. package/package.json +1 -1
  159. package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
  160. package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
  161. package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
  162. package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
  163. package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
  164. package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
  165. package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
  166. package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
  167. package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
  168. package/templates/agent-kit/agent-kit.yaml +45 -0
  169. package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
  170. package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
  171. package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
  172. package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
  173. package/templates/agent-kit/parity-inventory.yaml +188 -0
  174. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
  175. package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
  176. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
  177. package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
  178. package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
  179. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
  180. package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
  181. package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
  182. package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
  183. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
  184. package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
  185. package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
  186. package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
  187. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
  188. package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
  189. package/templates/agent-kit/skills/shared/hosts.md +78 -0
  190. package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
  191. package/templates/agent-kit/workspace/LICENSE.mit +21 -0
  192. package/templates/agent-kit/workspace/README.md +89 -0
  193. package/templates/applications/builder-api/Dockerfile +3 -1
  194. package/templates/applications/dataplane/application.yaml +2 -2
  195. package/templates/applications/dataplane/env.template +1 -1
  196. package/templates/applications/dataplane/rbac.yaml +28 -0
  197. package/templates/applications/keycloak/env.template +3 -3
  198. package/templates/applications/miso-controller/application.yaml +1 -1
  199. package/templates/applications/miso-controller/env.template +8 -9
  200. package/templates/channels/claude/TROUBLESHOOTING.md +3 -0
  201. package/templates/channels/claude/channel.json +1 -1
  202. package/templates/channels/claude/install.template.md.hbs +1 -0
  203. package/templates/channels/claude/integration/claude-system.json +1 -1
  204. package/templates/channels/slack/channel.json +11 -0
  205. package/templates/channels/slack/install.template.md.hbs +9 -0
  206. package/templates/channels/slack/integration/slack-system.json +11 -0
  207. package/templates/channels/slack/manifest.template.json.hbs +6 -3
  208. package/templates/channels/teams-bot/channel.json +1 -0
  209. package/templates/python/docker-compose.hbs +14 -0
  210. 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,
@@ -52,7 +52,8 @@ function validateFieldMappingExpression(expression) {
52
52
  'replace',
53
53
  'join',
54
54
  'split',
55
- 'normalizeWhitespace'
55
+ 'normalizeWhitespace',
56
+ 'index'
56
57
  ];
57
58
  for (const trans of transformations) {
58
59
  const transName = trans.split('(')[0].trim();
@@ -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(appName, baseDir, appPath, options) {
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 validateComponentsStep(appName, options),
352
+ components: await validateRoleAssistantPackage(appPath),
352
353
  manifest: skippedValidationStep()
353
354
  }, appPath);
354
355
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aifabrix/builder",
3
- "version": "2.54.1",
3
+ "version": "2.55.0",
4
4
  "description": "AI Fabrix Builder — CLI and developer scripts (pnpm + af)",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -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,5 @@
1
+ # cust-0-plan
2
+
3
+ Compatibility alias for skill **aifabrix-plan**. Optional system key.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-plan` on fresh installs.
@@ -0,0 +1,5 @@
1
+ # cust-1-validate
2
+
3
+ Compatibility alias for skill **aifabrix-connected-system** phase `validate`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-connected-system`.
@@ -0,0 +1,5 @@
1
+ # cust-2-build
2
+
3
+ Compatibility alias for skill **aifabrix-connected-system** phase `build`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-connected-system`.
@@ -0,0 +1,5 @@
1
+ # cust-3-push
2
+
3
+ Compatibility alias for skill **aifabrix-connected-system** phase `publish`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-connected-system`.
@@ -0,0 +1,5 @@
1
+ # cust-biz-1-validate
2
+
3
+ Compatibility alias for skill **aifabrix-prove** phase `validate`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-prove`.
@@ -0,0 +1,5 @@
1
+ # cust-biz-2-build
2
+
3
+ Compatibility alias for skill **aifabrix-prove** phase `build`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-prove`.
@@ -0,0 +1,5 @@
1
+ # cust-biz-3-prove
2
+
3
+ Compatibility alias for skill **aifabrix-prove** phase `prove`.
4
+
5
+ Contains no business rules. Prefer `/aifabrix-prove`.
@@ -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