feat: AI assist commands, HTTP MCP server, extensions management#1014
Conversation
This reverts commit 88111e9.
…ement on top of dev/v3.x changes)
…ectories in tool-definitions.zip
|
@copilot Please review the code that is being updated in this PR compared to dev/v3.x and provide any improvement suggestions, also taking copilot instructions file (and related files) into account. |
Here's a comprehensive code review of the PR changes compared to 🔴 Critical / High Severity1. Path Traversal in
|
There was a problem hiding this comment.
Pull request overview
This PR introduces a new ai-assist module that adds MCP server commands (stdio + HTTP) and AI-assistant “extensions” management, while also refactoring execution-context/isolation handling to support per-request and per-identity state (sessions, variables, job caches). It also includes fixes and test updates across SSC/FoD/SC-SAST and supporting infrastructure.
Changes:
- Add
fcli ai-assistcommand tree (MCP server start/config generation + extensions setup/uninstall/listing) and wire it into the root CLI. - Refactor execution context, isolation scope, action global state, and async job infrastructure to support proper isolation across CLI invocations and server requests.
- Fix
sc-sast sensor listto always return full sensor records and include compatible client version enrichment.
Reviewed changes
Copilot reviewed 173 out of 173 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| gradle.properties | Adds module ref for ai-assist |
| fcli-other/fcli-functional-test/src/ftest/resources/runtime/actions/server-import-http-ssc-functions.yaml | Adds SSC HTTP MCP test action |
| fcli-other/fcli-functional-test/src/ftest/resources/runtime/actions/server-import-http-fod-functions.yaml | Adds FoD HTTP MCP test action |
| fcli-other/fcli-functional-test/src/ftest/resources/runtime/actions/run-fcli-shared-state-parent.yaml | Adds parent action for state-sharing test |
| fcli-other/fcli-functional-test/src/ftest/resources/runtime/actions/run-fcli-shared-state-child.yaml | Adds child action for state-sharing test |
| fcli-other/fcli-functional-test/src/ftest/groovy/com/fortify/cli/ftest/ssc/SSCAlertDefinitionSpec.groovy | Updates SSC command name in test |
| fcli-other/fcli-functional-test/src/ftest/groovy/com/fortify/cli/ftest/fod/FoDMCPServerHttpSpec.groovy | Adds FoD HTTP MCP functional test |
| fcli-other/fcli-functional-test/src/ftest/groovy/com/fortify/cli/ftest/core/MCPServerImportSpec.groovy | Extends MCP import tests (globals) |
| fcli-other/fcli-functional-test/src/ftest/groovy/com/fortify/cli/ftest/core/ActionFunctionsSpec.groovy | Adds run.fcli state reuse test |
| fcli-other/fcli-functional-test/src/ftest/groovy/com/fortify/cli/ftest/_common/MCPHttpServerTestHelper.groovy | Adds HTTP MCP client/server test helper |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCWaitHelper.java | Switches job listener import to common |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCServer.java | Pushes execution context per RPC call |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCPushJobEventListener.java | Switches job listener import to common |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerRegistry.java | Refactors registry to use isolation scope |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerJobRemove.java | Uses scoped caching listener via context |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerJobList.java | Switches AsyncJobManager import to common |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerJobGetStatus.java | Uses scoped caching listener via context |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerJobGetPage.java | Resolves caching listener from isolation scope |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerJobCancel.java | Switches AsyncJobManager import to common |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerFnCall.java | Uses new AsyncJobManager task descriptor API |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCMethodHandlerFcliExecute.java | Uses new AsyncJobManager task descriptor API |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/helper/RPCJobEventListenerFactory.java | Uses scoped caching listener via context |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/rpc_server/cli/cmd/RPCServerStartCommand.java | Marks RPC start as context manager command |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/mcp_server/cli/cmd/MCPServerStartDeprecatedCommand.java | Adds deprecated MCP start wrapper |
| fcli-core/fcli-util/src/main/java/com/fortify/cli/util/mcp_server/cli/cmd/MCPServerCommands.java | Routes util mcp-server start to deprecated wrapper |
| fcli-core/fcli-tool/src/main/java/com/fortify/cli/tool/sc_client/cli/cmd/ToolSCClientInstallCommand.java | Removes ToolDependency usage for JRE |
| fcli-core/fcli-tool/src/main/java/com/fortify/cli/tool/_common/helper/ToolDependency.java | Removes ToolDependency enum |
| fcli-core/fcli-ssc/src/main/java/com/fortify/cli/ssc/access_control/helper/SSCTokenConverter.java | Makes regex pattern final |
| fcli-core/fcli-ssc/src/main/java/com/fortify/cli/ssc/_common/rest/cli/mixin/SSCAndScanCentralUnirestInstanceSupplierMixin.java | Implements session descriptor type hook |
| fcli-core/fcli-sc-sast/src/main/resources/com/fortify/cli/sc_sast/i18n/SCSastMessages.properties | Updates sensor list help text |
| fcli-core/fcli-sc-sast/src/main/java/com/fortify/cli/sc_sast/sensor/helper/SCSastSensorCompatibleVersionHelper.java | Adds sensor streaming + enrichment helper |
| fcli-core/fcli-sc-sast/src/main/java/com/fortify/cli/sc_sast/sensor/cli/cmd/SCSastSensorListCommand.java | Returns full sensors for filtered modes |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/release/helper/FoDReleaseDescriptor.java | Switches attribute type to value descriptor |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/release/cli/cmd/FoDReleaseUpdateCommand.java | Uses new attribute definition helper |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/release/cli/cmd/FoDReleaseCreateCommand.java | Uses new attribute definition helper |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/microservice/helper/FoDMicroserviceHelper.java | Uses new attribute definition helper |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/microservice/helper/FoDMicroserviceDescriptor.java | Switches attribute type to value descriptor |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/microservice/cli/cmd/FoDMicroserviceUpdateCommand.java | Refactors microservice attribute update flow |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/microservice/cli/cmd/FoDMicroserviceCreateCommand.java | Uses new attribute definition helper |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/issue/cli/cmd/FoDIssueUpdateCommand.java | Refactors issue attributes/status resolution |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/helper/FoDAttributeValueDescriptor.java | Adds value-only attribute descriptor |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/helper/FoDAttributeDefinitionDescriptor.java | Renames definition descriptor; removes value field |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/cli/mixin/FoDAttributeResolverMixin.java | Switches to new definition helper/descriptor |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/cli/cmd/FoDAttributeUpdateCommand.java | Switches to definition helper for updates |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/cli/cmd/FoDAttributeDeleteCommand.java | Switches to definition helper for deletes |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/attribute/cli/cmd/FoDAttributeCreateCommand.java | Switches to definition helper for create |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/app/helper/FoDAppDescriptor.java | Switches attribute type to value descriptor |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/app/helper/FoDAppCreateRequest.java | Uses definition helper for auto-attributes |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/app/cli/cmd/FoDAppUpdateCommand.java | Uses definition helper for update attrs |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/_common/session/helper/FoDSessionDescriptor.java | Adds copy-with-token helper method |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/_common/session/cli/mixin/FoDUnirestInstanceSupplierMixin.java | Implements session descriptor type hook |
| fcli-core/fcli-fod/src/main/java/com/fortify/cli/fod/_common/scan/helper/FoDScanDescriptor.java | Switches attribute type to value descriptor |
| fcli-core/fcli-common/src/test/java/com/fortify/cli/common/session/cli/mixin/AbstractSessionDescriptorSupplierMixinTest.java | Adds transient session descriptor tests |
| fcli-core/fcli-common/src/test/java/com/fortify/cli/common/concurrent/job/AsyncJobManagerIsolationScopeTest.java | Adds isolation-scope job tracking test |
| fcli-core/fcli-common/src/test/java/com/fortify/cli/common/concurrent/FcliConcurrencyTest.java | Updates access to global action state |
| fcli-core/fcli-common/src/test/java/com/fortify/cli/common/cli/util/FcliExecutionContextTest.java | Adds execution context behavior tests |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/variable/FcliVariableHelper.java | Supports scoped vars path via isolation scope |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/util/FileUtils.java | Renames stream open helpers |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/session/helper/AbstractSessionHelper.java | Exposes log mask registration for transient sessions |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/session/cli/mixin/AbstractSessionDescriptorSupplierMixin.java | Prefers transient session descriptors |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/log/LogMaskSource.java | Adds HTTP auth header mask source |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/task/AsyncTaskFcliCommand.java | Moves task into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/task/AsyncTaskActionFunction.java | Moves task into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/IJobEventListener.java | Moves interface into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/IAsyncTask.java | Moves interface into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/exec/FcliRunnerHelper.java | Moves helper; adjusts executor usage |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/exec/FcliExecutionResult.java | Moves result into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/CompositeJobEventListener.java | Moves listener into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/CollectingJobEventListener.java | Moves listener into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/cli/mixin/AsyncJobManagerMixin.java | Moves mixin into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/concurrent/job/CachingJobEventListener.java | Moves listener into common job package |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/StdioHelper.java | Adds ANSI capture + progress suppression safeguards |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/IFcliExecutionContextManager.java | Adds marker interface for context-managing commands |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/FcliModules.java | Adds AGENT module enum |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/FcliIsolationScope.java | Introduces isolation-scope state container |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/FcliExecutionContextHolder.java | Makes context pushing explicit; adds frames |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/FcliCommandExecutorFactory.java | Removes implicit context creation option |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/cli/util/FcliActionState.java | Adds shared global.* action state container |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/action/runner/ActionRunnerVars.java | Uses actionState global values |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/action/runner/ActionFunctionExecutor.java | Uses supplier-based context frames |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/action/helper/ActionLoaderHelper.java | Updates FileUtils method names |
| fcli-core/fcli-common/src/main/java/com/fortify/cli/common/action/cli/cmd/RunBuildTimeFcliAction.java | Pushes execution context for build-time run |
| fcli-core/fcli-aviator/src/main/java/com/fortify/cli/aviator/_common/session/user/cli/mixin/AviatorUserSessionDescriptorSupplier.java | Implements session descriptor type hook |
| fcli-core/fcli-aviator/src/main/java/com/fortify/cli/aviator/_common/config/admin/cli/mixin/AviatorAdminConfigDescriptorSupplier.java | Implements session descriptor type hook |
| fcli-core/fcli-app/src/main/java/com/fortify/cli/app/runner/util/FortifyCLIDynamicInitializer.java | Updates log mask registration API |
| fcli-core/fcli-app/src/main/java/com/fortify/cli/app/FortifyCLI.java | Moves ANSI detection out of main |
| fcli-core/fcli-app/src/main/java/com/fortify/cli/app/_main/cli/cmd/FCLIRootCommands.java | Registers new ai-assist command group |
| fcli-core/fcli-app/build.gradle.kts | Adds ai-assist dependency + reflect generator main |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/unit/MCPToolFcliRunnerRecordsTest.java | Moves MCP tests to ai-assist packages |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/unit/MCPToolArgHandlersTest.java | Moves MCP tests to ai-assist packages |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/unit/MCPServerHttpConfigLoaderTest.java | Adds HTTP MCP config loader tests |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/unit/MCPJobManagerTest.java | Adds isolation-scope MCP job tests |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/helper/runner/MCPToolResultTest.java | Adds pagination jobToken test |
| fcli-core/fcli-ai-assist/src/test/java/com/fortify/cli/agent/mcp/helper/runner/MCPToolFcliRunnerFunctionStreamingTest.java | Tests paging arg exclusion for streaming |
| fcli-core/fcli-ai-assist/src/main/resources/com/fortify/cli/ai_assist/mcp/config/mcp-http-config-ssc.yaml | Adds SSC sample HTTP MCP config template |
| fcli-core/fcli-ai-assist/src/main/resources/com/fortify/cli/ai_assist/mcp/config/mcp-http-config-fod.yaml | Adds FoD sample HTTP MCP config template |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolResult.java | Adds jobToken support in paged results |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerRecordsPaged.java | Moves runner to ai-assist package |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerRecords.java | Moves runner to ai-assist package |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerPlainText.java | Moves runner to ai-assist package |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerHelper.java | Uses common FcliRunnerHelper |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerFunctionStreaming.java | Filters paging args; uses async tasks |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerFunction.java | Moves runner to ai-assist package |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliRunnerAction.java | Moves runner + arg handlers to ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolFcliPagedHelper.java | Includes jobToken in paged responses |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPToolAsyncJobManager.java | Scopes caches/job tokens to isolation scope |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/MCPResourceFcliRunnerFunction.java | Moves resource runner to ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/IMCPToolRunner.java | Moves tool runner interface to ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/runner/AbstractMCPToolFcliRunner.java | Moves base runner to ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/MCPReflectConfigGenerator.java | Moves reflect generator to ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/MCPJobManager.java | Isolation-scope job registry + worker context |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/http/ParsedAuthorization.java | Adds parsed auth header + log masking |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/http/MCPServerHttpConfigLoader.java | Adds HTTP MCP config YAML loader |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlers.java | Moves arg handling into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlerQuery.java | Moves query arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlerPaging.java | Moves paging arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlerFcliParam.java | Moves param arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlerFcliOption.java | Moves option arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/MCPToolArgHandlerActionOption.java | Moves action option arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/IMCPToolArgHandler.java | Moves arg handler interface into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/helper/arg/AbstractMCPToolArgHandlerFcli.java | Moves base arg handler into ai-assist |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/cli/cmd/AiAssistMCPCreateHttpConfigCommand.java | Adds HTTP MCP config template generator |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/cli/cmd/AiAssistMCPCommands.java | Adds MCP subcommand container |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsVersionOutputDescriptor.java | Adds list-versions output DTO |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsTargetDirManifest.java | Adds per-target manifest format |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsTargetDescriptor.java | Adds target descriptor model |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsPathResolver.java | Adds assistant target path resolution |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsOutputDescriptor.java | Adds install/uninstall output DTO |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsInstallPlanContext.java | Adds dedup context for installs |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsInstallationsDescriptor.java | Adds persisted installations registry |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsDistributionDescriptor.java | Adds distribution descriptor model |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsContentTypeDescriptor.java | Adds content-manifest content type model |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsContentManifestDescriptor.java | Adds content-manifest descriptor model |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsAssistantOutputDescriptor.java | Adds assistant listing output DTO |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/helper/AiAssistExtensionsAssistantDescriptor.java | Adds assistant descriptor model |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsUninstallCommand.java | Adds uninstall command wrapper |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsSetupCommand.java | Adds setup/install command wrapper |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsListVersionsCommand.java | Adds list-versions command |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsListInstalledCommand.java | Adds list-installed command |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsListAssistantsCommand.java | Adds list-assistants command |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/extensions/cli/cmd/AiAssistExtensionsCommands.java | Adds extensions subcommand container |
| fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/_main/cli/cmd/AiAssistCommands.java | Adds top-level ai-assist container |
| fcli-core/fcli-ai-assist/build.gradle.kts | Adds new ai-assist module build |
| .github/instructions/utilities.instructions.md | Updates documented utilities/infrastructure |
| .github/instructions/style.instructions.md | Updates style/self-update guidance |
| .github/instructions/java.instructions.md | Updates Java patterns guidance |
| .github/copilot-instructions.md | Updates workflow + self-learning guidance |
Comments suppressed due to low confidence (1)
fcli-core/fcli-ai-assist/src/main/java/com/fortify/cli/ai_assist/mcp/cli/cmd/AiAssistMCPCreateHttpConfigCommand.java:73
- The template read failure handler catches
IOExceptionbut drops the underlying cause. Consider passing the caught exception as the cause toFcliSimpleExceptionso users can diagnose resource/IO issues.
} catch (IOException e) {
throw new FcliSimpleException("Error reading HTTP MCP template resource: %s", templateResource);
}
| case ssc -> "/com/fortify/cli/agent/mcp/config/mcp-http-config-ssc.yaml"; | ||
| case fod -> "/com/fortify/cli/agent/mcp/config/mcp-http-config-fod.yaml"; |
| force ? new StandardOpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING} | ||
| : new StandardOpenOption[] {StandardOpenOption.CREATE_NEW}); | ||
| } catch (IOException e) { | ||
| throw new FcliSimpleException("Error writing HTTP MCP config file: %s", outputPath); | ||
| } |
| @Option(names = {"-y", "--confirm"}, | ||
| descriptionKey = "fcli.ai-assist.extensions.confirm") | ||
| private boolean confirm; | ||
|
|
| @Option(names = {"-y", "--confirm"}, | ||
| descriptionKey = "fcli.ai-assist.extensions.confirm") | ||
| private boolean confirm; | ||
|
|
| public Integer call() { | ||
| var cmd = "fcli ai-assist mcp start-stdio"; | ||
| if ( delegatedArgs != null && !delegatedArgs.isEmpty() ) { | ||
| cmd += " " + String.join(" ", delegatedArgs); | ||
| } |
| public static synchronized void install() { | ||
| if ( installed ) return; | ||
| // Detect ANSI capability before replacing streams: the delegating/masking | ||
| // wrappers installed below can interfere with terminal-based ANSI probing. | ||
| ansi = Ansi.AUTO.enabled() ? Ansi.ON : Ansi.AUTO; | ||
| rawOut = System.out; | ||
| rawErr = System.err; | ||
| installThread = Thread.currentThread(); |
| /** | ||
| * Look up a transient session descriptor by type, searching from top to bottom | ||
| * through the current thread's execution-context stack. | ||
| */ | ||
| public static ISessionDescriptor getTransientSessionDescriptor(String type) { | ||
| return current().getIsolationScope().getTransientSessionDescriptor(type); | ||
| } |
| Files.writeString(outputPath, loadTemplate(), StandardCharsets.UTF_8, | ||
| force ? new StandardOpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING} | ||
| : new StandardOpenOption[] {StandardOpenOption.CREATE_NEW}); | ||
| } catch (IOException e) { | ||
| throw new FcliSimpleException("Error writing HTTP MCP config file: %s", outputPath); | ||
| } |
| try { | ||
| var rawNode = YAML_MAPPER.readTree(normalizedPath.toFile()); | ||
| var resolvedNode = resolveTemplateExpressions(rawNode); | ||
| var result = YAML_MAPPER.treeToValue(resolvedNode, MCPServerHttpConfig.class); | ||
| result.validate(normalizedPath); | ||
| return result; | ||
| } catch (FcliSimpleException e) { | ||
| throw e; | ||
| } catch (IOException e) { | ||
| throw new FcliSimpleException("Unable to read HTTP MCP config file: " + normalizedPath); | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.