Fatti
La B. S.A. con sede a Porrentruy (Giura) gestisce diversi impianti di stazioni di servizio. La [A. AG] con sede a Boswil (Argovia) è specializzata nello sviluppo, produzione, costruzione, installazione e manutenzione di impianti elettrici, stazioni di servizio e altre installazioni industriali, inclusa la pianificazione e la consulenza.
Nel 2009, la B. S.A. aveva pianificato di costruire un'altra stazione di servizio a Les Reussilles nel comune di Tramelan (Berna) e per questo incaricò la A. AG. Non è stato firmato alcun contratto scritto, ma è stato concordato oralmente che la [A. AG] si sarebbe occupata di compiti di pianificazione e direzione dei lavori, inclusa la supervisione della costruzione.
Nella notte tra il 5 e il 6 maggio 2012 è scoppiato un incendio presso la stazione di servizio. Il danno subito dalla B. S.A. non è stato coperto dall'assicurazione degli edifici. Il 24 aprile 2017, la B. S.A. ha citato in giudizio la [A. AG] presso il Tribunale di Commercio del Cantone di Berna per un risarcimento danni di 1'012'500 franchi, in quanto la [A. AG] aveva omesso colposamente di stipulare un'assicurazione per i lavori in corso e di notificare l'inizio dei lavori all'assicurazione degli edifici.
Legge
Il Tribunale federale ha confermato la competenza del Tribunale di Commercio del Cantone di Berna ai sensi dell'articolo 31 del Codice di Procedura Civile Svizzero (CPC) e dell'articolo 113 della Legge federale sul Diritto Internazionale Privato (LDIP).
Secondo la giurisprudenza, un contratto può comprendere più prestazioni caratteristiche ai sensi dell'articolo 31 CPC e dell'articolo 113 LDIP, che possono ciascuna fondare la competenza giurisdizionale nel luogo di adempimento. Nel caso in questione, il contratto di architetto o di progettazione…