@aifabrix/builder 2.53.0 → 2.54.1

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 (321) hide show
  1. package/bin/aifabrix.js +2 -2
  2. package/lib/api/assistants.api.js +8 -5
  3. package/lib/api/channel-identity.api.js +41 -0
  4. package/lib/api/evidence-authoring.api.js +5 -1
  5. package/lib/api/evidence.api.js +2 -0
  6. package/lib/api/types/evidence.types.js +2 -0
  7. package/lib/api/work-search.api.js +136 -0
  8. package/lib/channels/add-channel.js +163 -126
  9. package/lib/channels/approval-guides/chatgpt.js +14 -18
  10. package/lib/channels/approval-guides/claude.js +29 -0
  11. package/lib/channels/approval-guides/index.js +88 -22
  12. package/lib/channels/approval-guides/mcp-client.js +27 -0
  13. package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
  14. package/lib/channels/approval-guides/slack.js +10 -10
  15. package/lib/channels/approval-guides/teams-bot.js +8 -12
  16. package/lib/channels/channel-add-continuations.js +91 -0
  17. package/lib/channels/channel-add-ensure.js +124 -27
  18. package/lib/channels/channel-add-existing.js +160 -28
  19. package/lib/channels/channel-add-failure.js +60 -0
  20. package/lib/channels/channel-add-remaining.js +486 -0
  21. package/lib/channels/channel-add-tty.js +190 -0
  22. package/lib/channels/channel-add-wizard-config.js +138 -0
  23. package/lib/channels/channel-add-wizard.js +250 -0
  24. package/lib/channels/channel-artifact-generator.js +27 -13
  25. package/lib/channels/channel-cardinality.js +83 -0
  26. package/lib/channels/channel-catalog-icon.js +45 -0
  27. package/lib/channels/channel-cli-instructions.js +75 -0
  28. package/lib/channels/channel-configuration-map.js +213 -0
  29. package/lib/channels/channel-credential.js +11 -14
  30. package/lib/channels/channel-definition-project.js +101 -0
  31. package/lib/channels/channel-definition-registry.js +154 -0
  32. package/lib/channels/channel-description.js +59 -2
  33. package/lib/channels/channel-discovery.js +16 -2
  34. package/lib/channels/channel-external-system.js +86 -9
  35. package/lib/channels/channel-install-envelope-actions.js +88 -0
  36. package/lib/channels/channel-install-envelope-microsoft.js +155 -0
  37. package/lib/channels/channel-install-envelope.js +356 -0
  38. package/lib/channels/channel-install-help-md.js +172 -0
  39. package/lib/channels/channel-install-http-payload.js +62 -0
  40. package/lib/channels/channel-install-inventory.js +115 -0
  41. package/lib/channels/channel-install-profiles.js +90 -0
  42. package/lib/channels/channel-instance-collision.js +118 -0
  43. package/lib/channels/channel-instance-key.js +100 -0
  44. package/lib/channels/channel-instance-materialize.js +240 -0
  45. package/lib/channels/channel-integration-generator.js +16 -9
  46. package/lib/channels/channel-integration-template.js +101 -22
  47. package/lib/channels/channel-inventory-fetch.js +79 -0
  48. package/lib/channels/channel-oauth-preflight.js +104 -0
  49. package/lib/channels/channel-package-version.js +76 -0
  50. package/lib/channels/channel-predefined-client.js +154 -0
  51. package/lib/channels/channel-probe.js +7 -2
  52. package/lib/channels/channel-runtime-resolver.js +180 -72
  53. package/lib/channels/channel-status-display.js +86 -16
  54. package/lib/channels/channel-targets.js +106 -92
  55. package/lib/channels/chatgpt-callback.js +318 -0
  56. package/lib/channels/chatgpt-channel-add.js +229 -0
  57. package/lib/channels/chatgpt-preflight.js +396 -0
  58. package/lib/channels/chatgpt-runtime-contract.js +17 -0
  59. package/lib/channels/chatgpt-setup-values.js +124 -0
  60. package/lib/channels/claude-callback.js +67 -0
  61. package/lib/channels/claude-channel-add.js +254 -0
  62. package/lib/channels/claude-runtime-contract.js +40 -0
  63. package/lib/channels/claude-runtime.js +58 -0
  64. package/lib/channels/claude-setup-values.js +89 -0
  65. package/lib/channels/mcp-client/config-merge.js +148 -0
  66. package/lib/channels/mcp-client/ensure-client.js +231 -0
  67. package/lib/channels/mcp-client/paths.js +53 -0
  68. package/lib/channels/mcp-client/profiles.js +122 -0
  69. package/lib/channels/mcp-client/redirect-uris.js +99 -0
  70. package/lib/channels/mcp-client/runtime.js +59 -0
  71. package/lib/channels/mcp-client-channel-add.js +186 -0
  72. package/lib/channels/microsoft-copilot-channel-add.js +117 -7
  73. package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
  74. package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
  75. package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
  76. package/lib/channels/microsoft-copilot-package-prior.js +107 -0
  77. package/lib/channels/microsoft-copilot-package.js +29 -28
  78. package/lib/channels/microsoft-provisioning/a365.js +80 -0
  79. package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
  80. package/lib/channels/microsoft-provisioning/auth.js +179 -0
  81. package/lib/channels/microsoft-provisioning/cli.js +71 -0
  82. package/lib/channels/microsoft-provisioning/constants.js +75 -0
  83. package/lib/channels/microsoft-provisioning/errors.js +117 -0
  84. package/lib/channels/microsoft-provisioning/index.js +55 -0
  85. package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
  86. package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
  87. package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
  88. package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
  89. package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
  90. package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
  91. package/lib/channels/microsoft-provisioning/persist.js +110 -0
  92. package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
  93. package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
  94. package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
  95. package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
  96. package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
  97. package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
  98. package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
  99. package/lib/channels/runtime-tool-catalog.js +5 -2
  100. package/lib/channels/slack-channel-add-portal.js +130 -0
  101. package/lib/channels/slack-channel-add-tty-auth.js +95 -0
  102. package/lib/channels/slack-channel-add.js +258 -0
  103. package/lib/channels/slack-provisioning/apps.js +181 -0
  104. package/lib/channels/slack-provisioning/auth-store.js +110 -0
  105. package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
  106. package/lib/channels/slack-provisioning/auth.js +115 -0
  107. package/lib/channels/slack-provisioning/callbacks.js +41 -0
  108. package/lib/channels/slack-provisioning/cli.js +226 -0
  109. package/lib/channels/slack-provisioning/constants.js +37 -0
  110. package/lib/channels/slack-provisioning/credentials.js +169 -0
  111. package/lib/channels/slack-provisioning/curl-shim.js +132 -0
  112. package/lib/channels/slack-provisioning/developer-install.js +118 -0
  113. package/lib/channels/slack-provisioning/env-file.js +120 -0
  114. package/lib/channels/slack-provisioning/errors.js +47 -0
  115. package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
  116. package/lib/channels/slack-provisioning/index.js +250 -0
  117. package/lib/channels/slack-provisioning/install-cli.js +323 -0
  118. package/lib/channels/slack-provisioning/manifest.js +89 -0
  119. package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
  120. package/lib/channels/slack-provisioning/offer-cli.js +113 -0
  121. package/lib/channels/slack-provisioning/onboard-members.js +122 -0
  122. package/lib/channels/slack-provisioning/onboard.js +89 -0
  123. package/lib/channels/slack-provisioning/persist.js +95 -0
  124. package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
  125. package/lib/channels/slack-provisioning/with-curl-on-path.js +48 -0
  126. package/lib/channels/teams-bot-channel-add.js +94 -0
  127. package/lib/channels/vendor-dataplane-url.js +249 -0
  128. package/lib/cli/setup-certification.help.js +2 -0
  129. package/lib/cli/setup-external-system-help.js +2 -0
  130. package/lib/cli/setup-external-system.js +1 -1
  131. package/lib/commands/channel-add-help.js +366 -0
  132. package/lib/commands/channel-add-setup.js +162 -80
  133. package/lib/commands/channel-configure.js +118 -0
  134. package/lib/commands/channel.js +10 -1
  135. package/lib/commands/governance-upload-external.js +6 -3
  136. package/lib/commands/lifecycle-command-action.js +2 -5
  137. package/lib/commands/lifecycle-external.js +93 -21
  138. package/lib/commands/repair-datasource-test-payload.js +4 -2
  139. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
  140. package/lib/commands/repair-datasource.js +3 -0
  141. package/lib/commands/repair-external-run.js +59 -25
  142. package/lib/commands/repair-openapi-rest-runtime.js +127 -0
  143. package/lib/commands/repair-orchestration-tag-merge.js +339 -0
  144. package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
  145. package/lib/commands/repair-rbac-platform-preset.js +26 -15
  146. package/lib/commands/repair-rbac-reader-roles.js +8 -21
  147. package/lib/commands/repair-rbac.js +10 -34
  148. package/lib/commands/repair-system-permissions.js +24 -22
  149. package/lib/commands/role-assistant-test-output.js +14 -0
  150. package/lib/commands/role-assistant.js +59 -21
  151. package/lib/commands/test-e2e-external.js +148 -21
  152. package/lib/commands/upload-credential-push-log.js +2 -1
  153. package/lib/commands/upload-publish-context.js +1 -1
  154. package/lib/commands/upload-role-assistant-shell.js +124 -0
  155. package/lib/commands/upload-sidecar-followups.js +6 -3
  156. package/lib/commands/upload.js +18 -3
  157. package/lib/core/secrets-docker-env.js +4 -1
  158. package/lib/core/secrets-env-content.js +17 -3
  159. package/lib/datasource/capability/capability-manifest.js +0 -3
  160. package/lib/datasource/capability/copy-test-payload.js +3 -0
  161. package/lib/external-system/deploy-helpers.js +26 -1
  162. package/lib/external-system/deploy.js +10 -6
  163. package/lib/external-system/download-helpers.js +29 -2
  164. package/lib/external-system/download-role-assistant.js +83 -4
  165. package/lib/external-system/download.js +40 -30
  166. package/lib/external-system/sync-deploy-manifest.js +3 -2
  167. package/lib/external-system/upload-identity.js +42 -0
  168. package/lib/generator/index.js +19 -15
  169. package/lib/generator/split.js +13 -2
  170. package/lib/lifecycle/role-assistant-governance.js +146 -0
  171. package/lib/lifecycle/scenario-upload.js +181 -30
  172. package/lib/programmatic/builder-api-cors.js +143 -0
  173. package/lib/programmatic/builder-api-request.js +6 -0
  174. package/lib/programmatic/builder-api-route-dispatch.js +56 -42
  175. package/lib/programmatic/builder-api-server.js +8 -1
  176. package/lib/programmatic/capability-registry.js +54 -0
  177. package/lib/programmatic/channel-install-help-resolve.js +359 -0
  178. package/lib/programmatic/channel-install-session.js +218 -0
  179. package/lib/programmatic/help-content/channel-onboarding.md +2 -0
  180. package/lib/programmatic/help-content/cip-overview.md +3 -1
  181. package/lib/programmatic/http-raw-response.js +62 -0
  182. package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
  183. package/lib/programmatic/openapi-channel-install-schemas.js +286 -0
  184. package/lib/programmatic/openapi-component-schemas.js +18 -1
  185. package/lib/programmatic/openapi-description-enricher.js +3 -1
  186. package/lib/programmatic/openapi-descriptions.js +74 -3
  187. package/lib/programmatic/openapi-envelope-examples.js +117 -0
  188. package/lib/programmatic/openapi-operation-bindings.js +4 -1
  189. package/lib/programmatic/openapi-schema-descriptions-channel.js +316 -0
  190. package/lib/programmatic/openapi-spec.js +12 -8
  191. package/lib/programmatic/platform-rbac-catalog.js +36 -18
  192. package/lib/programmatic/route-handler-map.js +51 -1
  193. package/lib/programmatic/route-handlers-context.js +2 -1
  194. package/lib/programmatic/run-auth-permissions.js +54 -0
  195. package/lib/programmatic/run-channel-catalog.js +196 -0
  196. package/lib/programmatic/run-channel-install-artifacts.js +137 -0
  197. package/lib/programmatic/run-channel-install-copilot.js +353 -0
  198. package/lib/programmatic/run-channel-install-options.js +232 -0
  199. package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
  200. package/lib/programmatic/run-channel-install.js +346 -0
  201. package/lib/programmatic/run-channel-package.js +87 -7
  202. package/lib/programmatic/workspace-context.js +2 -0
  203. package/lib/role-assistant/evidence-sync.js +4 -2
  204. package/lib/role-assistant/evidence-validation-issues.js +51 -0
  205. package/lib/role-assistant/knowledge-sync.js +10 -4
  206. package/lib/role-assistant/settings.js +49 -2
  207. package/lib/role-assistant/test-cases-evaluate.js +30 -2
  208. package/lib/role-assistant/test-cases-evidence.js +175 -0
  209. package/lib/role-assistant/test-cases-search.js +229 -0
  210. package/lib/role-assistant/test-cases.js +37 -4
  211. package/lib/role-assistant/test-runner-search.js +149 -0
  212. package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
  213. package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
  214. package/lib/role-assistant/test-runner-workhub.js +29 -11
  215. package/lib/role-assistant/test-runner.js +16 -1
  216. package/lib/schema/external-datasource.schema.json +119 -16
  217. package/lib/schema/external-system.schema.json +159 -2
  218. package/lib/schema/mcp-client-profile.schema.json +103 -0
  219. package/lib/utils/app-path-resolve.js +4 -0
  220. package/lib/utils/authentication-env-template.js +44 -6
  221. package/lib/utils/credential-secrets-env.js +6 -1
  222. package/lib/utils/env-copy.js +19 -7
  223. package/lib/utils/external-env-template.js +20 -2
  224. package/lib/utils/paths.js +18 -1
  225. package/lib/utils/platform-shell-package.js +69 -0
  226. package/lib/utils/port-resolver.js +50 -1
  227. package/lib/utils/rewrite-name-flag.js +20 -0
  228. package/lib/utils/role-assistant-paths.js +13 -10
  229. package/lib/utils/schema-resolver.js +11 -1
  230. package/lib/utils/secrets-helpers.js +12 -21
  231. package/lib/utils/token-manager.js +10 -5
  232. package/lib/validation/validate.js +40 -0
  233. package/package.json +1 -1
  234. package/templates/README.md +1 -1
  235. package/templates/applications/builder-api/Dockerfile +1 -1
  236. package/templates/applications/builder-api/env.template +7 -0
  237. package/templates/applications/dataplane/application.yaml +6 -5
  238. package/templates/applications/dataplane/env.template +2 -2
  239. package/templates/applications/dataplane/rbac.yaml +7 -2
  240. package/templates/applications/keycloak/Dockerfile +30 -4
  241. package/templates/applications/keycloak/application.yaml +2 -2
  242. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
  243. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
  244. package/templates/applications/keycloak/env.template +3 -0
  245. package/templates/applications/miso-controller/application.yaml +1 -2
  246. package/templates/applications/miso-controller/env.template +2 -0
  247. package/templates/channels/README.md +5 -5
  248. package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
  249. package/templates/channels/chatgpt/channel.json +59 -0
  250. package/templates/channels/chatgpt/icon.svg +1 -0
  251. package/templates/channels/chatgpt/install.template.md.hbs +20 -95
  252. package/templates/channels/chatgpt/integration/README.md +1 -1
  253. package/templates/channels/chatgpt/integration/application.json +2 -2
  254. package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
  255. package/templates/channels/chatgpt/integration/env.template +2 -4
  256. package/templates/channels/chatgpt/integration/rbac.json +13 -0
  257. package/templates/channels/claude/TROUBLESHOOTING.md +41 -0
  258. package/templates/channels/claude/channel.json +59 -0
  259. package/templates/channels/claude/icon.svg +1 -0
  260. package/templates/channels/claude/install.template.md.hbs +21 -0
  261. package/templates/channels/claude/integration/README.md +14 -0
  262. package/templates/channels/claude/integration/application.json +15 -0
  263. package/templates/channels/claude/integration/claude-system.json +59 -0
  264. package/templates/channels/claude/integration/env.template +2 -0
  265. package/templates/channels/claude/integration/rbac.json +13 -0
  266. package/templates/channels/claude/manifest.template.json.hbs +40 -0
  267. package/templates/channels/mcp-client/channel.json +72 -0
  268. package/templates/channels/mcp-client/icon.svg +1 -0
  269. package/templates/channels/mcp-client/install.template.md.hbs +24 -0
  270. package/templates/channels/mcp-client/integration/README.md +13 -0
  271. package/templates/channels/mcp-client/integration/application.json +15 -0
  272. package/templates/channels/mcp-client/integration/env.template +2 -0
  273. package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
  274. package/templates/channels/mcp-client/integration/rbac.json +13 -0
  275. package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
  276. package/templates/channels/mcp-client/profiles/cursor.json +26 -0
  277. package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
  278. package/templates/channels/mcp-client/profiles/vscode.json +29 -0
  279. package/templates/channels/microsoft-copilot/channel.json +73 -0
  280. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
  281. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
  282. package/templates/channels/microsoft-copilot/icon.svg +1 -0
  283. package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
  284. package/templates/channels/microsoft-copilot/integration/README.md +1 -1
  285. package/templates/channels/microsoft-copilot/integration/application.json +2 -2
  286. package/templates/channels/microsoft-copilot/integration/env.template +3 -6
  287. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
  288. package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
  289. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
  290. package/templates/channels/slack/channel.json +223 -0
  291. package/templates/channels/slack/icon.svg +1 -0
  292. package/templates/channels/slack/install.template.md.hbs +36 -28
  293. package/templates/channels/slack/integration/README.md +245 -22
  294. package/templates/channels/slack/integration/application.json +44 -7
  295. package/templates/channels/slack/integration/env.template +15 -6
  296. package/templates/channels/slack/integration/openapi/openapi.json +126 -0
  297. package/templates/channels/slack/integration/rbac.json +84 -0
  298. package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
  299. package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
  300. package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
  301. package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
  302. package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
  303. package/templates/channels/slack/integration/slack-system.json +155 -77
  304. package/templates/channels/slack/manifest.template.json.hbs +5 -2
  305. package/templates/channels/teams-bot/channel.json +161 -0
  306. package/templates/channels/teams-bot/icon.svg +1 -0
  307. package/templates/channels/teams-bot/install.template.md.hbs +12 -13
  308. package/templates/channels/teams-bot/integration/README.md +5 -4
  309. package/templates/channels/teams-bot/integration/application.json +6 -4
  310. package/templates/channels/teams-bot/integration/env.template +5 -4
  311. package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
  312. package/templates/channels/teams-bot/integration/rbac.json +21 -0
  313. package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
  314. package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
  315. package/templates/channels/web-embed/channel.json +60 -0
  316. package/templates/channels/web-embed/install.template.md.hbs +1 -1
  317. package/templates/channels/web-embed/integration/README.md +2 -2
  318. package/templates/channels/web-embed/integration/application.json +2 -2
  319. package/templates/channels/web-embed/integration/env.template +1 -1
  320. package/templates/channels/web-embed/integration/rbac.json +13 -0
  321. package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
