@defai.digital/ax-cli 4.4.7 → 4.4.10
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/bin/ax-cli +1 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -9
- package/dist/index.js.map +1 -1
- package/dist/setup.d.ts +27 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +591 -0
- package/dist/setup.js.map +1 -0
- package/package.json +43 -135
- package/LICENSE +0 -22
- package/README.md +0 -420
- package/config-defaults/messages.yaml +0 -75
- package/config-defaults/models.yaml +0 -57
- package/config-defaults/prompts.yaml +0 -948
- package/config-defaults/settings.yaml +0 -157
- package/dist/agent/agent-executor.d.ts +0 -61
- package/dist/agent/agent-executor.js +0 -194
- package/dist/agent/agent-executor.js.map +0 -1
- package/dist/agent/agent-router.d.ts +0 -68
- package/dist/agent/agent-router.js +0 -242
- package/dist/agent/agent-router.js.map +0 -1
- package/dist/agent/context-manager.d.ts +0 -122
- package/dist/agent/context-manager.js +0 -406
- package/dist/agent/context-manager.js.map +0 -1
- package/dist/agent/core/index.d.ts +0 -8
- package/dist/agent/core/index.js +0 -9
- package/dist/agent/core/index.js.map +0 -1
- package/dist/agent/core/types.d.ts +0 -92
- package/dist/agent/core/types.js +0 -11
- package/dist/agent/core/types.js.map +0 -1
- package/dist/agent/dependency-resolver.d.ts +0 -90
- package/dist/agent/dependency-resolver.js +0 -366
- package/dist/agent/dependency-resolver.js.map +0 -1
- package/dist/agent/execution/index.d.ts +0 -9
- package/dist/agent/execution/index.js +0 -9
- package/dist/agent/execution/index.js.map +0 -1
- package/dist/agent/execution/tool-executor.d.ts +0 -93
- package/dist/agent/execution/tool-executor.js +0 -552
- package/dist/agent/execution/tool-executor.js.map +0 -1
- package/dist/agent/index.d.ts +0 -14
- package/dist/agent/index.js +0 -145
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/llm-agent.d.ts +0 -368
- package/dist/agent/llm-agent.js +0 -1931
- package/dist/agent/llm-agent.js.map +0 -1
- package/dist/agent/loop-detector.d.ts +0 -72
- package/dist/agent/loop-detector.js +0 -335
- package/dist/agent/loop-detector.js.map +0 -1
- package/dist/agent/parallel-tools.d.ts +0 -69
- package/dist/agent/parallel-tools.js +0 -188
- package/dist/agent/parallel-tools.js.map +0 -1
- package/dist/agent/planning/index.d.ts +0 -9
- package/dist/agent/planning/index.js +0 -9
- package/dist/agent/planning/index.js.map +0 -1
- package/dist/agent/planning/plan-executor.d.ts +0 -79
- package/dist/agent/planning/plan-executor.js +0 -240
- package/dist/agent/planning/plan-executor.js.map +0 -1
- package/dist/agent/progress-tracker.d.ts +0 -94
- package/dist/agent/progress-tracker.js +0 -225
- package/dist/agent/progress-tracker.js.map +0 -1
- package/dist/agent/specialized/analysis-agent.d.ts +0 -11
- package/dist/agent/specialized/analysis-agent.js +0 -24
- package/dist/agent/specialized/analysis-agent.js.map +0 -1
- package/dist/agent/specialized/debug-agent.d.ts +0 -11
- package/dist/agent/specialized/debug-agent.js +0 -46
- package/dist/agent/specialized/debug-agent.js.map +0 -1
- package/dist/agent/specialized/documentation-agent.d.ts +0 -11
- package/dist/agent/specialized/documentation-agent.js +0 -24
- package/dist/agent/specialized/documentation-agent.js.map +0 -1
- package/dist/agent/specialized/index.d.ts +0 -11
- package/dist/agent/specialized/index.js +0 -12
- package/dist/agent/specialized/index.js.map +0 -1
- package/dist/agent/specialized/performance-agent.d.ts +0 -11
- package/dist/agent/specialized/performance-agent.js +0 -24
- package/dist/agent/specialized/performance-agent.js.map +0 -1
- package/dist/agent/specialized/refactoring-agent.d.ts +0 -11
- package/dist/agent/specialized/refactoring-agent.js +0 -24
- package/dist/agent/specialized/refactoring-agent.js.map +0 -1
- package/dist/agent/specialized/testing-agent.d.ts +0 -11
- package/dist/agent/specialized/testing-agent.js +0 -24
- package/dist/agent/specialized/testing-agent.js.map +0 -1
- package/dist/agent/status-reporter.d.ts +0 -114
- package/dist/agent/status-reporter.js +0 -335
- package/dist/agent/status-reporter.js.map +0 -1
- package/dist/agent/streaming/index.d.ts +0 -9
- package/dist/agent/streaming/index.js +0 -9
- package/dist/agent/streaming/index.js.map +0 -1
- package/dist/agent/streaming/stream-handler.d.ts +0 -62
- package/dist/agent/streaming/stream-handler.js +0 -217
- package/dist/agent/streaming/stream-handler.js.map +0 -1
- package/dist/agent/subagent-orchestrator.d.ts +0 -166
- package/dist/agent/subagent-orchestrator.js +0 -487
- package/dist/agent/subagent-orchestrator.js.map +0 -1
- package/dist/agent/subagent-types.d.ts +0 -261
- package/dist/agent/subagent-types.js +0 -257
- package/dist/agent/subagent-types.js.map +0 -1
- package/dist/agent/subagent.d.ts +0 -116
- package/dist/agent/subagent.js +0 -507
- package/dist/agent/subagent.js.map +0 -1
- package/dist/checkpoint/index.d.ts +0 -9
- package/dist/checkpoint/index.js +0 -11
- package/dist/checkpoint/index.js.map +0 -1
- package/dist/checkpoint/manager.d.ts +0 -101
- package/dist/checkpoint/manager.js +0 -407
- package/dist/checkpoint/manager.js.map +0 -1
- package/dist/checkpoint/storage.d.ts +0 -39
- package/dist/checkpoint/storage.js +0 -350
- package/dist/checkpoint/storage.js.map +0 -1
- package/dist/checkpoint/types.d.ts +0 -111
- package/dist/checkpoint/types.js +0 -17
- package/dist/checkpoint/types.js.map +0 -1
- package/dist/commands/cache.d.ts +0 -7
- package/dist/commands/cache.js +0 -284
- package/dist/commands/cache.js.map +0 -1
- package/dist/commands/custom-commands.d.ts +0 -77
- package/dist/commands/custom-commands.js +0 -251
- package/dist/commands/custom-commands.js.map +0 -1
- package/dist/commands/design.d.ts +0 -18
- package/dist/commands/design.js +0 -511
- package/dist/commands/design.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -6
- package/dist/commands/doctor.js +0 -773
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/frontend.d.ts +0 -9
- package/dist/commands/frontend.js +0 -645
- package/dist/commands/frontend.js.map +0 -1
- package/dist/commands/init/wizard.d.ts +0 -55
- package/dist/commands/init/wizard.js +0 -189
- package/dist/commands/init/wizard.js.map +0 -1
- package/dist/commands/init.d.ts +0 -8
- package/dist/commands/init.js +0 -195
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp-migrate.d.ts +0 -9
- package/dist/commands/mcp-migrate.js +0 -175
- package/dist/commands/mcp-migrate.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -2
- package/dist/commands/mcp.js +0 -1292
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -6
- package/dist/commands/memory.js +0 -555
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/models.d.ts +0 -5
- package/dist/commands/models.js +0 -213
- package/dist/commands/models.js.map +0 -1
- package/dist/commands/plan.d.ts +0 -43
- package/dist/commands/plan.js +0 -362
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/rewind.d.ts +0 -19
- package/dist/commands/rewind.js +0 -221
- package/dist/commands/rewind.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -14
- package/dist/commands/setup.js +0 -733
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/status.d.ts +0 -7
- package/dist/commands/status.js +0 -437
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/templates.d.ts +0 -5
- package/dist/commands/templates.js +0 -245
- package/dist/commands/templates.js.map +0 -1
- package/dist/commands/update.d.ts +0 -49
- package/dist/commands/update.js +0 -366
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/usage.d.ts +0 -8
- package/dist/commands/usage.js +0 -264
- package/dist/commands/usage.js.map +0 -1
- package/dist/commands/vscode.d.ts +0 -7
- package/dist/commands/vscode.js +0 -419
- package/dist/commands/vscode.js.map +0 -1
- package/dist/constants.d.ts +0 -236
- package/dist/constants.js +0 -288
- package/dist/constants.js.map +0 -1
- package/dist/design/figma-alias.d.ts +0 -170
- package/dist/design/figma-alias.js +0 -577
- package/dist/design/figma-alias.js.map +0 -1
- package/dist/design/figma-audit.d.ts +0 -40
- package/dist/design/figma-audit.js +0 -383
- package/dist/design/figma-audit.js.map +0 -1
- package/dist/design/figma-client.d.ts +0 -131
- package/dist/design/figma-client.js +0 -369
- package/dist/design/figma-client.js.map +0 -1
- package/dist/design/figma-map.d.ts +0 -29
- package/dist/design/figma-map.js +0 -346
- package/dist/design/figma-map.js.map +0 -1
- package/dist/design/figma-tokens.d.ts +0 -73
- package/dist/design/figma-tokens.js +0 -448
- package/dist/design/figma-tokens.js.map +0 -1
- package/dist/design/index.d.ts +0 -13
- package/dist/design/index.js +0 -20
- package/dist/design/index.js.map +0 -1
- package/dist/design/types.d.ts +0 -98
- package/dist/design/types.js +0 -9
- package/dist/design/types.js.map +0 -1
- package/dist/hooks/hook-runner.d.ts +0 -142
- package/dist/hooks/hook-runner.js +0 -436
- package/dist/hooks/hook-runner.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -9
- package/dist/hooks/index.js +0 -10
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/manager.d.ts +0 -84
- package/dist/hooks/manager.js +0 -348
- package/dist/hooks/manager.js.map +0 -1
- package/dist/hooks/types.d.ts +0 -134
- package/dist/hooks/types.js +0 -9
- package/dist/hooks/types.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/ipc/index.d.ts +0 -9
- package/dist/ipc/index.js +0 -10
- package/dist/ipc/index.js.map +0 -1
- package/dist/ipc/vscode-client.d.ts +0 -200
- package/dist/ipc/vscode-client.js +0 -495
- package/dist/ipc/vscode-client.js.map +0 -1
- package/dist/llm/client.d.ts +0 -205
- package/dist/llm/client.js +0 -735
- package/dist/llm/client.js.map +0 -1
- package/dist/llm/tools.d.ts +0 -102
- package/dist/llm/tools.js +0 -275
- package/dist/llm/tools.js.map +0 -1
- package/dist/llm/types.d.ts +0 -428
- package/dist/llm/types.js +0 -194
- package/dist/llm/types.js.map +0 -1
- package/dist/mcp/automatosx-auto-discovery.d.ts +0 -66
- package/dist/mcp/automatosx-auto-discovery.js +0 -169
- package/dist/mcp/automatosx-auto-discovery.js.map +0 -1
- package/dist/mcp/automatosx-loader.d.ts +0 -99
- package/dist/mcp/automatosx-loader.js +0 -250
- package/dist/mcp/automatosx-loader.js.map +0 -1
- package/dist/mcp/cancellation.d.ts +0 -182
- package/dist/mcp/cancellation.js +0 -275
- package/dist/mcp/cancellation.js.map +0 -1
- package/dist/mcp/client-v2.d.ts +0 -500
- package/dist/mcp/client-v2.js +0 -1433
- package/dist/mcp/client-v2.js.map +0 -1
- package/dist/mcp/client.d.ts +0 -170
- package/dist/mcp/client.js +0 -232
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/config-detector.d.ts +0 -90
- package/dist/mcp/config-detector.js +0 -250
- package/dist/mcp/config-detector.js.map +0 -1
- package/dist/mcp/config-migrator.d.ts +0 -68
- package/dist/mcp/config-migrator.js +0 -291
- package/dist/mcp/config-migrator.js.map +0 -1
- package/dist/mcp/config.d.ts +0 -24
- package/dist/mcp/config.js +0 -273
- package/dist/mcp/config.js.map +0 -1
- package/dist/mcp/constants.d.ts +0 -66
- package/dist/mcp/constants.js +0 -85
- package/dist/mcp/constants.js.map +0 -1
- package/dist/mcp/content-length-transport.d.ts +0 -106
- package/dist/mcp/content-length-transport.js +0 -413
- package/dist/mcp/content-length-transport.js.map +0 -1
- package/dist/mcp/debug.d.ts +0 -211
- package/dist/mcp/debug.js +0 -404
- package/dist/mcp/debug.js.map +0 -1
- package/dist/mcp/error-formatter.d.ts +0 -40
- package/dist/mcp/error-formatter.js +0 -207
- package/dist/mcp/error-formatter.js.map +0 -1
- package/dist/mcp/error-remediation.d.ts +0 -45
- package/dist/mcp/error-remediation.js +0 -291
- package/dist/mcp/error-remediation.js.map +0 -1
- package/dist/mcp/health.d.ts +0 -120
- package/dist/mcp/health.js +0 -267
- package/dist/mcp/health.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -56
- package/dist/mcp/index.js +0 -89
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/invariants.d.ts +0 -141
- package/dist/mcp/invariants.js +0 -243
- package/dist/mcp/invariants.js.map +0 -1
- package/dist/mcp/mutex-safe.d.ts +0 -151
- package/dist/mcp/mutex-safe.js +0 -260
- package/dist/mcp/mutex-safe.js.map +0 -1
- package/dist/mcp/progress.d.ts +0 -155
- package/dist/mcp/progress.js +0 -252
- package/dist/mcp/progress.js.map +0 -1
- package/dist/mcp/prompts.d.ts +0 -68
- package/dist/mcp/prompts.js +0 -129
- package/dist/mcp/prompts.js.map +0 -1
- package/dist/mcp/provider-mcp-loader.d.ts +0 -130
- package/dist/mcp/provider-mcp-loader.js +0 -292
- package/dist/mcp/provider-mcp-loader.js.map +0 -1
- package/dist/mcp/reconnection.d.ts +0 -101
- package/dist/mcp/reconnection.js +0 -253
- package/dist/mcp/reconnection.js.map +0 -1
- package/dist/mcp/registry.d.ts +0 -75
- package/dist/mcp/registry.js +0 -276
- package/dist/mcp/registry.js.map +0 -1
- package/dist/mcp/resources.d.ts +0 -58
- package/dist/mcp/resources.js +0 -144
- package/dist/mcp/resources.js.map +0 -1
- package/dist/mcp/schema-validator.d.ts +0 -82
- package/dist/mcp/schema-validator.js +0 -161
- package/dist/mcp/schema-validator.js.map +0 -1
- package/dist/mcp/ssrf-protection.d.ts +0 -86
- package/dist/mcp/ssrf-protection.js +0 -311
- package/dist/mcp/ssrf-protection.js.map +0 -1
- package/dist/mcp/subscriptions.d.ts +0 -168
- package/dist/mcp/subscriptions.js +0 -248
- package/dist/mcp/subscriptions.js.map +0 -1
- package/dist/mcp/templates.d.ts +0 -52
- package/dist/mcp/templates.js +0 -627
- package/dist/mcp/templates.js.map +0 -1
- package/dist/mcp/transports.d.ts +0 -80
- package/dist/mcp/transports.js +0 -237
- package/dist/mcp/transports.js.map +0 -1
- package/dist/mcp/type-safety.d.ts +0 -225
- package/dist/mcp/type-safety.js +0 -237
- package/dist/mcp/type-safety.js.map +0 -1
- package/dist/mcp/validation.d.ts +0 -29
- package/dist/mcp/validation.js +0 -339
- package/dist/mcp/validation.js.map +0 -1
- package/dist/mcp/zai-detector.d.ts +0 -63
- package/dist/mcp/zai-detector.js +0 -193
- package/dist/mcp/zai-detector.js.map +0 -1
- package/dist/mcp/zai-templates.d.ts +0 -90
- package/dist/mcp/zai-templates.js +0 -157
- package/dist/mcp/zai-templates.js.map +0 -1
- package/dist/memory/context-generator.d.ts +0 -84
- package/dist/memory/context-generator.js +0 -546
- package/dist/memory/context-generator.js.map +0 -1
- package/dist/memory/context-injector.d.ts +0 -97
- package/dist/memory/context-injector.js +0 -159
- package/dist/memory/context-injector.js.map +0 -1
- package/dist/memory/context-store.d.ts +0 -103
- package/dist/memory/context-store.js +0 -264
- package/dist/memory/context-store.js.map +0 -1
- package/dist/memory/index.d.ts +0 -43
- package/dist/memory/index.js +0 -49
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/provider-context-store.d.ts +0 -127
- package/dist/memory/provider-context-store.js +0 -385
- package/dist/memory/provider-context-store.js.map +0 -1
- package/dist/memory/schemas.d.ts +0 -118
- package/dist/memory/schemas.js +0 -106
- package/dist/memory/schemas.js.map +0 -1
- package/dist/memory/stats-collector.d.ts +0 -73
- package/dist/memory/stats-collector.js +0 -170
- package/dist/memory/stats-collector.js.map +0 -1
- package/dist/memory/types.d.ts +0 -177
- package/dist/memory/types.js +0 -73
- package/dist/memory/types.js.map +0 -1
- package/dist/permissions/index.d.ts +0 -6
- package/dist/permissions/index.js +0 -7
- package/dist/permissions/index.js.map +0 -1
- package/dist/permissions/permission-manager.d.ts +0 -149
- package/dist/permissions/permission-manager.js +0 -410
- package/dist/permissions/permission-manager.js.map +0 -1
- package/dist/planner/dependency-resolver.d.ts +0 -72
- package/dist/planner/dependency-resolver.js +0 -272
- package/dist/planner/dependency-resolver.js.map +0 -1
- package/dist/planner/index.d.ts +0 -12
- package/dist/planner/index.js +0 -28
- package/dist/planner/index.js.map +0 -1
- package/dist/planner/plan-generator.d.ts +0 -74
- package/dist/planner/plan-generator.js +0 -244
- package/dist/planner/plan-generator.js.map +0 -1
- package/dist/planner/plan-storage.d.ts +0 -113
- package/dist/planner/plan-storage.js +0 -398
- package/dist/planner/plan-storage.js.map +0 -1
- package/dist/planner/prompts/planning-prompt.d.ts +0 -62
- package/dist/planner/prompts/planning-prompt.js +0 -414
- package/dist/planner/prompts/planning-prompt.js.map +0 -1
- package/dist/planner/task-planner.d.ts +0 -139
- package/dist/planner/task-planner.js +0 -532
- package/dist/planner/task-planner.js.map +0 -1
- package/dist/planner/token-estimator.d.ts +0 -63
- package/dist/planner/token-estimator.js +0 -295
- package/dist/planner/token-estimator.js.map +0 -1
- package/dist/planner/types.d.ts +0 -425
- package/dist/planner/types.js +0 -213
- package/dist/planner/types.js.map +0 -1
- package/dist/provider/config.d.ts +0 -227
- package/dist/provider/config.js +0 -430
- package/dist/provider/config.js.map +0 -1
- package/dist/schemas/api-schemas.d.ts +0 -45
- package/dist/schemas/api-schemas.js +0 -129
- package/dist/schemas/api-schemas.js.map +0 -1
- package/dist/schemas/confirmation-schemas.d.ts +0 -39
- package/dist/schemas/confirmation-schemas.js +0 -48
- package/dist/schemas/confirmation-schemas.js.map +0 -1
- package/dist/schemas/index-unified.d.ts +0 -12
- package/dist/schemas/index-unified.js +0 -17
- package/dist/schemas/index-unified.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -83
- package/dist/schemas/index.js +0 -139
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/settings-schemas.d.ts +0 -186
- package/dist/schemas/settings-schemas.js +0 -324
- package/dist/schemas/settings-schemas.js.map +0 -1
- package/dist/schemas/tool-schemas.d.ts +0 -127
- package/dist/schemas/tool-schemas.js +0 -84
- package/dist/schemas/tool-schemas.js.map +0 -1
- package/dist/schemas/yaml-schemas.d.ts +0 -231
- package/dist/schemas/yaml-schemas.js +0 -199
- package/dist/schemas/yaml-schemas.js.map +0 -1
- package/dist/sdk/errors.d.ts +0 -100
- package/dist/sdk/errors.js +0 -138
- package/dist/sdk/errors.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -901
- package/dist/sdk/index.js +0 -1272
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/progress-reporter.d.ts +0 -123
- package/dist/sdk/progress-reporter.js +0 -220
- package/dist/sdk/progress-reporter.js.map +0 -1
- package/dist/sdk/testing.d.ts +0 -427
- package/dist/sdk/testing.js +0 -725
- package/dist/sdk/testing.js.map +0 -1
- package/dist/sdk/tool-registry.d.ts +0 -194
- package/dist/sdk/tool-registry.js +0 -326
- package/dist/sdk/tool-registry.js.map +0 -1
- package/dist/sdk/types.d.ts +0 -53
- package/dist/sdk/types.js +0 -8
- package/dist/sdk/types.js.map +0 -1
- package/dist/sdk/unified-logger.d.ts +0 -173
- package/dist/sdk/unified-logger.js +0 -327
- package/dist/sdk/unified-logger.js.map +0 -1
- package/dist/sdk/version.d.ts +0 -163
- package/dist/sdk/version.js +0 -205
- package/dist/sdk/version.js.map +0 -1
- package/dist/tools/ask-user.d.ts +0 -126
- package/dist/tools/ask-user.js +0 -290
- package/dist/tools/ask-user.js.map +0 -1
- package/dist/tools/ax-agent.d.ts +0 -71
- package/dist/tools/ax-agent.js +0 -283
- package/dist/tools/ax-agent.js.map +0 -1
- package/dist/tools/bash-output.d.ts +0 -25
- package/dist/tools/bash-output.js +0 -146
- package/dist/tools/bash-output.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -67
- package/dist/tools/bash.js +0 -522
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/confirmation-tool.d.ts +0 -16
- package/dist/tools/confirmation-tool.js +0 -76
- package/dist/tools/confirmation-tool.js.map +0 -1
- package/dist/tools/definitions/ask-user.d.ts +0 -8
- package/dist/tools/definitions/ask-user.js +0 -168
- package/dist/tools/definitions/ask-user.js.map +0 -1
- package/dist/tools/definitions/ax-agent.d.ts +0 -8
- package/dist/tools/definitions/ax-agent.js +0 -276
- package/dist/tools/definitions/ax-agent.js.map +0 -1
- package/dist/tools/definitions/bash-output.d.ts +0 -7
- package/dist/tools/definitions/bash-output.js +0 -78
- package/dist/tools/definitions/bash-output.js.map +0 -1
- package/dist/tools/definitions/bash.d.ts +0 -8
- package/dist/tools/definitions/bash.js +0 -152
- package/dist/tools/definitions/bash.js.map +0 -1
- package/dist/tools/definitions/create-file.d.ts +0 -7
- package/dist/tools/definitions/create-file.js +0 -129
- package/dist/tools/definitions/create-file.js.map +0 -1
- package/dist/tools/definitions/design.d.ts +0 -12
- package/dist/tools/definitions/design.js +0 -368
- package/dist/tools/definitions/design.js.map +0 -1
- package/dist/tools/definitions/index.d.ts +0 -49
- package/dist/tools/definitions/index.js +0 -87
- package/dist/tools/definitions/index.js.map +0 -1
- package/dist/tools/definitions/multi-edit.d.ts +0 -7
- package/dist/tools/definitions/multi-edit.js +0 -123
- package/dist/tools/definitions/multi-edit.js.map +0 -1
- package/dist/tools/definitions/search.d.ts +0 -7
- package/dist/tools/definitions/search.js +0 -159
- package/dist/tools/definitions/search.js.map +0 -1
- package/dist/tools/definitions/str-replace-editor.d.ts +0 -7
- package/dist/tools/definitions/str-replace-editor.js +0 -145
- package/dist/tools/definitions/str-replace-editor.js.map +0 -1
- package/dist/tools/definitions/todo.d.ts +0 -8
- package/dist/tools/definitions/todo.js +0 -261
- package/dist/tools/definitions/todo.js.map +0 -1
- package/dist/tools/definitions/view-file.d.ts +0 -7
- package/dist/tools/definitions/view-file.js +0 -111
- package/dist/tools/definitions/view-file.js.map +0 -1
- package/dist/tools/design-tool.d.ts +0 -68
- package/dist/tools/design-tool.js +0 -299
- package/dist/tools/design-tool.js.map +0 -1
- package/dist/tools/format-generators.d.ts +0 -62
- package/dist/tools/format-generators.js +0 -291
- package/dist/tools/format-generators.js.map +0 -1
- package/dist/tools/index.d.ts +0 -8
- package/dist/tools/index.js +0 -11
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/priority-registry.d.ts +0 -124
- package/dist/tools/priority-registry.js +0 -401
- package/dist/tools/priority-registry.js.map +0 -1
- package/dist/tools/priority.d.ts +0 -158
- package/dist/tools/priority.js +0 -350
- package/dist/tools/priority.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -146
- package/dist/tools/registry.js +0 -171
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/search.d.ts +0 -85
- package/dist/tools/search.js +0 -430
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/text-editor.d.ts +0 -87
- package/dist/tools/text-editor.js +0 -1369
- package/dist/tools/text-editor.js.map +0 -1
- package/dist/tools/todo-tool.d.ts +0 -20
- package/dist/tools/todo-tool.js +0 -186
- package/dist/tools/todo-tool.js.map +0 -1
- package/dist/tools/types.d.ts +0 -175
- package/dist/tools/types.js +0 -11
- package/dist/tools/types.js.map +0 -1
- package/dist/types/index.d.ts +0 -30
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/project-analysis.d.ts +0 -84
- package/dist/types/project-analysis.js +0 -5
- package/dist/types/project-analysis.js.map +0 -1
- package/dist/types/template.d.ts +0 -53
- package/dist/types/template.js +0 -5
- package/dist/types/template.js.map +0 -1
- package/dist/ui/app.d.ts +0 -7
- package/dist/ui/app.js +0 -102
- package/dist/ui/app.js.map +0 -1
- package/dist/ui/components/api-key-input.d.ts +0 -7
- package/dist/ui/components/api-key-input.js +0 -92
- package/dist/ui/components/api-key-input.js.map +0 -1
- package/dist/ui/components/chat-history.d.ts +0 -12
- package/dist/ui/components/chat-history.js +0 -391
- package/dist/ui/components/chat-history.js.map +0 -1
- package/dist/ui/components/chat-input.d.ts +0 -13
- package/dist/ui/components/chat-input.js +0 -179
- package/dist/ui/components/chat-input.js.map +0 -1
- package/dist/ui/components/chat-interface.d.ts +0 -11
- package/dist/ui/components/chat-interface.js +0 -830
- package/dist/ui/components/chat-interface.js.map +0 -1
- package/dist/ui/components/collapsible-tool-result.d.ts +0 -42
- package/dist/ui/components/collapsible-tool-result.js +0 -216
- package/dist/ui/components/collapsible-tool-result.js.map +0 -1
- package/dist/ui/components/command-suggestions.d.ts +0 -29
- package/dist/ui/components/command-suggestions.js +0 -88
- package/dist/ui/components/command-suggestions.js.map +0 -1
- package/dist/ui/components/confirmation-dialog.d.ts +0 -11
- package/dist/ui/components/confirmation-dialog.js +0 -100
- package/dist/ui/components/confirmation-dialog.js.map +0 -1
- package/dist/ui/components/context-breakdown.d.ts +0 -23
- package/dist/ui/components/context-breakdown.js +0 -124
- package/dist/ui/components/context-breakdown.js.map +0 -1
- package/dist/ui/components/diff-renderer.d.ts +0 -13
- package/dist/ui/components/diff-renderer.js +0 -192
- package/dist/ui/components/diff-renderer.js.map +0 -1
- package/dist/ui/components/index.d.ts +0 -18
- package/dist/ui/components/index.js +0 -20
- package/dist/ui/components/index.js.map +0 -1
- package/dist/ui/components/keyboard-help.d.ts +0 -17
- package/dist/ui/components/keyboard-help.js +0 -122
- package/dist/ui/components/keyboard-help.js.map +0 -1
- package/dist/ui/components/keyboard-hints.d.ts +0 -35
- package/dist/ui/components/keyboard-hints.js +0 -142
- package/dist/ui/components/keyboard-hints.js.map +0 -1
- package/dist/ui/components/loading-spinner.d.ts +0 -9
- package/dist/ui/components/loading-spinner.js +0 -120
- package/dist/ui/components/loading-spinner.js.map +0 -1
- package/dist/ui/components/mcp-dashboard.d.ts +0 -15
- package/dist/ui/components/mcp-dashboard.js +0 -520
- package/dist/ui/components/mcp-dashboard.js.map +0 -1
- package/dist/ui/components/mcp-status.d.ts +0 -5
- package/dist/ui/components/mcp-status.js +0 -58
- package/dist/ui/components/mcp-status.js.map +0 -1
- package/dist/ui/components/model-selection.d.ts +0 -12
- package/dist/ui/components/model-selection.js +0 -17
- package/dist/ui/components/model-selection.js.map +0 -1
- package/dist/ui/components/phase-progress.d.ts +0 -21
- package/dist/ui/components/phase-progress.js +0 -185
- package/dist/ui/components/phase-progress.js.map +0 -1
- package/dist/ui/components/question-dialog.d.ts +0 -17
- package/dist/ui/components/question-dialog.js +0 -181
- package/dist/ui/components/question-dialog.js.map +0 -1
- package/dist/ui/components/quick-actions.d.ts +0 -12
- package/dist/ui/components/quick-actions.js +0 -171
- package/dist/ui/components/quick-actions.js.map +0 -1
- package/dist/ui/components/reasoning-display.d.ts +0 -36
- package/dist/ui/components/reasoning-display.js +0 -46
- package/dist/ui/components/reasoning-display.js.map +0 -1
- package/dist/ui/components/status-bar.d.ts +0 -47
- package/dist/ui/components/status-bar.js +0 -310
- package/dist/ui/components/status-bar.js.map +0 -1
- package/dist/ui/components/subagent-monitor.d.ts +0 -41
- package/dist/ui/components/subagent-monitor.js +0 -122
- package/dist/ui/components/subagent-monitor.js.map +0 -1
- package/dist/ui/components/toast-notification.d.ts +0 -197
- package/dist/ui/components/toast-notification.js +0 -190
- package/dist/ui/components/toast-notification.js.map +0 -1
- package/dist/ui/components/tool-group-display.d.ts +0 -19
- package/dist/ui/components/tool-group-display.js +0 -222
- package/dist/ui/components/tool-group-display.js.map +0 -1
- package/dist/ui/components/virtualized-chat-history.d.ts +0 -33
- package/dist/ui/components/virtualized-chat-history.js +0 -182
- package/dist/ui/components/virtualized-chat-history.js.map +0 -1
- package/dist/ui/components/welcome-panel.d.ts +0 -11
- package/dist/ui/components/welcome-panel.js +0 -225
- package/dist/ui/components/welcome-panel.js.map +0 -1
- package/dist/ui/hooks/use-chat-reducer.d.ts +0 -69
- package/dist/ui/hooks/use-chat-reducer.js +0 -118
- package/dist/ui/hooks/use-chat-reducer.js.map +0 -1
- package/dist/ui/hooks/use-enhanced-input.d.ts +0 -53
- package/dist/ui/hooks/use-enhanced-input.js +0 -1275
- package/dist/ui/hooks/use-enhanced-input.js.map +0 -1
- package/dist/ui/hooks/use-input-handler.d.ts +0 -79
- package/dist/ui/hooks/use-input-handler.js +0 -2251
- package/dist/ui/hooks/use-input-handler.js.map +0 -1
- package/dist/ui/hooks/use-input-history.d.ts +0 -9
- package/dist/ui/hooks/use-input-history.js +0 -168
- package/dist/ui/hooks/use-input-history.js.map +0 -1
- package/dist/ui/shared/max-sized-box.d.ts +0 -17
- package/dist/ui/shared/max-sized-box.js +0 -14
- package/dist/ui/shared/max-sized-box.js.map +0 -1
- package/dist/ui/themes/index.d.ts +0 -5
- package/dist/ui/themes/index.js +0 -5
- package/dist/ui/themes/index.js.map +0 -1
- package/dist/ui/themes/theme-registry.d.ts +0 -55
- package/dist/ui/themes/theme-registry.js +0 -202
- package/dist/ui/themes/theme-registry.js.map +0 -1
- package/dist/ui/utils/bracketed-paste-handler.d.ts +0 -97
- package/dist/ui/utils/bracketed-paste-handler.js +0 -322
- package/dist/ui/utils/bracketed-paste-handler.js.map +0 -1
- package/dist/ui/utils/change-summarizer.d.ts +0 -20
- package/dist/ui/utils/change-summarizer.js +0 -282
- package/dist/ui/utils/change-summarizer.js.map +0 -1
- package/dist/ui/utils/code-colorizer.d.ts +0 -9
- package/dist/ui/utils/code-colorizer.js +0 -13
- package/dist/ui/utils/code-colorizer.js.map +0 -1
- package/dist/ui/utils/colors.d.ts +0 -41
- package/dist/ui/utils/colors.js +0 -80
- package/dist/ui/utils/colors.js.map +0 -1
- package/dist/ui/utils/image-handler.d.ts +0 -29
- package/dist/ui/utils/image-handler.js +0 -129
- package/dist/ui/utils/image-handler.js.map +0 -1
- package/dist/ui/utils/markdown-renderer.d.ts +0 -4
- package/dist/ui/utils/markdown-renderer.js +0 -40
- package/dist/ui/utils/markdown-renderer.js.map +0 -1
- package/dist/ui/utils/semantic-action-detector.d.ts +0 -49
- package/dist/ui/utils/semantic-action-detector.js +0 -339
- package/dist/ui/utils/semantic-action-detector.js.map +0 -1
- package/dist/ui/utils/tool-grouper.d.ts +0 -94
- package/dist/ui/utils/tool-grouper.js +0 -618
- package/dist/ui/utils/tool-grouper.js.map +0 -1
- package/dist/utils/api-error.d.ts +0 -61
- package/dist/utils/api-error.js +0 -176
- package/dist/utils/api-error.js.map +0 -1
- package/dist/utils/audit-logger.d.ts +0 -206
- package/dist/utils/audit-logger.js +0 -286
- package/dist/utils/audit-logger.js.map +0 -1
- package/dist/utils/auto-accept-logger.d.ts +0 -175
- package/dist/utils/auto-accept-logger.js +0 -423
- package/dist/utils/auto-accept-logger.js.map +0 -1
- package/dist/utils/automatosx-detector.d.ts +0 -19
- package/dist/utils/automatosx-detector.js +0 -52
- package/dist/utils/automatosx-detector.js.map +0 -1
- package/dist/utils/background-task-manager.d.ts +0 -114
- package/dist/utils/background-task-manager.js +0 -470
- package/dist/utils/background-task-manager.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -77
- package/dist/utils/cache.js +0 -180
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/command-security.d.ts +0 -85
- package/dist/utils/command-security.js +0 -210
- package/dist/utils/command-security.js.map +0 -1
- package/dist/utils/config-loader.d.ts +0 -190
- package/dist/utils/config-loader.js +0 -108
- package/dist/utils/config-loader.js.map +0 -1
- package/dist/utils/confirmation-service.d.ts +0 -51
- package/dist/utils/confirmation-service.js +0 -220
- package/dist/utils/confirmation-service.js.map +0 -1
- package/dist/utils/console-messenger.d.ts +0 -80
- package/dist/utils/console-messenger.js +0 -142
- package/dist/utils/console-messenger.js.map +0 -1
- package/dist/utils/custom-instructions.d.ts +0 -1
- package/dist/utils/custom-instructions.js +0 -24
- package/dist/utils/custom-instructions.js.map +0 -1
- package/dist/utils/encryption.d.ts +0 -86
- package/dist/utils/encryption.js +0 -236
- package/dist/utils/encryption.js.map +0 -1
- package/dist/utils/enhanced-error-messages.d.ts +0 -33
- package/dist/utils/enhanced-error-messages.js +0 -440
- package/dist/utils/enhanced-error-messages.js.map +0 -1
- package/dist/utils/error-handler.d.ts +0 -65
- package/dist/utils/error-handler.js +0 -148
- package/dist/utils/error-handler.js.map +0 -1
- package/dist/utils/error-translator.d.ts +0 -25
- package/dist/utils/error-translator.js +0 -203
- package/dist/utils/error-translator.js.map +0 -1
- package/dist/utils/external-editor.d.ts +0 -47
- package/dist/utils/external-editor.js +0 -179
- package/dist/utils/external-editor.js.map +0 -1
- package/dist/utils/file-cache.d.ts +0 -148
- package/dist/utils/file-cache.js +0 -413
- package/dist/utils/file-cache.js.map +0 -1
- package/dist/utils/file-lock.d.ts +0 -141
- package/dist/utils/file-lock.js +0 -554
- package/dist/utils/file-lock.js.map +0 -1
- package/dist/utils/file-mentions.d.ts +0 -68
- package/dist/utils/file-mentions.js +0 -225
- package/dist/utils/file-mentions.js.map +0 -1
- package/dist/utils/history-manager.d.ts +0 -52
- package/dist/utils/history-manager.js +0 -211
- package/dist/utils/history-manager.js.map +0 -1
- package/dist/utils/history-migration.d.ts +0 -9
- package/dist/utils/history-migration.js +0 -37
- package/dist/utils/history-migration.js.map +0 -1
- package/dist/utils/image-processor.d.ts +0 -33
- package/dist/utils/image-processor.js +0 -124
- package/dist/utils/image-processor.js.map +0 -1
- package/dist/utils/index.d.ts +0 -92
- package/dist/utils/index.js +0 -111
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/init-previewer.d.ts +0 -56
- package/dist/utils/init-previewer.js +0 -239
- package/dist/utils/init-previewer.js.map +0 -1
- package/dist/utils/init-validator.d.ts +0 -65
- package/dist/utils/init-validator.js +0 -252
- package/dist/utils/init-validator.js.map +0 -1
- package/dist/utils/input-sanitizer.d.ts +0 -210
- package/dist/utils/input-sanitizer.js +0 -362
- package/dist/utils/input-sanitizer.js.map +0 -1
- package/dist/utils/instruction-generator.d.ts +0 -21
- package/dist/utils/instruction-generator.js +0 -233
- package/dist/utils/instruction-generator.js.map +0 -1
- package/dist/utils/json-utils.d.ts +0 -72
- package/dist/utils/json-utils.js +0 -226
- package/dist/utils/json-utils.js.map +0 -1
- package/dist/utils/llm-optimized-instruction-generator.d.ts +0 -36
- package/dist/utils/llm-optimized-instruction-generator.js +0 -365
- package/dist/utils/llm-optimized-instruction-generator.js.map +0 -1
- package/dist/utils/message-optimizer.d.ts +0 -100
- package/dist/utils/message-optimizer.js +0 -297
- package/dist/utils/message-optimizer.js.map +0 -1
- package/dist/utils/onboarding-manager.d.ts +0 -45
- package/dist/utils/onboarding-manager.js +0 -131
- package/dist/utils/onboarding-manager.js.map +0 -1
- package/dist/utils/parallel-analyzer.d.ts +0 -123
- package/dist/utils/parallel-analyzer.js +0 -241
- package/dist/utils/parallel-analyzer.js.map +0 -1
- package/dist/utils/paste-utils.d.ts +0 -99
- package/dist/utils/paste-utils.js +0 -295
- package/dist/utils/paste-utils.js.map +0 -1
- package/dist/utils/path-helpers.d.ts +0 -8
- package/dist/utils/path-helpers.js +0 -35
- package/dist/utils/path-helpers.js.map +0 -1
- package/dist/utils/path-security.d.ts +0 -92
- package/dist/utils/path-security.js +0 -300
- package/dist/utils/path-security.js.map +0 -1
- package/dist/utils/path-utils.d.ts +0 -83
- package/dist/utils/path-utils.js +0 -122
- package/dist/utils/path-utils.js.map +0 -1
- package/dist/utils/path-validator.d.ts +0 -66
- package/dist/utils/path-validator.js +0 -141
- package/dist/utils/path-validator.js.map +0 -1
- package/dist/utils/performance.d.ts +0 -74
- package/dist/utils/performance.js +0 -133
- package/dist/utils/performance.js.map +0 -1
- package/dist/utils/process-pool.d.ts +0 -109
- package/dist/utils/process-pool.js +0 -332
- package/dist/utils/process-pool.js.map +0 -1
- package/dist/utils/progress-tracker.d.ts +0 -51
- package/dist/utils/progress-tracker.js +0 -152
- package/dist/utils/progress-tracker.js.map +0 -1
- package/dist/utils/project-analyzer.d.ts +0 -49
- package/dist/utils/project-analyzer.js +0 -396
- package/dist/utils/project-analyzer.js.map +0 -1
- package/dist/utils/prompt-builder.d.ts +0 -14
- package/dist/utils/prompt-builder.js +0 -100
- package/dist/utils/prompt-builder.js.map +0 -1
- package/dist/utils/provider-context.d.ts +0 -243
- package/dist/utils/provider-context.js +0 -421
- package/dist/utils/provider-context.js.map +0 -1
- package/dist/utils/provider-file-cache.d.ts +0 -91
- package/dist/utils/provider-file-cache.js +0 -165
- package/dist/utils/provider-file-cache.js.map +0 -1
- package/dist/utils/provider-settings.d.ts +0 -181
- package/dist/utils/provider-settings.js +0 -450
- package/dist/utils/provider-settings.js.map +0 -1
- package/dist/utils/rate-limiter.d.ts +0 -222
- package/dist/utils/rate-limiter.js +0 -338
- package/dist/utils/rate-limiter.js.map +0 -1
- package/dist/utils/retry-helper.d.ts +0 -81
- package/dist/utils/retry-helper.js +0 -244
- package/dist/utils/retry-helper.js.map +0 -1
- package/dist/utils/safety-rules.d.ts +0 -64
- package/dist/utils/safety-rules.js +0 -225
- package/dist/utils/safety-rules.js.map +0 -1
- package/dist/utils/settings-manager.d.ts +0 -256
- package/dist/utils/settings-manager.js +0 -967
- package/dist/utils/settings-manager.js.map +0 -1
- package/dist/utils/setup-validator.d.ts +0 -47
- package/dist/utils/setup-validator.js +0 -304
- package/dist/utils/setup-validator.js.map +0 -1
- package/dist/utils/string-utils.d.ts +0 -19
- package/dist/utils/string-utils.js +0 -28
- package/dist/utils/string-utils.js.map +0 -1
- package/dist/utils/template-manager.d.ts +0 -62
- package/dist/utils/template-manager.js +0 -366
- package/dist/utils/template-manager.js.map +0 -1
- package/dist/utils/text-utils.d.ts +0 -82
- package/dist/utils/text-utils.js +0 -203
- package/dist/utils/text-utils.js.map +0 -1
- package/dist/utils/token-counter.d.ts +0 -76
- package/dist/utils/token-counter.js +0 -231
- package/dist/utils/token-counter.js.map +0 -1
- package/dist/utils/usage-tracker.d.ts +0 -78
- package/dist/utils/usage-tracker.js +0 -126
- package/dist/utils/usage-tracker.js.map +0 -1
- package/dist/utils/version.d.ts +0 -14
- package/dist/utils/version.js +0 -70
- package/dist/utils/version.js.map +0 -1
package/dist/commands/mcp.js
DELETED
|
@@ -1,1292 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { addMCPServer, removeMCPServer, loadMCPConfig, PREDEFINED_SERVERS, getTemplate, generateConfigFromTemplate } from '../mcp/config.js';
|
|
3
|
-
import { getTemplateNames, getTemplatesByCategory } from '../mcp/templates.js';
|
|
4
|
-
import { getMCPManager } from '../llm/tools.js';
|
|
5
|
-
import { MCPServerIdSchema } from '@defai.digital/ax-schemas';
|
|
6
|
-
import chalk from 'chalk';
|
|
7
|
-
import * as prompts from '@clack/prompts';
|
|
8
|
-
import { ConsoleMessenger } from '../utils/console-messenger.js';
|
|
9
|
-
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
10
|
-
import { validateServerConfig, formatValidationResult } from '../mcp/validation.js';
|
|
11
|
-
import { listAllResources, listServerResources, searchResources } from '../mcp/resources.js';
|
|
12
|
-
import { searchRegistry, getRegistryServer, getPopularServers, generateConfigFromRegistry, formatRegistryServer } from '../mcp/registry.js';
|
|
13
|
-
import { MCP_CONFIG } from '../constants.js';
|
|
14
|
-
import { ZAI_SERVER_NAMES, ZAI_MCP_TEMPLATES, generateZAIServerConfig, getAllZAIServerNames, isZAIServer, detectZAIServices, getZAIApiKey, getRecommendedServers, formatZAIStatus, } from '../mcp/index.js';
|
|
15
|
-
const VALID_TEMPLATE_CATEGORIES = ['design', 'deployment', 'testing', 'monitoring', 'backend', 'version-control'];
|
|
16
|
-
function isValidTemplateCategory(category) {
|
|
17
|
-
return typeof category === 'string' && VALID_TEMPLATE_CATEGORIES.includes(category);
|
|
18
|
-
}
|
|
19
|
-
function getCliName() {
|
|
20
|
-
return 'ax-cli';
|
|
21
|
-
}
|
|
22
|
-
function filterValidHealth(health) {
|
|
23
|
-
return health.filter((item) => Boolean(item));
|
|
24
|
-
}
|
|
25
|
-
export function createMCPCommand() {
|
|
26
|
-
const mcpCommand = new Command('mcp');
|
|
27
|
-
mcpCommand.description('Manage MCP (Model Context Protocol) servers');
|
|
28
|
-
// Add server command
|
|
29
|
-
mcpCommand
|
|
30
|
-
.command('add <name>')
|
|
31
|
-
.description('Add an MCP server')
|
|
32
|
-
.option('--template', 'Use pre-configured template for this server')
|
|
33
|
-
.option('--interactive', 'Prompt for required environment variables')
|
|
34
|
-
.option('-t, --transport <type>', 'Transport type (stdio, http, sse, streamable_http)', 'stdio')
|
|
35
|
-
.option('-c, --command <command>', 'Command to run the server (for stdio transport)')
|
|
36
|
-
.option('-a, --args [args...]', 'Arguments for the server command (for stdio transport)', [])
|
|
37
|
-
.option('-u, --url <url>', 'URL for HTTP/SSE transport')
|
|
38
|
-
.option('-h, --headers [headers...]', 'HTTP headers (key=value format)', [])
|
|
39
|
-
.option('-e, --env [env...]', 'Environment variables (key=value format)', [])
|
|
40
|
-
.action(async (name, options) => {
|
|
41
|
-
try {
|
|
42
|
-
// BUG FIX: Parse command-line --env options first to supplement process.env
|
|
43
|
-
// This handles the case where environment variables were set in a way
|
|
44
|
-
// that the current process doesn't see (e.g., exported in a subshell)
|
|
45
|
-
const cliEnvVars = {};
|
|
46
|
-
for (const envVar of options.env || []) {
|
|
47
|
-
const eqIndex = envVar.indexOf('=');
|
|
48
|
-
if (eqIndex > 0) {
|
|
49
|
-
const key = envVar.slice(0, eqIndex);
|
|
50
|
-
const value = envVar.slice(eqIndex + 1);
|
|
51
|
-
cliEnvVars[key] = value;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Check if using template
|
|
55
|
-
if (options.template) {
|
|
56
|
-
const template = getTemplate(name);
|
|
57
|
-
if (!template) {
|
|
58
|
-
console.error(chalk.red(`❌ Template "${name}" not found`));
|
|
59
|
-
console.log();
|
|
60
|
-
console.log(chalk.blue('Available templates:'));
|
|
61
|
-
const templateNames = getTemplateNames();
|
|
62
|
-
templateNames.forEach(t => {
|
|
63
|
-
const tmpl = getTemplate(t);
|
|
64
|
-
console.log(` ${chalk.bold(t)} - ${tmpl?.description}`);
|
|
65
|
-
});
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
// Display template information
|
|
69
|
-
console.log(chalk.blue(`\n📦 Setting up ${chalk.bold(template.name)} MCP server`));
|
|
70
|
-
console.log(chalk.gray(template.description));
|
|
71
|
-
console.log();
|
|
72
|
-
// Check required environment variables
|
|
73
|
-
// BUG FIX: Check both process.env AND command-line --env options
|
|
74
|
-
const envVars = {};
|
|
75
|
-
const missingEnvVarsList = [];
|
|
76
|
-
for (const envVar of template.requiredEnv) {
|
|
77
|
-
// Priority: CLI --env flag > process.env
|
|
78
|
-
const value = cliEnvVars[envVar.name] || process.env[envVar.name];
|
|
79
|
-
if (!value) {
|
|
80
|
-
missingEnvVarsList.push(envVar);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
envVars[envVar.name] = value;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (missingEnvVarsList.length > 0) {
|
|
87
|
-
// BUG FIX: If --interactive flag is set, prompt for missing env vars
|
|
88
|
-
if (options.interactive) {
|
|
89
|
-
console.log(chalk.yellow('⚠️ Missing required environment variables. Prompting for values...\n'));
|
|
90
|
-
for (const envVar of missingEnvVarsList) {
|
|
91
|
-
console.log(chalk.gray(` ${envVar.description}`));
|
|
92
|
-
if (envVar.url) {
|
|
93
|
-
console.log(chalk.gray(` Documentation: ${envVar.url}`));
|
|
94
|
-
}
|
|
95
|
-
const response = await prompts.text({
|
|
96
|
-
message: `Enter ${envVar.name}:`,
|
|
97
|
-
placeholder: 'Paste your token here',
|
|
98
|
-
validate: (value) => {
|
|
99
|
-
if (!value || value.trim().length === 0) {
|
|
100
|
-
return `${envVar.name} is required`;
|
|
101
|
-
}
|
|
102
|
-
return undefined;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
// Handle user cancellation (Ctrl+C)
|
|
106
|
-
if (prompts.isCancel(response)) {
|
|
107
|
-
console.log(chalk.yellow('\n⚠️ Setup cancelled by user.\n'));
|
|
108
|
-
process.exit(0);
|
|
109
|
-
}
|
|
110
|
-
envVars[envVar.name] = response;
|
|
111
|
-
console.log();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
// Not interactive mode - show error message with options
|
|
116
|
-
console.log(chalk.yellow('⚠️ Missing required environment variables:\n'));
|
|
117
|
-
for (const envVar of missingEnvVarsList) {
|
|
118
|
-
console.log(chalk.yellow(` • ${chalk.bold(envVar.name)}`));
|
|
119
|
-
console.log(chalk.gray(` ${envVar.description}`));
|
|
120
|
-
if (envVar.url) {
|
|
121
|
-
console.log(chalk.gray(` Documentation: ${envVar.url}`));
|
|
122
|
-
}
|
|
123
|
-
console.log();
|
|
124
|
-
}
|
|
125
|
-
console.log(chalk.red('❌ Setup cannot continue without required environment variables.\n'));
|
|
126
|
-
// BUG FIX: Provide multiple options for setting environment variables
|
|
127
|
-
console.log(chalk.blue('Options to provide the missing variables:\n'));
|
|
128
|
-
// Option 1: Interactive mode (easiest)
|
|
129
|
-
console.log(chalk.white(' Option 1: Use interactive mode (easiest):'));
|
|
130
|
-
console.log(chalk.cyan(` ax-cli mcp add ${name} --template --interactive\n`));
|
|
131
|
-
// Option 2: Pass directly via --env flag
|
|
132
|
-
const envFlags = missingEnvVarsList.map(e => `--env ${e.name}=YOUR_VALUE`).join(' ');
|
|
133
|
-
console.log(chalk.white(' Option 2: Pass directly with --env flag:'));
|
|
134
|
-
console.log(chalk.cyan(` ax-cli mcp add ${name} --template ${envFlags}\n`));
|
|
135
|
-
// Option 3: Export in current shell
|
|
136
|
-
console.log(chalk.white(' Option 3: Export in current shell:'));
|
|
137
|
-
for (const envVar of missingEnvVarsList) {
|
|
138
|
-
console.log(chalk.cyan(` export ${envVar.name}="your_value"`));
|
|
139
|
-
}
|
|
140
|
-
console.log(chalk.cyan(` ax-cli mcp add ${name} --template\n`));
|
|
141
|
-
// Option 4: Add to shell profile
|
|
142
|
-
console.log(chalk.white(' Option 4: Add to shell profile (~/.bashrc or ~/.zshrc):'));
|
|
143
|
-
for (const envVar of missingEnvVarsList) {
|
|
144
|
-
console.log(chalk.cyan(` export ${envVar.name}="your_value"`));
|
|
145
|
-
}
|
|
146
|
-
console.log(chalk.gray(' Then restart your terminal or run: source ~/.zshrc\n'));
|
|
147
|
-
console.log(chalk.blue('Full setup instructions:'));
|
|
148
|
-
console.log(template.setupInstructions);
|
|
149
|
-
process.exit(1);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Generate config from template
|
|
153
|
-
const config = generateConfigFromTemplate(name, envVars);
|
|
154
|
-
// Add to configuration
|
|
155
|
-
addMCPServer(config);
|
|
156
|
-
console.log(chalk.green(`✅ Configuration saved`));
|
|
157
|
-
// Try to connect immediately
|
|
158
|
-
console.log(chalk.blue('🔌 Connecting to server...'));
|
|
159
|
-
const manager = getMCPManager();
|
|
160
|
-
await manager.addServer(config);
|
|
161
|
-
console.log(chalk.green('✅ Connected successfully'));
|
|
162
|
-
// Show available tools
|
|
163
|
-
const tools = manager.getTools().filter(t => t.serverName === name);
|
|
164
|
-
console.log(chalk.blue(`\n🔧 Available tools: ${chalk.bold(tools.length.toString())}`));
|
|
165
|
-
if (tools.length > 0 && tools.length <= 10) {
|
|
166
|
-
tools.forEach(tool => {
|
|
167
|
-
const displayName = tool.name.replace(`mcp__${name}__`, '');
|
|
168
|
-
console.log(` • ${chalk.bold(displayName)}: ${tool.description || 'No description'}`);
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
// Show usage examples
|
|
172
|
-
if (template.usageExamples.length > 0) {
|
|
173
|
-
console.log(chalk.blue('\n💡 Usage examples:'));
|
|
174
|
-
template.usageExamples.slice(0, 3).forEach(example => {
|
|
175
|
-
console.log(chalk.gray(` • ${example}`));
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
console.log(chalk.green(`\n✨ ${name} MCP server is ready to use!`));
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
// Check if it's a predefined server (legacy support)
|
|
182
|
-
if (PREDEFINED_SERVERS[name]) {
|
|
183
|
-
const template = PREDEFINED_SERVERS[name];
|
|
184
|
-
console.log(chalk.yellow(`💡 Tip: Use ${chalk.bold('--template')} flag for guided setup`));
|
|
185
|
-
const config = template.config;
|
|
186
|
-
addMCPServer(config);
|
|
187
|
-
ConsoleMessenger.plain('mcp_commands.server_predefined', { name });
|
|
188
|
-
// Try to connect immediately
|
|
189
|
-
const manager = getMCPManager();
|
|
190
|
-
await manager.addServer(config);
|
|
191
|
-
ConsoleMessenger.plain('mcp_commands.server_connected', { name });
|
|
192
|
-
const tools = manager.getTools().filter(t => t.serverName === name);
|
|
193
|
-
ConsoleMessenger.plain('mcp_commands.tools_available', { count: tools.length });
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
// Custom server
|
|
197
|
-
const transportType = options.transport.toLowerCase();
|
|
198
|
-
if (transportType === 'stdio') {
|
|
199
|
-
if (!options.command) {
|
|
200
|
-
ConsoleMessenger.error('mcp_commands.error_command_required');
|
|
201
|
-
process.exit(1);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
else if (transportType === 'http' || transportType === 'sse' || transportType === 'streamable_http') {
|
|
205
|
-
if (!options.url) {
|
|
206
|
-
ConsoleMessenger.error('mcp_commands.error_url_required', { transport: transportType });
|
|
207
|
-
process.exit(1);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
ConsoleMessenger.error('mcp_commands.error_invalid_transport');
|
|
212
|
-
process.exit(1);
|
|
213
|
-
}
|
|
214
|
-
// Parse environment variables (handle values with = in them)
|
|
215
|
-
const env = {};
|
|
216
|
-
for (const envVar of options.env || []) {
|
|
217
|
-
const eqIndex = envVar.indexOf('=');
|
|
218
|
-
if (eqIndex > 0) {
|
|
219
|
-
const key = envVar.slice(0, eqIndex);
|
|
220
|
-
const value = envVar.slice(eqIndex + 1);
|
|
221
|
-
env[key] = value;
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
ConsoleMessenger.warning('mcp_commands.warning_invalid_env', { envVar });
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// Parse headers (handle values with = in them)
|
|
228
|
-
const headers = {};
|
|
229
|
-
for (const header of options.headers || []) {
|
|
230
|
-
const eqIndex = header.indexOf('=');
|
|
231
|
-
if (eqIndex > 0) {
|
|
232
|
-
const key = header.slice(0, eqIndex);
|
|
233
|
-
const value = header.slice(eqIndex + 1);
|
|
234
|
-
headers[key] = value;
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
ConsoleMessenger.warning('mcp_commands.warning_invalid_header', { header });
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
const config = {
|
|
241
|
-
name: MCPServerIdSchema.parse(name),
|
|
242
|
-
transport: {
|
|
243
|
-
type: transportType,
|
|
244
|
-
command: options.command,
|
|
245
|
-
args: options.args || [],
|
|
246
|
-
url: options.url,
|
|
247
|
-
env,
|
|
248
|
-
headers: Object.keys(headers).length > 0 ? headers : undefined
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
addMCPServer(config);
|
|
252
|
-
ConsoleMessenger.plain('mcp_commands.server_added', { name });
|
|
253
|
-
// Try to connect immediately
|
|
254
|
-
const manager = getMCPManager();
|
|
255
|
-
await manager.addServer(config);
|
|
256
|
-
ConsoleMessenger.plain('mcp_commands.server_connected', { name });
|
|
257
|
-
const tools = manager.getTools().filter(t => t.serverName === name);
|
|
258
|
-
ConsoleMessenger.plain('mcp_commands.tools_available', { count: tools.length });
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
ConsoleMessenger.error('mcp_commands.error_adding_server', { error: extractErrorMessage(error) });
|
|
262
|
-
process.exit(1);
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
// Add server from JSON command
|
|
266
|
-
mcpCommand
|
|
267
|
-
.command('add-json <name> <json>')
|
|
268
|
-
.description('Add an MCP server from JSON configuration')
|
|
269
|
-
.action(async (name, jsonConfig) => {
|
|
270
|
-
try {
|
|
271
|
-
let config;
|
|
272
|
-
try {
|
|
273
|
-
config = JSON.parse(jsonConfig);
|
|
274
|
-
}
|
|
275
|
-
catch {
|
|
276
|
-
ConsoleMessenger.error('mcp_commands.error_invalid_json');
|
|
277
|
-
process.exit(1);
|
|
278
|
-
}
|
|
279
|
-
const serverConfig = {
|
|
280
|
-
name: MCPServerIdSchema.parse(name),
|
|
281
|
-
transport: {
|
|
282
|
-
type: 'stdio', // default
|
|
283
|
-
command: config.command,
|
|
284
|
-
args: config.args || [],
|
|
285
|
-
env: config.env || {},
|
|
286
|
-
url: config.url,
|
|
287
|
-
headers: config.headers
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
// Override transport type if specified
|
|
291
|
-
if (config.transport) {
|
|
292
|
-
if (typeof config.transport === 'string') {
|
|
293
|
-
serverConfig.transport.type = config.transport;
|
|
294
|
-
}
|
|
295
|
-
else if (typeof config.transport === 'object') {
|
|
296
|
-
serverConfig.transport = { ...serverConfig.transport, ...config.transport };
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
addMCPServer(serverConfig);
|
|
300
|
-
ConsoleMessenger.plain('mcp_commands.server_added', { name });
|
|
301
|
-
// Try to connect immediately
|
|
302
|
-
const manager = getMCPManager();
|
|
303
|
-
await manager.addServer(serverConfig);
|
|
304
|
-
ConsoleMessenger.plain('mcp_commands.server_connected', { name });
|
|
305
|
-
const tools = manager.getTools().filter(t => t.serverName === name);
|
|
306
|
-
ConsoleMessenger.plain('mcp_commands.tools_available', { count: tools.length });
|
|
307
|
-
}
|
|
308
|
-
catch (error) {
|
|
309
|
-
ConsoleMessenger.error('mcp_commands.error_adding_server', { error: extractErrorMessage(error) });
|
|
310
|
-
process.exit(1);
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
// Remove server command
|
|
314
|
-
mcpCommand
|
|
315
|
-
.command('remove <name>')
|
|
316
|
-
.description('Remove an MCP server')
|
|
317
|
-
.action(async (name) => {
|
|
318
|
-
const validatedName = MCPServerIdSchema.parse(name);
|
|
319
|
-
try {
|
|
320
|
-
// BUG FIX: Check if server exists in config before removing
|
|
321
|
-
const config = loadMCPConfig();
|
|
322
|
-
const serverExists = config.servers.some(s => s.name === validatedName);
|
|
323
|
-
if (!serverExists) {
|
|
324
|
-
ConsoleMessenger.error('mcp_commands.error_removing_server', { error: `Server "${validatedName}" not found in configuration` });
|
|
325
|
-
process.exit(1);
|
|
326
|
-
}
|
|
327
|
-
// Remove from config file first (this always works)
|
|
328
|
-
removeMCPServer(validatedName);
|
|
329
|
-
// Try to remove from runtime manager (may fail if server not connected, which is OK)
|
|
330
|
-
try {
|
|
331
|
-
const manager = getMCPManager();
|
|
332
|
-
await manager.removeServer(validatedName);
|
|
333
|
-
}
|
|
334
|
-
catch {
|
|
335
|
-
// Server wasn't connected at runtime, that's fine - config was already removed
|
|
336
|
-
}
|
|
337
|
-
ConsoleMessenger.plain('mcp_commands.server_removed', { name: validatedName });
|
|
338
|
-
}
|
|
339
|
-
catch (error) {
|
|
340
|
-
ConsoleMessenger.error('mcp_commands.error_removing_server', { error: extractErrorMessage(error) });
|
|
341
|
-
process.exit(1);
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
// List servers command
|
|
345
|
-
mcpCommand
|
|
346
|
-
.command('list')
|
|
347
|
-
.description('List configured MCP servers')
|
|
348
|
-
.option('--connect', 'Connect to servers before listing to show accurate status')
|
|
349
|
-
.action(async (options) => {
|
|
350
|
-
const config = loadMCPConfig();
|
|
351
|
-
const manager = getMCPManager();
|
|
352
|
-
if (config.servers.length === 0) {
|
|
353
|
-
ConsoleMessenger.warning('mcp_commands.no_servers');
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
// If --connect flag is provided, try to connect to all servers first
|
|
357
|
-
if (options.connect) {
|
|
358
|
-
console.log(chalk.blue('Connecting to servers...'));
|
|
359
|
-
for (const server of config.servers) {
|
|
360
|
-
if (!manager.getServers().includes(server.name)) {
|
|
361
|
-
try {
|
|
362
|
-
await manager.addServer(server);
|
|
363
|
-
}
|
|
364
|
-
catch {
|
|
365
|
-
// Connection failure will be shown in status
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
console.log();
|
|
370
|
-
}
|
|
371
|
-
ConsoleMessenger.bold('mcp_commands.list_header');
|
|
372
|
-
console.log();
|
|
373
|
-
for (const server of config.servers) {
|
|
374
|
-
const isConnected = manager.getServers().includes(server.name);
|
|
375
|
-
// BUG FIX: Show "Not Connected" instead of "Disconnected" when connection wasn't attempted
|
|
376
|
-
// "Disconnected" implies a connection was lost, which is misleading
|
|
377
|
-
const statusMsg = isConnected
|
|
378
|
-
? chalk.green('✓ Connected')
|
|
379
|
-
: options.connect
|
|
380
|
-
? chalk.red('✗ Failed to connect')
|
|
381
|
-
: chalk.yellow('○ Not connected (use --connect to test)');
|
|
382
|
-
console.log(`${chalk.bold(server.name)}: ${statusMsg}`);
|
|
383
|
-
// Display transport information
|
|
384
|
-
if (server.transport) {
|
|
385
|
-
console.log(` Transport: ${server.transport.type}`);
|
|
386
|
-
if (server.transport.type === 'stdio') {
|
|
387
|
-
console.log(` Command: ${server.transport.command} ${(server.transport.args || []).join(' ')}`);
|
|
388
|
-
}
|
|
389
|
-
else if (server.transport.type === 'http' || server.transport.type === 'sse') {
|
|
390
|
-
console.log(` URL: ${server.transport.url}`);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else if (server.command) {
|
|
394
|
-
// Legacy format
|
|
395
|
-
console.log(` Command: ${server.command} ${(server.args || []).join(' ')}`);
|
|
396
|
-
}
|
|
397
|
-
if (isConnected) {
|
|
398
|
-
const transportType = manager.getTransportType(server.name);
|
|
399
|
-
if (transportType) {
|
|
400
|
-
console.log(` Active Transport: ${transportType}`);
|
|
401
|
-
}
|
|
402
|
-
const tools = manager.getTools().filter(t => t.serverName === server.name);
|
|
403
|
-
console.log(` Tools: ${tools.length}`);
|
|
404
|
-
if (tools.length > 0) {
|
|
405
|
-
tools.forEach(tool => {
|
|
406
|
-
const displayName = tool.name.replace(`mcp__${server.name}__`, '');
|
|
407
|
-
console.log(` - ${displayName}: ${tool.description || 'No description'}`);
|
|
408
|
-
});
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
console.log();
|
|
412
|
-
}
|
|
413
|
-
if (!options.connect) {
|
|
414
|
-
console.log(chalk.gray(`💡 Use --connect to test server connections: ${getCliName()} mcp list --connect`));
|
|
415
|
-
console.log(chalk.gray(` Or test a specific server: ${getCliName()} mcp test <server-name>`));
|
|
416
|
-
console.log();
|
|
417
|
-
}
|
|
418
|
-
});
|
|
419
|
-
// Test server command
|
|
420
|
-
mcpCommand
|
|
421
|
-
.command('test <name>')
|
|
422
|
-
.description('Test connection to an MCP server')
|
|
423
|
-
.action(async (name) => {
|
|
424
|
-
try {
|
|
425
|
-
const config = loadMCPConfig();
|
|
426
|
-
const serverConfig = config.servers.find(s => s.name === name);
|
|
427
|
-
if (!serverConfig) {
|
|
428
|
-
console.error(chalk.red(`Server ${name} not found`));
|
|
429
|
-
process.exit(1);
|
|
430
|
-
}
|
|
431
|
-
console.log(chalk.blue(`Testing connection to ${name}...`));
|
|
432
|
-
const manager = getMCPManager();
|
|
433
|
-
await manager.addServer(serverConfig);
|
|
434
|
-
const tools = manager.getTools().filter(t => t.serverName === name);
|
|
435
|
-
console.log(chalk.green(`✓ Successfully connected to ${name}`));
|
|
436
|
-
console.log(chalk.blue(` Available tools: ${tools.length}`));
|
|
437
|
-
if (tools.length > 0) {
|
|
438
|
-
console.log(' Tools:');
|
|
439
|
-
tools.forEach(tool => {
|
|
440
|
-
const displayName = tool.name.replace(`mcp__${name}__`, '');
|
|
441
|
-
console.log(` - ${displayName}: ${tool.description || 'No description'}`);
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
catch (error) {
|
|
446
|
-
console.error(chalk.red(`✗ Failed to connect to ${name}: ${extractErrorMessage(error)}`));
|
|
447
|
-
process.exit(1);
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
// Templates command - List available templates
|
|
451
|
-
mcpCommand
|
|
452
|
-
.command('templates')
|
|
453
|
-
.description('List available MCP server templates')
|
|
454
|
-
.option('--category <category>', 'Filter by category (design, deployment, testing, monitoring, backend, version-control)')
|
|
455
|
-
.action((options) => {
|
|
456
|
-
console.log(chalk.blue.bold('\n📦 Available MCP Server Templates\n'));
|
|
457
|
-
let templates = Object.values(PREDEFINED_SERVERS);
|
|
458
|
-
if (options.category) {
|
|
459
|
-
if (!isValidTemplateCategory(options.category)) {
|
|
460
|
-
console.log(chalk.red(`Invalid category "${options.category}".`));
|
|
461
|
-
console.log(chalk.gray(`Available categories: ${VALID_TEMPLATE_CATEGORIES.join(', ')}`));
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
templates = getTemplatesByCategory(options.category);
|
|
465
|
-
if (templates.length === 0) {
|
|
466
|
-
console.log(chalk.yellow(`No templates found for category "${options.category}"`));
|
|
467
|
-
console.log();
|
|
468
|
-
console.log(chalk.blue('Available categories:'));
|
|
469
|
-
console.log(' • design, deployment, testing, monitoring, backend, version-control');
|
|
470
|
-
return;
|
|
471
|
-
}
|
|
472
|
-
console.log(chalk.gray(`Showing ${options.category} templates:\n`));
|
|
473
|
-
}
|
|
474
|
-
// Group by category
|
|
475
|
-
const categories = templates.reduce((acc, template) => {
|
|
476
|
-
if (!acc[template.category]) {
|
|
477
|
-
acc[template.category] = [];
|
|
478
|
-
}
|
|
479
|
-
acc[template.category].push(template);
|
|
480
|
-
return acc;
|
|
481
|
-
}, {});
|
|
482
|
-
const categoryIcons = {
|
|
483
|
-
design: '🎨',
|
|
484
|
-
'version-control': '📦',
|
|
485
|
-
deployment: '🚀',
|
|
486
|
-
testing: '🧪',
|
|
487
|
-
monitoring: '📊',
|
|
488
|
-
backend: '🗄️'
|
|
489
|
-
};
|
|
490
|
-
for (const [category, categoryTemplates] of Object.entries(categories)) {
|
|
491
|
-
const icon = categoryIcons[category] || '📌';
|
|
492
|
-
console.log(chalk.bold(`${icon} ${category.toUpperCase()}`));
|
|
493
|
-
console.log();
|
|
494
|
-
categoryTemplates.forEach(template => {
|
|
495
|
-
const officialBadge = template.officialServer ? chalk.green('official') : chalk.gray('community');
|
|
496
|
-
console.log(` ${chalk.bold(template.name)} [${officialBadge}]`);
|
|
497
|
-
console.log(chalk.gray(` ${template.description}`));
|
|
498
|
-
if (template.requiredEnv.length > 0) {
|
|
499
|
-
const envVarNames = template.requiredEnv.map(e => e.name).join(', ');
|
|
500
|
-
console.log(chalk.gray(` Requires: ${envVarNames}`));
|
|
501
|
-
}
|
|
502
|
-
console.log(chalk.blue(` Usage: ax-cli mcp add ${template.name} --template`));
|
|
503
|
-
console.log();
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
console.log(chalk.gray('💡 Tip: Use --category to filter templates by type'));
|
|
507
|
-
console.log(chalk.gray(`Example: ax-cli mcp templates --category design`));
|
|
508
|
-
console.log();
|
|
509
|
-
});
|
|
510
|
-
// Tools command - List tools from a specific server
|
|
511
|
-
mcpCommand
|
|
512
|
-
.command('tools <server-name>')
|
|
513
|
-
.description('List available tools from an MCP server')
|
|
514
|
-
.option('--json', 'Output in JSON format')
|
|
515
|
-
.option('--verbose', 'Show detailed tool schemas')
|
|
516
|
-
.action(async (serverName, options) => {
|
|
517
|
-
try {
|
|
518
|
-
const manager = getMCPManager();
|
|
519
|
-
// Ensure server is connected
|
|
520
|
-
const isConnected = manager.getServers().includes(serverName);
|
|
521
|
-
if (!isConnected) {
|
|
522
|
-
// Try to connect
|
|
523
|
-
const config = loadMCPConfig();
|
|
524
|
-
const serverConfig = config.servers.find(s => s.name === serverName);
|
|
525
|
-
if (!serverConfig) {
|
|
526
|
-
console.error(chalk.red(`❌ Server "${serverName}" not found.`));
|
|
527
|
-
console.log(chalk.gray('\nAdd it first with:'));
|
|
528
|
-
console.log(chalk.blue(` ax-cli mcp add ${serverName} --template`));
|
|
529
|
-
process.exit(1);
|
|
530
|
-
}
|
|
531
|
-
console.log(chalk.blue(`Connecting to ${serverName}...`));
|
|
532
|
-
await manager.addServer(serverConfig);
|
|
533
|
-
console.log(chalk.green('✓ Connected\n'));
|
|
534
|
-
}
|
|
535
|
-
const tools = manager.getTools().filter(t => t.serverName === serverName);
|
|
536
|
-
if (tools.length === 0) {
|
|
537
|
-
console.log(chalk.yellow('⚠️ No tools found for this server.'));
|
|
538
|
-
console.log(chalk.gray('The server may be disconnected or have no tools available.'));
|
|
539
|
-
return;
|
|
540
|
-
}
|
|
541
|
-
if (options.json) {
|
|
542
|
-
console.log(JSON.stringify(tools, null, 2));
|
|
543
|
-
return;
|
|
544
|
-
}
|
|
545
|
-
// Pretty-print with tree structure
|
|
546
|
-
console.log(chalk.blue.bold(`\n🔧 ${serverName} Tools (${tools.length} available)\n`));
|
|
547
|
-
tools.forEach((tool, i) => {
|
|
548
|
-
const isLast = i === tools.length - 1;
|
|
549
|
-
const prefix = isLast ? '└─' : '├─';
|
|
550
|
-
const displayName = tool.name.replace(`mcp__${serverName}__`, '');
|
|
551
|
-
console.log(chalk.bold(`${prefix} ${displayName}`));
|
|
552
|
-
console.log(` ${chalk.gray(tool.description || 'No description available')}`);
|
|
553
|
-
if (options.verbose && tool.inputSchema) {
|
|
554
|
-
console.log(chalk.gray(` Schema:`));
|
|
555
|
-
const schemaStr = JSON.stringify(tool.inputSchema, null, 2)
|
|
556
|
-
.split('\n')
|
|
557
|
-
.map(line => ` ${line}`)
|
|
558
|
-
.join('\n');
|
|
559
|
-
console.log(chalk.gray(schemaStr));
|
|
560
|
-
}
|
|
561
|
-
else if (tool.inputSchema?.properties) {
|
|
562
|
-
const params = Object.keys(tool.inputSchema.properties);
|
|
563
|
-
if (params.length > 0) {
|
|
564
|
-
const required = tool.inputSchema.required || [];
|
|
565
|
-
const paramList = params.map(p => required.includes(p) ? `${p}*` : p).join(', ');
|
|
566
|
-
console.log(chalk.gray(` Parameters: ${paramList}`));
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
if (!isLast)
|
|
570
|
-
console.log(' │');
|
|
571
|
-
});
|
|
572
|
-
console.log();
|
|
573
|
-
console.log(chalk.gray('💡 Tip: Use --verbose to see full parameter schemas'));
|
|
574
|
-
console.log(chalk.gray(' Parameters marked with * are required'));
|
|
575
|
-
console.log();
|
|
576
|
-
}
|
|
577
|
-
catch (error) {
|
|
578
|
-
console.error(chalk.red(`❌ Error: ${extractErrorMessage(error)}`));
|
|
579
|
-
process.exit(1);
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
// Search command - Search tools across all servers
|
|
583
|
-
mcpCommand
|
|
584
|
-
.command('search <query>')
|
|
585
|
-
.description('Search for tools across all MCP servers')
|
|
586
|
-
.option('--json', 'Output in JSON format')
|
|
587
|
-
.action((query, options) => {
|
|
588
|
-
const manager = getMCPManager();
|
|
589
|
-
const allTools = manager.getTools();
|
|
590
|
-
const lowerQuery = query.toLowerCase();
|
|
591
|
-
const matchingTools = allTools.filter(tool => tool.name.toLowerCase().includes(lowerQuery) ||
|
|
592
|
-
tool.description?.toLowerCase().includes(lowerQuery));
|
|
593
|
-
if (matchingTools.length === 0) {
|
|
594
|
-
console.log(chalk.yellow(`\n⚠️ No tools found matching "${query}"\n`));
|
|
595
|
-
console.log(chalk.gray('💡 Try searching for:'));
|
|
596
|
-
console.log(chalk.gray(' • deploy, git, database, test, file'));
|
|
597
|
-
console.log();
|
|
598
|
-
return;
|
|
599
|
-
}
|
|
600
|
-
if (options.json) {
|
|
601
|
-
console.log(JSON.stringify(matchingTools, null, 2));
|
|
602
|
-
return;
|
|
603
|
-
}
|
|
604
|
-
console.log(chalk.blue.bold(`\n🔍 Found ${matchingTools.length} tools matching "${query}"\n`));
|
|
605
|
-
// Group by server
|
|
606
|
-
const byServer = matchingTools.reduce((acc, tool) => {
|
|
607
|
-
if (!acc[tool.serverName]) {
|
|
608
|
-
acc[tool.serverName] = [];
|
|
609
|
-
}
|
|
610
|
-
acc[tool.serverName].push(tool);
|
|
611
|
-
return acc;
|
|
612
|
-
}, {});
|
|
613
|
-
for (const [serverName, serverTools] of Object.entries(byServer)) {
|
|
614
|
-
console.log(chalk.bold(`${serverName} (${serverTools.length} tools)`));
|
|
615
|
-
serverTools.forEach(tool => {
|
|
616
|
-
const displayName = tool.name.replace(`mcp__${serverName}__`, '');
|
|
617
|
-
console.log(` • ${chalk.bold(displayName)}`);
|
|
618
|
-
if (tool.description) {
|
|
619
|
-
console.log(chalk.gray(` ${tool.description}`));
|
|
620
|
-
}
|
|
621
|
-
});
|
|
622
|
-
console.log();
|
|
623
|
-
}
|
|
624
|
-
console.log(chalk.gray('💡 Tip: Use "ax-cli mcp tools <server-name>" to see all tools from a server'));
|
|
625
|
-
console.log();
|
|
626
|
-
});
|
|
627
|
-
// Browse command - Interactive template browser (alias for templates)
|
|
628
|
-
mcpCommand
|
|
629
|
-
.command('browse')
|
|
630
|
-
.description('Browse available MCP server templates')
|
|
631
|
-
.action(() => {
|
|
632
|
-
console.log(chalk.blue.bold('\n🌟 MCP Server Template Browser\n'));
|
|
633
|
-
console.log(chalk.gray('Popular templates for front-end development:\n'));
|
|
634
|
-
const popular = ['figma', 'github', 'vercel', 'puppeteer', 'storybook', 'sentry'];
|
|
635
|
-
popular.forEach(name => {
|
|
636
|
-
const template = getTemplate(name);
|
|
637
|
-
if (template) {
|
|
638
|
-
const icon = template.category === 'design' ? '🎨' :
|
|
639
|
-
template.category === 'version-control' ? '📦' :
|
|
640
|
-
template.category === 'deployment' ? '🚀' :
|
|
641
|
-
template.category === 'testing' ? '🧪' :
|
|
642
|
-
template.category === 'monitoring' ? '📊' : '🗄️';
|
|
643
|
-
console.log(`${icon} ${chalk.bold(template.name)}`);
|
|
644
|
-
console.log(chalk.gray(` ${template.description}`));
|
|
645
|
-
console.log(chalk.blue(` Quick start: ax-cli mcp add ${name} --template`));
|
|
646
|
-
console.log();
|
|
647
|
-
}
|
|
648
|
-
});
|
|
649
|
-
console.log(chalk.gray('📚 View all templates:'));
|
|
650
|
-
console.log(chalk.blue(' ax-cli mcp templates'));
|
|
651
|
-
console.log();
|
|
652
|
-
console.log(chalk.gray('🔍 Search templates:'));
|
|
653
|
-
console.log(chalk.blue(' ax-cli mcp templates --category design'));
|
|
654
|
-
console.log();
|
|
655
|
-
});
|
|
656
|
-
// Health command - Check MCP server health
|
|
657
|
-
mcpCommand
|
|
658
|
-
.command('health [server-name]')
|
|
659
|
-
.description('Check health status of MCP servers')
|
|
660
|
-
.option('--json', 'Output in JSON format')
|
|
661
|
-
.option('--watch', 'Continuously monitor health (updates every 60s)')
|
|
662
|
-
.option('--no-connect', 'Skip connecting to servers (show config-only status)')
|
|
663
|
-
.action(async (serverName, options) => {
|
|
664
|
-
try {
|
|
665
|
-
const { MCPHealthMonitor } = await import('../mcp/health.js');
|
|
666
|
-
const manager = getMCPManager();
|
|
667
|
-
const config = loadMCPConfig();
|
|
668
|
-
// BUG FIX: Connect to servers before checking health
|
|
669
|
-
// The health command should actually test connectivity, not just show config state
|
|
670
|
-
if (options.connect !== false) {
|
|
671
|
-
const serversToConnect = serverName
|
|
672
|
-
? config.servers.filter(s => s.name === serverName)
|
|
673
|
-
: config.servers;
|
|
674
|
-
for (const server of serversToConnect) {
|
|
675
|
-
if (!manager.getServers().includes(server.name)) {
|
|
676
|
-
try {
|
|
677
|
-
await manager.addServer(server);
|
|
678
|
-
}
|
|
679
|
-
catch {
|
|
680
|
-
// Connection failure will be reported in health status
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
const healthMonitor = new MCPHealthMonitor(manager);
|
|
686
|
-
// JSON mode - plain output
|
|
687
|
-
if (options.json) {
|
|
688
|
-
const health = serverName
|
|
689
|
-
? filterValidHealth([await healthMonitor.getServerStatus(serverName)])
|
|
690
|
-
: await healthMonitor.getHealthReport();
|
|
691
|
-
console.log(JSON.stringify(health, null, 2));
|
|
692
|
-
return;
|
|
693
|
-
}
|
|
694
|
-
if (options.watch) {
|
|
695
|
-
// Continuous monitoring mode
|
|
696
|
-
prompts.intro(chalk.cyan('MCP Server Health Monitoring'));
|
|
697
|
-
prompts.log.info('Press Ctrl+C to stop');
|
|
698
|
-
// Start monitoring (uses configured health check interval)
|
|
699
|
-
healthMonitor.start(MCP_CONFIG.HEALTH_CHECK_INTERVAL);
|
|
700
|
-
// Display initial report
|
|
701
|
-
const displayHealth = async () => {
|
|
702
|
-
console.clear();
|
|
703
|
-
prompts.intro(chalk.cyan('MCP Server Health Report'));
|
|
704
|
-
prompts.log.message(`Last updated: ${new Date().toLocaleTimeString()}`);
|
|
705
|
-
const health = serverName
|
|
706
|
-
? filterValidHealth([await healthMonitor.getServerStatus(serverName)])
|
|
707
|
-
: await healthMonitor.getHealthReport();
|
|
708
|
-
if (health.length === 0) {
|
|
709
|
-
prompts.log.warn('No servers connected');
|
|
710
|
-
return;
|
|
711
|
-
}
|
|
712
|
-
for (const server of health) {
|
|
713
|
-
const statusIcon = server.connected ? '✓' : '✗';
|
|
714
|
-
const statusText = server.connected ? 'Connected' : 'Disconnected';
|
|
715
|
-
// Build server info
|
|
716
|
-
const serverInfo = [];
|
|
717
|
-
serverInfo.push(`Transport: MCP`);
|
|
718
|
-
if (server.uptime) {
|
|
719
|
-
serverInfo.push(`Uptime: ${MCPHealthMonitor.formatUptime(server.uptime)}`);
|
|
720
|
-
}
|
|
721
|
-
serverInfo.push(`Tools: ${server.toolCount} available`);
|
|
722
|
-
if (server.avgLatency) {
|
|
723
|
-
serverInfo.push(`Latency: avg ${MCPHealthMonitor.formatLatency(server.avgLatency)}, p95 ${MCPHealthMonitor.formatLatency(server.p95Latency || 0)}`);
|
|
724
|
-
}
|
|
725
|
-
const successRateColor = server.successRate >= 95 ? chalk.green :
|
|
726
|
-
server.successRate >= 80 ? chalk.yellow : chalk.red;
|
|
727
|
-
serverInfo.push(`Success Rate: ${successRateColor(`${server.successRate.toFixed(1)}%`)} (${server.successCount}/${server.successCount + server.failureCount} calls)`);
|
|
728
|
-
if (server.lastError) {
|
|
729
|
-
serverInfo.push(chalk.red(`Last Error: ${server.lastError}`));
|
|
730
|
-
if (server.lastErrorAt) {
|
|
731
|
-
const timeSinceError = Date.now() - server.lastErrorAt;
|
|
732
|
-
serverInfo.push(` ${MCPHealthMonitor.formatUptime(timeSinceError)} ago`);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
const titleColor = server.connected ? chalk.green : chalk.red;
|
|
736
|
-
prompts.note(serverInfo.join('\n'), titleColor(`${statusIcon} ${server.serverName} (${statusText})`));
|
|
737
|
-
}
|
|
738
|
-
prompts.log.message(chalk.dim(`Next update in ${MCP_CONFIG.HEALTH_CHECK_INTERVAL / 1000} seconds...`));
|
|
739
|
-
};
|
|
740
|
-
// Display immediately
|
|
741
|
-
await displayHealth();
|
|
742
|
-
// Set up interval (uses configured health check interval)
|
|
743
|
-
// Wrap async function to handle promise rejection
|
|
744
|
-
// Use .unref() to prevent timer from blocking process exit
|
|
745
|
-
const watchInterval = setInterval(() => {
|
|
746
|
-
displayHealth().catch((err) => {
|
|
747
|
-
console.error('Health check failed:', err);
|
|
748
|
-
});
|
|
749
|
-
}, MCP_CONFIG.HEALTH_CHECK_INTERVAL);
|
|
750
|
-
watchInterval.unref();
|
|
751
|
-
// Handle Ctrl+C - use 'once' to prevent multiple handlers accumulating
|
|
752
|
-
process.once('SIGINT', () => {
|
|
753
|
-
clearInterval(watchInterval);
|
|
754
|
-
healthMonitor.stop();
|
|
755
|
-
prompts.outro(chalk.yellow('Stopped health monitoring'));
|
|
756
|
-
process.exit(0);
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
else {
|
|
760
|
-
// One-time health check with @clack/prompts
|
|
761
|
-
prompts.intro(chalk.cyan('MCP Server Health'));
|
|
762
|
-
const spinner = prompts.spinner();
|
|
763
|
-
spinner.start('Checking server health...');
|
|
764
|
-
const health = serverName
|
|
765
|
-
? filterValidHealth([await healthMonitor.getServerStatus(serverName)])
|
|
766
|
-
: await healthMonitor.getHealthReport();
|
|
767
|
-
spinner.stop('Health check complete');
|
|
768
|
-
if (health.length === 0) {
|
|
769
|
-
if (serverName) {
|
|
770
|
-
// Check if server exists in config but couldn't connect
|
|
771
|
-
const serverInConfig = config.servers.find(s => s.name === serverName);
|
|
772
|
-
if (serverInConfig) {
|
|
773
|
-
prompts.log.error(`Server "${serverName}" is configured but failed to connect`);
|
|
774
|
-
prompts.log.info(`Test connection with: ${getCliName()} mcp test ${serverName}`);
|
|
775
|
-
}
|
|
776
|
-
else {
|
|
777
|
-
prompts.log.warn(`Server "${serverName}" not found in configuration`);
|
|
778
|
-
prompts.log.info(`Add it with: ${getCliName()} mcp add ${serverName} --template`);
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
else {
|
|
782
|
-
// Check if there are configured servers that couldn't connect
|
|
783
|
-
if (config.servers.length > 0) {
|
|
784
|
-
prompts.log.error(`${config.servers.length} server(s) configured but none connected`);
|
|
785
|
-
prompts.log.info(`Configured servers: ${config.servers.map(s => s.name).join(', ')}`);
|
|
786
|
-
prompts.log.info(`Test connections with: ${getCliName()} mcp test <server-name>`);
|
|
787
|
-
}
|
|
788
|
-
else {
|
|
789
|
-
prompts.log.warn('No MCP servers configured');
|
|
790
|
-
prompts.log.info(`To add a server: ${getCliName()} mcp add figma --template`);
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
prompts.outro('');
|
|
794
|
-
return;
|
|
795
|
-
}
|
|
796
|
-
// Display each server's health
|
|
797
|
-
for (const server of health) {
|
|
798
|
-
const statusIcon = server.connected ? '✓' : '✗';
|
|
799
|
-
const statusText = server.connected ? 'Connected' : 'Disconnected';
|
|
800
|
-
// Build server info
|
|
801
|
-
const serverInfo = [];
|
|
802
|
-
serverInfo.push(`Transport: MCP`);
|
|
803
|
-
if (server.uptime) {
|
|
804
|
-
serverInfo.push(`Uptime: ${MCPHealthMonitor.formatUptime(server.uptime)}`);
|
|
805
|
-
}
|
|
806
|
-
serverInfo.push(`Tools: ${server.toolCount} available`);
|
|
807
|
-
if (server.avgLatency) {
|
|
808
|
-
serverInfo.push(`Latency: avg ${MCPHealthMonitor.formatLatency(server.avgLatency)}, p95 ${MCPHealthMonitor.formatLatency(server.p95Latency || 0)}`);
|
|
809
|
-
}
|
|
810
|
-
const successRateColor = server.successRate >= 95 ? chalk.green :
|
|
811
|
-
server.successRate >= 80 ? chalk.yellow : chalk.red;
|
|
812
|
-
serverInfo.push(`Success Rate: ${successRateColor(`${server.successRate.toFixed(1)}%`)} (${server.successCount}/${server.successCount + server.failureCount} calls)`);
|
|
813
|
-
if (server.lastError) {
|
|
814
|
-
serverInfo.push(chalk.red(`Last Error: ${server.lastError}`));
|
|
815
|
-
if (server.lastErrorAt) {
|
|
816
|
-
const timeSinceError = Date.now() - server.lastErrorAt;
|
|
817
|
-
serverInfo.push(` ${MCPHealthMonitor.formatUptime(timeSinceError)} ago`);
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
if (server.lastSuccess) {
|
|
821
|
-
const timeSinceSuccess = Date.now() - server.lastSuccess;
|
|
822
|
-
serverInfo.push(`Last Successful Call: ${MCPHealthMonitor.formatUptime(timeSinceSuccess)} ago`);
|
|
823
|
-
}
|
|
824
|
-
const titleColor = server.connected ? chalk.green : chalk.red;
|
|
825
|
-
prompts.note(serverInfo.join('\n'), titleColor(`${statusIcon} ${server.serverName} (${statusText})`));
|
|
826
|
-
}
|
|
827
|
-
// Summary
|
|
828
|
-
const connectedCount = health.filter(s => s.connected).length;
|
|
829
|
-
const totalCount = health.length;
|
|
830
|
-
if (connectedCount === totalCount) {
|
|
831
|
-
prompts.outro(chalk.green(`All ${totalCount} server(s) healthy. Use --watch to monitor.`));
|
|
832
|
-
}
|
|
833
|
-
else {
|
|
834
|
-
prompts.outro(chalk.yellow(`${connectedCount}/${totalCount} server(s) connected. Use --watch to monitor.`));
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
catch (error) {
|
|
839
|
-
prompts.log.error(`Error: ${extractErrorMessage(error)}`);
|
|
840
|
-
process.exit(1);
|
|
841
|
-
}
|
|
842
|
-
});
|
|
843
|
-
// Validate server configuration (Phase 4)
|
|
844
|
-
mcpCommand
|
|
845
|
-
.command('validate <name>')
|
|
846
|
-
.description('Validate MCP server configuration with pre-flight checks')
|
|
847
|
-
.action(async (name) => {
|
|
848
|
-
try {
|
|
849
|
-
// Load configuration
|
|
850
|
-
const config = loadMCPConfig();
|
|
851
|
-
const serverConfig = config.servers.find(s => s.name === name);
|
|
852
|
-
if (!serverConfig) {
|
|
853
|
-
console.error(chalk.red(`\n❌ Server "${name}" not found in configuration\n`));
|
|
854
|
-
console.log(chalk.gray('Available servers:'));
|
|
855
|
-
const availableServers = config.servers.map(s => s.name);
|
|
856
|
-
if (availableServers.length === 0) {
|
|
857
|
-
console.log(chalk.gray(' (none configured)'));
|
|
858
|
-
}
|
|
859
|
-
else {
|
|
860
|
-
availableServers.forEach(s => console.log(chalk.gray(` • ${s}`)));
|
|
861
|
-
}
|
|
862
|
-
console.log();
|
|
863
|
-
process.exit(1);
|
|
864
|
-
}
|
|
865
|
-
console.log(chalk.blue.bold(`\n🔍 Validating "${name}" MCP server configuration...\n`));
|
|
866
|
-
// Run validation
|
|
867
|
-
const result = await validateServerConfig(serverConfig);
|
|
868
|
-
// Display results
|
|
869
|
-
console.log(formatValidationResult(result));
|
|
870
|
-
console.log();
|
|
871
|
-
if (!result.valid) {
|
|
872
|
-
console.log(chalk.yellow('💡 Fix the errors above and try again'));
|
|
873
|
-
console.log();
|
|
874
|
-
process.exit(1);
|
|
875
|
-
}
|
|
876
|
-
else if (result.warnings.length > 0) {
|
|
877
|
-
console.log(chalk.blue('💡 Configuration is valid but has warnings. Review them before connecting.'));
|
|
878
|
-
console.log();
|
|
879
|
-
}
|
|
880
|
-
else {
|
|
881
|
-
console.log(chalk.green('🚀 Ready to connect! Use: ax-cli mcp add ' + name + ' --template'));
|
|
882
|
-
console.log();
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
catch (error) {
|
|
886
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
887
|
-
process.exit(1);
|
|
888
|
-
}
|
|
889
|
-
});
|
|
890
|
-
// List MCP resources (Phase 4)
|
|
891
|
-
mcpCommand
|
|
892
|
-
.command('resources [server-name]')
|
|
893
|
-
.description('List resources exposed by MCP servers')
|
|
894
|
-
.option('--search <query>', 'Search resources by name or URI')
|
|
895
|
-
.option('--json', 'Output in JSON format')
|
|
896
|
-
.action(async (serverName, options) => {
|
|
897
|
-
try {
|
|
898
|
-
const manager = getMCPManager();
|
|
899
|
-
// Get resources
|
|
900
|
-
const resources = serverName
|
|
901
|
-
? await listServerResources(manager, serverName)
|
|
902
|
-
: await listAllResources(manager);
|
|
903
|
-
// Filter by search query if provided
|
|
904
|
-
const filteredResources = options.search
|
|
905
|
-
? searchResources(resources, options.search)
|
|
906
|
-
: resources;
|
|
907
|
-
if (options.json) {
|
|
908
|
-
console.log(JSON.stringify(filteredResources, null, 2));
|
|
909
|
-
return;
|
|
910
|
-
}
|
|
911
|
-
// Display resources
|
|
912
|
-
if (filteredResources.length === 0) {
|
|
913
|
-
if (serverName) {
|
|
914
|
-
console.log(chalk.yellow(`\n⚠️ No resources found for server "${serverName}"\n`));
|
|
915
|
-
}
|
|
916
|
-
else {
|
|
917
|
-
console.log(chalk.yellow('\n⚠️ No resources found from any connected server\n'));
|
|
918
|
-
}
|
|
919
|
-
console.log(chalk.gray('Note: Not all MCP servers expose resources.'));
|
|
920
|
-
console.log();
|
|
921
|
-
return;
|
|
922
|
-
}
|
|
923
|
-
console.log(chalk.blue.bold('\n📦 MCP Resources\n'));
|
|
924
|
-
// Group by server
|
|
925
|
-
const byServer = new Map();
|
|
926
|
-
for (const resource of filteredResources) {
|
|
927
|
-
let serverResources = byServer.get(resource.serverName);
|
|
928
|
-
if (!serverResources) {
|
|
929
|
-
serverResources = [];
|
|
930
|
-
byServer.set(resource.serverName, serverResources);
|
|
931
|
-
}
|
|
932
|
-
serverResources.push(resource);
|
|
933
|
-
}
|
|
934
|
-
for (const [server, serverResources] of byServer.entries()) {
|
|
935
|
-
console.log(chalk.bold(`${server} (${serverResources.length} resources)`));
|
|
936
|
-
for (const resource of serverResources) {
|
|
937
|
-
console.log(chalk.green(` ${resource.reference}`));
|
|
938
|
-
if (resource.description) {
|
|
939
|
-
console.log(chalk.gray(` ${resource.description}`));
|
|
940
|
-
}
|
|
941
|
-
if (resource.mimeType) {
|
|
942
|
-
console.log(chalk.gray(` Type: ${resource.mimeType}`));
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
console.log();
|
|
946
|
-
}
|
|
947
|
-
console.log(chalk.gray('💡 Use resources in chat with: "Query the @mcp:server/uri"'));
|
|
948
|
-
console.log();
|
|
949
|
-
}
|
|
950
|
-
catch (error) {
|
|
951
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
952
|
-
process.exit(1);
|
|
953
|
-
}
|
|
954
|
-
});
|
|
955
|
-
// Browse MCP Server Registry (Phase 5)
|
|
956
|
-
mcpCommand
|
|
957
|
-
.command('registry')
|
|
958
|
-
.description('Browse MCP server registry')
|
|
959
|
-
.option('--search <query>', 'Search for servers')
|
|
960
|
-
.option('--category <category>', 'Filter by category')
|
|
961
|
-
.option('--transport <type>', 'Filter by transport type (stdio, http, sse)')
|
|
962
|
-
.option('--json', 'Output in JSON format')
|
|
963
|
-
.action(async (options) => {
|
|
964
|
-
try {
|
|
965
|
-
console.log(chalk.blue.bold('\n📦 MCP Server Registry\n'));
|
|
966
|
-
const searchOptions = {
|
|
967
|
-
query: options.search,
|
|
968
|
-
category: options.category,
|
|
969
|
-
transport: options.transport,
|
|
970
|
-
sortBy: 'stars',
|
|
971
|
-
limit: 20
|
|
972
|
-
};
|
|
973
|
-
const servers = options.search || options.category || options.transport
|
|
974
|
-
? await searchRegistry(searchOptions)
|
|
975
|
-
: await getPopularServers();
|
|
976
|
-
if (options.json) {
|
|
977
|
-
console.log(JSON.stringify(servers, null, 2));
|
|
978
|
-
return;
|
|
979
|
-
}
|
|
980
|
-
if (servers.length === 0) {
|
|
981
|
-
console.log(chalk.yellow('⚠️ No servers found matching your criteria\n'));
|
|
982
|
-
console.log(chalk.gray('Try different search terms or browse all servers'));
|
|
983
|
-
console.log();
|
|
984
|
-
return;
|
|
985
|
-
}
|
|
986
|
-
console.log(chalk.gray(`Found ${servers.length} server(s)\n`));
|
|
987
|
-
for (const server of servers) {
|
|
988
|
-
const badge = server.verified ? chalk.green('✓ verified') : chalk.gray('community');
|
|
989
|
-
console.log(`${chalk.bold(server.displayName)} [${badge}] ⭐ ${server.stars}`);
|
|
990
|
-
console.log(chalk.gray(` ${server.description}`));
|
|
991
|
-
console.log(chalk.gray(` Category: ${server.category} | Transport: ${server.transport}`));
|
|
992
|
-
if (server.packageName) {
|
|
993
|
-
console.log(chalk.blue(` Install: ax-cli mcp install ${server.name}`));
|
|
994
|
-
}
|
|
995
|
-
else {
|
|
996
|
-
console.log(chalk.gray(` Repository: ${server.repository}`));
|
|
997
|
-
}
|
|
998
|
-
console.log();
|
|
999
|
-
}
|
|
1000
|
-
console.log(chalk.gray('💡 Use --search to find specific servers'));
|
|
1001
|
-
console.log(chalk.gray('💡 Use --category to filter by type (design, database, api, etc.)'));
|
|
1002
|
-
console.log();
|
|
1003
|
-
}
|
|
1004
|
-
catch (error) {
|
|
1005
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
1006
|
-
process.exit(1);
|
|
1007
|
-
}
|
|
1008
|
-
});
|
|
1009
|
-
// Install MCP server from registry (Phase 5)
|
|
1010
|
-
mcpCommand
|
|
1011
|
-
.command('install <name>')
|
|
1012
|
-
.description('Install MCP server from registry')
|
|
1013
|
-
.option('--no-validate', 'Skip validation before installation')
|
|
1014
|
-
.option('--no-connect', 'Add configuration but don\'t connect immediately')
|
|
1015
|
-
.action(async (name, options) => {
|
|
1016
|
-
try {
|
|
1017
|
-
console.log(chalk.blue(`\n📦 Installing "${name}" from registry...\n`));
|
|
1018
|
-
// Search registry
|
|
1019
|
-
const server = await getRegistryServer(name);
|
|
1020
|
-
if (!server) {
|
|
1021
|
-
console.error(chalk.red(`❌ Server "${name}" not found in registry\n`));
|
|
1022
|
-
console.log(chalk.gray('Available options:'));
|
|
1023
|
-
console.log(chalk.gray(' • Search registry: ax-cli mcp registry --search <query>'));
|
|
1024
|
-
console.log(chalk.gray(' • Browse all: ax-cli mcp registry'));
|
|
1025
|
-
console.log();
|
|
1026
|
-
process.exit(1);
|
|
1027
|
-
}
|
|
1028
|
-
// Display server info
|
|
1029
|
-
console.log(formatRegistryServer(server, false));
|
|
1030
|
-
console.log();
|
|
1031
|
-
// Generate configuration
|
|
1032
|
-
const config = generateConfigFromRegistry(server);
|
|
1033
|
-
// Validate if requested
|
|
1034
|
-
if (options.validate !== false) {
|
|
1035
|
-
console.log(chalk.blue('🔍 Validating configuration...\n'));
|
|
1036
|
-
const validation = await validateServerConfig(config);
|
|
1037
|
-
if (!validation.valid) {
|
|
1038
|
-
console.log(formatValidationResult(validation));
|
|
1039
|
-
console.log();
|
|
1040
|
-
console.error(chalk.red('❌ Validation failed. Fix errors and try again.\n'));
|
|
1041
|
-
process.exit(1);
|
|
1042
|
-
}
|
|
1043
|
-
if (validation.warnings.length > 0) {
|
|
1044
|
-
console.log(chalk.yellow('⚠️ Warnings:\n'));
|
|
1045
|
-
validation.warnings.forEach(w => console.log(chalk.yellow(` • ${w}`)));
|
|
1046
|
-
console.log();
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
// Add server to configuration
|
|
1050
|
-
addMCPServer(config);
|
|
1051
|
-
console.log(chalk.green(`✅ Server "${server.name}" added to configuration\n`));
|
|
1052
|
-
// Connect if requested
|
|
1053
|
-
if (options.connect !== false) {
|
|
1054
|
-
console.log(chalk.blue('🔌 Connecting to server...\n'));
|
|
1055
|
-
try {
|
|
1056
|
-
const manager = getMCPManager();
|
|
1057
|
-
await manager.addServer(config);
|
|
1058
|
-
const tools = manager.getTools().filter(t => t.serverName === server.name);
|
|
1059
|
-
console.log(chalk.green(`✅ Connected successfully! ${tools.length} tool(s) available\n`));
|
|
1060
|
-
// Show available tools
|
|
1061
|
-
if (tools.length > 0) {
|
|
1062
|
-
console.log(chalk.gray('Available tools:'));
|
|
1063
|
-
tools.slice(0, 5).forEach(tool => {
|
|
1064
|
-
console.log(chalk.gray(` • ${tool.name.replace(`mcp__${server.name}__`, '')}`));
|
|
1065
|
-
});
|
|
1066
|
-
if (tools.length > 5) {
|
|
1067
|
-
console.log(chalk.gray(` ... and ${tools.length - 5} more`));
|
|
1068
|
-
}
|
|
1069
|
-
console.log();
|
|
1070
|
-
}
|
|
1071
|
-
}
|
|
1072
|
-
catch (error) {
|
|
1073
|
-
console.error(chalk.yellow(`⚠️ Server added but connection failed: ${extractErrorMessage(error)}\n`));
|
|
1074
|
-
console.log(chalk.gray('You can try connecting manually with: ax-cli mcp add ' + server.name + ' --template'));
|
|
1075
|
-
console.log();
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
console.log(chalk.green('🎉 Installation complete!\n'));
|
|
1079
|
-
}
|
|
1080
|
-
catch (error) {
|
|
1081
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
1082
|
-
process.exit(1);
|
|
1083
|
-
}
|
|
1084
|
-
});
|
|
1085
|
-
// Z.AI MCP Status command
|
|
1086
|
-
mcpCommand
|
|
1087
|
-
.command('status-zai')
|
|
1088
|
-
.description('Show Z.AI MCP integration status')
|
|
1089
|
-
.option('--json', 'Output in JSON format')
|
|
1090
|
-
.action(async (options) => {
|
|
1091
|
-
try {
|
|
1092
|
-
const status = await detectZAIServices();
|
|
1093
|
-
if (options.json) {
|
|
1094
|
-
console.log(JSON.stringify(status, null, 2));
|
|
1095
|
-
return;
|
|
1096
|
-
}
|
|
1097
|
-
console.log(formatZAIStatus(status));
|
|
1098
|
-
console.log();
|
|
1099
|
-
// Show recommendations
|
|
1100
|
-
if (!status.hasApiKey) {
|
|
1101
|
-
console.log(chalk.yellow('To get started with Z.AI MCP:'));
|
|
1102
|
-
console.log(chalk.gray(' 1. Get an API key from https://z.ai'));
|
|
1103
|
-
console.log(chalk.gray(' 2. Set it: ax-cli config set apiKey YOUR_API_KEY'));
|
|
1104
|
-
console.log(chalk.gray(' 3. Enable servers: ax-cli mcp add-zai'));
|
|
1105
|
-
console.log();
|
|
1106
|
-
}
|
|
1107
|
-
else if (status.enabledServers.length === 0) {
|
|
1108
|
-
console.log(chalk.blue('API key configured. Enable Z.AI MCP servers with:'));
|
|
1109
|
-
console.log(chalk.cyan(' ax-cli mcp add-zai'));
|
|
1110
|
-
console.log();
|
|
1111
|
-
}
|
|
1112
|
-
}
|
|
1113
|
-
catch (error) {
|
|
1114
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
1115
|
-
process.exit(1);
|
|
1116
|
-
}
|
|
1117
|
-
});
|
|
1118
|
-
// Z.AI MCP Add command
|
|
1119
|
-
mcpCommand
|
|
1120
|
-
.command('add-zai')
|
|
1121
|
-
.description('Enable Z.AI MCP servers (web-reader, web-search, vision)')
|
|
1122
|
-
.option('--all', 'Enable all available Z.AI servers')
|
|
1123
|
-
.option('--server <servers...>', 'Specific servers to enable (zai-web-reader, zai-web-search, zai-vision)')
|
|
1124
|
-
.option('--api-key <key>', 'Z.AI API key (or use config/environment)')
|
|
1125
|
-
.action(async (options) => {
|
|
1126
|
-
try {
|
|
1127
|
-
console.log(chalk.blue.bold('\n🚀 Setting up Z.AI MCP Servers\n'));
|
|
1128
|
-
// Get API key
|
|
1129
|
-
let apiKey = options.apiKey || getZAIApiKey();
|
|
1130
|
-
if (!apiKey) {
|
|
1131
|
-
console.error(chalk.red('❌ No Z.AI API key found\n'));
|
|
1132
|
-
console.log(chalk.gray('Provide an API key using one of these methods:'));
|
|
1133
|
-
console.log(chalk.gray(' • --api-key <key> flag'));
|
|
1134
|
-
console.log(chalk.gray(' • ax-cli config set apiKey YOUR_API_KEY'));
|
|
1135
|
-
console.log(chalk.gray(' • Set YOUR_API_KEY or Z_AI_API_KEY environment variable'));
|
|
1136
|
-
console.log();
|
|
1137
|
-
console.log(chalk.blue('Get your API key at: https://z.ai'));
|
|
1138
|
-
console.log();
|
|
1139
|
-
process.exit(1);
|
|
1140
|
-
}
|
|
1141
|
-
// Detect current status
|
|
1142
|
-
const status = await detectZAIServices();
|
|
1143
|
-
// Determine which servers to add
|
|
1144
|
-
let serversToAdd;
|
|
1145
|
-
if (options.server && options.server.length > 0) {
|
|
1146
|
-
// Specific servers requested
|
|
1147
|
-
serversToAdd = options.server.filter((s) => isZAIServer(s));
|
|
1148
|
-
const invalidServers = options.server.filter((s) => !isZAIServer(s));
|
|
1149
|
-
if (invalidServers.length > 0) {
|
|
1150
|
-
console.log(chalk.yellow(`⚠️ Unknown server(s): ${invalidServers.join(', ')}`));
|
|
1151
|
-
console.log(chalk.gray(`Available: ${getAllZAIServerNames().join(', ')}`));
|
|
1152
|
-
console.log();
|
|
1153
|
-
}
|
|
1154
|
-
}
|
|
1155
|
-
else if (options.all) {
|
|
1156
|
-
serversToAdd = getAllZAIServerNames();
|
|
1157
|
-
}
|
|
1158
|
-
else {
|
|
1159
|
-
// Default: recommended servers based on system
|
|
1160
|
-
serversToAdd = getRecommendedServers(status);
|
|
1161
|
-
}
|
|
1162
|
-
// Filter out already enabled
|
|
1163
|
-
const newServers = serversToAdd.filter(s => !status.enabledServers.includes(s));
|
|
1164
|
-
if (newServers.length === 0) {
|
|
1165
|
-
console.log(chalk.yellow('⚠️ All requested Z.AI servers are already configured\n'));
|
|
1166
|
-
console.log(chalk.gray('Enabled servers:'));
|
|
1167
|
-
status.enabledServers.forEach(s => console.log(chalk.green(` ✓ ${s}`)));
|
|
1168
|
-
console.log();
|
|
1169
|
-
return;
|
|
1170
|
-
}
|
|
1171
|
-
// Check Node.js version for vision
|
|
1172
|
-
if (newServers.includes(ZAI_SERVER_NAMES.VISION) && !status.nodeVersionOk) {
|
|
1173
|
-
console.log(chalk.yellow(`⚠️ Vision server requires Node.js 22+, you have v${status.nodeVersion}`));
|
|
1174
|
-
console.log(chalk.gray(' Skipping vision server. Update Node.js to enable it.'));
|
|
1175
|
-
const visionIndex = newServers.indexOf(ZAI_SERVER_NAMES.VISION);
|
|
1176
|
-
if (visionIndex > -1) {
|
|
1177
|
-
newServers.splice(visionIndex, 1);
|
|
1178
|
-
}
|
|
1179
|
-
console.log();
|
|
1180
|
-
}
|
|
1181
|
-
if (newServers.length === 0) {
|
|
1182
|
-
console.log(chalk.yellow('No servers to add after filtering.\n'));
|
|
1183
|
-
return;
|
|
1184
|
-
}
|
|
1185
|
-
// Add each server
|
|
1186
|
-
const manager = getMCPManager();
|
|
1187
|
-
let successCount = 0;
|
|
1188
|
-
for (const serverName of newServers) {
|
|
1189
|
-
const template = ZAI_MCP_TEMPLATES[serverName];
|
|
1190
|
-
console.log(chalk.blue(`Adding ${template.displayName}...`));
|
|
1191
|
-
console.log(chalk.gray(` ${template.description}`));
|
|
1192
|
-
try {
|
|
1193
|
-
const config = generateZAIServerConfig(serverName, apiKey);
|
|
1194
|
-
// Connect first, then save config only on success
|
|
1195
|
-
await manager.addServer(config);
|
|
1196
|
-
addMCPServer(config);
|
|
1197
|
-
const tools = manager.getTools().filter(t => t.serverName === serverName);
|
|
1198
|
-
console.log(chalk.green(` ✓ Connected (${tools.length} tool${tools.length !== 1 ? 's' : ''})`));
|
|
1199
|
-
successCount++;
|
|
1200
|
-
}
|
|
1201
|
-
catch (error) {
|
|
1202
|
-
console.log(chalk.red(` ✗ Failed: ${extractErrorMessage(error)}`));
|
|
1203
|
-
}
|
|
1204
|
-
console.log();
|
|
1205
|
-
}
|
|
1206
|
-
// Summary
|
|
1207
|
-
if (successCount > 0) {
|
|
1208
|
-
console.log(chalk.green.bold(`✨ ${successCount} Z.AI MCP server${successCount !== 1 ? 's' : ''} enabled!\n`));
|
|
1209
|
-
console.log(chalk.gray('Available tools:'));
|
|
1210
|
-
const allTools = manager.getTools().filter(t => newServers.some(s => t.serverName === s));
|
|
1211
|
-
allTools.forEach(tool => {
|
|
1212
|
-
console.log(chalk.gray(` • ${tool.name.replace('mcp__', '').replace('__', '/')}`));
|
|
1213
|
-
});
|
|
1214
|
-
console.log();
|
|
1215
|
-
}
|
|
1216
|
-
else {
|
|
1217
|
-
console.log(chalk.red('❌ No servers were successfully added.\n'));
|
|
1218
|
-
process.exit(1);
|
|
1219
|
-
}
|
|
1220
|
-
}
|
|
1221
|
-
catch (error) {
|
|
1222
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
1223
|
-
process.exit(1);
|
|
1224
|
-
}
|
|
1225
|
-
});
|
|
1226
|
-
// Z.AI MCP Remove command
|
|
1227
|
-
mcpCommand
|
|
1228
|
-
.command('remove-zai')
|
|
1229
|
-
.description('Disable Z.AI MCP servers')
|
|
1230
|
-
.option('--all', 'Remove all Z.AI servers')
|
|
1231
|
-
.option('--server <servers...>', 'Specific servers to remove')
|
|
1232
|
-
.action(async (options) => {
|
|
1233
|
-
try {
|
|
1234
|
-
console.log(chalk.blue.bold('\n🗑️ Removing Z.AI MCP Servers\n'));
|
|
1235
|
-
const status = await detectZAIServices();
|
|
1236
|
-
if (status.enabledServers.length === 0) {
|
|
1237
|
-
console.log(chalk.yellow('⚠️ No Z.AI MCP servers are currently configured.\n'));
|
|
1238
|
-
return;
|
|
1239
|
-
}
|
|
1240
|
-
// Determine which servers to remove
|
|
1241
|
-
let serversToRemove;
|
|
1242
|
-
if (options.server && options.server.length > 0) {
|
|
1243
|
-
serversToRemove = options.server.filter((s) => isZAIServer(s) && status.enabledServers.includes(s));
|
|
1244
|
-
const notEnabled = options.server.filter((s) => isZAIServer(s) && !status.enabledServers.includes(s));
|
|
1245
|
-
if (notEnabled.length > 0) {
|
|
1246
|
-
console.log(chalk.yellow(`⚠️ Server(s) not enabled: ${notEnabled.join(', ')}`));
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
else if (options.all) {
|
|
1250
|
-
serversToRemove = [...status.enabledServers];
|
|
1251
|
-
}
|
|
1252
|
-
else {
|
|
1253
|
-
// Default: remove all
|
|
1254
|
-
serversToRemove = [...status.enabledServers];
|
|
1255
|
-
}
|
|
1256
|
-
if (serversToRemove.length === 0) {
|
|
1257
|
-
console.log(chalk.yellow('⚠️ No matching servers to remove.\n'));
|
|
1258
|
-
return;
|
|
1259
|
-
}
|
|
1260
|
-
// Remove each server
|
|
1261
|
-
const manager = getMCPManager();
|
|
1262
|
-
let successCount = 0;
|
|
1263
|
-
for (const serverName of serversToRemove) {
|
|
1264
|
-
const template = ZAI_MCP_TEMPLATES[serverName];
|
|
1265
|
-
console.log(chalk.blue(`Removing ${template.displayName}...`));
|
|
1266
|
-
try {
|
|
1267
|
-
await manager.removeServer(serverName);
|
|
1268
|
-
removeMCPServer(serverName);
|
|
1269
|
-
console.log(chalk.green(` ✓ Removed`));
|
|
1270
|
-
successCount++;
|
|
1271
|
-
}
|
|
1272
|
-
catch (error) {
|
|
1273
|
-
console.log(chalk.red(` ✗ Failed: ${extractErrorMessage(error)}`));
|
|
1274
|
-
}
|
|
1275
|
-
}
|
|
1276
|
-
console.log();
|
|
1277
|
-
if (successCount > 0) {
|
|
1278
|
-
console.log(chalk.green(`✓ ${successCount} Z.AI MCP server${successCount !== 1 ? 's' : ''} removed.\n`));
|
|
1279
|
-
}
|
|
1280
|
-
else {
|
|
1281
|
-
console.log(chalk.red('❌ No servers were successfully removed.\n'));
|
|
1282
|
-
process.exit(1);
|
|
1283
|
-
}
|
|
1284
|
-
}
|
|
1285
|
-
catch (error) {
|
|
1286
|
-
console.error(chalk.red(`\n❌ Error: ${extractErrorMessage(error)}\n`));
|
|
1287
|
-
process.exit(1);
|
|
1288
|
-
}
|
|
1289
|
-
});
|
|
1290
|
-
return mcpCommand;
|
|
1291
|
-
}
|
|
1292
|
-
//# sourceMappingURL=mcp.js.map
|