@chanl-ai/cli 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/bin/chanl.js +10 -0
  2. package/dist/__tests__/cli.test.d.ts +2 -0
  3. package/dist/__tests__/cli.test.js +2313 -0
  4. package/dist/__tests__/cli.test.js.map +1 -0
  5. package/dist/cli.d.ts +12 -0
  6. package/dist/cli.js +72 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/agents.d.ts +8 -0
  9. package/dist/commands/agents.js +671 -0
  10. package/dist/commands/agents.js.map +1 -0
  11. package/dist/commands/auth.d.ts +16 -0
  12. package/dist/commands/auth.js +294 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/call.d.ts +8 -0
  15. package/dist/commands/call.js +166 -0
  16. package/dist/commands/call.js.map +1 -0
  17. package/dist/commands/calls.d.ts +8 -0
  18. package/dist/commands/calls.js +719 -0
  19. package/dist/commands/calls.js.map +1 -0
  20. package/dist/commands/chat.d.ts +8 -0
  21. package/dist/commands/chat.js +203 -0
  22. package/dist/commands/chat.js.map +1 -0
  23. package/dist/commands/config.d.ts +8 -0
  24. package/dist/commands/config.js +231 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/health.d.ts +8 -0
  27. package/dist/commands/health.js +55 -0
  28. package/dist/commands/health.js.map +1 -0
  29. package/dist/commands/index.d.ts +18 -0
  30. package/dist/commands/index.js +39 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/knowledge.d.ts +8 -0
  33. package/dist/commands/knowledge.js +539 -0
  34. package/dist/commands/knowledge.js.map +1 -0
  35. package/dist/commands/mcp.d.ts +8 -0
  36. package/dist/commands/mcp.js +589 -0
  37. package/dist/commands/mcp.js.map +1 -0
  38. package/dist/commands/memory.d.ts +8 -0
  39. package/dist/commands/memory.js +408 -0
  40. package/dist/commands/memory.js.map +1 -0
  41. package/dist/commands/personas.d.ts +8 -0
  42. package/dist/commands/personas.js +356 -0
  43. package/dist/commands/personas.js.map +1 -0
  44. package/dist/commands/prompts.d.ts +8 -0
  45. package/dist/commands/prompts.js +295 -0
  46. package/dist/commands/prompts.js.map +1 -0
  47. package/dist/commands/scenarios.d.ts +8 -0
  48. package/dist/commands/scenarios.js +591 -0
  49. package/dist/commands/scenarios.js.map +1 -0
  50. package/dist/commands/scorecards.d.ts +8 -0
  51. package/dist/commands/scorecards.js +570 -0
  52. package/dist/commands/scorecards.js.map +1 -0
  53. package/dist/commands/tools.d.ts +8 -0
  54. package/dist/commands/tools.js +632 -0
  55. package/dist/commands/tools.js.map +1 -0
  56. package/dist/commands/toolsets.d.ts +8 -0
  57. package/dist/commands/toolsets.js +464 -0
  58. package/dist/commands/toolsets.js.map +1 -0
  59. package/dist/commands/workspaces.d.ts +8 -0
  60. package/dist/commands/workspaces.js +170 -0
  61. package/dist/commands/workspaces.js.map +1 -0
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.js +6 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/utils/config-store.d.ts +117 -0
  66. package/dist/utils/config-store.js +191 -0
  67. package/dist/utils/config-store.js.map +1 -0
  68. package/dist/utils/interactive.d.ts +41 -0
  69. package/dist/utils/interactive.js +83 -0
  70. package/dist/utils/interactive.js.map +1 -0
  71. package/dist/utils/output.d.ts +100 -0
  72. package/dist/utils/output.js +221 -0
  73. package/dist/utils/output.js.map +1 -0
  74. package/dist/utils/sdk-factory.d.ts +15 -0
  75. package/dist/utils/sdk-factory.js +34 -0
  76. package/dist/utils/sdk-factory.js.map +1 -0
  77. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/cli.test.ts"],"sourcesContent":["/**\n * CLI Integration Tests\n *\n * Tests the CLI commands work correctly with mocked SDK responses.\n * These tests verify command parsing, output formatting, and error handling.\n */\n\nimport { describe, it, expect, beforeEach, afterEach, vi, Mock } from 'vitest';\nimport { createProgram } from '../cli';\nimport { configStore } from '../utils/config-store';\nimport { ChanlSDK } from '@chanl-ai/sdk';\nimport type { Tool, ToolExecution, Toolset } from '@chanl-ai/sdk';\n\n// Mock the SDK\nvi.mock('@chanl-ai/sdk', () => ({\n ChanlSDK: vi.fn(),\n}));\n\n// Mock config store\nvi.mock('../utils/config-store', () => ({\n configStore: {\n getApiKey: vi.fn(),\n getBaseUrl: vi.fn(() => 'https://api.chanl.ai'),\n getWorkspaceId: vi.fn(() => 'ws_123'),\n getJwtToken: vi.fn(() => null),\n getAuthMethod: vi.fn(() => null),\n getAppUrl: vi.fn(() => 'https://app.chanl.ai'),\n setApiKey: vi.fn(),\n setBaseUrl: vi.fn(),\n setWorkspaceId: vi.fn(),\n removeApiKey: vi.fn(),\n clearAuth: vi.fn(),\n delete: vi.fn(),\n isAuthenticated: vi.fn(),\n getPath: vi.fn(() => '/home/user/.chanl/config.json'),\n },\n}));\n\n// Helper to capture console output\nfunction captureOutput() {\n const logs: string[] = [];\n const errors: string[] = [];\n\n const originalLog = console.log;\n const originalError = console.error;\n\n console.log = (...args: unknown[]) => {\n logs.push(args.map(String).join(' '));\n };\n\n console.error = (...args: unknown[]) => {\n errors.push(args.map(String).join(' '));\n };\n\n return {\n logs,\n errors,\n restore: () => {\n console.log = originalLog;\n console.error = originalError;\n },\n };\n}\n\n// Helper to run CLI command\nasync function runCli(args: string[]): Promise<{ exitCode: number; logs: string[]; errors: string[] }> {\n const output = captureOutput();\n const program = createProgram();\n\n // Reset exit code\n process.exitCode = undefined;\n\n try {\n await program.parseAsync(['node', 'chanl', ...args]);\n } catch {\n // Commander throws for some errors, which is expected\n }\n\n output.restore();\n\n return {\n exitCode: process.exitCode ?? 0,\n logs: output.logs,\n errors: output.errors,\n };\n}\n\n// Mock tool data\nconst mockTool: Tool = {\n id: 'tool_weather123',\n workspaceId: 'ws_123',\n name: 'get_weather',\n description: 'Get weather for a city',\n type: 'http',\n inputSchema: {\n type: 'object',\n properties: {\n city: { type: 'string', description: 'City name' },\n },\n required: ['city'],\n },\n configuration: {\n http: { method: 'GET', url: 'https://wttr.in/{{city}}' },\n },\n isEnabled: true,\n tags: ['weather', 'utility'],\n createdBy: 'user_123',\n stats: {\n totalCalls: 100,\n successfulCalls: 95,\n failedCalls: 5,\n averageLatencyMs: 250,\n lastCalledAt: '2025-01-15T10:30:00Z',\n },\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n};\n\nconst mockExecution: ToolExecution = {\n id: 'exec_abc123',\n toolId: 'tool_weather123',\n workspaceId: 'ws_123',\n source: 'api',\n status: 'completed',\n input: { city: 'London' },\n output: { temperature: '12°C', condition: 'Cloudy' },\n executionTimeMs: 245,\n createdAt: '2025-01-15T10:30:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n};\n\n// Mock MCP config data\nconst mockMcpConfig = {\n serverUrl: 'https://my-workspace.chanl.app/mcp',\n environment: 'production' as const,\n status: 'active' as const,\n toolCount: 15,\n resourceCount: 8,\n promptCount: 5,\n agentConfigs: {\n claude: {\n mcpServers: {\n chanl: {\n url: 'https://my-workspace.chanl.app/mcp',\n headers: { 'X-API-Key': '${CHANL_MCP_API_KEY}' },\n transport: 'streamable-http',\n },\n },\n },\n cursor: {\n mcpServers: {\n chanl: {\n url: 'https://my-workspace.chanl.app/mcp',\n headers: { 'X-API-Key': '${CHANL_MCP_API_KEY}' },\n transport: 'streamable-http',\n },\n },\n },\n generic: {\n url: 'https://my-workspace.chanl.app/mcp',\n headers: { 'X-API-Key': '${CHANL_MCP_API_KEY}' },\n transport: 'streamable-http',\n },\n },\n};\n\nconst mockMcpStatusHealthy = {\n healthy: true,\n message: 'MCP server is running',\n responseTimeMs: 45,\n};\n\nconst mockMcpStatusUnhealthy = {\n healthy: false,\n message: 'Failed to connect to MCP server',\n error: 'Connection refused',\n};\n\n// Mock toolset data\nconst mockToolset: Toolset = {\n id: 'toolset_abc123',\n workspaceId: 'ws_123',\n name: 'customer_support_tools',\n description: 'Tools for customer support agents',\n tools: ['tool_weather123', 'tool_lookup456'],\n toolCount: 2,\n enabled: true,\n isPublic: false,\n version: '1.0.0',\n tags: ['support', 'customer-facing'],\n createdBy: 'user_123',\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n};\n\ndescribe('CLI', () => {\n let mockSdk: {\n tools: {\n list: Mock;\n get: Mock;\n create: Mock;\n update: Mock;\n delete: Mock;\n execute: Mock;\n test: Mock;\n getExecutions: Mock;\n enable: Mock;\n disable: Mock;\n getCategories: Mock;\n };\n toolsets: {\n list: Mock;\n get: Mock;\n create: Mock;\n update: Mock;\n delete: Mock;\n enable: Mock;\n disable: Mock;\n manageTools: Mock;\n };\n workspace: {\n getAll: Mock;\n getById: Mock;\n };\n mcp: {\n getConfig: Mock;\n getStatus: Mock;\n listTools: Mock;\n callTool: Mock;\n getTool: Mock;\n };\n chat: {\n createSession: Mock;\n sendMessage: Mock;\n getMessages: Mock;\n endSession: Mock;\n deleteSession: Mock;\n session: Mock;\n };\n calls: {\n list: Mock;\n get: Mock;\n getTranscript: Mock;\n getMetrics: Mock;\n getAnalysis: Mock;\n analyze: Mock;\n import: Mock;\n delete: Mock;\n bulkDelete: Mock;\n };\n scenarios: {\n list: Mock;\n get: Mock;\n run: Mock;\n runAll: Mock;\n getExecution: Mock;\n getExecutions: Mock;\n getSimulations: Mock;\n };\n agents: {\n list: Mock;\n get: Mock;\n create: Mock;\n update: Mock;\n delete: Mock;\n sync: Mock;\n syncAll: Mock;\n getStats: Mock;\n importFromPlatform: Mock;\n publish: Mock;\n pushMcp: Mock;\n };\n prompts: {\n list: Mock;\n get: Mock;\n create: Mock;\n update: Mock;\n delete: Mock;\n };\n };\n\n beforeEach(() => {\n // Reset mocks\n vi.clearAllMocks();\n\n // Setup mock SDK\n mockSdk = {\n tools: {\n list: vi.fn(),\n get: vi.fn(),\n create: vi.fn(),\n update: vi.fn(),\n delete: vi.fn(),\n execute: vi.fn(),\n test: vi.fn(),\n getExecutions: vi.fn(),\n enable: vi.fn(),\n disable: vi.fn(),\n getCategories: vi.fn(),\n },\n toolsets: {\n list: vi.fn(),\n get: vi.fn(),\n create: vi.fn(),\n update: vi.fn(),\n delete: vi.fn(),\n enable: vi.fn(),\n disable: vi.fn(),\n manageTools: vi.fn(),\n },\n workspace: {\n getAll: vi.fn(),\n getById: vi.fn(),\n },\n mcp: {\n getConfig: vi.fn(),\n getStatus: vi.fn(),\n listTools: vi.fn(),\n callTool: vi.fn(),\n getTool: vi.fn(),\n },\n chat: {\n createSession: vi.fn(),\n sendMessage: vi.fn(),\n getMessages: vi.fn(),\n endSession: vi.fn(),\n deleteSession: vi.fn(),\n session: vi.fn(),\n },\n calls: {\n list: vi.fn(),\n get: vi.fn(),\n getTranscript: vi.fn(),\n getMetrics: vi.fn(),\n getAnalysis: vi.fn(),\n analyze: vi.fn(),\n import: vi.fn(),\n delete: vi.fn(),\n bulkDelete: vi.fn(),\n },\n scenarios: {\n list: vi.fn(),\n get: vi.fn(),\n run: vi.fn(),\n runAll: vi.fn(),\n getExecution: vi.fn(),\n getExecutions: vi.fn(),\n getSimulations: vi.fn(),\n },\n agents: {\n list: vi.fn(),\n get: vi.fn(),\n create: vi.fn(),\n update: vi.fn(),\n delete: vi.fn(),\n sync: vi.fn(),\n syncAll: vi.fn(),\n getStats: vi.fn(),\n importFromPlatform: vi.fn(),\n publish: vi.fn(),\n pushMcp: vi.fn(),\n },\n prompts: {\n list: vi.fn(),\n get: vi.fn(),\n create: vi.fn(),\n update: vi.fn(),\n delete: vi.fn(),\n },\n };\n\n (ChanlSDK as Mock).mockImplementation(() => mockSdk);\n\n // Default: authenticated with workspace\n (configStore.getApiKey as Mock).mockReturnValue('test-api-key');\n (configStore.getWorkspaceId as Mock).mockReturnValue('ws_123');\n (configStore.isAuthenticated as Mock).mockReturnValue(true);\n });\n\n afterEach(() => {\n process.exitCode = undefined;\n });\n\n describe('--help', () => {\n it('should have all expected commands in program', () => {\n // Test program structure instead of output since Commander uses stdout.write\n const program = createProgram();\n const commandNames = program.commands.map((c) => c.name());\n\n expect(commandNames).toContain('login');\n expect(commandNames).toContain('logout');\n expect(commandNames).toContain('auth');\n expect(commandNames).toContain('config');\n expect(commandNames).toContain('tools');\n });\n });\n\n describe('--version', () => {\n it('should have correct version in program', () => {\n // Test program version instead of output since Commander uses stdout.write\n const program = createProgram();\n expect(program.version()).toBe('1.0.0');\n });\n });\n\n describe('tools list', () => {\n it('should list tools with table output', async () => {\n mockSdk.tools.list.mockResolvedValue({\n success: true,\n data: {\n tools: [mockTool],\n total: 1,\n pagination: {\n page: 1,\n limit: 20,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'list']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.list).toHaveBeenCalledWith(expect.any(Object));\n\n const output = logs.join('\\n');\n expect(output).toContain('get_weather');\n expect(output).toContain('http');\n expect(output).toContain('Total: 1 tools');\n });\n\n it('should list tools with JSON output', async () => {\n mockSdk.tools.list.mockResolvedValue({\n success: true,\n data: {\n tools: [mockTool],\n total: 1,\n pagination: {\n page: 1,\n limit: 20,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'tools', 'list']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.tools).toHaveLength(1);\n expect(parsed.tools[0].name).toBe('get_weather');\n });\n\n it('should filter by type', async () => {\n mockSdk.tools.list.mockResolvedValue({\n success: true,\n data: {\n tools: [mockTool],\n total: 1,\n pagination: { page: 1, limit: 20, totalPages: 1, hasNext: false, hasPrev: false },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n await runCli(['tools', 'list', '--type', 'http']);\n\n expect(mockSdk.tools.list).toHaveBeenCalledWith(\n expect.objectContaining({ type: 'http' })\n );\n });\n\n it('should filter by enabled status', async () => {\n mockSdk.tools.list.mockResolvedValue({\n success: true,\n data: {\n tools: [mockTool],\n total: 1,\n pagination: { page: 1, limit: 20, totalPages: 1, hasNext: false, hasPrev: false },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n await runCli(['tools', 'list', '--enabled']);\n\n expect(mockSdk.tools.list).toHaveBeenCalledWith(\n expect.objectContaining({ isEnabled: true })\n );\n });\n });\n\n describe('tools get', () => {\n it('should get tool by ID', async () => {\n mockSdk.tools.get.mockResolvedValue({\n success: true,\n data: { tool: mockTool },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'get', 'tool_weather123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.get).toHaveBeenCalledWith('tool_weather123');\n\n const output = logs.join('\\n');\n expect(output).toContain('get_weather');\n expect(output).toContain('http');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.tools.get.mockResolvedValue({\n success: true,\n data: { tool: mockTool },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'tools', 'get', 'tool_weather123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.name).toBe('get_weather');\n });\n });\n\n describe('tools execute', () => {\n it('should execute tool with input', async () => {\n mockSdk.tools.execute.mockResolvedValue({\n success: true,\n data: {\n success: true,\n data: { temperature: '12°C', condition: 'Cloudy' },\n latencyMs: 245,\n traceId: 'trace_abc123',\n executionId: 'exec_abc123',\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'tools',\n 'execute',\n 'tool_weather123',\n '--input',\n '{\"city\":\"London\"}',\n ]);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.execute).toHaveBeenCalledWith('tool_weather123', { city: 'London' });\n\n const output = logs.join('\\n');\n expect(output).toContain('Success');\n expect(output).toContain('245ms');\n });\n\n it('should handle invalid JSON input', async () => {\n const { exitCode, errors } = await runCli([\n 'tools',\n 'execute',\n 'tool_weather123',\n '--input',\n 'not-valid-json',\n ]);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Invalid JSON'))).toBe(true);\n });\n });\n\n describe('tools delete', () => {\n it('should delete tool with --yes flag', async () => {\n mockSdk.tools.delete.mockResolvedValue({\n success: true,\n data: { deleted: true },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'delete', 'tool_weather123', '--yes']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.delete).toHaveBeenCalledWith('tool_weather123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Deleted');\n });\n });\n\n describe('tools executions', () => {\n it('should list executions for a tool', async () => {\n mockSdk.tools.getExecutions.mockResolvedValue({\n success: true,\n data: {\n data: [mockExecution],\n total: 1,\n page: 1,\n limit: 10,\n pagination: {\n page: 1,\n limit: 10,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'executions', 'tool_weather123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.getExecutions).toHaveBeenCalledWith('tool_weather123', expect.any(Object));\n\n const output = logs.join('\\n');\n expect(output).toContain('exec_abc123');\n expect(output).toContain('completed');\n });\n });\n\n describe('auth status', () => {\n it('should show authenticated status', async () => {\n (configStore.getApiKey as Mock).mockReturnValue('chk_test1234567890');\n (configStore.getAuthMethod as Mock).mockReturnValue('api-key');\n (configStore.getWorkspaceId as Mock).mockReturnValue('ws_abc123');\n\n const { logs, exitCode } = await runCli(['auth', 'status']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n expect(output).toContain('Authenticated');\n });\n\n it('should show not authenticated when no API key', async () => {\n (configStore.getApiKey as Mock).mockReturnValue(null);\n (configStore.getAuthMethod as Mock).mockReturnValue(null);\n\n const { logs } = await runCli(['auth', 'status']);\n\n const output = logs.join('\\n');\n expect(output).toContain('Not authenticated');\n });\n\n it('should output JSON when --json flag is used', async () => {\n (configStore.getApiKey as Mock).mockReturnValue('chk_test1234567890');\n (configStore.getAuthMethod as Mock).mockReturnValue('api-key');\n (configStore.getWorkspaceId as Mock).mockReturnValue('ws_abc123');\n\n const { logs } = await runCli(['--json', 'auth', 'status']);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.authenticated).toBe(true);\n });\n });\n\n describe('logout', () => {\n it('should logout successfully', async () => {\n (configStore.isAuthenticated as Mock).mockReturnValue(true);\n\n const { logs, exitCode } = await runCli(['logout']);\n\n expect(exitCode).toBe(0);\n expect(configStore.clearAuth).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('Logged out');\n });\n\n it('should handle already logged out', async () => {\n (configStore.isAuthenticated as Mock).mockReturnValue(false);\n\n const { logs } = await runCli(['logout']);\n\n const output = logs.join('\\n');\n expect(output).toContain('Already logged out');\n });\n });\n\n describe('error handling', () => {\n it('should show error when not authenticated for tools commands', async () => {\n (configStore.getApiKey as Mock).mockReturnValue(null);\n\n const { exitCode, errors } = await runCli(['tools', 'list']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Not authenticated'))).toBe(true);\n });\n\n it('should handle API errors gracefully', async () => {\n mockSdk.tools.list.mockRejectedValue(new Error('Network error'));\n\n const { exitCode, errors } = await runCli(['tools', 'list']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Network error'))).toBe(true);\n });\n\n it('should handle unsuccessful API responses', async () => {\n mockSdk.tools.list.mockResolvedValue({\n success: false,\n data: null,\n message: 'Unauthorized',\n timestamp: new Date().toISOString(),\n });\n\n const { exitCode, errors } = await runCli(['tools', 'list']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Unauthorized') || e.includes('Failed'))).toBe(true);\n });\n });\n\n describe('mcp info', () => {\n it('should display MCP info with table output', async () => {\n mockSdk.mcp.getConfig.mockResolvedValue({\n success: true,\n data: mockMcpConfig,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'info']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.getConfig).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('https://my-workspace.chanl.app/mcp');\n expect(output).toContain('production');\n expect(output).toContain('15'); // toolCount\n });\n\n it('should display MCP info with JSON output', async () => {\n mockSdk.mcp.getConfig.mockResolvedValue({\n success: true,\n data: mockMcpConfig,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'info']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.serverUrl).toBe('https://my-workspace.chanl.app/mcp');\n expect(parsed.environment).toBe('production');\n expect(parsed.toolCount).toBe(15);\n });\n\n it('should handle API errors', async () => {\n mockSdk.mcp.getConfig.mockRejectedValue(new Error('Network error'));\n\n const { exitCode, errors } = await runCli(['mcp', 'info']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Network error'))).toBe(true);\n });\n });\n\n describe('mcp status', () => {\n it('should show healthy status', async () => {\n mockSdk.mcp.getStatus.mockResolvedValue({\n success: true,\n data: mockMcpStatusHealthy,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'status']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.getStatus).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('healthy');\n expect(output).toContain('MCP server is running');\n });\n\n it('should show unhealthy status with exit code 1', async () => {\n mockSdk.mcp.getStatus.mockResolvedValue({\n success: true,\n data: mockMcpStatusUnhealthy,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { errors, exitCode } = await runCli(['mcp', 'status']);\n\n expect(exitCode).toBe(1);\n\n const output = errors.join('\\n');\n expect(output).toContain('unhealthy');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.mcp.getStatus.mockResolvedValue({\n success: true,\n data: mockMcpStatusHealthy,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'status']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.healthy).toBe(true);\n expect(parsed.message).toBe('MCP server is running');\n });\n });\n\n describe('mcp config', () => {\n it('should output generic config by default', async () => {\n mockSdk.mcp.getConfig.mockResolvedValue({\n success: true,\n data: mockMcpConfig,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n // Use --json to avoid extra info messages in output\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'config']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.url).toBe('https://my-workspace.chanl.app/mcp');\n expect(parsed.transport).toBe('streamable-http');\n });\n\n it('should output claude config with --format claude', async () => {\n mockSdk.mcp.getConfig.mockResolvedValue({\n success: true,\n data: mockMcpConfig,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n // Use --json to avoid extra info messages in output\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'config', '--format', 'claude']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl.url).toBe('https://my-workspace.chanl.app/mcp');\n });\n\n it('should output cursor config with --format cursor', async () => {\n mockSdk.mcp.getConfig.mockResolvedValue({\n success: true,\n data: mockMcpConfig,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n // Use --json to avoid extra info messages in output\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'config', '--format', 'cursor']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl.url).toBe('https://my-workspace.chanl.app/mcp');\n });\n\n it('should handle API errors', async () => {\n mockSdk.mcp.getConfig.mockRejectedValue(new Error('Network error'));\n\n const { exitCode, errors } = await runCli(['mcp', 'config']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Network error'))).toBe(true);\n });\n });\n\n describe('mcp command registration', () => {\n it('should have mcp command registered', () => {\n const program = createProgram();\n const commandNames = program.commands.map((c) => c.name());\n\n expect(commandNames).toContain('mcp');\n });\n });\n\n // ============================================\n // MCP Tools Commands (Story 10)\n // ============================================\n\n describe('mcp tools', () => {\n const mockMcpTools = [\n {\n name: 'get_weather',\n description: 'Get current weather for a location',\n inputSchema: {\n type: 'object',\n properties: {\n city: { type: 'string', description: 'City name' },\n },\n required: ['city'],\n },\n },\n {\n name: 'search_kb',\n description: 'Search the knowledge base',\n inputSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'Search query' },\n },\n required: ['query'],\n },\n },\n ];\n\n it('should list MCP tools for an agent with table output', async () => {\n mockSdk.mcp.listTools.mockResolvedValue({\n success: true,\n data: { tools: mockMcpTools },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'tools', 'agent_123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.listTools).toHaveBeenCalledWith('agent_123');\n\n const output = logs.join('\\n');\n expect(output).toContain('get_weather');\n expect(output).toContain('search_kb');\n });\n\n it('should list MCP tools with JSON output', async () => {\n mockSdk.mcp.listTools.mockResolvedValue({\n success: true,\n data: { tools: mockMcpTools },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'tools', 'agent_123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.tools).toHaveLength(2);\n expect(parsed.tools[0].name).toBe('get_weather');\n });\n\n it('should show message when agent has no tools', async () => {\n mockSdk.mcp.listTools.mockResolvedValue({\n success: true,\n data: { tools: [] },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'tools', 'agent_123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n expect(output).toContain('No MCP tools');\n });\n\n it('should handle API errors', async () => {\n mockSdk.mcp.listTools.mockRejectedValue(new Error('Agent not found'));\n\n const { exitCode, errors } = await runCli(['mcp', 'tools', 'agent_123']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e: string) => e.includes('Agent not found'))).toBe(true);\n });\n });\n\n describe('mcp call', () => {\n it('should call a tool and display result', async () => {\n mockSdk.mcp.callTool.mockResolvedValue({\n success: true,\n data: {\n content: [{ type: 'text', text: 'Temperature in London: 15C' }],\n isError: false,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'mcp', 'call', 'agent_123', 'get_weather', '{\"city\":\"London\"}',\n ]);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.callTool).toHaveBeenCalledWith(\n 'agent_123', 'get_weather', { city: 'London' }\n );\n\n const output = logs.join('\\n');\n expect(output).toContain('Temperature in London: 15C');\n });\n\n it('should call a tool without arguments', async () => {\n mockSdk.mcp.callTool.mockResolvedValue({\n success: true,\n data: {\n content: [{ type: 'text', text: 'pong' }],\n isError: false,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'call', 'agent_123', 'ping']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.callTool).toHaveBeenCalledWith(\n 'agent_123', 'ping', undefined\n );\n\n const output = logs.join('\\n');\n expect(output).toContain('pong');\n });\n\n it('should display error result from tool', async () => {\n mockSdk.mcp.callTool.mockResolvedValue({\n success: true,\n data: {\n content: [{ type: 'text', text: 'Error: city not found' }],\n isError: true,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { errors, exitCode } = await runCli([\n 'mcp', 'call', 'agent_123', 'get_weather', '{\"city\":\"xyz\"}',\n ]);\n\n expect(exitCode).toBe(1);\n const output = errors.join('\\n');\n expect(output).toContain('Error');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.mcp.callTool.mockResolvedValue({\n success: true,\n data: {\n content: [{ type: 'text', text: 'result text' }],\n isError: false,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n '--json', 'mcp', 'call', 'agent_123', 'get_weather', '{\"city\":\"London\"}',\n ]);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.content).toBeDefined();\n expect(parsed.content[0].text).toBe('result text');\n });\n\n it('should handle invalid JSON arguments gracefully', async () => {\n const { exitCode, errors } = await runCli([\n 'mcp', 'call', 'agent_123', 'get_weather', 'not-json',\n ]);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e: string) => e.includes('Invalid JSON'))).toBe(true);\n });\n\n it('should handle API errors', async () => {\n mockSdk.mcp.callTool.mockRejectedValue(new Error('Tool not found'));\n\n const { exitCode, errors } = await runCli([\n 'mcp', 'call', 'agent_123', 'nonexistent', '{}',\n ]);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e: string) => e.includes('Tool not found'))).toBe(true);\n });\n });\n\n describe('mcp inspect', () => {\n const mockToolDetail = {\n name: 'get_weather',\n description: 'Get current weather for a location',\n inputSchema: {\n type: 'object',\n properties: {\n city: { type: 'string', description: 'City name' },\n units: { type: 'string', enum: ['celsius', 'fahrenheit'] },\n },\n required: ['city'],\n },\n };\n\n it('should display tool details with table output', async () => {\n mockSdk.mcp.getTool.mockResolvedValue({\n success: true,\n data: { tool: mockToolDetail },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['mcp', 'inspect', 'agent_123', 'get_weather']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.mcp.getTool).toHaveBeenCalledWith('agent_123', 'get_weather');\n\n const output = logs.join('\\n');\n expect(output).toContain('get_weather');\n expect(output).toContain('Get current weather');\n expect(output).toContain('city');\n });\n\n it('should display tool details with JSON output', async () => {\n mockSdk.mcp.getTool.mockResolvedValue({\n success: true,\n data: { tool: mockToolDetail },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'inspect', 'agent_123', 'get_weather']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.name).toBe('get_weather');\n expect(parsed.inputSchema).toBeDefined();\n });\n\n it('should handle tool not found', async () => {\n mockSdk.mcp.getTool.mockRejectedValue(new Error('Tool not found'));\n\n const { exitCode, errors } = await runCli(['mcp', 'inspect', 'agent_123', 'nonexistent']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e: string) => e.includes('Tool not found'))).toBe(true);\n });\n });\n\n describe('mcp install', () => {\n it('should generate config snippet for default (generic) format', async () => {\n // Use --json to suppress info messages in output (config is always JSON)\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'install']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl).toBeDefined();\n expect(parsed.mcpServers.chanl.transport).toBe('streamable-http');\n });\n\n it('should include API key from config', async () => {\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'install']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers.chanl.headers['X-API-Key']).toBe('test-api-key');\n });\n\n it('should generate config for claude format', async () => {\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'install', '--format', 'claude']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl).toBeDefined();\n });\n\n it('should generate config for cursor format', async () => {\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'install', '--format', 'cursor']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl).toBeDefined();\n });\n\n it('should generate config for vscode format', async () => {\n const { logs, exitCode } = await runCli(['--json', 'mcp', 'install', '--format', 'vscode']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpServers).toBeDefined();\n expect(parsed.mcpServers.chanl).toBeDefined();\n });\n\n it('should error when not authenticated', async () => {\n (configStore.getApiKey as Mock).mockReturnValue(null);\n\n const { exitCode, errors } = await runCli(['mcp', 'install']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e: string) => e.includes('Not authenticated') || e.includes('login'))).toBe(true);\n });\n });\n\n describe('toolsets command registration', () => {\n it('should have toolsets command registered', () => {\n const program = createProgram();\n const commandNames = program.commands.map((c) => c.name());\n\n expect(commandNames).toContain('toolsets');\n });\n });\n\n describe('toolsets list', () => {\n it('should list toolsets with table output', async () => {\n mockSdk.toolsets.list.mockResolvedValue({\n success: true,\n data: {\n data: [mockToolset],\n total: 1,\n pagination: {\n page: 1,\n limit: 20,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['toolsets', 'list']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.toolsets.list).toHaveBeenCalledWith(expect.any(Object));\n\n const output = logs.join('\\n');\n expect(output).toContain('customer_support_tools');\n expect(output).toContain('1.0.0');\n expect(output).toContain('Total: 1 toolsets');\n });\n\n it('should list toolsets with JSON output', async () => {\n mockSdk.toolsets.list.mockResolvedValue({\n success: true,\n data: {\n data: [mockToolset],\n total: 1,\n pagination: {\n page: 1,\n limit: 20,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'toolsets', 'list']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.toolsets).toHaveLength(1);\n expect(parsed.toolsets[0].name).toBe('customer_support_tools');\n });\n\n it('should filter by enabled status', async () => {\n mockSdk.toolsets.list.mockResolvedValue({\n success: true,\n data: {\n data: [mockToolset],\n total: 1,\n pagination: { page: 1, limit: 20, totalPages: 1, hasNext: false, hasPrev: false },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n await runCli(['toolsets', 'list', '--enabled']);\n\n expect(mockSdk.toolsets.list).toHaveBeenCalledWith(\n expect.objectContaining({ enabled: true })\n );\n });\n });\n\n describe('toolsets get', () => {\n it('should get toolset by ID', async () => {\n mockSdk.toolsets.get.mockResolvedValue({\n success: true,\n data: mockToolset,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['toolsets', 'get', 'toolset_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.toolsets.get).toHaveBeenCalledWith('toolset_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('customer_support_tools');\n expect(output).toContain('1.0.0');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.toolsets.get.mockResolvedValue({\n success: true,\n data: mockToolset,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'toolsets', 'get', 'toolset_abc123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.name).toBe('customer_support_tools');\n });\n });\n\n describe('toolsets enable', () => {\n it('should enable a toolset', async () => {\n mockSdk.toolsets.enable.mockResolvedValue({\n success: true,\n data: { ...mockToolset, enabled: true },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['toolsets', 'enable', 'toolset_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.toolsets.enable).toHaveBeenCalledWith('toolset_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Enabled');\n expect(output).toContain('customer_support_tools');\n });\n });\n\n describe('toolsets disable', () => {\n it('should disable a toolset', async () => {\n mockSdk.toolsets.disable.mockResolvedValue({\n success: true,\n data: { ...mockToolset, enabled: false },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['toolsets', 'disable', 'toolset_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.toolsets.disable).toHaveBeenCalledWith('toolset_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Disabled');\n expect(output).toContain('customer_support_tools');\n });\n });\n\n describe('toolsets delete', () => {\n it('should delete toolset with --yes flag', async () => {\n mockSdk.toolsets.delete.mockResolvedValue({\n success: true,\n data: { deleted: true },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['toolsets', 'delete', 'toolset_abc123', '--yes']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.toolsets.delete).toHaveBeenCalledWith('toolset_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Deleted');\n });\n });\n\n describe('tools enable/disable', () => {\n it('should enable a tool', async () => {\n mockSdk.tools.enable.mockResolvedValue({\n success: true,\n data: { tool: { ...mockTool, isEnabled: true } },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'enable', 'tool_weather123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.enable).toHaveBeenCalledWith('tool_weather123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Enabled');\n expect(output).toContain('get_weather');\n });\n\n it('should disable a tool', async () => {\n mockSdk.tools.disable.mockResolvedValue({\n success: true,\n data: { tool: { ...mockTool, isEnabled: false } },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'disable', 'tool_weather123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.disable).toHaveBeenCalledWith('tool_weather123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Disabled');\n expect(output).toContain('get_weather');\n });\n });\n\n describe('chat command registration', () => {\n it('should have chat command registered', () => {\n const program = createProgram();\n const commandNames = program.commands.map((c) => c.name());\n\n expect(commandNames).toContain('chat');\n });\n\n it('should have the correct command name and description', () => {\n const program = createProgram();\n const chatCmd = program.commands.find((c) => c.name() === 'chat');\n\n expect(chatCmd).toBeDefined();\n expect(chatCmd!.description()).toContain('chat');\n });\n });\n\n describe('chat single message', () => {\n it('should send a single message and display response', async () => {\n const mockSend = vi.fn().mockResolvedValue({\n message: 'Hello! How can I help you?',\n sessionId: 'sess_123',\n latencyMs: 120,\n });\n const mockEnd = vi.fn().mockResolvedValue(undefined);\n\n mockSdk.chat.session.mockResolvedValue({\n sessionId: 'sess_123',\n agentName: 'Test Agent',\n send: mockSend,\n end: mockEnd,\n });\n\n const { logs, exitCode } = await runCli(['chat', 'agent_abc', '--message', 'Hello']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.chat.session).toHaveBeenCalledWith('agent_abc');\n expect(mockSend).toHaveBeenCalledWith('Hello');\n expect(mockEnd).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('Hello');\n expect(output).toContain('How can I help you?');\n });\n\n it('should output JSON when --json flag is used', async () => {\n const mockSend = vi.fn().mockResolvedValue({\n message: 'Hi there!',\n sessionId: 'sess_123',\n latencyMs: 95,\n });\n const mockEnd = vi.fn().mockResolvedValue(undefined);\n\n mockSdk.chat.session.mockResolvedValue({\n sessionId: 'sess_123',\n agentName: 'Test Agent',\n send: mockSend,\n end: mockEnd,\n });\n\n const { logs, exitCode } = await runCli(['--json', 'chat', 'agent_abc', '--message', 'Hi']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.sessionId).toBe('sess_123');\n expect(parsed.response).toBe('Hi there!');\n expect(parsed.latencyMs).toBe(95);\n });\n\n it('should handle session creation failure', async () => {\n mockSdk.chat.session.mockRejectedValue(new Error('Agent not found'));\n\n const { exitCode, errors } = await runCli(['chat', 'bad_agent', '--message', 'Hello']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Agent not found') || e.includes('session'))).toBe(true);\n });\n\n it('should handle send message failure', async () => {\n const mockSend = vi.fn().mockRejectedValue(new Error('No response from agent'));\n const mockEnd = vi.fn().mockResolvedValue(undefined);\n\n mockSdk.chat.session.mockResolvedValue({\n sessionId: 'sess_123',\n agentName: 'Test Agent',\n send: mockSend,\n end: mockEnd,\n });\n\n const { exitCode, errors } = await runCli(['chat', 'agent_abc', '--message', 'Hello']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('No response') || e.includes('Failed'))).toBe(true);\n });\n\n it('should handle not authenticated', async () => {\n (configStore.getApiKey as Mock).mockReturnValue(null);\n\n const { exitCode, errors } = await runCli(['chat', 'agent_abc', '--message', 'Hello']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Not authenticated'))).toBe(true);\n });\n });\n\n describe('tools categories', () => {\n it('should show tool categories', async () => {\n mockSdk.tools.getCategories.mockResolvedValue({\n success: true,\n data: {\n categories: [\n { tag: 'weather', count: 5, enabled: 4 },\n { tag: 'utility', count: 10, enabled: 8 },\n ],\n uncategorized: { count: 3, enabled: 2 },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['tools', 'categories']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.tools.getCategories).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('weather');\n expect(output).toContain('utility');\n expect(output).toContain('uncategorized');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.tools.getCategories.mockResolvedValue({\n success: true,\n data: {\n categories: [{ tag: 'weather', count: 5, enabled: 4 }],\n uncategorized: { count: 3, enabled: 2 },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'tools', 'categories']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.categories).toHaveLength(1);\n expect(parsed.categories[0].tag).toBe('weather');\n expect(parsed.uncategorized.count).toBe(3);\n });\n });\n\n describe('chat single message with tool calls', () => {\n const mockToolCalls = [\n {\n id: 'tc-001',\n name: 'get_weather',\n parameters: { city: 'London' },\n result: { temperature: '12°C' },\n status: 'success',\n durationMs: 245,\n startedAt: '2025-01-09T10:30:00.000Z',\n completedAt: '2025-01-09T10:30:00.245Z',\n },\n {\n id: 'tc-002',\n name: 'send_email',\n parameters: { to: 'user@test.com' },\n status: 'error',\n durationMs: 1200,\n startedAt: '2025-01-09T10:30:01.000Z',\n error: { message: 'SMTP connection failed', code: 'NETWORK_ERROR' },\n },\n ];\n\n it('should display tool calls in chat response', async () => {\n const mockSend = vi.fn().mockResolvedValue({\n message: 'The weather in London is 12°C.',\n sessionId: 'sess_tc1',\n latencyMs: 350,\n toolCalls: mockToolCalls,\n });\n const mockEnd = vi.fn().mockResolvedValue(undefined);\n\n mockSdk.chat.session.mockResolvedValue({\n sessionId: 'sess_tc1',\n agentName: 'Test Agent',\n send: mockSend,\n end: mockEnd,\n });\n\n const { logs, exitCode } = await runCli(['chat', 'agent_abc', '--message', 'What is the weather in London?']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n // Tool name should appear\n expect(output).toContain('get_weather');\n // Duration should appear\n expect(output).toContain('245ms');\n // Error tool call should show error message\n expect(output).toContain('send_email');\n expect(output).toContain('SMTP connection failed');\n // Agent response should still appear\n expect(output).toContain('The weather in London is 12°C.');\n });\n });\n\n describe('chat single message with tool calls JSON output', () => {\n const mockToolCalls = [\n {\n id: 'tc-001',\n name: 'get_weather',\n parameters: { city: 'London' },\n result: { temperature: '12°C' },\n status: 'success',\n durationMs: 245,\n startedAt: '2025-01-09T10:30:00.000Z',\n completedAt: '2025-01-09T10:30:00.245Z',\n },\n {\n id: 'tc-002',\n name: 'send_email',\n parameters: { to: 'user@test.com' },\n status: 'error',\n durationMs: 1200,\n startedAt: '2025-01-09T10:30:01.000Z',\n error: { message: 'SMTP connection failed', code: 'NETWORK_ERROR' },\n },\n ];\n\n it('should include toolCalls in JSON output', async () => {\n const mockSend = vi.fn().mockResolvedValue({\n message: 'The weather in London is 12°C.',\n sessionId: 'sess_tc2',\n latencyMs: 350,\n toolCalls: mockToolCalls,\n });\n const mockEnd = vi.fn().mockResolvedValue(undefined);\n\n mockSdk.chat.session.mockResolvedValue({\n sessionId: 'sess_tc2',\n agentName: 'Test Agent',\n send: mockSend,\n end: mockEnd,\n });\n\n const { logs, exitCode } = await runCli(['--json', 'chat', 'agent_abc', '--message', 'What is the weather?']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.toolCalls).toBeDefined();\n expect(parsed.toolCalls).toHaveLength(2);\n expect(parsed.toolCalls[0].name).toBe('get_weather');\n expect(parsed.toolCalls[0].status).toBe('success');\n expect(parsed.toolCalls[1].name).toBe('send_email');\n expect(parsed.toolCalls[1].status).toBe('error');\n });\n });\n\n describe('calls transcript with tool calls', () => {\n const mockToolCalls = [\n {\n id: 'tc-001',\n name: 'get_weather',\n parameters: { city: 'London' },\n result: { temperature: '12°C' },\n status: 'success',\n durationMs: 245,\n startedAt: '2025-01-09T10:30:00.000Z',\n completedAt: '2025-01-09T10:30:00.245Z',\n },\n {\n id: 'tc-002',\n name: 'send_email',\n parameters: { to: 'user@test.com' },\n status: 'error',\n durationMs: 1200,\n startedAt: '2025-01-09T10:30:01.000Z',\n error: { message: 'SMTP connection failed', code: 'NETWORK_ERROR' },\n },\n ];\n\n it('should display tool calls in transcript output', async () => {\n mockSdk.calls.getTranscript.mockResolvedValue({\n success: true,\n data: {\n text: 'Agent: Hello! Customer: What is the weather?',\n wordCount: 8,\n speakerCount: 2,\n language: 'en',\n confidence: 0.95,\n segments: [\n { speaker: 'speaker_0', text: 'Hello!', start: 0, end: 1.5 },\n { speaker: 'speaker_1', text: 'What is the weather?', start: 2, end: 4 },\n ],\n toolCalls: mockToolCalls,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['calls', 'transcript', 'call_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.calls.getTranscript).toHaveBeenCalledWith('call_abc123');\n\n const output = logs.join('\\n');\n // Should display Tool Calls header\n expect(output).toContain('Tool Calls');\n // Should display tool names\n expect(output).toContain('get_weather');\n expect(output).toContain('send_email');\n // Should display duration\n expect(output).toContain('245ms');\n // Should display error message for failed tool call\n expect(output).toContain('SMTP connection failed');\n });\n\n it('should include tool calls in JSON transcript output', async () => {\n mockSdk.calls.getTranscript.mockResolvedValue({\n success: true,\n data: {\n text: 'Agent: Hello!',\n wordCount: 2,\n toolCalls: mockToolCalls,\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'calls', 'transcript', 'call_abc123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.toolCalls).toBeDefined();\n expect(parsed.toolCalls).toHaveLength(2);\n expect(parsed.toolCalls[0].name).toBe('get_weather');\n expect(parsed.toolCalls[1].name).toBe('send_email');\n });\n });\n\n describe('scenarios execution with tool calls', () => {\n const mockToolCalls = [\n {\n id: 'tc-001',\n name: 'get_weather',\n parameters: { city: 'London' },\n result: { temperature: '12°C' },\n status: 'success',\n durationMs: 245,\n startedAt: '2025-01-09T10:30:00.000Z',\n completedAt: '2025-01-09T10:30:00.245Z',\n },\n {\n id: 'tc-002',\n name: 'send_email',\n parameters: { to: 'user@test.com' },\n status: 'error',\n durationMs: 1200,\n startedAt: '2025-01-09T10:30:01.000Z',\n error: { message: 'SMTP connection failed', code: 'NETWORK_ERROR' },\n },\n ];\n\n it('should display tool calls in execution details', async () => {\n mockSdk.scenarios.getExecution.mockResolvedValue({\n success: true,\n data: {\n execution: {\n id: 'exec_tc1',\n executionId: 'exec_tc1',\n scenarioId: 'scen_abc123',\n status: 'completed',\n overallScore: 85,\n duration: 12.5,\n stepResults: [\n {\n stepId: 'step_1',\n status: 'completed',\n actualResponse: 'The weather is 12°C in London.',\n toolCalls: mockToolCalls,\n },\n ],\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['scenarios', 'execution', 'exec_tc1']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.scenarios.getExecution).toHaveBeenCalledWith('exec_tc1');\n\n const output = logs.join('\\n');\n // Should display Tool Calls section\n expect(output).toContain('Tool Calls');\n // Should display tool names\n expect(output).toContain('get_weather');\n expect(output).toContain('send_email');\n // Should display duration\n expect(output).toContain('245ms');\n // Should display error message for failed tool call\n expect(output).toContain('SMTP connection failed');\n });\n\n it('should include tool calls in JSON execution output', async () => {\n mockSdk.scenarios.getExecution.mockResolvedValue({\n success: true,\n data: {\n execution: {\n id: 'exec_tc2',\n executionId: 'exec_tc2',\n scenarioId: 'scen_abc123',\n status: 'completed',\n overallScore: 85,\n duration: 12.5,\n stepResults: [\n {\n stepId: 'step_1',\n status: 'completed',\n actualResponse: 'The weather is 12°C in London.',\n toolCalls: mockToolCalls,\n },\n ],\n },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'scenarios', 'execution', 'exec_tc2']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.execution).toBeDefined();\n expect(parsed.execution.stepResults[0].toolCalls).toHaveLength(2);\n expect(parsed.execution.stepResults[0].toolCalls[0].name).toBe('get_weather');\n expect(parsed.execution.stepResults[0].toolCalls[1].name).toBe('send_email');\n });\n });\n\n // ============================================\n // Story 4: Agent Import from Third-Party Platform\n // RED-phase tests — `chanl agents import` command does NOT exist yet\n // ============================================\n describe('agents import', () => {\n const mockImportedAgent = {\n id: 'agent_imported_123',\n name: 'My VAPI Agent',\n description: 'Imported from VAPI',\n platform: 'vapi',\n platformAgentId: 'asst_abc',\n status: 'active',\n deployments: [\n {\n orchestrator: 'vapi',\n externalId: 'asst_abc',\n status: 'synced',\n },\n ],\n createdAt: '2026-03-09T10:00:00.000Z',\n updatedAt: '2026-03-09T10:00:00.000Z',\n };\n\n it('should import an agent from VAPI and display results', async () => {\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: true,\n data: { agent: mockImportedAgent },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'import', '--from', 'vapi', '--agent-id', 'asst_abc',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n\n // Human-readable output should contain key information\n expect(output).toContain('My VAPI Agent');\n expect(output).toContain('agent_imported_123');\n expect(output).toContain('vapi');\n\n // Verify SDK was called correctly\n expect(mockSdk.agents.importFromPlatform).toHaveBeenCalledWith(\n expect.objectContaining({\n platform: 'vapi',\n externalAgentId: 'asst_abc',\n }),\n );\n });\n\n it('should display external ID and deployment info', async () => {\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: true,\n data: { agent: mockImportedAgent },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'import', '--from', 'vapi', '--agent-id', 'asst_abc',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n expect(output).toContain('asst_abc');\n });\n\n it('should output JSON with --json flag', async () => {\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: true,\n data: { agent: mockImportedAgent },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n '--json', 'agents', 'import', '--from', 'vapi', '--agent-id', 'asst_abc',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.agent).toBeDefined();\n expect(parsed.agent.id).toBe('agent_imported_123');\n expect(parsed.agent.name).toBe('My VAPI Agent');\n expect(parsed.agent.platform).toBe('vapi');\n expect(parsed.agent.platformAgentId).toBe('asst_abc');\n expect(parsed.agent.deployments).toHaveLength(1);\n expect(parsed.agent.deployments[0].orchestrator).toBe('vapi');\n });\n\n it('should import from Retell platform', async () => {\n const retellAgent = {\n ...mockImportedAgent,\n id: 'agent_imported_456',\n name: 'My Retell Agent',\n platform: 'retell',\n platformAgentId: 'ret_xyz',\n deployments: [\n { orchestrator: 'retell', externalId: 'ret_xyz', status: 'synced' },\n ],\n };\n\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: true,\n data: { agent: retellAgent },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'import', '--from', 'retell', '--agent-id', 'ret_xyz',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n expect(output).toContain('My Retell Agent');\n expect(output).toContain('retell');\n\n expect(mockSdk.agents.importFromPlatform).toHaveBeenCalledWith(\n expect.objectContaining({\n platform: 'retell',\n externalAgentId: 'ret_xyz',\n }),\n );\n });\n\n it('should handle import failure with error message', async () => {\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: false,\n data: null,\n message: \"Agent 'asst_nonexistent' not found on platform 'vapi'\",\n timestamp: new Date().toISOString(),\n });\n\n const { errors, exitCode } = await runCli([\n 'agents', 'import', '--from', 'vapi', '--agent-id', 'asst_nonexistent',\n ]);\n\n expect(exitCode).toBe(1);\n const errorOutput = errors.join('\\n');\n expect(errorOutput).toContain('not found');\n });\n\n it('should accept optional --name flag for name override', async () => {\n mockSdk.agents.importFromPlatform.mockResolvedValue({\n success: true,\n data: {\n agent: { ...mockImportedAgent, name: 'Custom Agent Name' },\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'import', '--from', 'vapi', '--agent-id', 'asst_abc', '--name', 'Custom Agent Name',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n expect(output).toContain('Custom Agent Name');\n\n expect(mockSdk.agents.importFromPlatform).toHaveBeenCalledWith(\n expect.objectContaining({\n platform: 'vapi',\n externalAgentId: 'asst_abc',\n name: 'Custom Agent Name',\n }),\n );\n });\n });\n\n // ============================================\n // Story 5: Publish Agent to Third-Party Platform\n // RED-phase tests — `chanl agents publish` command does NOT exist yet\n // ============================================\n describe('agents publish', () => {\n const mockPublishResult = {\n externalId: 'ext_vapi_789',\n platform: 'vapi',\n status: 'active',\n mcpUrl: 'https://my-workspace.chanl.dev/mcp',\n action: 'created',\n };\n\n it('should publish an agent and display results', async () => {\n mockSdk.agents.publish.mockResolvedValue({\n success: true,\n data: mockPublishResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'publish', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n\n // Human-readable output should contain key info\n expect(output).toContain('created');\n expect(output).toContain('vapi');\n expect(output).toContain('ext_vapi_789');\n\n // Verify SDK was called correctly\n expect(mockSdk.agents.publish).toHaveBeenCalledWith(\n 'agent_123',\n expect.objectContaining({\n platform: 'vapi',\n }),\n );\n });\n\n it('should show MCP URL when included in result', async () => {\n mockSdk.agents.publish.mockResolvedValue({\n success: true,\n data: mockPublishResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'publish', 'agent_123', '--to', 'vapi', '--with-mcp',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n expect(output).toContain('https://my-workspace.chanl.dev/mcp');\n\n expect(mockSdk.agents.publish).toHaveBeenCalledWith(\n 'agent_123',\n expect.objectContaining({\n platform: 'vapi',\n includeMcp: true,\n }),\n );\n });\n\n it('should pass --target option as targetExternalId', async () => {\n mockSdk.agents.publish.mockResolvedValue({\n success: true,\n data: { ...mockPublishResult, action: 'updated' },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'publish', 'agent_123', '--to', 'vapi', '--target', 'existing_ext_456',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n expect(output).toContain('updated');\n\n expect(mockSdk.agents.publish).toHaveBeenCalledWith(\n 'agent_123',\n expect.objectContaining({\n platform: 'vapi',\n targetExternalId: 'existing_ext_456',\n }),\n );\n });\n\n it('should output JSON with --json flag', async () => {\n mockSdk.agents.publish.mockResolvedValue({\n success: true,\n data: mockPublishResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n '--json', 'agents', 'publish', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.externalId).toBe('ext_vapi_789');\n expect(parsed.platform).toBe('vapi');\n expect(parsed.action).toBe('created');\n expect(parsed.mcpUrl).toBe('https://my-workspace.chanl.dev/mcp');\n });\n\n it('should handle publish failure with error message', async () => {\n mockSdk.agents.publish.mockResolvedValue({\n success: false,\n data: null,\n message: \"Agent 'agent_123' not found\",\n timestamp: new Date().toISOString(),\n });\n\n const { errors, exitCode } = await runCli([\n 'agents', 'publish', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(1);\n const errorOutput = errors.join('\\n');\n expect(errorOutput).toContain('not found');\n });\n });\n\n // ============================================\n // Story 6: Push MCP URL to Third-Party Agent\n // RED-phase tests — `chanl agents push-mcp` command does NOT exist yet\n // ============================================\n describe('agents push-mcp', () => {\n const mockPushMcpResult = {\n mcpUrl: 'https://my-workspace.chanl.dev/mcp',\n platform: 'vapi',\n externalId: 'ext_vapi_789',\n status: 'configured',\n };\n\n it('should push MCP URL and display results', async () => {\n mockSdk.agents.pushMcp.mockResolvedValue({\n success: true,\n data: mockPushMcpResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n 'agents', 'push-mcp', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n\n // Human-readable output should contain key info\n expect(output).toContain('https://my-workspace.chanl.dev/mcp');\n expect(output).toContain('vapi');\n expect(output).toContain('ext_vapi_789');\n\n // Verify SDK was called correctly\n expect(mockSdk.agents.pushMcp).toHaveBeenCalledWith(\n 'agent_123',\n expect.objectContaining({\n platform: 'vapi',\n }),\n );\n });\n\n it('should pass --target option as targetExternalId', async () => {\n mockSdk.agents.pushMcp.mockResolvedValue({\n success: true,\n data: mockPushMcpResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { exitCode } = await runCli([\n 'agents', 'push-mcp', 'agent_123', '--to', 'vapi', '--target', 'existing_ext_456',\n ]);\n\n expect(exitCode).toBe(0);\n\n expect(mockSdk.agents.pushMcp).toHaveBeenCalledWith(\n 'agent_123',\n expect.objectContaining({\n platform: 'vapi',\n targetExternalId: 'existing_ext_456',\n }),\n );\n });\n\n it('should output JSON with --json flag', async () => {\n mockSdk.agents.pushMcp.mockResolvedValue({\n success: true,\n data: mockPushMcpResult,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli([\n '--json', 'agents', 'push-mcp', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(0);\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.mcpUrl).toBe('https://my-workspace.chanl.dev/mcp');\n expect(parsed.platform).toBe('vapi');\n expect(parsed.externalId).toBe('ext_vapi_789');\n expect(parsed.status).toBe('configured');\n });\n\n it('should handle push-mcp failure with error message', async () => {\n mockSdk.agents.pushMcp.mockResolvedValue({\n success: false,\n data: null,\n message: \"Agent 'agent_123' not found\",\n timestamp: new Date().toISOString(),\n });\n\n const { errors, exitCode } = await runCli([\n 'agents', 'push-mcp', 'agent_123', '--to', 'vapi',\n ]);\n\n expect(exitCode).toBe(1);\n const errorOutput = errors.join('\\n');\n expect(errorOutput).toContain('not found');\n });\n });\n\n // ============================================\n // Story 7: Batch Scenario Execution (run-all)\n // RED-phase tests — `chanl scenarios run-all` command does NOT exist yet\n // ============================================\n describe('scenarios run-all', () => {\n const mockBatchResult = {\n agentId: 'agent_abc',\n totalScenarios: 3,\n passed: 3,\n failed: 0,\n averageScore: 90,\n allPassed: true,\n minScore: 80,\n results: [\n {\n scenarioId: 'scen_001',\n scenarioName: 'Greeting Flow',\n executionId: 'exec_001',\n status: 'completed',\n score: 90,\n duration: 15.5,\n toolCallCount: 2,\n passed: true,\n },\n {\n scenarioId: 'scen_002',\n scenarioName: 'Refund Flow',\n executionId: 'exec_002',\n status: 'completed',\n score: 85,\n duration: 22.3,\n toolCallCount: 3,\n passed: true,\n },\n {\n scenarioId: 'scen_003',\n scenarioName: 'Escalation Flow',\n executionId: 'exec_003',\n status: 'completed',\n score: 95,\n duration: 10.1,\n toolCallCount: 1,\n passed: true,\n },\n ],\n };\n\n it('should display results when all scenarios pass', async () => {\n mockSdk.scenarios.runAll.mockResolvedValue(mockBatchResult);\n\n const { logs, exitCode } = await runCli([\n 'scenarios', 'run-all', '--agent', 'agent_abc', '--min-score', '80',\n ]);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.scenarios.runAll).toHaveBeenCalledWith(\n expect.objectContaining({\n agentId: 'agent_abc',\n minScore: 80,\n }),\n );\n\n const output = logs.join('\\n');\n // Should display scenario names\n expect(output).toContain('Greeting Flow');\n expect(output).toContain('Refund Flow');\n expect(output).toContain('Escalation Flow');\n // Should display pass indicator\n expect(output).toMatch(/3.*passed/i);\n });\n\n it('should exit code 1 when any scenario fails', async () => {\n const failedResult = {\n ...mockBatchResult,\n allPassed: false,\n passed: 2,\n failed: 1,\n averageScore: 78,\n results: [\n { ...mockBatchResult.results[0] },\n { ...mockBatchResult.results[1], score: 60, passed: false },\n { ...mockBatchResult.results[2] },\n ],\n };\n\n mockSdk.scenarios.runAll.mockResolvedValue(failedResult);\n\n const { exitCode } = await runCli([\n 'scenarios', 'run-all', '--agent', 'agent_abc', '--min-score', '80',\n ]);\n\n expect(exitCode).toBe(1);\n });\n\n it('should output JSON with --json flag', async () => {\n mockSdk.scenarios.runAll.mockResolvedValue(mockBatchResult);\n\n const { logs, exitCode } = await runCli([\n '--json', 'scenarios', 'run-all', '--agent', 'agent_abc',\n ]);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.allPassed).toBe(true);\n expect(parsed.totalScenarios).toBe(3);\n expect(parsed.results).toHaveLength(3);\n });\n\n it('should pass parallel option to SDK', async () => {\n mockSdk.scenarios.runAll.mockResolvedValue(mockBatchResult);\n\n await runCli([\n 'scenarios', 'run-all', '--agent', 'agent_abc', '--parallel', '5',\n ]);\n\n expect(mockSdk.scenarios.runAll).toHaveBeenCalledWith(\n expect.objectContaining({\n agentId: 'agent_abc',\n parallel: 5,\n }),\n );\n });\n\n it('should display summary with average score', async () => {\n mockSdk.scenarios.runAll.mockResolvedValue(mockBatchResult);\n\n const { logs } = await runCli([\n 'scenarios', 'run-all', '--agent', 'agent_abc',\n ]);\n\n const output = logs.join('\\n');\n // Should display average score\n expect(output).toContain('90');\n });\n\n it('should not call SDK when --agent option is missing', async () => {\n await runCli(['scenarios', 'run-all']);\n\n // Commander throws on missing required option before handler runs\n expect(mockSdk.scenarios.runAll).not.toHaveBeenCalled();\n });\n });\n\n // ==========================================================================\n // PROMPTS CLI TESTS (Story 8)\n // ==========================================================================\n\n describe('prompts list', () => {\n it('should list prompts with table output', async () => {\n mockSdk.prompts.list.mockResolvedValue({\n success: true,\n data: [\n {\n id: 'prompt_abc123',\n name: 'Support Greeting',\n category: 'support',\n status: 'active',\n version: 3,\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n {\n id: 'prompt_def456',\n name: 'Sales Pitch',\n category: 'sales',\n status: 'draft',\n version: 1,\n createdAt: '2025-02-01T00:00:00Z',\n updatedAt: '2025-02-05T10:30:00Z',\n },\n ],\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['prompts', 'list']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.prompts.list).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('Support Greeting');\n expect(output).toContain('Sales Pitch');\n });\n\n it('should list prompts with JSON output', async () => {\n const mockPrompts = [\n {\n id: 'prompt_abc123',\n name: 'Support Greeting',\n category: 'support',\n status: 'active',\n },\n ];\n\n mockSdk.prompts.list.mockResolvedValue({\n success: true,\n data: mockPrompts,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'prompts', 'list']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed).toHaveLength(1);\n expect(parsed[0].name).toBe('Support Greeting');\n });\n\n it('should show message when no prompts found', async () => {\n mockSdk.prompts.list.mockResolvedValue({\n success: true,\n data: [],\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['prompts', 'list']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n expect(output).toContain('No prompts found');\n });\n });\n\n describe('prompts get', () => {\n it('should get prompt details by ID', async () => {\n mockSdk.prompts.get.mockResolvedValue({\n success: true,\n data: {\n id: 'prompt_abc123',\n name: 'Support Greeting',\n content: 'Hello! How can I help you today?',\n category: 'support',\n status: 'active',\n version: 3,\n tags: ['greeting', 'support'],\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['prompts', 'get', 'prompt_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.prompts.get).toHaveBeenCalledWith('prompt_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('Support Greeting');\n expect(output).toContain('prompt_abc123');\n });\n\n it('should output JSON when --json flag is used', async () => {\n mockSdk.prompts.get.mockResolvedValue({\n success: true,\n data: {\n id: 'prompt_abc123',\n name: 'Support Greeting',\n content: 'Hello! How can I help you today?',\n category: 'support',\n status: 'active',\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'prompts', 'get', 'prompt_abc123']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed.name).toBe('Support Greeting');\n expect(parsed.content).toBe('Hello! How can I help you today?');\n });\n\n it('should handle not found error', async () => {\n mockSdk.prompts.get.mockResolvedValue({\n success: false,\n data: null,\n message: 'Prompt not found',\n timestamp: new Date().toISOString(),\n });\n\n const { exitCode, errors } = await runCli(['prompts', 'get', 'nonexistent']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('Failed') || e.includes('not found'))).toBe(true);\n });\n });\n\n describe('prompts delete', () => {\n it('should delete a prompt', async () => {\n mockSdk.prompts.delete.mockResolvedValue({\n success: true,\n data: null,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['prompts', 'delete', 'prompt_abc123', '--yes']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.prompts.delete).toHaveBeenCalledWith('prompt_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('deleted');\n });\n });\n\n // ==========================================================================\n // WORKSPACES CLI TESTS (Story 9)\n // ==========================================================================\n\n describe('workspaces list', () => {\n it('should list workspaces with table output', async () => {\n mockSdk.workspace.getAll.mockResolvedValue({\n success: true,\n data: [\n {\n id: 'ws_abc123',\n name: 'My Workspace',\n description: 'Main workspace',\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n {\n id: 'ws_def456',\n name: 'Test Workspace',\n description: 'Testing environment',\n createdAt: '2025-02-01T00:00:00Z',\n updatedAt: '2025-02-05T10:30:00Z',\n },\n ],\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['workspaces', 'list']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.workspace.getAll).toHaveBeenCalled();\n\n const output = logs.join('\\n');\n expect(output).toContain('My Workspace');\n expect(output).toContain('Test Workspace');\n });\n\n it('should list workspaces with JSON output', async () => {\n const mockWorkspaces = [\n {\n id: 'ws_abc123',\n name: 'My Workspace',\n description: 'Main workspace',\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n ];\n\n mockSdk.workspace.getAll.mockResolvedValue({\n success: true,\n data: mockWorkspaces,\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['--json', 'workspaces', 'list']);\n\n expect(exitCode).toBe(0);\n\n const output = logs.join('\\n');\n const parsed = JSON.parse(output);\n expect(parsed).toHaveLength(1);\n expect(parsed[0].name).toBe('My Workspace');\n });\n });\n\n describe('workspaces get', () => {\n it('should get workspace details by ID', async () => {\n mockSdk.workspace.getById.mockResolvedValue({\n success: true,\n data: {\n id: 'ws_abc123',\n name: 'My Workspace',\n description: 'Main workspace',\n settings: { timezone: 'UTC' },\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['workspaces', 'get', 'ws_abc123']);\n\n expect(exitCode).toBe(0);\n expect(mockSdk.workspace.getById).toHaveBeenCalledWith('ws_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('My Workspace');\n expect(output).toContain('ws_abc123');\n });\n });\n\n describe('workspaces use', () => {\n it('should set active workspace', async () => {\n mockSdk.workspace.getById.mockResolvedValue({\n success: true,\n data: {\n id: 'ws_abc123',\n name: 'My Workspace',\n description: 'Main workspace',\n settings: {},\n createdAt: '2025-01-01T00:00:00Z',\n updatedAt: '2025-01-15T10:30:00Z',\n },\n message: 'Success',\n timestamp: new Date().toISOString(),\n });\n\n const { logs, exitCode } = await runCli(['workspaces', 'use', 'ws_abc123']);\n\n expect(exitCode).toBe(0);\n expect(configStore.setWorkspaceId).toHaveBeenCalledWith('ws_abc123');\n\n const output = logs.join('\\n');\n expect(output).toContain('ws_abc123');\n });\n\n it('should handle invalid workspace ID', async () => {\n mockSdk.workspace.getById.mockResolvedValue({\n success: false,\n data: null,\n message: 'Workspace not found',\n timestamp: new Date().toISOString(),\n });\n\n const { exitCode, errors } = await runCli(['workspaces', 'use', 'ws_invalid']);\n\n expect(exitCode).toBe(1);\n expect(errors.some((e) => e.includes('not found') || e.includes('Failed'))).toBe(true);\n expect(configStore.setWorkspaceId).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","names":[]}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+