package/bin/aifabrix.js CHANGED
@@ -17,6 +17,7 @@ const { Command } = require('commander');
17
17
  const cli = require('../lib/cli');
18
18
  const logger = require('../lib/utils/logger');
19
19
  const { buildCategorizedHelp } = require('../lib/utils/help-builder');
20
+ const { rewriteClusteredNameFlag } = require('../lib/utils/rewrite-name-flag');
20
21
  const packageJson = require('../package.json');
21
22
 
22
23
  /**
@@ -47,8 +48,7 @@ More:
47
48
  return buildCategorizedHelp(program) + ROOT_HELP_FOOTER;
48
49
  };
49
50
 
50
- // Parse command line arguments
51
- program.parse();
51
+ program.parse(rewriteClusteredNameFlag(process.argv));
52
52
  }
53
53
 
54
54
  // TODO: Add error handling for CLI initialization
@@ -8,20 +8,23 @@
8
8
 
9
9
  const { createDataplaneApiClient } = require('./index');
10
10
 
11
+ function encodeAssistantPathKey(assistantKey) {
12
+ return encodeURIComponent(String(assistantKey || '').trim());
13
+ }
14
+
11
15
  /**
12
16
  * GET /api/v1/admin/assistants/{assistantKey}
13
17
  * @async
14
18
  * @function getAssistantDetails
15
19
  * @param {string} dataplaneUrl - Dataplane base URL
16
- * @param {string} assistantKey - Role Assistant / digital worker key
20
+ * @param {string} assistantKey - Digital worker system key (exact; never rewritten)
17
21
  * @param {Object} authConfig - Auth config for dataplane client
18
22
  * @returns {Promise<Object>} API response
19
23
  * @requiresPermission {Dataplane} worker:read
20
24
  */
