@aifabrix/builder 2.53.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 (470) hide show
  1. package/README.md +8 -0
  2. package/bin/aifabrix.js +2 -2
  3. package/lib/agent-kit/apply-ops.js +82 -0
  4. package/lib/agent-kit/checksums.js +28 -0
  5. package/lib/agent-kit/classify.js +113 -0
  6. package/lib/agent-kit/claude-shim.js +61 -0
  7. package/lib/agent-kit/constants.js +55 -0
  8. package/lib/agent-kit/file-list.js +103 -0
  9. package/lib/agent-kit/host-approve.js +130 -0
  10. package/lib/agent-kit/hosting/github.js +63 -0
  11. package/lib/agent-kit/hosts.js +71 -0
  12. package/lib/agent-kit/init.js +319 -0
  13. package/lib/agent-kit/kit-root.js +17 -0
  14. package/lib/agent-kit/managed-section.js +79 -0
  15. package/lib/agent-kit/package-load.js +45 -0
  16. package/lib/agent-kit/plan-ops.js +69 -0
  17. package/lib/agent-kit/remote-prompts.js +239 -0
  18. package/lib/agent-kit/render-host-markdown.js +40 -0
  19. package/lib/agent-kit/repo-guard.js +47 -0
  20. package/lib/agent-kit/report.js +107 -0
  21. package/lib/agent-kit/run.js +82 -0
  22. package/lib/agent-kit/scm/git.js +122 -0
  23. package/lib/agent-kit/state-file.js +83 -0
  24. package/lib/agent-kit/status.js +50 -0
  25. package/lib/agent-kit/v1-detect.js +81 -0
  26. package/lib/agent-kit/validate-kit.js +87 -0
  27. package/lib/agent-kit/workspace-name.js +40 -0
  28. package/lib/agent-kit/workspace-skeleton.js +103 -0
  29. package/lib/api/assistants.api.js +8 -5
  30. package/lib/api/channel-identity.api.js +41 -0
  31. package/lib/api/evidence-authoring.api.js +5 -1
  32. package/lib/api/evidence.api.js +2 -0
  33. package/lib/api/role-assistant-test-pack.api.js +86 -0
  34. package/lib/api/types/evidence.types.js +2 -0
  35. package/lib/api/work-search.api.js +163 -0
  36. package/lib/api/work.api.js +19 -12
  37. package/lib/app/list-external-systems.js +2 -1
  38. package/lib/app/show-display.js +33 -6
  39. package/lib/app/show.js +25 -2
  40. package/lib/channels/add-channel.js +164 -126
  41. package/lib/channels/approval-guides/chatgpt.js +14 -18
  42. package/lib/channels/approval-guides/claude.js +29 -0
  43. package/lib/channels/approval-guides/index.js +88 -22
  44. package/lib/channels/approval-guides/mcp-client.js +27 -0
  45. package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
  46. package/lib/channels/approval-guides/slack.js +10 -10
  47. package/lib/channels/approval-guides/teams-bot.js +8 -12
  48. package/lib/channels/channel-add-continuations.js +91 -0
  49. package/lib/channels/channel-add-ensure.js +124 -27
  50. package/lib/channels/channel-add-existing.js +160 -28
  51. package/lib/channels/channel-add-failure.js +61 -0
  52. package/lib/channels/channel-add-remaining.js +492 -0
  53. package/lib/channels/channel-add-tty.js +190 -0
  54. package/lib/channels/channel-add-wizard-config.js +138 -0
  55. package/lib/channels/channel-add-wizard.js +250 -0
  56. package/lib/channels/channel-artifact-generator.js +27 -13
  57. package/lib/channels/channel-cardinality.js +83 -0
  58. package/lib/channels/channel-catalog-icon.js +45 -0
  59. package/lib/channels/channel-cli-instructions.js +75 -0
  60. package/lib/channels/channel-configuration-map.js +213 -0
  61. package/lib/channels/channel-credential.js +11 -14
  62. package/lib/channels/channel-definition-project.js +101 -0
  63. package/lib/channels/channel-definition-registry.js +154 -0
  64. package/lib/channels/channel-definition-status.js +115 -0
  65. package/lib/channels/channel-description.js +60 -2
  66. package/lib/channels/channel-discovery.js +16 -2
  67. package/lib/channels/channel-external-system.js +86 -9
  68. package/lib/channels/channel-install-envelope-actions.js +88 -0
  69. package/lib/channels/channel-install-envelope-microsoft.js +155 -0
  70. package/lib/channels/channel-install-envelope.js +358 -0
  71. package/lib/channels/channel-install-help-md.js +172 -0
  72. package/lib/channels/channel-install-http-payload.js +62 -0
  73. package/lib/channels/channel-install-inventory.js +115 -0
  74. package/lib/channels/channel-install-profiles.js +90 -0
  75. package/lib/channels/channel-instance-collision.js +118 -0
  76. package/lib/channels/channel-instance-key.js +100 -0
  77. package/lib/channels/channel-instance-materialize.js +240 -0
  78. package/lib/channels/channel-integration-generator.js +18 -9
  79. package/lib/channels/channel-integration-template.js +101 -22
  80. package/lib/channels/channel-inventory-fetch.js +79 -0
  81. package/lib/channels/channel-oauth-preflight.js +104 -0
  82. package/lib/channels/channel-package-version.js +76 -0
  83. package/lib/channels/channel-predefined-client.js +154 -0
  84. package/lib/channels/channel-probe.js +7 -2
  85. package/lib/channels/channel-runtime-resolver.js +194 -72
  86. package/lib/channels/channel-status-display.js +86 -16
  87. package/lib/channels/channel-targets.js +132 -92
  88. package/lib/channels/chatgpt-callback.js +318 -0
  89. package/lib/channels/chatgpt-channel-add.js +229 -0
  90. package/lib/channels/chatgpt-preflight.js +396 -0
  91. package/lib/channels/chatgpt-runtime-contract.js +17 -0
  92. package/lib/channels/chatgpt-setup-values.js +124 -0
  93. package/lib/channels/claude-callback.js +67 -0
  94. package/lib/channels/claude-channel-add.js +254 -0
  95. package/lib/channels/claude-runtime-contract.js +40 -0
  96. package/lib/channels/claude-runtime.js +58 -0
  97. package/lib/channels/claude-setup-values.js +92 -0
  98. package/lib/channels/mcp-client/config-merge.js +148 -0
  99. package/lib/channels/mcp-client/ensure-client.js +231 -0
  100. package/lib/channels/mcp-client/paths.js +53 -0
  101. package/lib/channels/mcp-client/profiles.js +122 -0
  102. package/lib/channels/mcp-client/redirect-uris.js +99 -0
  103. package/lib/channels/mcp-client/runtime.js +59 -0
  104. package/lib/channels/mcp-client-channel-add.js +186 -0
  105. package/lib/channels/microsoft-copilot-channel-add.js +117 -7
  106. package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
  107. package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
  108. package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
  109. package/lib/channels/microsoft-copilot-package-prior.js +107 -0
  110. package/lib/channels/microsoft-copilot-package.js +29 -28
  111. package/lib/channels/microsoft-provisioning/a365.js +80 -0
  112. package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
  113. package/lib/channels/microsoft-provisioning/auth.js +179 -0
  114. package/lib/channels/microsoft-provisioning/cli.js +71 -0
  115. package/lib/channels/microsoft-provisioning/constants.js +75 -0
  116. package/lib/channels/microsoft-provisioning/errors.js +117 -0
  117. package/lib/channels/microsoft-provisioning/index.js +55 -0
  118. package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
  119. package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
  120. package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
  121. package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
  122. package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
  123. package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
  124. package/lib/channels/microsoft-provisioning/persist.js +110 -0
  125. package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
  126. package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
  127. package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
  128. package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
  129. package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
  130. package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
  131. package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
  132. package/lib/channels/runtime-tool-catalog.js +5 -2
  133. package/lib/channels/slack-channel-add-portal.js +130 -0
  134. package/lib/channels/slack-channel-add-tty-auth.js +95 -0
  135. package/lib/channels/slack-channel-add.js +311 -0
  136. package/lib/channels/slack-mcp-callback.js +51 -0
  137. package/lib/channels/slack-mcp-runtime.js +156 -0
  138. package/lib/channels/slack-provisioning/apps.js +181 -0
  139. package/lib/channels/slack-provisioning/auth-store.js +110 -0
  140. package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
  141. package/lib/channels/slack-provisioning/auth.js +115 -0
  142. package/lib/channels/slack-provisioning/callbacks.js +41 -0
  143. package/lib/channels/slack-provisioning/cli.js +226 -0
  144. package/lib/channels/slack-provisioning/constants.js +37 -0
  145. package/lib/channels/slack-provisioning/credentials.js +169 -0
  146. package/lib/channels/slack-provisioning/curl-shim.js +132 -0
  147. package/lib/channels/slack-provisioning/developer-install.js +118 -0
  148. package/lib/channels/slack-provisioning/env-file.js +120 -0
  149. package/lib/channels/slack-provisioning/errors.js +47 -0
  150. package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
  151. package/lib/channels/slack-provisioning/index.js +250 -0
  152. package/lib/channels/slack-provisioning/install-cli.js +335 -0
  153. package/lib/channels/slack-provisioning/manifest.js +89 -0
  154. package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
  155. package/lib/channels/slack-provisioning/offer-cli.js +113 -0
  156. package/lib/channels/slack-provisioning/onboard-members.js +122 -0
  157. package/lib/channels/slack-provisioning/onboard.js +89 -0
  158. package/lib/channels/slack-provisioning/persist.js +95 -0
  159. package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
  160. package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
  161. package/lib/channels/teams-bot-channel-add.js +94 -0
  162. package/lib/channels/vendor-dataplane-url.js +249 -0
  163. package/lib/cli/index.js +4 -0
  164. package/lib/cli/setup-certification-commands.js +2 -2
  165. package/lib/cli/setup-certification.help.js +5 -1
  166. package/lib/cli/setup-external-system-help.js +2 -0
  167. package/lib/cli/setup-external-system.js +1 -1
  168. package/lib/commands/agent-kit-help.js +79 -0
  169. package/lib/commands/agent-kit.js +346 -0
  170. package/lib/commands/channel-add-help.js +366 -0
  171. package/lib/commands/channel-add-setup.js +162 -80
  172. package/lib/commands/channel-configure.js +118 -0
  173. package/lib/commands/channel.js +10 -1
  174. package/lib/commands/datasource-capability-relate-cli.js +5 -4
  175. package/lib/commands/governance-upload-external.js +6 -3
  176. package/lib/commands/lifecycle-command-action.js +2 -5
  177. package/lib/commands/lifecycle-external.js +93 -21
  178. package/lib/commands/repair-auth-apply.js +1 -1
  179. package/lib/commands/repair-datasource-key-skip.js +39 -0
  180. package/lib/commands/repair-datasource-keys.js +24 -12
  181. package/lib/commands/repair-datasource-test-payload.js +4 -2
  182. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
  183. package/lib/commands/repair-datasource.js +3 -0
  184. package/lib/commands/repair-external-run.js +59 -25
  185. package/lib/commands/repair-openapi-rest-runtime.js +127 -0
  186. package/lib/commands/repair-orchestration-tag-merge.js +339 -0
  187. package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
  188. package/lib/commands/repair-rbac-platform-preset.js +26 -15
  189. package/lib/commands/repair-rbac-reader-roles.js +8 -21
  190. package/lib/commands/repair-rbac.js +26 -44
  191. package/lib/commands/repair-system-permissions.js +24 -22
  192. package/lib/commands/role-assistant-copy-output.js +61 -0
  193. package/lib/commands/role-assistant-copy.js +155 -0
  194. package/lib/commands/role-assistant-test-output.js +22 -9
  195. package/lib/commands/role-assistant-test-result-rows.js +42 -0
  196. package/lib/commands/role-assistant.js +150 -43
  197. package/lib/commands/search.js +143 -0
  198. package/lib/commands/test-e2e-external.js +148 -21
  199. package/lib/commands/test-trust-external.js +7 -5
  200. package/lib/commands/upload-credential-push-log.js +2 -1
  201. package/lib/commands/upload-publish-context.js +1 -1
  202. package/lib/commands/upload-role-assistant-shell.js +124 -0
  203. package/lib/commands/upload-sidecar-followups.js +10 -4
  204. package/lib/commands/upload.js +18 -3
  205. package/lib/commands/verify-operations-skip-e2e.js +131 -0
  206. package/lib/commands/verify-operations-step-plan.js +6 -33
  207. package/lib/commands/verify-operations-steps.js +3 -1
  208. package/lib/core/secrets-docker-env.js +4 -1
  209. package/lib/core/secrets-env-content.js +17 -3
  210. package/lib/datasource/capability/capability-manifest.js +0 -3
  211. package/lib/datasource/capability/copy-test-payload.js +3 -0
  212. package/lib/datasource/capability/relate-operations.js +28 -10
  213. package/lib/datasource/capability/run-capability-relate.js +48 -25
  214. package/lib/datasource/datasource-identifier.js +13 -5
  215. package/lib/deployment/deployer-poll-run.js +117 -35
  216. package/lib/external-system/deploy-dataplane-published.js +70 -0
  217. package/lib/external-system/deploy-helpers.js +26 -1
  218. package/lib/external-system/deploy.js +22 -8
  219. package/lib/external-system/download-helpers.js +29 -2
  220. package/lib/external-system/download-role-assistant.js +109 -4
  221. package/lib/external-system/download.js +46 -30
  222. package/lib/external-system/sync-deploy-manifest.js +3 -2
  223. package/lib/external-system/upload-identity.js +42 -0
  224. package/lib/generator/index.js +19 -15
  225. package/lib/generator/split.js +13 -2
  226. package/lib/generator/wizard-datasource-key.js +54 -0
  227. package/lib/generator/wizard.js +55 -54
  228. package/lib/integration-definition/apply-datasource-keys.js +75 -0
  229. package/lib/integration-definition/apply-relationships.js +195 -0
  230. package/lib/integration-definition/apply-static-enterprise.js +229 -0
  231. package/lib/integration-definition/apply-system-file.js +71 -0
  232. package/lib/integration-definition/apply-test-endpoint.js +89 -0
  233. package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
  234. package/lib/integration-definition/apply.js +78 -59
  235. package/lib/integration-definition/enrich-openapi-operations.js +36 -10
  236. package/lib/integration-definition/enrich-openapi-pick.js +87 -0
  237. package/lib/lifecycle/role-assistant-governance.js +181 -0
  238. package/lib/lifecycle/scenario-upload.js +181 -30
  239. package/lib/programmatic/builder-api-cors.js +143 -0
  240. package/lib/programmatic/builder-api-request.js +6 -0
  241. package/lib/programmatic/builder-api-route-dispatch.js +56 -42
  242. package/lib/programmatic/builder-api-server.js +8 -1
  243. package/lib/programmatic/capability-registry.js +55 -0
  244. package/lib/programmatic/channel-install-help-resolve.js +359 -0
  245. package/lib/programmatic/channel-install-session.js +218 -0
  246. package/lib/programmatic/help-content/channel-onboarding.md +2 -0
  247. package/lib/programmatic/help-content/cip-overview.md +3 -1
  248. package/lib/programmatic/http-raw-response.js +62 -0
  249. package/lib/programmatic/index.js +2 -0
  250. package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
  251. package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
  252. package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
  253. package/lib/programmatic/openapi-component-schemas.js +19 -1
  254. package/lib/programmatic/openapi-description-enricher.js +3 -1
  255. package/lib/programmatic/openapi-descriptions.js +80 -3
  256. package/lib/programmatic/openapi-envelope-examples.js +124 -0
  257. package/lib/programmatic/openapi-operation-bindings.js +9 -1
  258. package/lib/programmatic/openapi-request-schemas.js +5 -0
  259. package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
  260. package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
  261. package/lib/programmatic/openapi-spec.js +13 -8
  262. package/lib/programmatic/platform-rbac-catalog.js +36 -18
  263. package/lib/programmatic/request-timeout.js +3 -0
  264. package/lib/programmatic/route-handler-map.js +58 -1
  265. package/lib/programmatic/route-handlers-context.js +2 -1
  266. package/lib/programmatic/run-auth-permissions.js +54 -0
  267. package/lib/programmatic/run-channel-catalog.js +238 -0
  268. package/lib/programmatic/run-channel-install-artifacts.js +137 -0
  269. package/lib/programmatic/run-channel-install-copilot.js +353 -0
  270. package/lib/programmatic/run-channel-install-options.js +236 -0
  271. package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
  272. package/lib/programmatic/run-channel-install.js +346 -0
  273. package/lib/programmatic/run-channel-package.js +87 -7
  274. package/lib/programmatic/run-download.js +41 -0
  275. package/lib/programmatic/workspace-context.js +2 -0
  276. package/lib/protection/auth-context.js +3 -1
  277. package/lib/protection/protection-display.js +3 -2
  278. package/lib/protection/report-exit.js +50 -0
  279. package/lib/protection/run-commands.js +2 -0
  280. package/lib/role-assistant/evidence-sync.js +4 -2
  281. package/lib/role-assistant/evidence-validation-issues.js +51 -0
  282. package/lib/role-assistant/knowledge-sync.js +10 -4
  283. package/lib/role-assistant/package-validate.js +175 -0
  284. package/lib/role-assistant/settings.js +49 -2
  285. package/lib/role-assistant/test-case-assertion-row.js +36 -0
  286. package/lib/role-assistant/test-case-copy-bind.js +77 -0
  287. package/lib/role-assistant/test-case-copy-expected.js +127 -0
  288. package/lib/role-assistant/test-case-copy-from-work.js +90 -0
  289. package/lib/role-assistant/test-case-copy-interactions.js +67 -0
  290. package/lib/role-assistant/test-case-copy.js +119 -0
  291. package/lib/role-assistant/test-case-expected-catalog.js +135 -0
  292. package/lib/role-assistant/test-case-validate.js +88 -0
  293. package/lib/role-assistant/test-cases-bid.js +117 -4
  294. package/lib/role-assistant/test-cases-evaluate.js +159 -24
  295. package/lib/role-assistant/test-cases-evidence.js +175 -0
  296. package/lib/role-assistant/test-cases-honesty.js +155 -6
  297. package/lib/role-assistant/test-cases-lifecycle.js +291 -0
  298. package/lib/role-assistant/test-cases-search-graph.js +122 -0
  299. package/lib/role-assistant/test-cases-search.js +247 -0
  300. package/lib/role-assistant/test-cases.js +71 -172
  301. package/lib/role-assistant/test-pack-map.js +180 -0
  302. package/lib/role-assistant/test-pack-sync.js +187 -0
  303. package/lib/role-assistant/test-runner-debug.js +54 -0
  304. package/lib/role-assistant/test-runner-respond-body.js +36 -0
  305. package/lib/role-assistant/test-runner-search.js +164 -0
  306. package/lib/role-assistant/test-runner-start-payload.js +63 -10
  307. package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
  308. package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
  309. package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
  310. package/lib/role-assistant/test-runner-workhub.js +74 -32
  311. package/lib/role-assistant/test-runner.js +66 -11
  312. package/lib/schema/external-datasource.schema.json +146 -21
  313. package/lib/schema/external-system.schema.json +177 -2
  314. package/lib/schema/mcp-client-profile.schema.json +103 -0
  315. package/lib/schema/role-assistant-test-case.schema.json +408 -0
  316. package/lib/search/dataplane-context.js +23 -0
  317. package/lib/search/search-args.js +211 -0
  318. package/lib/search/search-display.js +238 -0
  319. package/lib/search/search-errors.js +50 -0
  320. package/lib/search/search-prompts.js +119 -0
  321. package/lib/search/search-roles.js +85 -0
  322. package/lib/search/search-run.js +241 -0
  323. package/lib/search/search-skills.js +198 -0
  324. package/lib/utils/app-path-resolve.js +4 -0
  325. package/lib/utils/authentication-env-template.js +44 -6
  326. package/lib/utils/authentication-slot-show.js +153 -0
  327. package/lib/utils/credential-display.js +43 -1
  328. package/lib/utils/credential-secrets-env.js +6 -1
  329. package/lib/utils/env-copy.js +19 -7
  330. package/lib/utils/external-env-template.js +20 -2
  331. package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
  332. package/lib/utils/external-system-readiness-compact-display.js +30 -1
  333. package/lib/utils/external-system-validators.js +2 -1
  334. package/lib/utils/help-builder.js +3 -1
  335. package/lib/utils/paths.js +18 -1
  336. package/lib/utils/platform-shell-package.js +69 -0
  337. package/lib/utils/port-resolver.js +50 -1
  338. package/lib/utils/rewrite-name-flag.js +20 -0
  339. package/lib/utils/role-assistant-paths.js +13 -10
  340. package/lib/utils/schema-loader.js +37 -0
  341. package/lib/utils/schema-resolver.js +11 -1
  342. package/lib/utils/secrets-helpers.js +12 -21
  343. package/lib/utils/token-manager.js +10 -5
  344. package/lib/validation/validate-external-file.js +5 -1
  345. package/lib/validation/validate.js +41 -0
  346. package/package.json +1 -1
  347. package/templates/README.md +1 -1
  348. package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
  349. package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
  350. package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
  351. package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
  352. package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
  353. package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
  354. package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
  355. package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
  356. package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
  357. package/templates/agent-kit/agent-kit.yaml +45 -0
  358. package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
  359. package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
  360. package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
  361. package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
  362. package/templates/agent-kit/parity-inventory.yaml +188 -0
  363. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
  364. package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
  365. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
  366. package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
  367. package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
  368. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
  369. package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
  370. package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
  371. package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
  372. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
  373. package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
  374. package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
  375. package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
  376. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
  377. package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
  378. package/templates/agent-kit/skills/shared/hosts.md +78 -0
  379. package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
  380. package/templates/agent-kit/workspace/LICENSE.mit +21 -0
  381. package/templates/agent-kit/workspace/README.md +89 -0
  382. package/templates/applications/builder-api/Dockerfile +3 -1
  383. package/templates/applications/builder-api/env.template +7 -0
  384. package/templates/applications/dataplane/application.yaml +6 -5
  385. package/templates/applications/dataplane/env.template +2 -2
  386. package/templates/applications/dataplane/rbac.yaml +35 -2
  387. package/templates/applications/keycloak/Dockerfile +30 -4
  388. package/templates/applications/keycloak/application.yaml +2 -2
  389. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
  390. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
  391. package/templates/applications/keycloak/env.template +3 -0
  392. package/templates/applications/miso-controller/application.yaml +1 -2
  393. package/templates/applications/miso-controller/env.template +10 -9
  394. package/templates/channels/README.md +5 -5
  395. package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
  396. package/templates/channels/chatgpt/channel.json +59 -0
  397. package/templates/channels/chatgpt/icon.svg +1 -0
  398. package/templates/channels/chatgpt/install.template.md.hbs +20 -95
  399. package/templates/channels/chatgpt/integration/README.md +1 -1
  400. package/templates/channels/chatgpt/integration/application.json +2 -2
  401. package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
  402. package/templates/channels/chatgpt/integration/env.template +2 -4
  403. package/templates/channels/chatgpt/integration/rbac.json +13 -0
  404. package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
  405. package/templates/channels/claude/channel.json +59 -0
  406. package/templates/channels/claude/icon.svg +1 -0
  407. package/templates/channels/claude/install.template.md.hbs +22 -0
  408. package/templates/channels/claude/integration/README.md +14 -0
  409. package/templates/channels/claude/integration/application.json +15 -0
  410. package/templates/channels/claude/integration/claude-system.json +59 -0
  411. package/templates/channels/claude/integration/env.template +2 -0
  412. package/templates/channels/claude/integration/rbac.json +13 -0
  413. package/templates/channels/claude/manifest.template.json.hbs +40 -0
  414. package/templates/channels/mcp-client/channel.json +72 -0
  415. package/templates/channels/mcp-client/icon.svg +1 -0
  416. package/templates/channels/mcp-client/install.template.md.hbs +24 -0
  417. package/templates/channels/mcp-client/integration/README.md +13 -0
  418. package/templates/channels/mcp-client/integration/application.json +15 -0
  419. package/templates/channels/mcp-client/integration/env.template +2 -0
  420. package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
  421. package/templates/channels/mcp-client/integration/rbac.json +13 -0
  422. package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
  423. package/templates/channels/mcp-client/profiles/cursor.json +26 -0
  424. package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
  425. package/templates/channels/mcp-client/profiles/vscode.json +29 -0
  426. package/templates/channels/microsoft-copilot/channel.json +73 -0
  427. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
  428. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
  429. package/templates/channels/microsoft-copilot/icon.svg +1 -0
  430. package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
  431. package/templates/channels/microsoft-copilot/integration/README.md +1 -1
  432. package/templates/channels/microsoft-copilot/integration/application.json +2 -2
  433. package/templates/channels/microsoft-copilot/integration/env.template +3 -6
  434. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
  435. package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
  436. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
  437. package/templates/channels/slack/channel.json +234 -0
  438. package/templates/channels/slack/icon.svg +1 -0
  439. package/templates/channels/slack/install.template.md.hbs +45 -28
  440. package/templates/channels/slack/integration/README.md +245 -22
  441. package/templates/channels/slack/integration/application.json +44 -7
  442. package/templates/channels/slack/integration/env.template +15 -6
  443. package/templates/channels/slack/integration/openapi/openapi.json +126 -0
  444. package/templates/channels/slack/integration/rbac.json +84 -0
  445. package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
  446. package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
  447. package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
  448. package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
  449. package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
  450. package/templates/channels/slack/integration/slack-system.json +161 -72
  451. package/templates/channels/slack/manifest.template.json.hbs +10 -4
  452. package/templates/channels/teams-bot/channel.json +162 -0
  453. package/templates/channels/teams-bot/icon.svg +1 -0
  454. package/templates/channels/teams-bot/install.template.md.hbs +12 -13
  455. package/templates/channels/teams-bot/integration/README.md +5 -4
  456. package/templates/channels/teams-bot/integration/application.json +6 -4
  457. package/templates/channels/teams-bot/integration/env.template +5 -4
  458. package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
  459. package/templates/channels/teams-bot/integration/rbac.json +21 -0
  460. package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
  461. package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
  462. package/templates/channels/web-embed/channel.json +60 -0
  463. package/templates/channels/web-embed/install.template.md.hbs +1 -1
  464. package/templates/channels/web-embed/integration/README.md +2 -2
  465. package/templates/channels/web-embed/integration/application.json +2 -2
  466. package/templates/channels/web-embed/integration/env.template +1 -1
  467. package/templates/channels/web-embed/integration/rbac.json +13 -0
  468. package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
  469. package/templates/python/docker-compose.hbs +14 -0
  470. package/templates/typescript/docker-compose.hbs +14 -0
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Layer B work.skills / work.search client for role-assistant test cases.
3
+ *
4
+ * @fileoverview Execute governed Role Assistant search tools via Dataplane MCP
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { createDataplaneApiClient } = require('./index');
12
+ const { unwrapApiData } = require('../utils/external-system-readiness-core');
13
+
14
+ const SEARCH_TIMEOUT_MS = 120000;
15
+ const LAYER_B_SYSTEM_KEY = process.env.RUNTIME_ORCHESTRATION_SYSTEM_KEY || 'runtime-orchestration';
16
+ const LAYER_B_TOOLS = Object.freeze({
17
+ roles: { resourceType: 'work-roles', toolName: 'work_roles.list' },
18
+ skills: { resourceType: 'work-skills', toolName: 'work_skills.get' },
19
+ search: { resourceType: 'work-search', toolName: 'work_search.create' }
20
+ });
21
+
22
+ function buildLayerBExecutePath(tool) {
23
+ const systemKey = encodeURIComponent(LAYER_B_SYSTEM_KEY);
24
+ const resourceType = encodeURIComponent(tool.resourceType);
25
+ const toolName = encodeURIComponent(tool.toolName);
26
+ return `/api/v1/mcp/servers/${systemKey}/${resourceType}/tools/${toolName}/execute`;
27
+ }
28
+
29
+ function pushText(parts, value) {
30
+ if (typeof value === 'string' && value.trim()) {
31
+ parts.push(value.trim());
32
+ }
33
+ }
34
+
35
+ function extractErrorText(res) {
36
+ const parts = [];
37
+ pushText(parts, res && res.error);
38
+ pushText(parts, res && res.formattedError);
39
+ const data = res && res.errorData;
40
+ if (data && typeof data === 'object') {
41
+ pushText(parts, data.error);
42
+ pushText(parts, data.detail);
43
+ pushText(parts, data.title);
44
+ pushText(parts, data.message);
45
+ }
46
+ return parts.join(' ');
47
+ }
48
+
49
+ /**
50
+ * MCP execute sometimes wraps a single JSON object as a one-element array.
51
+ * @param {*} value
52
+ * @returns {*}
53
+ */
54
+ function unwrapSingletonObject(value) {
55
+ if (Array.isArray(value) && value.length === 1 && value[0] && typeof value[0] === 'object') {
56
+ return value[0];
57
+ }
58
+ return value;
59
+ }
60
+
61
+ function unwrapExecutePayload(res) {
62
+ const body = unwrapSingletonObject(unwrapApiData(res));
63
+ if (!body || typeof body !== 'object') {
64
+ return body;
65
+ }
66
+ if (body.result && typeof body.result === 'object') {
67
+ return unwrapSingletonObject(body.result);
68
+ }
69
+ if (body.json && typeof body.json === 'object') {
70
+ return unwrapSingletonObject(body.json);
71
+ }
72
+ if (body.root && typeof body.root === 'object') {
73
+ return unwrapSingletonObject(body.root);
74
+ }
75
+ return body;
76
+ }
77
+
78
+ function normalizeLayerBResult(res) {
79
+ const status = Number(res && (res.status || res.statusCode)) || (res && res.success === false ? 0 : 200);
80
+ const payload = unwrapExecutePayload(res);
81
+ const errorText = res && res.success === false ? extractErrorText(res) : '';
82
+ return {
83
+ status,
84
+ payload,
85
+ errorText,
86
+ raw: res
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Execute a Layer B MCP tool.
92
+ * POST /api/v1/mcp/servers/{system}/{resourceType}/tools/{tool}/execute
93
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
94
+ * @async
95
+ * @param {string} dataplaneUrl
96
+ * @param {Object} authConfig
97
+ * @param {{ resourceType: string, toolName: string }} tool
98
+ * @param {Object} [args]
99
+ * @returns {Promise<{ status: number, payload: Object|null, errorText: string, raw: Object }>}
100
+ */
101
+ async function executeLayerBTool(dataplaneUrl, authConfig, tool, args = {}) {
102
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
103
+ const res = await client.post(buildLayerBExecutePath(tool), {
104
+ body: { arguments: args && typeof args === 'object' ? args : {} },
105
+ timeoutMs: SEARCH_TIMEOUT_MS
106
+ });
107
+ return normalizeLayerBResult(res);
108
+ }
109
+
110
+ /**
111
+ * GET-equivalent work.roles for the current caller.
112
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
113
+ * @async
114
+ * @param {string} dataplaneUrl
115
+ * @param {Object} authConfig
116
+ * @returns {Promise<{ status: number, payload: Object|null, errorText: string, raw: Object }>}
117
+ */
118
+ async function getWorkRoles(dataplaneUrl, authConfig) {
119
+ return executeLayerBTool(dataplaneUrl, authConfig, LAYER_B_TOOLS.roles, {});
120
+ }
121
+
122
+ /**
123
+ * GET-equivalent work.skills for one roleRef.
124
+ * Requests detail=full so search.resourceTypes (executable grammar) is present.
125
+ * Compact summary omits that slice and cannot evaluate named viewpoint ops.
126
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
127
+ * @async
128
+ */
129
+ async function getWorkSkills(dataplaneUrl, authConfig, roleRef) {
130
+ return executeLayerBTool(dataplaneUrl, authConfig, LAYER_B_TOOLS.skills, {
131
+ roleRef: String(roleRef || '').trim(),
132
+ detail: 'full'
133
+ });
134
+ }
135
+
136
+ /**
137
+ * POST-equivalent work.search for one roleRef.
138
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
139
+ * @async
140
+ */
141
+ async function searchWork(dataplaneUrl, authConfig, body) {
142
+ return executeLayerBTool(
143
+ dataplaneUrl,
144
+ authConfig,
145
+ LAYER_B_TOOLS.search,
146
+ body && typeof body === 'object' ? body : {}
147
+ );
148
+ }
149
+
150
+ module.exports = {
151
+ LAYER_B_SYSTEM_KEY,
152
+ LAYER_B_TOOLS,
153
+ SEARCH_TIMEOUT_MS,
154
+ buildLayerBExecutePath,
155
+ extractErrorText,
156
+ unwrapSingletonObject,
157
+ unwrapExecutePayload,
158
+ normalizeLayerBResult,
159
+ executeLayerBTool,
160
+ getWorkRoles,
161
+ getWorkSkills,
162
+ searchWork
163
+ };
@@ -7,7 +7,9 @@
7
7
  'use strict';
8
8
 
9
9
  const { createDataplaneApiClient } = require('./index');
10
+ const { throwIfApiFailed } = require('./api-response-errors');
10
11
  const { unwrapApiData } = require('../utils/external-system-readiness-core');
12
+ const { pickHumanRespondBody } = require('../role-assistant/test-runner-respond-body');
11
13
 
12
14
  /** Work Hub plan create runs LLM planning; 30s default is too short under load/reload. */
13
15
  const WORK_PLAN_TIMEOUT_MS = 120000;
@@ -59,7 +61,10 @@ function assertObjectShape(value, fallbackMessage) {
59
61
  */
60
62
  async function startWorkIntent(dataplaneUrl, authConfig, body) {
61
63
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
62
- const res = await client.post('/api/v1/work/start', { body });
64
+ const res = await client.post('/api/v1/work/start', {
65
+ body,
66
+ timeoutMs: WORK_PLAN_TIMEOUT_MS
67
+ });
63
68
  if (res && res.success === false) {
64
69
  throw new Error(extractApiErrorMessage(res, 'work.start request failed'));
65
70
  }
@@ -70,7 +75,7 @@ async function startWorkIntent(dataplaneUrl, authConfig, body) {
70
75
 
71
76
  /**
72
77
  * GET /api/v1/work/executions/{processExecutionId}
73
- * @requiresPermission {Dataplane} worker-task:read
78
+ * @requiresPermission {Dataplane} worker:read
74
79
  * @async
75
80
  * @param {string} dataplaneUrl
76
81
  * @param {Object} authConfig
@@ -80,12 +85,13 @@ async function startWorkIntent(dataplaneUrl, authConfig, body) {
80
85
  async function getWorkExecutionStatus(dataplaneUrl, authConfig, processExecutionId) {
81
86
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
82
87
  const encodedId = encodeURIComponent(String(processExecutionId));
83
- const res = await client.get(`/api/v1/work/executions/${encodedId}`, {
88
+ const endpoint = `/api/v1/work/executions/${encodedId}`;
89
+ const res = await client.get(endpoint, {
84
90
  timeoutMs: WORK_TASK_TIMEOUT_MS
85
91
  });
86
- if (res && res.success === false) {
87
- throw new Error(extractApiErrorMessage(res, 'work.status request failed'));
88
- }
92
+ throwIfApiFailed(res, {
93
+ endpointUrl: `${String(dataplaneUrl || '').replace(/\/$/, '')}${endpoint}`
94
+ });
89
95
  const unwrapped = unwrapWorkPayload(res);
90
96
  assertObjectShape(unwrapped, 'work.status returned an unexpected response shape');
91
97
  return unwrapped;
@@ -105,7 +111,7 @@ async function respondWorkExecution(dataplaneUrl, authConfig, processExecutionId
105
111
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
106
112
  const encodedId = encodeURIComponent(String(processExecutionId));
107
113
  const res = await client.post(`/api/v1/work/executions/${encodedId}/respond`, {
108
- body,
114
+ body: pickHumanRespondBody(body),
109
115
  timeoutMs: WORK_TASK_TIMEOUT_MS
110
116
  });
111
117
  if (res && res.success === false) {
@@ -143,7 +149,7 @@ async function continueWorkExecution(dataplaneUrl, authConfig, processExecutionI
143
149
 
144
150
  /**
145
151
  * GET /api/v1/work/executions/{processExecutionId}/result
146
- * @requiresPermission {Dataplane} worker-task:read
152
+ * @requiresPermission {Dataplane} worker:read
147
153
  * @async
148
154
  * @param {string} dataplaneUrl
149
155
  * @param {Object} authConfig
@@ -154,6 +160,7 @@ async function continueWorkExecution(dataplaneUrl, authConfig, processExecutionI
154
160
  async function getWorkExecutionResult(dataplaneUrl, authConfig, processExecutionId, query = {}) {
155
161
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
156
162
  const encodedId = encodeURIComponent(String(processExecutionId));
163
+ const endpoint = `/api/v1/work/executions/${encodedId}/result`;
157
164
  const params = {};
158
165
  if (query && typeof query === 'object') {
159
166
  if (query.requestedDepth) {
@@ -166,13 +173,13 @@ async function getWorkExecutionResult(dataplaneUrl, authConfig, processExecution
166
173
  params.projection = String(query.projection);
167
174
  }
168
175
  }
169
- const res = await client.get(`/api/v1/work/executions/${encodedId}/result`, {
176
+ const res = await client.get(endpoint, {
170
177
  params,
171
178
  timeoutMs: WORK_TASK_TIMEOUT_MS
172
179
  });
173
- if (res && res.success === false) {
174
- throw new Error(extractApiErrorMessage(res, 'work.result request failed'));
175
- }
180
+ throwIfApiFailed(res, {
181
+ endpointUrl: `${String(dataplaneUrl || '').replace(/\/$/, '')}${endpoint}`
182
+ });
176
183
  const unwrapped = unwrapWorkPayload(res);
177
184
  assertObjectShape(unwrapped, 'work.result returned an unexpected response shape');
178
185
  return unwrapped;
@@ -15,6 +15,7 @@ const { listExternalSystems } = require('../api/external-systems.api');
15
15
  const { formatApiError } = require('../utils/api-error-handler');
16
16
  const { getListAuthToken } = require('./list');
17
17
  const logger = require('../utils/logger');
18
+ const { formatLifecycleLabel } = require('../utils/external-system-readiness-compact-display');
18
19
 
19
20
  /**
20
21
  * Normalize list response shapes from the dataplane API client.
@@ -56,7 +57,7 @@ function displayExternalSystems(systems, environment, dataplaneUrl, json) {
56
57
  systems.forEach((system) => {
57
58
  const key = system.key || system.systemKey || system.id || '—';
58
59
  const displayName = system.displayName || key;
59
- const status = system.status || 'unknown';
60
+ const status = formatLifecycleLabel(system.status || 'unknown');
60
61
  logger.log(`✔ ${chalk.cyan(key)} - ${displayName} (${status})`);
61
62
  });
62
63
  logger.log(chalk.gray(' To show details: aifabrix show <systemKey> --online\n'));
@@ -11,6 +11,11 @@
11
11
 
12
12
  const chalk = require('chalk');
13
13
  const logger = require('../utils/logger');
14
+ const { formatCredentialShowLine } = require('../utils/authentication-slot-show');
15
+ const {
16
+ formatConnectedSystemLifecycleLabel,
17
+ formatLifecycleLabel
18
+ } = require('../utils/external-system-readiness-compact-display');
14
19
 
15
20
  function logSourceAndHeader(summary) {
16
21
  const isOffline = summary.source === 'offline';
@@ -93,14 +98,36 @@ function logApplicationFields(a) {
93
98
  logApplicationOptional(a);
94
99
  }
95
100
 
101
+ /**
102
+ * Draft / Published / Archived only — never controller `active`.
103
+ * @param {Object} a
104
+ * @param {Object} [summary]
105
+ * @returns {string|null}
106
+ */
107
+ function resolveExternalApplicationStatusLabel(a, summary) {
108
+ const ext = summary && summary.externalSystem;
109
+ const fromDataplane = ext && !ext.error ? (ext.status || ext.dataplaneStatus) : null;
110
+ return formatConnectedSystemLifecycleLabel(fromDataplane || a.status);
111
+ }
112
+
113
+ function logExternalApplicationStatus(a, summary) {
114
+ const label = resolveExternalApplicationStatusLabel(a, summary);
115
+ if (label) logger.log(` Status: ${label}`);
116
+ }
117
+
118
+ function formatDataplaneStatusDisplay(status) {
119
+ if (status === undefined || status === null || status === '' || status === '—') return '—';
120
+ return formatConnectedSystemLifecycleLabel(status) || formatLifecycleLabel(status);
121
+ }
122
+
96
123
  /** Application section for online + external: Key, Display name, Description, Deployment, Status (no Type; Dataplane block follows). */
97
- function logApplicationFieldsOnlineExternal(a) {
124
+ function logApplicationFieldsOnlineExternal(a, summary) {
98
125
  logger.log('🧷 Application - external');
99
126
  logger.log(` Key: ${a.key ?? '—'}`);
100
127
  logger.log(` Display name: ${a.displayName ?? '—'}`);
101
128
  logger.log(` Description: ${a.description ?? '—'}`);
102
129
  logger.log(' Deployment: —');
103
- if (a.status !== undefined && a.status !== '—') logger.log(` Status: ${a.status}`);
130
+ logExternalApplicationStatus(a, summary);
104
131
  }
105
132
 
106
133
  /** Application section for offline + external: Key, Display name, Description, Deployment, Status, Version when present. */
@@ -110,7 +137,7 @@ function logApplicationFieldsOfflineExternal(a) {
110
137
  logger.log(` Display name: ${a.displayName ?? '—'}`);
111
138
  logger.log(` Description: ${a.description ?? '—'}`);
112
139
  logger.log(' Deployment: —');
113
- if (a.status !== undefined && a.status !== '—') logger.log(` Status: ${a.status}`);
140
+ logExternalApplicationStatus(a);
114
141
  if (a.version !== undefined && a.version !== null) logger.log(` Version: ${a.version}`);
115
142
  }
116
143
 
@@ -129,7 +156,7 @@ function logApplicationSection(a, summary) {
129
156
  const onlineExternal = summary.source === 'online' && isExternal;
130
157
  const offlineExternal = summary.source === 'offline' && isExternal;
131
158
  if (onlineExternal) {
132
- logApplicationFieldsOnlineExternal(a);
159
+ logApplicationFieldsOnlineExternal(a, summary);
133
160
  } else if (offlineExternal) {
134
161
  logApplicationFieldsOfflineExternal(a);
135
162
  } else {
@@ -205,8 +232,8 @@ function logDatabasesSection(dbNames) {
205
232
  function logExternalSystemMain(ext) {
206
233
  logger.log('🧩 Dataplane');
207
234
  logger.log(` Version: ${ext.version ?? '—'}`);
208
- logger.log(` Credential: ${ext.credentialId ?? '—'}`);
209
- logger.log(` Status: ${ext.status ?? '—'}`);
235
+ logger.log(` Credential: ${formatCredentialShowLine(ext)}`);
236
+ logger.log(` Status: ${formatDataplaneStatusDisplay(ext.status)}`);
210
237
  logger.log(` API docs: ${ext.openApiDocsPageUrl ?? ext.apiDocumentUrl ?? '—'}`);
211
238
  logger.log(` MCP server: ${ext.mcpServerUrl ?? '—'}`);
212
239
  logger.log(` OpenAPI spec: ${ext.apiDocumentUrl ?? '—'}`);
package/lib/app/show.js CHANGED
@@ -33,6 +33,8 @@ const {
33
33
  attachCertificationVerifyFromDataplane,
34
34
  sanitizeCertificationForJson
35
35
  } = require('./certification-show-enrich');
36
+ const { resolveManifestAuthMethod } = require('../utils/external-system-readiness-compact-display');
37
+ const { resolveAuthenticationSlots } = require('../utils/authentication-slot-show');
36
38
 
37
39
  /**
38
40
  * Attach `runReloadDefault` / `runProxyDefault` from ~/.aifabrix `applications.<appKey>`.
@@ -466,6 +468,13 @@ function pickExternalVersion(res, config, system) {
466
468
  return (res && res.version) ?? config.version ?? system.version ?? '—';
467
469
  }
468
470
 
471
+ function pickCredentialMethod(config, system) {
472
+ const source = config && (config.authentication || config.authentications) ? config : system;
473
+ const method = resolveManifestAuthMethod(source);
474
+ if (!method || method === 'unknown') return undefined;
475
+ return method;
476
+ }
477
+
469
478
  function resolveExternalSystemMeta(res, config, system, application, appKey) {
470
479
  return {
471
480
  displayName: pickExternalDisplayName(res, system, application, appKey),
@@ -501,13 +510,27 @@ function buildBaseExternalResult(configData, appKey, openapiFiles, openapiEndpoi
501
510
  permissions: application.permissions
502
511
  },
503
512
  openapiFiles,
504
- openapiEndpoints
513
+ openapiEndpoints,
514
+ credentialMethod: pickCredentialMethod(config, system),
515
+ authenticationSlots: resolveAuthenticationSlots(config, system)
505
516
  };
506
517
  }
507
518
 
519
+ function applyCredentialFieldsToResult(result, res) {
520
+ if (res.credentialId !== undefined && res.credentialId !== null) result.credentialId = res.credentialId;
521
+ if (res.authenticationStatus !== undefined && res.authenticationStatus !== null) {
522
+ result.authenticationStatus = res.authenticationStatus;
523
+ }
524
+ const resConfig = res.config && typeof res.config === 'object' ? res.config : {};
525
+ const fromConfig = pickCredentialMethod(resConfig, {});
526
+ if (fromConfig) result.credentialMethod = fromConfig;
527
+ const fromSlots = resolveAuthenticationSlots(resConfig, {});
528
+ if (fromSlots.length > 0) result.authenticationSlots = fromSlots;
529
+ }
530
+
508
531
  function applySystemResponseToResult(result, res) {
509
532
  result.dataplaneStatus = res.status;
510
- if (res.credentialId !== undefined && res.credentialId !== null) result.credentialId = res.credentialId;
533
+ applyCredentialFieldsToResult(result, res);
511
534
  if (res.showOpenApiDocs !== undefined) result.showOpenApiDocs = res.showOpenApiDocs;
512
535
  if (res.mcpServerUrl !== undefined && res.mcpServerUrl !== null) result.mcpServerUrl = res.mcpServerUrl;
513
536
  if (res.apiDocumentUrl !== undefined && res.apiDocumentUrl !== null) result.apiDocumentUrl = res.apiDocumentUrl;