@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.
- package/README.md +8 -0
- package/bin/aifabrix.js +2 -2
- package/lib/agent-kit/apply-ops.js +82 -0
- package/lib/agent-kit/checksums.js +28 -0
- package/lib/agent-kit/classify.js +113 -0
- package/lib/agent-kit/claude-shim.js +61 -0
- package/lib/agent-kit/constants.js +55 -0
- package/lib/agent-kit/file-list.js +103 -0
- package/lib/agent-kit/host-approve.js +130 -0
- package/lib/agent-kit/hosting/github.js +63 -0
- package/lib/agent-kit/hosts.js +71 -0
- package/lib/agent-kit/init.js +319 -0
- package/lib/agent-kit/kit-root.js +17 -0
- package/lib/agent-kit/managed-section.js +79 -0
- package/lib/agent-kit/package-load.js +45 -0
- package/lib/agent-kit/plan-ops.js +69 -0
- package/lib/agent-kit/remote-prompts.js +239 -0
- package/lib/agent-kit/render-host-markdown.js +40 -0
- package/lib/agent-kit/repo-guard.js +47 -0
- package/lib/agent-kit/report.js +107 -0
- package/lib/agent-kit/run.js +82 -0
- package/lib/agent-kit/scm/git.js +122 -0
- package/lib/agent-kit/state-file.js +83 -0
- package/lib/agent-kit/status.js +50 -0
- package/lib/agent-kit/v1-detect.js +81 -0
- package/lib/agent-kit/validate-kit.js +87 -0
- package/lib/agent-kit/workspace-name.js +40 -0
- package/lib/agent-kit/workspace-skeleton.js +103 -0
- package/lib/api/assistants.api.js +8 -5
- package/lib/api/channel-identity.api.js +41 -0
- package/lib/api/evidence-authoring.api.js +5 -1
- package/lib/api/evidence.api.js +2 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/types/evidence.types.js +2 -0
- package/lib/api/work-search.api.js +163 -0
- package/lib/api/work.api.js +19 -12
- package/lib/app/list-external-systems.js +2 -1
- package/lib/app/show-display.js +33 -6
- package/lib/app/show.js +25 -2
- package/lib/channels/add-channel.js +164 -126
- package/lib/channels/approval-guides/chatgpt.js +14 -18
- package/lib/channels/approval-guides/claude.js +29 -0
- package/lib/channels/approval-guides/index.js +88 -22
- package/lib/channels/approval-guides/mcp-client.js +27 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
- package/lib/channels/approval-guides/slack.js +10 -10
- package/lib/channels/approval-guides/teams-bot.js +8 -12
- package/lib/channels/channel-add-continuations.js +91 -0
- package/lib/channels/channel-add-ensure.js +124 -27
- package/lib/channels/channel-add-existing.js +160 -28
- package/lib/channels/channel-add-failure.js +61 -0
- package/lib/channels/channel-add-remaining.js +492 -0
- package/lib/channels/channel-add-tty.js +190 -0
- package/lib/channels/channel-add-wizard-config.js +138 -0
- package/lib/channels/channel-add-wizard.js +250 -0
- package/lib/channels/channel-artifact-generator.js +27 -13
- package/lib/channels/channel-cardinality.js +83 -0
- package/lib/channels/channel-catalog-icon.js +45 -0
- package/lib/channels/channel-cli-instructions.js +75 -0
- package/lib/channels/channel-configuration-map.js +213 -0
- package/lib/channels/channel-credential.js +11 -14
- package/lib/channels/channel-definition-project.js +101 -0
- package/lib/channels/channel-definition-registry.js +154 -0
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +60 -2
- package/lib/channels/channel-discovery.js +16 -2
- package/lib/channels/channel-external-system.js +86 -9
- package/lib/channels/channel-install-envelope-actions.js +88 -0
- package/lib/channels/channel-install-envelope-microsoft.js +155 -0
- package/lib/channels/channel-install-envelope.js +358 -0
- package/lib/channels/channel-install-help-md.js +172 -0
- package/lib/channels/channel-install-http-payload.js +62 -0
- package/lib/channels/channel-install-inventory.js +115 -0
- package/lib/channels/channel-install-profiles.js +90 -0
- package/lib/channels/channel-instance-collision.js +118 -0
- package/lib/channels/channel-instance-key.js +100 -0
- package/lib/channels/channel-instance-materialize.js +240 -0
- package/lib/channels/channel-integration-generator.js +18 -9
- package/lib/channels/channel-integration-template.js +101 -22
- package/lib/channels/channel-inventory-fetch.js +79 -0
- package/lib/channels/channel-oauth-preflight.js +104 -0
- package/lib/channels/channel-package-version.js +76 -0
- package/lib/channels/channel-predefined-client.js +154 -0
- package/lib/channels/channel-probe.js +7 -2
- package/lib/channels/channel-runtime-resolver.js +194 -72
- package/lib/channels/channel-status-display.js +86 -16
- package/lib/channels/channel-targets.js +132 -92
- package/lib/channels/chatgpt-callback.js +318 -0
- package/lib/channels/chatgpt-channel-add.js +229 -0
- package/lib/channels/chatgpt-preflight.js +396 -0
- package/lib/channels/chatgpt-runtime-contract.js +17 -0
- package/lib/channels/chatgpt-setup-values.js +124 -0
- package/lib/channels/claude-callback.js +67 -0
- package/lib/channels/claude-channel-add.js +254 -0
- package/lib/channels/claude-runtime-contract.js +40 -0
- package/lib/channels/claude-runtime.js +58 -0
- package/lib/channels/claude-setup-values.js +92 -0
- package/lib/channels/mcp-client/config-merge.js +148 -0
- package/lib/channels/mcp-client/ensure-client.js +231 -0
- package/lib/channels/mcp-client/paths.js +53 -0
- package/lib/channels/mcp-client/profiles.js +122 -0
- package/lib/channels/mcp-client/redirect-uris.js +99 -0
- package/lib/channels/mcp-client/runtime.js +59 -0
- package/lib/channels/mcp-client-channel-add.js +186 -0
- package/lib/channels/microsoft-copilot-channel-add.js +117 -7
- package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
- package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
- package/lib/channels/microsoft-copilot-package-prior.js +107 -0
- package/lib/channels/microsoft-copilot-package.js +29 -28
- package/lib/channels/microsoft-provisioning/a365.js +80 -0
- package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
- package/lib/channels/microsoft-provisioning/auth.js +179 -0
- package/lib/channels/microsoft-provisioning/cli.js +71 -0
- package/lib/channels/microsoft-provisioning/constants.js +75 -0
- package/lib/channels/microsoft-provisioning/errors.js +117 -0
- package/lib/channels/microsoft-provisioning/index.js +55 -0
- package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
- package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
- package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
- package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
- package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
- package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
- package/lib/channels/microsoft-provisioning/persist.js +110 -0
- package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
- package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
- package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
- package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
- package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
- package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
- package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
- package/lib/channels/runtime-tool-catalog.js +5 -2
- package/lib/channels/slack-channel-add-portal.js +130 -0
- package/lib/channels/slack-channel-add-tty-auth.js +95 -0
- package/lib/channels/slack-channel-add.js +311 -0
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/apps.js +181 -0
- package/lib/channels/slack-provisioning/auth-store.js +110 -0
- package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
- package/lib/channels/slack-provisioning/auth.js +115 -0
- package/lib/channels/slack-provisioning/callbacks.js +41 -0
- package/lib/channels/slack-provisioning/cli.js +226 -0
- package/lib/channels/slack-provisioning/constants.js +37 -0
- package/lib/channels/slack-provisioning/credentials.js +169 -0
- package/lib/channels/slack-provisioning/curl-shim.js +132 -0
- package/lib/channels/slack-provisioning/developer-install.js +118 -0
- package/lib/channels/slack-provisioning/env-file.js +120 -0
- package/lib/channels/slack-provisioning/errors.js +47 -0
- package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
- package/lib/channels/slack-provisioning/index.js +250 -0
- package/lib/channels/slack-provisioning/install-cli.js +335 -0
- package/lib/channels/slack-provisioning/manifest.js +89 -0
- package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
- package/lib/channels/slack-provisioning/offer-cli.js +113 -0
- package/lib/channels/slack-provisioning/onboard-members.js +122 -0
- package/lib/channels/slack-provisioning/onboard.js +89 -0
- package/lib/channels/slack-provisioning/persist.js +95 -0
- package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
- package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
- package/lib/channels/teams-bot-channel-add.js +94 -0
- package/lib/channels/vendor-dataplane-url.js +249 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +5 -1
- package/lib/cli/setup-external-system-help.js +2 -0
- package/lib/cli/setup-external-system.js +1 -1
- package/lib/commands/agent-kit-help.js +79 -0
- package/lib/commands/agent-kit.js +346 -0
- package/lib/commands/channel-add-help.js +366 -0
- package/lib/commands/channel-add-setup.js +162 -80
- package/lib/commands/channel-configure.js +118 -0
- package/lib/commands/channel.js +10 -1
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/governance-upload-external.js +6 -3
- package/lib/commands/lifecycle-command-action.js +2 -5
- package/lib/commands/lifecycle-external.js +93 -21
- package/lib/commands/repair-auth-apply.js +1 -1
- package/lib/commands/repair-datasource-key-skip.js +39 -0
- package/lib/commands/repair-datasource-keys.js +24 -12
- package/lib/commands/repair-datasource-test-payload.js +4 -2
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
- package/lib/commands/repair-datasource.js +3 -0
- package/lib/commands/repair-external-run.js +59 -25
- package/lib/commands/repair-openapi-rest-runtime.js +127 -0
- package/lib/commands/repair-orchestration-tag-merge.js +339 -0
- package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
- package/lib/commands/repair-rbac-platform-preset.js +26 -15
- package/lib/commands/repair-rbac-reader-roles.js +8 -21
- package/lib/commands/repair-rbac.js +26 -44
- package/lib/commands/repair-system-permissions.js +24 -22
- package/lib/commands/role-assistant-copy-output.js +61 -0
- package/lib/commands/role-assistant-copy.js +155 -0
- package/lib/commands/role-assistant-test-output.js +22 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +150 -43
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-e2e-external.js +148 -21
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-credential-push-log.js +2 -1
- package/lib/commands/upload-publish-context.js +1 -1
- package/lib/commands/upload-role-assistant-shell.js +124 -0
- package/lib/commands/upload-sidecar-followups.js +10 -4
- package/lib/commands/upload.js +18 -3
- package/lib/commands/verify-operations-skip-e2e.js +131 -0
- package/lib/commands/verify-operations-step-plan.js +6 -33
- package/lib/commands/verify-operations-steps.js +3 -1
- package/lib/core/secrets-docker-env.js +4 -1
- package/lib/core/secrets-env-content.js +17 -3
- package/lib/datasource/capability/capability-manifest.js +0 -3
- package/lib/datasource/capability/copy-test-payload.js +3 -0
- package/lib/datasource/capability/relate-operations.js +28 -10
- package/lib/datasource/capability/run-capability-relate.js +48 -25
- package/lib/datasource/datasource-identifier.js +13 -5
- package/lib/deployment/deployer-poll-run.js +117 -35
- package/lib/external-system/deploy-dataplane-published.js +70 -0
- package/lib/external-system/deploy-helpers.js +26 -1
- package/lib/external-system/deploy.js +22 -8
- package/lib/external-system/download-helpers.js +29 -2
- package/lib/external-system/download-role-assistant.js +109 -4
- package/lib/external-system/download.js +46 -30
- package/lib/external-system/sync-deploy-manifest.js +3 -2
- package/lib/external-system/upload-identity.js +42 -0
- package/lib/generator/index.js +19 -15
- package/lib/generator/split.js +13 -2
- package/lib/generator/wizard-datasource-key.js +54 -0
- package/lib/generator/wizard.js +55 -54
- package/lib/integration-definition/apply-datasource-keys.js +75 -0
- package/lib/integration-definition/apply-relationships.js +195 -0
- package/lib/integration-definition/apply-static-enterprise.js +229 -0
- package/lib/integration-definition/apply-system-file.js +71 -0
- package/lib/integration-definition/apply-test-endpoint.js +89 -0
- package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
- package/lib/integration-definition/apply.js +78 -59
- package/lib/integration-definition/enrich-openapi-operations.js +36 -10
- package/lib/integration-definition/enrich-openapi-pick.js +87 -0
- package/lib/lifecycle/role-assistant-governance.js +181 -0
- package/lib/lifecycle/scenario-upload.js +181 -30
- package/lib/programmatic/builder-api-cors.js +143 -0
- package/lib/programmatic/builder-api-request.js +6 -0
- package/lib/programmatic/builder-api-route-dispatch.js +56 -42
- package/lib/programmatic/builder-api-server.js +8 -1
- package/lib/programmatic/capability-registry.js +55 -0
- package/lib/programmatic/channel-install-help-resolve.js +359 -0
- package/lib/programmatic/channel-install-session.js +218 -0
- package/lib/programmatic/help-content/channel-onboarding.md +2 -0
- package/lib/programmatic/help-content/cip-overview.md +3 -1
- package/lib/programmatic/http-raw-response.js +62 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
- package/lib/programmatic/openapi-component-schemas.js +19 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +80 -3
- package/lib/programmatic/openapi-envelope-examples.js +124 -0
- package/lib/programmatic/openapi-operation-bindings.js +9 -1
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +13 -8
- package/lib/programmatic/platform-rbac-catalog.js +36 -18
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +58 -1
- package/lib/programmatic/route-handlers-context.js +2 -1
- package/lib/programmatic/run-auth-permissions.js +54 -0
- package/lib/programmatic/run-channel-catalog.js +238 -0
- package/lib/programmatic/run-channel-install-artifacts.js +137 -0
- package/lib/programmatic/run-channel-install-copilot.js +353 -0
- package/lib/programmatic/run-channel-install-options.js +236 -0
- package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
- package/lib/programmatic/run-channel-install.js +346 -0
- package/lib/programmatic/run-channel-package.js +87 -7
- package/lib/programmatic/run-download.js +41 -0
- package/lib/programmatic/workspace-context.js +2 -0
- package/lib/protection/auth-context.js +3 -1
- package/lib/protection/protection-display.js +3 -2
- package/lib/protection/report-exit.js +50 -0
- package/lib/protection/run-commands.js +2 -0
- package/lib/role-assistant/evidence-sync.js +4 -2
- package/lib/role-assistant/evidence-validation-issues.js +51 -0
- package/lib/role-assistant/knowledge-sync.js +10 -4
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/settings.js +49 -2
- package/lib/role-assistant/test-case-assertion-row.js +36 -0
- package/lib/role-assistant/test-case-copy-bind.js +77 -0
- package/lib/role-assistant/test-case-copy-expected.js +127 -0
- package/lib/role-assistant/test-case-copy-from-work.js +90 -0
- package/lib/role-assistant/test-case-copy-interactions.js +67 -0
- package/lib/role-assistant/test-case-copy.js +119 -0
- package/lib/role-assistant/test-case-expected-catalog.js +135 -0
- package/lib/role-assistant/test-case-validate.js +88 -0
- package/lib/role-assistant/test-cases-bid.js +117 -4
- package/lib/role-assistant/test-cases-evaluate.js +159 -24
- package/lib/role-assistant/test-cases-evidence.js +175 -0
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +291 -0
- package/lib/role-assistant/test-cases-search-graph.js +122 -0
- package/lib/role-assistant/test-cases-search.js +247 -0
- package/lib/role-assistant/test-cases.js +71 -172
- package/lib/role-assistant/test-pack-map.js +180 -0
- package/lib/role-assistant/test-pack-sync.js +187 -0
- package/lib/role-assistant/test-runner-debug.js +54 -0
- package/lib/role-assistant/test-runner-respond-body.js +36 -0
- package/lib/role-assistant/test-runner-search.js +164 -0
- package/lib/role-assistant/test-runner-start-payload.js +63 -10
- package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
- package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
- package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
- package/lib/role-assistant/test-runner-workhub.js +74 -32
- package/lib/role-assistant/test-runner.js +66 -11
- package/lib/schema/external-datasource.schema.json +146 -21
- package/lib/schema/external-system.schema.json +177 -2
- package/lib/schema/mcp-client-profile.schema.json +103 -0
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- package/lib/search/dataplane-context.js +23 -0
- package/lib/search/search-args.js +211 -0
- package/lib/search/search-display.js +238 -0
- package/lib/search/search-errors.js +50 -0
- package/lib/search/search-prompts.js +119 -0
- package/lib/search/search-roles.js +85 -0
- package/lib/search/search-run.js +241 -0
- package/lib/search/search-skills.js +198 -0
- package/lib/utils/app-path-resolve.js +4 -0
- package/lib/utils/authentication-env-template.js +44 -6
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/credential-secrets-env.js +6 -1
- package/lib/utils/env-copy.js +19 -7
- package/lib/utils/external-env-template.js +20 -2
- package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
- package/lib/utils/external-system-readiness-compact-display.js +30 -1
- package/lib/utils/external-system-validators.js +2 -1
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/paths.js +18 -1
- package/lib/utils/platform-shell-package.js +69 -0
- package/lib/utils/port-resolver.js +50 -1
- package/lib/utils/rewrite-name-flag.js +20 -0
- package/lib/utils/role-assistant-paths.js +13 -10
- package/lib/utils/schema-loader.js +37 -0
- package/lib/utils/schema-resolver.js +11 -1
- package/lib/utils/secrets-helpers.js +12 -21
- package/lib/utils/token-manager.js +10 -5
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +41 -0
- package/package.json +1 -1
- package/templates/README.md +1 -1
- package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
- package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
- package/templates/agent-kit/agent-kit.yaml +45 -0
- package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
- package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
- package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
- package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
- package/templates/agent-kit/parity-inventory.yaml +188 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +78 -0
- package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
- package/templates/agent-kit/workspace/LICENSE.mit +21 -0
- package/templates/agent-kit/workspace/README.md +89 -0
- package/templates/applications/builder-api/Dockerfile +3 -1
- package/templates/applications/builder-api/env.template +7 -0
- package/templates/applications/dataplane/application.yaml +6 -5
- package/templates/applications/dataplane/env.template +2 -2
- package/templates/applications/dataplane/rbac.yaml +35 -2
- package/templates/applications/keycloak/Dockerfile +30 -4
- package/templates/applications/keycloak/application.yaml +2 -2
- package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
- package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
- package/templates/applications/keycloak/env.template +3 -0
- package/templates/applications/miso-controller/application.yaml +1 -2
- package/templates/applications/miso-controller/env.template +10 -9
- package/templates/channels/README.md +5 -5
- package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
- package/templates/channels/chatgpt/channel.json +59 -0
- package/templates/channels/chatgpt/icon.svg +1 -0
- package/templates/channels/chatgpt/install.template.md.hbs +20 -95
- package/templates/channels/chatgpt/integration/README.md +1 -1
- package/templates/channels/chatgpt/integration/application.json +2 -2
- package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
- package/templates/channels/chatgpt/integration/env.template +2 -4
- package/templates/channels/chatgpt/integration/rbac.json +13 -0
- package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
- package/templates/channels/claude/channel.json +59 -0
- package/templates/channels/claude/icon.svg +1 -0
- package/templates/channels/claude/install.template.md.hbs +22 -0
- package/templates/channels/claude/integration/README.md +14 -0
- package/templates/channels/claude/integration/application.json +15 -0
- package/templates/channels/claude/integration/claude-system.json +59 -0
- package/templates/channels/claude/integration/env.template +2 -0
- package/templates/channels/claude/integration/rbac.json +13 -0
- package/templates/channels/claude/manifest.template.json.hbs +40 -0
- package/templates/channels/mcp-client/channel.json +72 -0
- package/templates/channels/mcp-client/icon.svg +1 -0
- package/templates/channels/mcp-client/install.template.md.hbs +24 -0
- package/templates/channels/mcp-client/integration/README.md +13 -0
- package/templates/channels/mcp-client/integration/application.json +15 -0
- package/templates/channels/mcp-client/integration/env.template +2 -0
- package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
- package/templates/channels/mcp-client/integration/rbac.json +13 -0
- package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
- package/templates/channels/mcp-client/profiles/cursor.json +26 -0
- package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
- package/templates/channels/mcp-client/profiles/vscode.json +29 -0
- package/templates/channels/microsoft-copilot/channel.json +73 -0
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
- package/templates/channels/microsoft-copilot/icon.svg +1 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
- package/templates/channels/microsoft-copilot/integration/README.md +1 -1
- package/templates/channels/microsoft-copilot/integration/application.json +2 -2
- package/templates/channels/microsoft-copilot/integration/env.template +3 -6
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
- package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
- package/templates/channels/slack/channel.json +234 -0
- package/templates/channels/slack/icon.svg +1 -0
- package/templates/channels/slack/install.template.md.hbs +45 -28
- package/templates/channels/slack/integration/README.md +245 -22
- package/templates/channels/slack/integration/application.json +44 -7
- package/templates/channels/slack/integration/env.template +15 -6
- package/templates/channels/slack/integration/openapi/openapi.json +126 -0
- package/templates/channels/slack/integration/rbac.json +84 -0
- package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
- package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
- package/templates/channels/slack/integration/slack-system.json +161 -72
- package/templates/channels/slack/manifest.template.json.hbs +10 -4
- package/templates/channels/teams-bot/channel.json +162 -0
- package/templates/channels/teams-bot/icon.svg +1 -0
- package/templates/channels/teams-bot/install.template.md.hbs +12 -13
- package/templates/channels/teams-bot/integration/README.md +5 -4
- package/templates/channels/teams-bot/integration/application.json +6 -4
- package/templates/channels/teams-bot/integration/env.template +5 -4
- package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
- package/templates/channels/teams-bot/integration/rbac.json +21 -0
- package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
- package/templates/channels/web-embed/channel.json +60 -0
- package/templates/channels/web-embed/install.template.md.hbs +1 -1
- package/templates/channels/web-embed/integration/README.md +2 -2
- package/templates/channels/web-embed/integration/application.json +2 -2
- package/templates/channels/web-embed/integration/env.template +1 -1
- package/templates/channels/web-embed/integration/rbac.json +13 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -34,6 +34,12 @@ const {
|
|
|
34
34
|
mergeCaseExecutionIntoLifecycleResult,
|
|
35
35
|
lifecycleVerdictFromCaseExecution
|
|
36
36
|
} = require('../role-assistant/test-runner');
|
|
37
|
+
const { assertRoleAssistantEvidencePreflight } = require('../role-assistant/test-cases-evidence');
|
|
38
|
+
const { assertLocalCasesBeforeAuth } = require('../role-assistant/test-case-validate');
|
|
39
|
+
const {
|
|
40
|
+
loadPublishedTestsIntoOptions,
|
|
41
|
+
patchCaseStatusAfterRun
|
|
42
|
+
} = require('../role-assistant/test-pack-sync');
|
|
37
43
|
const { collectString } = require('./governance');
|
|
38
44
|
const {
|
|
39
45
|
sectionTitle,
|
|
@@ -49,11 +55,13 @@ const {
|
|
|
49
55
|
bareRoleKey,
|
|
50
56
|
roleAssistantSystemKey
|
|
51
57
|
} = require('../utils/role-assistant-paths');
|
|
58
|
+
const { registerRoleAssistantCopyCommand } = require('./role-assistant-copy');
|
|
52
59
|
|
|
53
60
|
function roleAssistantGroupHelpAfter() {
|
|
54
61
|
return `
|
|
55
62
|
Subcommands:
|
|
56
63
|
test <roleKey> Run lifecycle checks, optional YAML cases/suites, and print a portal deep link
|
|
64
|
+
copy <roleKey> Capture one Work Hub execution as a local YAML test case
|
|
57
65
|
|
|
58
66
|
Package workspace (top-level commands — same digital-worker package):
|
|
59
67
|
download / validate / upload / deploy <roleKey> Manage role-assistant/ra-<roleKey>/
|
|
@@ -63,13 +71,16 @@ Examples:
|
|
|
63
71
|
$ aifabrix role-assistant test customer-support-bot --suite 001
|
|
64
72
|
$ aifabrix role-assistant test customer-support-bot --list-cases
|
|
65
73
|
$ aifabrix role-assistant test customer-support-bot --env tst --json
|
|
74
|
+
$ aifabrix role-assistant copy customer-support-bot --suite 001 --reference a9f09fb8-d9eb-477f-8bb4-59e670fc82a4
|
|
66
75
|
$ aifabrix upload customer-support-bot --env dev
|
|
67
76
|
$ aifabrix test ra-customer-support-bot
|
|
68
77
|
|
|
69
78
|
Notes:
|
|
70
79
|
- Local packages live under role-assistant/ra-<roleKey>/ (bare <roleKey> in CLI args).
|
|
71
80
|
- test uses the public/running worker by default; pass --publish (or upload) to refresh from local files.
|
|
81
|
+
- copy writes tests/<suite>/<caseId>.yaml from a Work Hub execution id; it does not publish.
|
|
72
82
|
- See: aifabrix role-assistant test -h
|
|
83
|
+
- See: aifabrix role-assistant copy -h
|
|
73
84
|
`;
|
|
74
85
|
}
|
|
75
86
|
|
|
@@ -83,6 +94,7 @@ Examples:
|
|
|
83
94
|
$ aifabrix role-assistant test customer-support-bot --suite 001
|
|
84
95
|
$ aifabrix role-assistant test customer-support-bot --list-cases
|
|
85
96
|
$ aifabrix role-assistant test customer-support-bot --suite 001 --fail-fast --json
|
|
97
|
+
$ aifabrix role-assistant test customer-support-bot --from-dataplane
|
|
86
98
|
$ aifabrix test ra-customer-support-bot
|
|
87
99
|
|
|
88
100
|
Notes:
|
|
@@ -91,8 +103,14 @@ Notes:
|
|
|
91
103
|
- Use \`aifabrix upload <roleKey> --env …\` (or \`--publish\`) when you intentionally refresh the package.
|
|
92
104
|
- Runs lifecycle checks, then prints a portal deep link for full step-by-step status.
|
|
93
105
|
- Case files with input.message/input.content execute Work Hub plan→accept (or work.start when executionPath: intent).
|
|
106
|
+
- Cases with executionPath: search|skills (input.executionPath or case-root executionPath) run work.skills / work.search instead of Work Hub.
|
|
107
|
+
- After each case, current status is stored on the published test pack (passed, failed, or skipped).
|
|
108
|
+
- --from-dataplane loads published tests, then runs them (all suites unless --case / --suite is set).
|
|
109
|
+
- Role Assistant packages do not need application.yaml; test uses device login and the published dataplane worker.
|
|
110
|
+
- Cases with preflight.evidence.requiredKeys read live Evidence from the dataplane before start and hard-stop if those keys are missing or not active.
|
|
94
111
|
- answers[] and approvals[] are matched to runtime wait payloads (questionKey/requestKey/waitReason).
|
|
95
112
|
- --suite runs YAML under role-assistant/ra-<roleKey>/tests/<suite>/ (preferred), or tests/ra-<roleKey>/<roleKey>/<suite>/, or legacy tests/role-assistant/ra-<roleKey>/<suite>/ (override with --cases-root).
|
|
113
|
+
- --subject-email / --subject-user-id isolate Work Hub cases (repeatable). They do not generate Connected System governance packs and do not require application.yaml.
|
|
96
114
|
- Use the portal URL for detailed human review while automation reads CLI/JSON output.
|
|
97
115
|
`;
|
|
98
116
|
}
|
|
@@ -133,6 +151,7 @@ function normalizeRoleAssistantTestOptions(options, cmd) {
|
|
|
133
151
|
casesRoot: trimOptionalString(options.casesRoot),
|
|
134
152
|
listCases: optionOrFlag(options, 'listCases', cmd, '--list-cases'),
|
|
135
153
|
failFast: optionOrFlag(options, 'failFast', cmd, '--fail-fast'),
|
|
154
|
+
fromDataplane: optionOrFlag(options, 'fromDataplane', cmd, '--from-dataplane'),
|
|
136
155
|
run: true
|
|
137
156
|
};
|
|
138
157
|
}
|
|
@@ -215,25 +234,38 @@ async function resolveSuiteCaseResults(systemKey, opts, result, verdict, portalU
|
|
|
215
234
|
return outcomes;
|
|
216
235
|
}
|
|
217
236
|
|
|
237
|
+
async function maybeLoadFromDataplane(systemKey, opts) {
|
|
238
|
+
if (!opts.fromDataplane) {
|
|
239
|
+
return opts;
|
|
240
|
+
}
|
|
241
|
+
const auth = await resolveLifecycleAuth(systemKey, { ...opts, run: false, noPublish: true });
|
|
242
|
+
return loadPublishedTestsIntoOptions(systemKey, opts, auth);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async function resolveSelectedCaseResults(systemKey, opts, result, verdict, portalUrl) {
|
|
246
|
+
const runDiscovered = Boolean(opts.suite || (opts.fromDataplane && !opts.case));
|
|
247
|
+
if (runDiscovered) {
|
|
248
|
+
return resolveSuiteCaseResults(systemKey, opts, result, verdict, portalUrl);
|
|
249
|
+
}
|
|
250
|
+
return resolveRoleAssistantCaseResult(systemKey, opts, result, verdict, portalUrl);
|
|
251
|
+
}
|
|
252
|
+
|
|
218
253
|
async function runRoleAssistantTestAction(roleKey, options, cmd) {
|
|
219
|
-
|
|
254
|
+
let opts = normalizeRoleAssistantTestOptions(options, cmd);
|
|
220
255
|
const systemKey = roleAssistantSystemKey(roleKey);
|
|
221
256
|
const displayKey = bareRoleKey(roleKey);
|
|
257
|
+
opts = await maybeLoadFromDataplane(systemKey, opts);
|
|
222
258
|
|
|
223
259
|
if (opts.listCases) {
|
|
224
260
|
return listRoleAssistantCases(systemKey, opts);
|
|
225
261
|
}
|
|
226
262
|
|
|
263
|
+
assertLocalCasesBeforeAuth(systemKey, opts);
|
|
264
|
+
|
|
227
265
|
const result = await runLifecycleForExternalSystem(systemKey, opts);
|
|
228
266
|
const verdict = lifecycleVerdictFromReport(result.report || {});
|
|
229
267
|
const portalUrl = buildExternalSystemUiUrl(result.dataplaneUiBaseUrl, systemKey);
|
|
230
|
-
|
|
231
|
-
let caseResult = null;
|
|
232
|
-
if (opts.suite) {
|
|
233
|
-
caseResult = await resolveSuiteCaseResults(systemKey, opts, result, verdict, portalUrl);
|
|
234
|
-
} else {
|
|
235
|
-
caseResult = await resolveRoleAssistantCaseResult(systemKey, opts, result, verdict, portalUrl);
|
|
236
|
-
}
|
|
268
|
+
const caseResult = await resolveSelectedCaseResults(systemKey, opts, result, verdict, portalUrl);
|
|
237
269
|
|
|
238
270
|
if (opts.json) {
|
|
239
271
|
logger.log(
|
|
@@ -254,38 +286,96 @@ async function runRoleAssistantTestAction(roleKey, options, cmd) {
|
|
|
254
286
|
return exitCode;
|
|
255
287
|
}
|
|
256
288
|
|
|
257
|
-
async function
|
|
258
|
-
|
|
259
|
-
|
|
289
|
+
async function patchPublishedCaseStatus(roleKey, opts, roleCase, evaluation, authContext) {
|
|
290
|
+
const caseId = roleCase && roleCase.caseId;
|
|
291
|
+
if (!caseId) {
|
|
292
|
+
return evaluation;
|
|
260
293
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
294
|
+
let auth = authContext;
|
|
295
|
+
if (!auth || !auth.dataplaneUrl || !auth.authConfig) {
|
|
296
|
+
auth = await resolveLifecycleAuth(roleKey, { ...opts, run: false, noPublish: true });
|
|
297
|
+
}
|
|
298
|
+
if (!auth || !auth.dataplaneUrl || !auth.authConfig) {
|
|
299
|
+
return evaluation;
|
|
266
300
|
}
|
|
301
|
+
await patchCaseStatusAfterRun({
|
|
302
|
+
systemKey: roleAssistantSystemKey(roleKey),
|
|
303
|
+
caseId,
|
|
304
|
+
evaluation,
|
|
305
|
+
dataplaneUrl: auth.dataplaneUrl,
|
|
306
|
+
authConfig: auth.authConfig
|
|
307
|
+
});
|
|
308
|
+
return evaluation;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function attachCaseExecution(evaluation, executionResult, error) {
|
|
312
|
+
const errMsg = error && (error.message || String(error));
|
|
313
|
+
evaluation.execution = {
|
|
314
|
+
processExecutionId: executionResult?.processExecutionId || error?.planId || null,
|
|
315
|
+
finalStatus: executionResult?.finalStatus?.status || (error ? 'failed' : null),
|
|
316
|
+
waitReason: executionResult?.finalStatus?.wait?.waitReason || null,
|
|
317
|
+
interactions: executionResult?.interactions || [],
|
|
318
|
+
workResultError: executionResult?.workResultError || errMsg || null
|
|
319
|
+
};
|
|
320
|
+
return evaluation;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
async function resolveExecutableCaseResult(roleKey, roleCase, opts, result, verdict, portalUrl) {
|
|
267
324
|
const authContext = await resolveLifecycleAuth(roleKey, {
|
|
268
325
|
...opts,
|
|
269
326
|
run: false,
|
|
270
327
|
noPublish: true
|
|
271
328
|
});
|
|
329
|
+
const evidencePreflight = await assertRoleAssistantEvidencePreflight(roleCase, authContext);
|
|
272
330
|
const executionResult = await runRoleAssistantCaseLifecycle(roleKey, roleCase, authContext, opts);
|
|
273
331
|
const executionVerdict = lifecycleVerdictFromCaseExecution(executionResult, verdict);
|
|
274
332
|
const evaluationInput = mergeCaseExecutionIntoLifecycleResult(result, executionResult);
|
|
333
|
+
evaluationInput.evidencePreflight = evidencePreflight;
|
|
275
334
|
const evaluation = evaluateRoleAssistantTestCase(
|
|
276
335
|
roleCase,
|
|
277
336
|
evaluationInput,
|
|
278
337
|
executionVerdict,
|
|
279
338
|
portalUrl
|
|
280
339
|
);
|
|
281
|
-
evaluation
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
|
|
340
|
+
return attachCaseExecution(evaluation, executionResult);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
async function resolveRoleAssistantCaseResult(roleKey, opts, result, verdict, portalUrl) {
|
|
344
|
+
if (!opts.case) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
const roleCase = loadRoleAssistantTestCase(roleKey, opts.case, {
|
|
348
|
+
testsDir: opts.testsDir || null
|
|
349
|
+
});
|
|
350
|
+
let evaluation;
|
|
351
|
+
if (!isExecutableRoleAssistantCase(roleCase)) {
|
|
352
|
+
evaluation = evaluateRoleAssistantTestCase(roleCase, result, verdict, portalUrl);
|
|
353
|
+
} else {
|
|
354
|
+
try {
|
|
355
|
+
evaluation = await resolveExecutableCaseResult(
|
|
356
|
+
roleKey,
|
|
357
|
+
roleCase,
|
|
358
|
+
opts,
|
|
359
|
+
result,
|
|
360
|
+
verdict,
|
|
361
|
+
portalUrl
|
|
362
|
+
);
|
|
363
|
+
} catch (error) {
|
|
364
|
+
const failedInput = mergeCaseExecutionIntoLifecycleResult(result, {
|
|
365
|
+
finalStatus: { status: 'failed' },
|
|
366
|
+
workResult: null,
|
|
367
|
+
workResultError: error.message || String(error),
|
|
368
|
+
interactions: []
|
|
369
|
+
});
|
|
370
|
+
failedInput.workResultError = error.message || String(error);
|
|
371
|
+
evaluation = attachCaseExecution(
|
|
372
|
+
evaluateRoleAssistantTestCase(roleCase, failedInput, verdict, portalUrl),
|
|
373
|
+
null,
|
|
374
|
+
error
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return patchPublishedCaseStatus(roleKey, opts, roleCase, evaluation);
|
|
289
379
|
}
|
|
290
380
|
|
|
291
381
|
async function roleAssistantTestHandler(roleKey, options, cmd) {
|
|
@@ -297,19 +387,8 @@ async function roleAssistantTestHandler(roleKey, options, cmd) {
|
|
|
297
387
|
}
|
|
298
388
|
}
|
|
299
389
|
|
|
300
|
-
function
|
|
301
|
-
|
|
302
|
-
.command('role-assistant')
|
|
303
|
-
.description(
|
|
304
|
-
'Role Assistant packages: lifecycle checks, YAML cases/suites, and portal deep links'
|
|
305
|
-
)
|
|
306
|
-
.addHelpText('after', roleAssistantGroupHelpAfter());
|
|
307
|
-
|
|
308
|
-
roleAssistant
|
|
309
|
-
.command('test <roleKey>')
|
|
310
|
-
.description(
|
|
311
|
-
'Lifecycle checks + optional cases/suites; prints portal deep link (bare <roleKey>)'
|
|
312
|
-
)
|
|
390
|
+
function addRoleAssistantTestRunOptions(cmd) {
|
|
391
|
+
return cmd
|
|
313
392
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
|
|
314
393
|
.option('--case <caseIdOrPath>', 'Run and evaluate one role-assistant test case')
|
|
315
394
|
.option('--tests-dir <dir>', 'Override role-assistant test case directory')
|
|
@@ -323,8 +402,16 @@ function setupRoleAssistantCommands(program) {
|
|
|
323
402
|
)
|
|
324
403
|
.option('--list-cases', 'List discoverable case files and exit')
|
|
325
404
|
.option('--fail-fast', 'Stop suite run after the first failing case')
|
|
405
|
+
.option(
|
|
406
|
+
'--from-dataplane',
|
|
407
|
+
'Load published tests from the dataplane, then run them (all suites unless --case or --suite is set)'
|
|
408
|
+
)
|
|
326
409
|
.option('-v, --verbose', 'Include full lifecycle report payload in --json output')
|
|
327
|
-
.option('-d, --debug', 'Write debug logs under role-assistant/<roleKey>/logs/')
|
|
410
|
+
.option('-d, --debug', 'Write debug logs under role-assistant/<roleKey>/logs/');
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
function addRoleAssistantTestPublishOptions(cmd) {
|
|
414
|
+
return cmd
|
|
328
415
|
.option(
|
|
329
416
|
'--publish',
|
|
330
417
|
'Publish local Role Assistant package before checks (default: use public/running worker)'
|
|
@@ -332,24 +419,44 @@ function setupRoleAssistantCommands(program) {
|
|
|
332
419
|
.option('--force', 'Force upload when --publish is set')
|
|
333
420
|
.option(
|
|
334
421
|
'--subject-user-id <id>',
|
|
335
|
-
'
|
|
422
|
+
'Work Hub isolation user id (repeatable; not Connected System governance)',
|
|
336
423
|
collectString,
|
|
337
424
|
[]
|
|
338
425
|
)
|
|
339
426
|
.option(
|
|
340
427
|
'--subject-email <email>',
|
|
341
|
-
'
|
|
428
|
+
'Work Hub isolation email (repeatable; not Connected System governance)',
|
|
342
429
|
collectString,
|
|
343
430
|
[]
|
|
344
431
|
)
|
|
345
432
|
.option(
|
|
346
433
|
'--certification-profile <profile>',
|
|
347
|
-
'
|
|
434
|
+
'Ignored for Role Assistant packages (Connected System governance generate does not run)',
|
|
348
435
|
'bronze'
|
|
349
436
|
)
|
|
350
|
-
.option('--json', 'Machine-readable output envelope')
|
|
437
|
+
.option('--json', 'Machine-readable output envelope');
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
function registerRoleAssistantTestCommand(roleAssistant) {
|
|
441
|
+
const cmd = roleAssistant
|
|
442
|
+
.command('test <roleKey>')
|
|
443
|
+
.description(
|
|
444
|
+
'Lifecycle checks + optional cases/suites; prints portal deep link (bare <roleKey>)'
|
|
445
|
+
);
|
|
446
|
+
addRoleAssistantTestPublishOptions(addRoleAssistantTestRunOptions(cmd))
|
|
351
447
|
.addHelpText('after', roleAssistantHelpAfter())
|
|
352
|
-
.action((roleKey, options,
|
|
448
|
+
.action((roleKey, options, invoked) => roleAssistantTestHandler(roleKey, options, invoked));
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
function setupRoleAssistantCommands(program) {
|
|
452
|
+
const roleAssistant = program
|
|
453
|
+
.command('role-assistant')
|
|
454
|
+
.description(
|
|
455
|
+
'Role Assistant packages: lifecycle checks, YAML cases/suites, copy from Work Hub, and portal deep links'
|
|
456
|
+
)
|
|
457
|
+
.addHelpText('after', roleAssistantGroupHelpAfter());
|
|
458
|
+
registerRoleAssistantTestCommand(roleAssistant);
|
|
459
|
+
registerRoleAssistantCopyCommand(roleAssistant);
|
|
353
460
|
}
|
|
354
461
|
|
|
355
462
|
module.exports = {
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aifabrix search — retrieve governed Role Assistant information.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Commander registration for search and search skills
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const logger = require('../utils/logger');
|
|
12
|
+
const { runSearch, runSearchSkills } = require('../search/search-run');
|
|
13
|
+
const { exitCodeForSearchError } = require('../search/search-errors');
|
|
14
|
+
const { emitSearchError } = require('../search/search-display');
|
|
15
|
+
|
|
16
|
+
const SEARCH_HELP = `
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
$ aifabrix search
|
|
20
|
+
$ aifabrix search --role ra-cfo --resource-type customer
|
|
21
|
+
$ aifabrix search --role ra-cfo --resource-type customer --operation list --json
|
|
22
|
+
$ aifabrix search --role ra-cfo --resource-type customer --output ./search.json
|
|
23
|
+
$ aifabrix search skills --role ra-cfo
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
const SKILLS_HELP = `
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
$ aifabrix search skills
|
|
30
|
+
$ aifabrix search skills --role ra-cfo
|
|
31
|
+
$ aifabrix search skills --role ra-cfo --json
|
|
32
|
+
$ aifabrix search skills --role ra-cfo --output ./skills.json
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param {*} value
|
|
37
|
+
* @param {string[]} previous
|
|
38
|
+
* @returns {string[]}
|
|
39
|
+
*/
|
|
40
|
+
function collectKnowledgeKey(value, previous) {
|
|
41
|
+
const next = Array.isArray(previous) ? previous : [];
|
|
42
|
+
next.push(value);
|
|
43
|
+
return next;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {import('commander').Command} cmd
|
|
48
|
+
*/
|
|
49
|
+
function addSharedSearchOptions(cmd) {
|
|
50
|
+
cmd
|
|
51
|
+
.option('--role <roleRef>', 'Role Assistant key (for example ra-cfo)')
|
|
52
|
+
.option('--role-ref <roleRef>', 'Alias for --role')
|
|
53
|
+
.option('-o, --output <file>', 'Write the JSON payload to this file')
|
|
54
|
+
.option('--no-interactive', 'Never prompt; missing required flags fail')
|
|
55
|
+
.option('-e, --env <environment>', 'Environment key')
|
|
56
|
+
.option('--json', 'Print the JSON payload on stdout (no prompts)')
|
|
57
|
+
.option('-v, --verbose', 'Include extra TTY detail when available');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param {import('commander').Command} cmd
|
|
62
|
+
*/
|
|
63
|
+
function addSearchBodyOptions(cmd) {
|
|
64
|
+
cmd
|
|
65
|
+
.option('--resource-type <key>', 'Resource type published on that Role Assistant')
|
|
66
|
+
.option('--type <key>', 'Alias for --resource-type')
|
|
67
|
+
.option('--operation <key>', 'Named operation for that resource type')
|
|
68
|
+
.option('--filters <json>', 'JSON object of field filters')
|
|
69
|
+
.option('--filters-file <path>', 'JSON object of field filters from a file')
|
|
70
|
+
.option('--page <n>', 'Page number (integer ≥ 1)')
|
|
71
|
+
.option('--page-size <n>', 'Page size (integer 1–100)')
|
|
72
|
+
.option('--sort <spec>', 'Sort specification (pass-through)')
|
|
73
|
+
.option('--fields <csv>', 'Comma-separated field names')
|
|
74
|
+
.option('--graph', 'Include one-level related records')
|
|
75
|
+
.option('--query <text>', 'Semantic hop text when --graph is set')
|
|
76
|
+
.option('--knowledge-key <key>', 'Knowledge key (repeatable)', collectKnowledgeKey, [])
|
|
77
|
+
.option('--body <file>', 'JSON request body file (merged after flags)');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @param {Function} action
|
|
82
|
+
* @param {Object} options
|
|
83
|
+
* @returns {Promise<void>}
|
|
84
|
+
*/
|
|
85
|
+
async function dispatchSearchLeaf(action, options) {
|
|
86
|
+
try {
|
|
87
|
+
const code = await action(options);
|
|
88
|
+
if (code && code !== 0) {
|
|
89
|
+
process.exit(code);
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
const message = err.message || String(err);
|
|
93
|
+
emitSearchError(options, message, logger);
|
|
94
|
+
process.exit(exitCodeForSearchError(err));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {Object} options
|
|
100
|
+
* @param {import('commander').Command} command
|
|
101
|
+
* @returns {Object}
|
|
102
|
+
*/
|
|
103
|
+
function mergeCommandOptions(options, command) {
|
|
104
|
+
const parentOpts =
|
|
105
|
+
command && command.parent && typeof command.parent.opts === 'function'
|
|
106
|
+
? command.parent.opts()
|
|
107
|
+
: {};
|
|
108
|
+
return { ...parentOpts, ...options };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @param {import('commander').Command} program
|
|
113
|
+
*/
|
|
114
|
+
function setupSearchCommands(program) {
|
|
115
|
+
const search = program
|
|
116
|
+
.command('search')
|
|
117
|
+
.description('Search governed information for a Role Assistant assigned to you')
|
|
118
|
+
.addHelpText('after', SEARCH_HELP);
|
|
119
|
+
addSharedSearchOptions(search);
|
|
120
|
+
addSearchBodyOptions(search);
|
|
121
|
+
|
|
122
|
+
const searchRun = search
|
|
123
|
+
.command('run', { isDefault: true, hidden: true })
|
|
124
|
+
.description('Search governed information for a Role Assistant assigned to you')
|
|
125
|
+
.addHelpText('after', SEARCH_HELP);
|
|
126
|
+
searchRun.action(async(options, command) => {
|
|
127
|
+
await dispatchSearchLeaf(runSearch, mergeCommandOptions(options, command));
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const skills = search
|
|
131
|
+
.command('skills')
|
|
132
|
+
.description('List searchable resource types and operations for a Role Assistant')
|
|
133
|
+
.addHelpText('after', SKILLS_HELP);
|
|
134
|
+
addSharedSearchOptions(skills);
|
|
135
|
+
skills.action(async(options, command) => {
|
|
136
|
+
await dispatchSearchLeaf(runSearchSkills, mergeCommandOptions(options, command));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
module.exports = {
|
|
141
|
+
setupSearchCommands,
|
|
142
|
+
collectKnowledgeKey
|
|
143
|
+
};
|