21
25
  async function getAssistantDetails(dataplaneUrl, assistantKey, authConfig) {
22
26
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
23
- const key = encodeURIComponent(String(assistantKey || '').trim());
24
- return await client.get(`/api/v1/admin/assistants/${key}`);
27
+ return await client.get(`/api/v1/admin/assistants/${encodeAssistantPathKey(assistantKey)}`);
25
28
  }
26
29
 
27
30
  /**
@@ -29,7 +32,7 @@ async function getAssistantDetails(dataplaneUrl, assistantKey, authConfig) {
29
32
  * @async
30
33
  * @function updateAssistantSettings
31
34
  * @param {string} dataplaneUrl
32
- * @param {string} assistantKey
35
+ * @param {string} assistantKey - Digital worker system key (exact; never rewritten)
33
36
  * @param {Object} authConfig
34
37
  * @param {Object} body - AssistantSettingsUpdate fields
35
38
  * @returns {Promise<Object>}
@@ -37,7 +40,7 @@ async function getAssistantDetails(dataplaneUrl, assistantKey, authConfig) {
37
40
  */
38
41
  async function updateAssistantSettings(dataplaneUrl, assistantKey, authConfig, body) {
39
42
  const client = createDataplaneApiClient(dataplaneUrl, authConfig);
40
- const key = encodeURIComponent(String(assistantKey || '').trim());
43
+ const key = encodeAssistantPathKey(assistantKey);
41
44
  return await client.patch(`/api/v1/admin/assistants/${key}/settings`, { body });
42
45
  }