3
+ /**
4
+ * Create and configure the CLI program
5
+ */
6
+ declare function createProgram(): Command;
7
+ /**
8
+ * Run the CLI program
9
+ */
10
+ declare function run(argv?: string[]): Promise<void>;
11
+
12
+ export { createProgram, run };
package/dist/cli.js ADDED
@@ -0,0 +1,72 @@
1
+ import { Command } from "commander";
2
+ import { setOutputOptions } from "./utils/output.js";
3
+ import {
4
+ createAuthCommand,
5
+ createLoginCommand,
6
+ createLogoutCommand,
7
+ createConfigCommand,
8
+ createToolsCommand,
9
+ createToolsetsCommand,
10
+ createScenariosCommand,
11
+ createCallCommand,
12
+ createCallsCommand,
13
+ createPersonasCommand,
14
+ createAgentsCommand,
15
+ createHealthCommand,
16
+ createMcpCommand,
17
+ createScorecardsCommand,
18
+ createKnowledgeCommand,
19
+ createMemoryCommand,
20
+ createChatCommand,
21
+ createPromptsCommand,
22
+ createWorkspacesCommand
23
+ } from "./commands/index.js";
24
+ const CLI_VERSION = "1.0.0";
25
+ function createProgram() {
26
+ const program = new Command();
27
+ program.name("chanl").description("Command-line interface for Chanl Analytics").version(CLI_VERSION, "-v, --version", "Show CLI version").option("--json", "Output results as JSON").option("--no-color", "Disable colored output").hook("preAction", (thisCommand) => {
28
+ const opts = thisCommand.opts();
29
+ setOutputOptions({
30
+ json: opts["json"] === true,
31
+ noColor: opts["color"] === false
32
+ });
33
+ });
34
+ program.addCommand(createLoginCommand());
35
+ program.addCommand(createLogoutCommand());
36
+ program.addCommand(createAuthCommand());
37
+ program.addCommand(createConfigCommand());
38
+ program.addCommand(createToolsCommand());
39
+ program.addCommand(createToolsetsCommand());
40
+ program.addCommand(createScenariosCommand());
41
+ program.addCommand(createCallCommand());
42
+ program.addCommand(createCallsCommand());
43
+ program.addCommand(createPersonasCommand());
44
+ program.addCommand(createAgentsCommand());
45
+ program.addCommand(createHealthCommand());
46
+ program.addCommand(createMcpCommand());
47
+ program.addCommand(createScorecardsCommand());
48
+ program.addCommand(createKnowledgeCommand());
49
+ program.addCommand(createMemoryCommand());
50
+ program.addCommand(createChatCommand());
51
+ program.addCommand(createPromptsCommand());
52
+ program.addCommand(createWorkspacesCommand());
53
+ program.showHelpAfterError(true);
54
+ program.showSuggestionAfterError(true);
55
+ return program;
56
+ }
57
+ async function run(argv = process.argv) {
58
+ const program = createProgram();
59
+ try {
60
+ await program.parseAsync(argv);
61
+ } catch (error) {
62
+ if (error instanceof Error) {
63
+ console.error("Error:", error.message);
64
+ }
65
+ process.exitCode = 1;
66
+ }
67
+ }
68
+ export {
69
+ createProgram,
70
+ run
71
+ };
72
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { setOutputOptions } from './utils/output.js';\nimport {\n createAuthCommand,\n createLoginCommand,\n createLogoutCommand,\n createConfigCommand,\n createToolsCommand,\n createToolsetsCommand,\n createScenariosCommand,\n createCallCommand,\n createCallsCommand,\n createPersonasCommand,\n createAgentsCommand,\n createHealthCommand,\n createMcpCommand,\n createScorecardsCommand,\n createKnowledgeCommand,\n createMemoryCommand,\n createChatCommand,\n createPromptsCommand,\n createWorkspacesCommand,\n} from './commands/index.js';\n\n/**\n * CLI version - should match package.json\n */\nconst CLI_VERSION = '1.0.0';\n\n/**\n * Create and configure the CLI program\n */\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('chanl')\n .description('Command-line interface for Chanl Analytics')\n .version(CLI_VERSION, '-v, --version', 'Show CLI version')\n .option('--json', 'Output results as JSON')\n .option('--no-color', 'Disable colored output')\n .hook('preAction', (thisCommand) => {\n // Set global output options before any command runs\n const opts = thisCommand.opts();\n setOutputOptions({\n json: opts['json'] === true,\n noColor: opts['color'] === false,\n });\n });\n\n // Add commands\n program.addCommand(createLoginCommand());\n program.addCommand(createLogoutCommand());\n program.addCommand(createAuthCommand());\n program.addCommand(createConfigCommand());\n program.addCommand(createToolsCommand());\n program.addCommand(createToolsetsCommand());\n program.addCommand(createScenariosCommand());\n program.addCommand(createCallCommand());\n program.addCommand(createCallsCommand());\n program.addCommand(createPersonasCommand());\n program.addCommand(createAgentsCommand());\n program.addCommand(createHealthCommand());\n program.addCommand(createMcpCommand());\n program.addCommand(createScorecardsCommand());\n program.addCommand(createKnowledgeCommand());\n program.addCommand(createMemoryCommand());\n program.addCommand(createChatCommand());\n program.addCommand(createPromptsCommand());\n program.addCommand(createWorkspacesCommand());\n\n // Add helpful error handling\n program.showHelpAfterError(true);\n program.showSuggestionAfterError(true);\n\n return program;\n}\n\n/**\n * Run the CLI program\n */\nexport async function run(argv: string[] = process.argv): Promise<void> {\n const program = createProgram();\n\n try {\n await program.parseAsync(argv);\n } catch (error) {\n // Commander handles most errors, but catch any unhandled ones\n if (error instanceof Error) {\n console.error('Error:', error.message);\n }\n process.exitCode = 1;\n }\n}\n"],"mappings":"AAAA,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKP,MAAM,cAAc;AAKb,SAAS,gBAAyB;AACvC,QAAM,UAAU,IAAI,QAAQ;AAE5B,UACG,KAAK,OAAO,EACZ,YAAY,4CAA4C,EACxD,QAAQ,aAAa,iBAAiB,kBAAkB,EACxD,OAAO,UAAU,wBAAwB,EACzC,OAAO,cAAc,wBAAwB,EAC7C,KAAK,aAAa,CAAC,gBAAgB;AAElC,UAAM,OAAO,YAAY,KAAK;AAC9B,qBAAiB;AAAA,MACf,MAAM,KAAK,MAAM,MAAM;AAAA,MACvB,SAAS,KAAK,OAAO,MAAM;AAAA,IAC7B,CAAC;AAAA,EACH,CAAC;AAGH,UAAQ,WAAW,mBAAmB,CAAC;AACvC,UAAQ,WAAW,oBAAoB,CAAC;AACxC,UAAQ,WAAW,kBAAkB,CAAC;AACtC,UAAQ,WAAW,oBAAoB,CAAC;AACxC,UAAQ,WAAW,mBAAmB,CAAC;AACvC,UAAQ,WAAW,sBAAsB,CAAC;AAC1C,UAAQ,WAAW,uBAAuB,CAAC;AAC3C,UAAQ,WAAW,kBAAkB,CAAC;AACtC,UAAQ,WAAW,mBAAmB,CAAC;AACvC,UAAQ,WAAW,sBAAsB,CAAC;AAC1C,UAAQ,WAAW,oBAAoB,CAAC;AACxC,UAAQ,WAAW,oBAAoB,CAAC;AACxC,UAAQ,WAAW,iBAAiB,CAAC;AACrC,UAAQ,WAAW,wBAAwB,CAAC;AAC5C,UAAQ,WAAW,uBAAuB,CAAC;AAC3C,UAAQ,WAAW,oBAAoB,CAAC;AACxC,UAAQ,WAAW,kBAAkB,CAAC;AACtC,UAAQ,WAAW,qBAAqB,CAAC;AACzC,UAAQ,WAAW,wBAAwB,CAAC;AAG5C,UAAQ,mBAAmB,IAAI;AAC/B,UAAQ,yBAAyB,IAAI;AAErC,SAAO;AACT;AAKA,eAAsB,IAAI,OAAiB,QAAQ,MAAqB;AACtE,QAAM,UAAU,cAAc;AAE9B,MAAI;AACF,UAAM,QAAQ,WAAW,IAAI;AAAA,EAC/B,SAAS,OAAO;AAEd,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,IACvC;AACA,YAAQ,WAAW;AAAA,EACrB;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+
3
+ /**
4
+ * Create the agents command group
5
+ */
6
+ declare function createAgentsCommand(): Command;
7
+
8
+ export { createAgentsCommand };