43
46
 
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Dataplane channel identity mapping API.
3
+ *
4
+ * @fileoverview Admin batch upsert for Slack/Teams → platform user ids
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { createDataplaneApiClient } = require('./index');
10
+
11
+ const MAPPINGS_ENDPOINT = '/api/v1/assistant/channel-identity/mappings';
12
+
13
+ /**
14
+ * Upsert channel_user_identity rows (matched pairs only).
15
+ * @requiresPermission {Dataplane} worker:update
16
+ * @async
17
+ * @param {string} dataplaneUrl
18
+ * @param {Object} authConfig
19
+ * @param {{ sourceChannel: string, items: Array<{ externalUserId: string, platformUserId: string }> }} body
20
+ * @returns {Promise<{ sourceChannel?: string, linked?: number }>}
21
+ */
22
+ async function upsertChannelIdentityMappings(dataplaneUrl, authConfig, body) {
23
+ if (!dataplaneUrl || typeof dataplaneUrl !== 'string') {
24
+ throw new Error('dataplaneUrl is required and must be a string');
25
+ }
26
+ const items = body && Array.isArray(body.items) ? body.items : [];
27
+ if (items.length === 0) {
28
+ return { sourceChannel: body && body.sourceChannel, linked: 0 };
29
+ }
30
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
31
+ return await client.post(MAPPINGS_ENDPOINT, {
32
+ body: {
33
+ sourceChannel: body.sourceChannel,
34
+ items
35
+ }
36
+ });
37
+ }
38
+
39
+ module.exports = {
40
+ upsertChannelIdentityMappings
41
+ };
@@ -10,6 +10,7 @@ const { createDataplaneApiClient } = require('./index');
10
10
  const { listEvidenceKinds } = require('./evidence-kinds.api');
11
11
  const { listResourceTypes } = require('./resource-types.api');
12
12
  const { getAssistantDetails } = require('./assistants.api');
13
+ const { roleAssistantSystemKey } = require('../utils/role-assistant-paths');
13
14
  const {
14
15
  listEvidence,
15
16
  loadEvidenceBulk,
@@ -191,8 +192,11 @@ async function getEvidenceMetadata(dataplaneUrl, authConfig, roleKey, options =
191
192
  throw new Error('controllerUrl is required for evidence.metadata');
192
193
  }
193
194
 
195
+ // Evidence.roleKey is the business role. Assistant HTTP uses the digital-worker
196
+ // system key (ra-{roleKey}), which is a different resource than a connected system.
197
+ const assistantKey = roleAssistantSystemKey(normalizedRoleKey) || normalizedRoleKey;
194
198
  const [assistantDetails, evidenceKindsRes, resourceTypesRes, evidenceRows] = await Promise.all([
195
- getAssistantDetails(dataplaneUrl, normalizedRoleKey, authConfig),
199
+ getAssistantDetails(dataplaneUrl, assistantKey, authConfig),
196
200
  listEvidenceKinds(options.controllerUrl, authConfig, { page: 1, pageSize: 500 }),
197
201
  listResourceTypes(options.controllerUrl, authConfig, { page: 1, pageSize: 500 }),
198
202
  listEvidence(dataplaneUrl, authConfig, { roleKey: normalizedRoleKey }, options)
@@ -62,6 +62,8 @@ async function listEvidence(dataplaneUrl, authConfig, params = {}, options = {})
62
62
  if (params.roleKey) query.roleKey = params.roleKey;
63
63
  if (params.genericOnly === true) query.genericOnly = true;
64
64
  if (params.status) query.status = params.status;
65
+ if (params.page) query.page = params.page;
66
+ if (params.pageSize) query.pageSize = params.pageSize;
65
67
  const res = assertApiSuccess(
66
68
  await client.get(BASE, { params: query }),
67
69
  'List evidence'
@@ -111,6 +111,8 @@
111
111
  * @property {string} [search]
112
112
  * @property {number} [limit]
113
113
  * @property {number} [offset]
114
+ * @property {number} [page]
115
+ * @property {number} [pageSize]
114
116
  */
115
117
 
116
118
  /**
@@ -0,0 +1,136 @@
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
+ skills: { resourceType: 'work-skills', toolName: 'work_skills.get' },
18
+ search: { resourceType: 'work-search', toolName: 'work_search.create' }
19
+ });
20
+
21
+ function buildLayerBExecutePath(tool) {
22
+ const systemKey = encodeURIComponent(LAYER_B_SYSTEM_KEY);
23
+ const resourceType = encodeURIComponent(tool.resourceType);
24
+ const toolName = encodeURIComponent(tool.toolName);
25
+ return `/api/v1/mcp/servers/${systemKey}/${resourceType}/tools/${toolName}/execute`;
26
+ }
27
+
28
+ function pushText(parts, value) {
29
+ if (typeof value === 'string' && value.trim()) {
30
+ parts.push(value.trim());
31
+ }
32
+ }
33
+
34
+ function extractErrorText(res) {
35
+ const parts = [];
36
+ pushText(parts, res && res.error);
37
+ pushText(parts, res && res.formattedError);
38
+ const data = res && res.errorData;
39
+ if (data && typeof data === 'object') {
40
+ pushText(parts, data.error);
41
+ pushText(parts, data.detail);
42
+ pushText(parts, data.title);
43
+ pushText(parts, data.message);
44
+ }
45
+ return parts.join(' ');
46
+ }
47
+
48
+ function unwrapExecutePayload(res) {
49
+ const body = unwrapApiData(res);
50
+ if (!body || typeof body !== 'object') {
51
+ return body;
52
+ }
53
+ if (body.result && typeof body.result === 'object') {
54
+ return body.result;
55
+ }
56
+ if (body.json && typeof body.json === 'object') {
57
+ return body.json;
58
+ }
59
+ if (body.root && typeof body.root === 'object') {
60
+ return body.root;
61
+ }
62
+ return body;
63
+ }
64
+
65
+ function normalizeLayerBResult(res) {
66
+ const status = Number(res && (res.status || res.statusCode)) || (res && res.success === false ? 0 : 200);
67
+ const payload = unwrapExecutePayload(res);
68
+ const errorText = res && res.success === false ? extractErrorText(res) : '';
69
+ return {
70
+ status,
71
+ payload,
72
+ errorText,
73
+ raw: res
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Execute a Layer B MCP tool.
79
+ * POST /api/v1/mcp/servers/{system}/{resourceType}/tools/{tool}/execute
80
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
81
+ * @async
82
+ * @param {string} dataplaneUrl
83
+ * @param {Object} authConfig
84
+ * @param {{ resourceType: string, toolName: string }} tool
85
+ * @param {Object} [args]
86
+ * @returns {Promise<{ status: number, payload: Object|null, errorText: string, raw: Object }>}
87
+ */
88
+ async function executeLayerBTool(dataplaneUrl, authConfig, tool, args = {}) {
89
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
90
+ const res = await client.post(buildLayerBExecutePath(tool), {
91
+ body: { arguments: args && typeof args === 'object' ? args : {} },
92
+ timeoutMs: SEARCH_TIMEOUT_MS
93
+ });
94
+ return normalizeLayerBResult(res);
95
+ }
96
+
97
+ /**
98
+ * GET-equivalent work.skills for one roleRef.
99
+ * Requests detail=full so search.resourceTypes (executable grammar) is present.
100
+ * Compact summary omits that slice and cannot evaluate named viewpoint ops.
101
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
102
+ * @async
103
+ */
104
+ async function getWorkSkills(dataplaneUrl, authConfig, roleRef) {
105
+ return executeLayerBTool(dataplaneUrl, authConfig, LAYER_B_TOOLS.skills, {
106
+ roleRef: String(roleRef || '').trim(),
107
+ detail: 'full'
108
+ });
109
+ }
110
+
111
+ /**
112
+ * POST-equivalent work.search for one roleRef.
113
+ * @requiresPermission {Dataplane} Authenticated (oauth2: [])
114
+ * @async
115
+ */
116
+ async function searchWork(dataplaneUrl, authConfig, body) {
117
+ return executeLayerBTool(
118
+ dataplaneUrl,
119
+ authConfig,
120
+ LAYER_B_TOOLS.search,
121
+ body && typeof body === 'object' ? body : {}
122
+ );
123
+ }
124
+
125
+ module.exports = {
126
+ LAYER_B_SYSTEM_KEY,
127
+ LAYER_B_TOOLS,
128
+ SEARCH_TIMEOUT_MS,
129
+ buildLayerBExecutePath,
130
+ extractErrorText,
131
+ unwrapExecutePayload,
132
+ normalizeLayerBResult,
133
+ executeLayerBTool,
134
+ getWorkSkills,
135
+ searchWork
136
+ };