@zodic/shared 0.0.234 → 0.0.236

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.
@@ -445,7 +445,7 @@ export class ConceptService {
445
445
  }
446
446
 
447
447
  let attempts = 0;
448
- const maxAttempts = 3;
448
+ const maxAttempts = 2;
449
449
 
450
450
  while (attempts < maxAttempts) {
451
451
  let phase = 'generation'; // 📌 Track phase
@@ -475,34 +475,33 @@ export class ConceptService {
475
475
 
476
476
  // ✅ Parse structured content for both languages
477
477
  const { structuredContentEN, structuredContentPT } =
478
- this.parseStructuredContent(conceptSlug, response);
478
+ await this.parseStructuredContent(conceptSlug, response);
479
479
 
480
480
  // ✅ Store content in D1
481
481
  console.log(
482
482
  `💾 Storing structured content for ${conceptSlug}:${combinationString} in D1...`
483
483
  );
484
- await db
485
- .batch([
486
- db
487
- .update(conceptsData)
488
- .set({ content: JSON.stringify(structuredContentEN) })
489
- .where(
490
- and(
491
- eq(conceptsData.id, conceptEN.id),
492
- eq(conceptsData.language, 'en-us')
493
- )
494
- ),
495
-
496
- db
497
- .update(conceptsData)
498
- .set({ content: JSON.stringify(structuredContentPT) })
499
- .where(
500
- and(
501
- eq(conceptsData.id, conceptPT.id),
502
- eq(conceptsData.language, 'pt-br')
503
- )
504
- ),
505
- ]);
484
+ await db.batch([
485
+ db
486
+ .update(conceptsData)
487
+ .set({ content: JSON.stringify(structuredContentEN) })
488
+ .where(
489
+ and(
490
+ eq(conceptsData.id, conceptEN.id),
491
+ eq(conceptsData.language, 'en-us')
492
+ )
493
+ ),
494
+
495
+ db
496
+ .update(conceptsData)
497
+ .set({ content: JSON.stringify(structuredContentPT) })
498
+ .where(
499
+ and(
500
+ eq(conceptsData.id, conceptPT.id),
501
+ eq(conceptsData.language, 'pt-br')
502
+ )
503
+ ),
504
+ ]);
506
505
 
507
506
  console.log(
508
507
  `✅ Structured content stored successfully for ${conceptSlug}:${combinationString}.`
@@ -544,15 +543,17 @@ export class ConceptService {
544
543
  }
545
544
  }
546
545
 
547
- private parseStructuredContent(
546
+ async parseStructuredContent(
548
547
  conceptSlug: Concept,
549
548
  response: string
550
- ): {
549
+ ): Promise<{
551
550
  structuredContentEN: StructuredConceptContent;
552
551
  structuredContentPT: StructuredConceptContent;
553
- } {
554
- console.log(`📌 [START] Parsing structured content for ${conceptSlug} from ChatGPT response.`);
555
-
552
+ }> {
553
+ console.log(
554
+ `📌 [START] Parsing structured content for ${conceptSlug} from ChatGPT response.`
555
+ );
556
+
556
557
  // ✅ Step 1: Clean artifacts before processing
557
558
  let cleanedResponse = response
558
559
  .replace(/[*#•]/g, '') // Remove bullet points, bold markers, headings
@@ -561,174 +562,413 @@ export class ConceptService {
561
562
  .replace(/\s+EN:\s*/g, '\nEN: ') // Ensure consistent "EN:" formatting
562
563
  .replace(/\s+PT:\s*/g, '\nPT: ') // Ensure consistent "PT:" formatting
563
564
  .trim();
564
-
565
- console.log('🔹 [CLEANED RESPONSE]:', cleanedResponse.slice(0, 500) + '...');
566
-
567
- // Step 2: Define Section Titles Per Concept
568
- const conceptSections: Record<string, { en: string[]; pt: string[] }> = {
569
- crown: {
570
- en: [
571
- 'Core Identity',
572
- 'Strengths and Challenges',
573
- 'Path to Fulfillment',
574
- 'Emotional Depth',
575
- 'Vision and Aspirations',
576
- ],
577
- pt: [
578
- 'Identidade Essencial',
579
- 'Forças e Desafios',
580
- 'Caminho para a Plenitude',
581
- 'Profundidade Emocional',
582
- 'Visão e Aspirações',
583
- ],
584
- },
585
- scepter: {
586
- en: [
587
- 'The Power of Expression',
588
- 'The Dance of Action and Reaction',
589
- 'Navigating Challenges',
590
- 'The Mirror of Relationships',
591
- 'Impact on the World',
592
- ],
593
- pt: [
594
- 'O Poder da Expressão',
595
- 'A Dança da Ação e Reação',
596
- 'Navegando Desafios',
597
- 'O Espelho dos Relacionamentos',
598
- 'Impacto no Mundo',
599
- ],
600
- },
601
- amulet: {
602
- en: [
603
- 'The Shield of Protection',
604
- 'The Strength Within',
605
- 'Nurturing Growth',
606
- 'The Cycle of Renewal',
607
- 'The Anchor of Wisdom',
608
- ],
609
- pt: [
610
- 'O Escudo da Proteção',
611
- 'A Força Interior',
612
- 'Cultivando o Crescimento',
613
- 'O Ciclo da Renovação',
614
- 'A Âncora da Sabedoria',
615
- ],
616
- },
617
- ring: {
618
- en: [
619
- 'Magnetic Pull',
620
- 'Hidden Desires',
621
- 'The Fated Dance',
622
- 'Unveiling the Shadows',
623
- 'Your Love Power',
624
- ],
625
- pt: [
626
- 'Força Magnética',
627
- 'Desejos Ocultos',
628
- 'A Dança do Destino',
629
- 'Revelando as Sombras',
630
- 'Seu Poder no Amor',
631
- ],
632
- },
633
- lantern: {
634
- en: [
635
- 'The Call to Awakening',
636
- 'Walking Through Shadows',
637
- 'The Inner Flame',
638
- 'Revelations and Truths',
639
- 'Becoming the Light',
640
- ],
641
- pt: [
642
- 'O Chamado para o Despertar',
643
- 'Caminhando Pelas Sombras',
644
- 'A Chama Interior',
645
- 'Revelações e Verdades',
646
- 'Tornando-se a Luz',
647
- ],
648
- },
649
- orb: {
650
- en: [
651
- 'The Path Unfolding',
652
- 'A Calling Beyond the Self',
653
- 'Turning Points of Fate',
654
- 'Mastering the Journey',
655
- 'Legacy and Impact',
656
- ],
657
- pt: [
658
- 'O Caminho que se Revela',
659
- 'Um Chamado Além de Si Mesmo',
660
- 'Pontos de Virada do Destino',
661
- 'Dominando a Jornada',
662
- 'Legado e Impacto',
663
- ],
664
- },
665
- };
666
-
667
- const sectionsEN = conceptSections[conceptSlug]?.en;
668
- const sectionsPT = conceptSections[conceptSlug]?.pt;
669
-
670
- if (!sectionsEN || !sectionsPT) {
671
- throw new Error(`❌ Unknown concept: ${conceptSlug}`);
672
- }
673
-
674
- // Step 3: Extract English and Portuguese content separately
675
- const enMatches = cleanedResponse.match(/EN:\s*([\s\S]+?)\s*PT:/);
676
- const ptMatches = cleanedResponse.match(/PT:\s*([\s\S]+)/);
677
-
678
- if (!enMatches || !ptMatches) {
679
- console.error('❌ [ERROR] Missing English or Portuguese content in response.');
680
- throw new Error('❌ Missing English or Portuguese content in response.');
681
- }
682
-
683
- let enContent = enMatches[1].trim();
684
- let ptContent = ptMatches[1].trim();
685
-
686
- console.log('✅ [MATCH SUCCESS] Extracted English Content:', enContent.slice(0, 500) + '...');
687
- console.log(' [MATCH SUCCESS] Extracted Portuguese Content:', ptContent.slice(0, 500) + '...');
688
-
689
- // Step 4: Debug **why** PT content has "EN:"
690
- if (ptContent.includes('EN:')) {
691
- console.warn('⚠️ PT content contains "EN:". Check if parsing was incorrect.');
692
- }
693
-
694
- // Step 5: Extract structured sections
695
- function extractSections(text: string, sectionTitles: string[]) {
696
- return sectionTitles.map((title) => {
697
- console.log(`🔍 [PROCESSING] Extracting section: "${title}"`);
698
-
699
- const regex = new RegExp(`\\d+\\.\\s*${title}:\\s*([\\s\\S]+?)(?=\\n\\d+\\.\\s*[A-Z]|$)`);
700
- const match = text.match(regex);
701
-
702
- if (!match) {
703
- console.warn(`⚠️ [WARNING] Missing section: "${title}"`);
704
- return { type: 'section', title, content: ['❌ Section Missing'] };
705
- }
706
-
707
- const paragraphs = match[1]
708
- .trim()
709
- .split(/\n{2,}/)
710
- .map((p) => p.trim())
711
- .filter((p) => p.length > 0);
712
-
713
- console.log(`✅ [EXTRACTED] "${title}" - Parsed Content:`, paragraphs);
714
-
715
- return { type: 'section', title, content: paragraphs };
716
- });
565
+
566
+ console.log(
567
+ '🔹 [CLEANED RESPONSE]:',
568
+ cleanedResponse.slice(0, 500) + '...'
569
+ );
570
+
571
+ try {
572
+ // ✅ Step 2: Define Section Titles Per Concept
573
+ const conceptSections: Record<string, { en: string[]; pt: string[] }> = {
574
+ crown: {
575
+ en: [
576
+ 'Core Identity',
577
+ 'Strengths and Challenges',
578
+ 'Path to Fulfillment',
579
+ 'Emotional Depth',
580
+ 'Vision and Aspirations',
581
+ ],
582
+ pt: [
583
+ 'Identidade Essencial',
584
+ 'Forças e Desafios',
585
+ 'Caminho para a Plenitude',
586
+ 'Profundidade Emocional',
587
+ 'Visão e Aspirações',
588
+ ],
589
+ },
590
+ scepter: {
591
+ en: [
592
+ 'The Power of Expression',
593
+ 'The Dance of Action and Reaction',
594
+ 'Navigating Challenges',
595
+ 'The Mirror of Relations',
596
+ 'Impact on the World',
597
+ ],
598
+ pt: [
599
+ 'O Poder da Expressão',
600
+ 'A Dança da Ação e Reação',
601
+ 'Navegando Desafios',
602
+ 'O Espelho das Relações',
603
+ 'Impacto no Mundo',
604
+ ],
605
+ },
606
+ amulet: {
607
+ en: [
608
+ 'The Shield of Protection',
609
+ 'The Strength Within',
610
+ 'Nurturing Growth',
611
+ 'The Cycle of Renewal',
612
+ 'The Anchor of Wisdom',
613
+ ],
614
+ pt: [
615
+ 'O Escudo da Proteção',
616
+ 'A Força Interior',
617
+ 'Cultivando o Crescimento',
618
+ 'O Ciclo da Renovação',
619
+ 'A Âncora da Sabedoria',
620
+ ],
621
+ },
622
+ ring: {
623
+ en: [
624
+ 'Magnetic Pull',
625
+ 'Hidden Desires',
626
+ 'The Fated Dance',
627
+ 'Unveiling the Shadows',
628
+ 'Your Love Power',
629
+ ],
630
+ pt: [
631
+ 'Força Magnética',
632
+ 'Desejos Ocultos',
633
+ 'A Dança do Destino',
634
+ 'Revelando as Sombras',
635
+ 'Seu Poder no Amor',
636
+ ],
637
+ },
638
+ lantern: {
639
+ en: [
640
+ 'The Call to Awakening',
641
+ 'Walking Through Shadows',
642
+ 'The Inner Flame',
643
+ 'Revelations and Truths',
644
+ 'Becoming the Light',
645
+ ],
646
+ pt: [
647
+ 'O Chamado para o Despertar',
648
+ 'Caminhando Pelas Sombras',
649
+ 'A Chama Interior',
650
+ 'Revelações e Verdades',
651
+ 'Tornando-se a Luz',
652
+ ],
653
+ },
654
+ orb: {
655
+ en: [
656
+ 'The Path Unfolding',
657
+ 'A Calling Beyond the Self',
658
+ 'Turning Points of Fate',
659
+ 'Mastering the Journey',
660
+ 'Legacy and Impact',
661
+ ],
662
+ pt: [
663
+ 'O Caminho que se Revela',
664
+ 'Um Chamado Além de Si Mesmo',
665
+ 'Pontos de Virada do Destino',
666
+ 'Dominando a Jornada',
667
+ 'Legado e Impacto',
668
+ ],
669
+ },
670
+ };
671
+
672
+ const sectionsEN = conceptSections[conceptSlug]?.en;
673
+ const sectionsPT = conceptSections[conceptSlug]?.pt;
674
+
675
+ if (!sectionsEN || !sectionsPT) {
676
+ throw new Error(`Unknown concept: ${conceptSlug}`);
677
+ }
678
+
679
+ // ✅ Step 3: Detect if AI interleaved EN/PT sections
680
+ const interleavedMatches = cleanedResponse.match(
681
+ /(EN:\s*[\s\S]+?PT:\s*[\s\S]+?)(?=EN:|$)/
682
+ );
683
+ let extractedEN = '';
684
+ let extractedPT = '';
685
+
686
+ if (interleavedMatches) {
687
+ console.warn(
688
+ '⚠️ Detected interleaved EN/PT sections. Parsing accordingly.'
689
+ );
690
+ extractedEN = interleavedMatches
691
+ .map(
692
+ (pair) => pair.match(/EN:\s*([\s\S]+?)\s*PT:/)?.[1]?.trim() || ''
693
+ )
694
+ .join('\n\n');
695
+ extractedPT = interleavedMatches
696
+ .map((pair) => pair.match(/PT:\s*([\s\S]+)/)?.[1]?.trim() || '')
697
+ .join('\n\n');
698
+ } else {
699
+ console.log(
700
+ '✅ Standard format detected (EN block followed by PT block).'
701
+ );
702
+ extractedEN =
703
+ cleanedResponse.match(/EN:\s*([\s\S]+?)\s*PT:/)?.[1]?.trim() || '';
704
+ extractedPT =
705
+ cleanedResponse.match(/PT:\s*([\s\S]+)/)?.[1]?.trim() || '';
706
+ }
707
+
708
+ console.log(
709
+ '✅ [MATCH SUCCESS] Extracted English Content:',
710
+ extractedEN.slice(0, 500) + '...'
711
+ );
712
+ console.log(
713
+ '✅ [MATCH SUCCESS] Extracted Portuguese Content:',
714
+ extractedPT.slice(0, 500) + '...'
715
+ );
716
+
717
+ // ✅ Step 4: Extract structured sections dynamically
718
+ function extractSections(text: string, sectionTitles: string[]) {
719
+ return sectionTitles.map((title) => {
720
+ console.log(`🔍 [PROCESSING] Extracting section: "${title}"`);
721
+
722
+ const regex = new RegExp(
723
+ `\\d+\\.\\s*${title}:\\s*([\\s\\S]+?)(?=\\n\\d+\\.\\s*[A-Z]|$)`
724
+ );
725
+ const match = text.match(regex);
726
+
727
+ if (!match) {
728
+ throw new Error(`❌ Missing section: "${title}"`);
729
+ }
730
+
731
+ const paragraphs = match[1]
732
+ .trim()
733
+ .split(/\n{2,}/)
734
+ .map((p) => p.trim())
735
+ .filter((p) => p.length > 0);
736
+
737
+ console.log(
738
+ `✅ [EXTRACTED] "${title}" - Parsed Content:`,
739
+ paragraphs
740
+ );
741
+ return { type: 'section', title, content: paragraphs };
742
+ });
743
+ }
744
+
745
+ const structuredContentEN = extractSections(extractedEN, sectionsEN);
746
+ const structuredContentPT = extractSections(extractedPT, sectionsPT);
747
+
748
+ console.log(
749
+ '🎯 [FINAL RESULT] Parsed English Content:',
750
+ JSON.stringify(structuredContentEN, null, 2)
751
+ );
752
+ console.log(
753
+ '🎯 [FINAL RESULT] Parsed Portuguese Content:',
754
+ JSON.stringify(structuredContentPT, null, 2)
755
+ );
756
+
757
+ console.log(
758
+ '✅ [COMPLETE] Structured content parsing finished successfully.'
759
+ );
760
+
761
+ return {
762
+ structuredContentEN,
763
+ structuredContentPT,
764
+ };
765
+ } catch (error) {
766
+ console.error(`❌ Parsing failed for ${conceptSlug}. Logging failure.`);
767
+
768
+ // ✅ Store failure in KV for debugging
769
+ const kvFailuresStore = this.context.kvConceptFailuresStore();
770
+ const failureKey = `failures:content:parsing:${conceptSlug}:${new Date().toISOString()}`;
771
+
772
+ await kvFailuresStore.put(
773
+ failureKey,
774
+ JSON.stringify({
775
+ error: (error as Error).message,
776
+ conceptSlug,
777
+ cleanedResponse,
778
+ timestamp: new Date().toISOString(),
779
+ })
780
+ );
781
+
782
+ console.error(`🚨 Failure logged in KV: ${failureKey}`);
783
+ throw error;
717
784
  }
718
-
719
- const structuredContentEN = extractSections(enContent, sectionsEN);
720
- const structuredContentPT = extractSections(ptContent, sectionsPT);
721
-
722
- console.log('🎯 [FINAL RESULT] Parsed English Content:', JSON.stringify(structuredContentEN, null, 2));
723
- console.log('🎯 [FINAL RESULT] Parsed Portuguese Content:', JSON.stringify(structuredContentPT, null, 2));
724
-
725
- console.log('✅ [COMPLETE] Structured content parsing finished successfully.');
726
-
727
- return {
728
- structuredContentEN,
729
- structuredContentPT,
730
- };
731
785
  }
786
+
787
+ // private parseStructuredContent(
788
+ // conceptSlug: Concept,
789
+ // response: string
790
+ // ): {
791
+ // structuredContentEN: StructuredConceptContent;
792
+ // structuredContentPT: StructuredConceptContent;
793
+ // } {
794
+ // console.log(`📌 [START] Parsing structured content for ${conceptSlug} from ChatGPT response.`);
795
+
796
+ // // ✅ Step 1: Clean artifacts before processing
797
+ // let cleanedResponse = response
798
+ // .replace(/[*#•]/g, '') // Remove bullet points, bold markers, headings
799
+ // .replace(/---+/g, '') // Remove dividers (like "---")
800
+ // .replace(/\n\s*\n/g, '\n\n') // Normalize multiple line breaks
801
+ // .replace(/\s+EN:\s*/g, '\nEN: ') // Ensure consistent "EN:" formatting
802
+ // .replace(/\s+PT:\s*/g, '\nPT: ') // Ensure consistent "PT:" formatting
803
+ // .trim();
804
+
805
+ // console.log('🔹 [CLEANED RESPONSE]:', cleanedResponse.slice(0, 500) + '...');
806
+
807
+ // // ✅ Step 2: Define Section Titles Per Concept
808
+ // const conceptSections: Record<string, { en: string[]; pt: string[] }> = {
809
+ // crown: {
810
+ // en: [
811
+ // 'Core Identity',
812
+ // 'Strengths and Challenges',
813
+ // 'Path to Fulfillment',
814
+ // 'Emotional Depth',
815
+ // 'Vision and Aspirations',
816
+ // ],
817
+ // pt: [
818
+ // 'Identidade Essencial',
819
+ // 'Forças e Desafios',
820
+ // 'Caminho para a Plenitude',
821
+ // 'Profundidade Emocional',
822
+ // 'Visão e Aspirações',
823
+ // ],
824
+ // },
825
+ // scepter: {
826
+ // en: [
827
+ // 'The Power of Expression',
828
+ // 'The Dance of Action and Reaction',
829
+ // 'Navigating Challenges',
830
+ // 'The Mirror of Relationships',
831
+ // 'Impact on the World',
832
+ // ],
833
+ // pt: [
834
+ // 'O Poder da Expressão',
835
+ // 'A Dança da Ação e Reação',
836
+ // 'Navegando Desafios',
837
+ // 'O Espelho dos Relacionamentos',
838
+ // 'Impacto no Mundo',
839
+ // ],
840
+ // },
841
+ // amulet: {
842
+ // en: [
843
+ // 'The Shield of Protection',
844
+ // 'The Strength Within',
845
+ // 'Nurturing Growth',
846
+ // 'The Cycle of Renewal',
847
+ // 'The Anchor of Wisdom',
848
+ // ],
849
+ // pt: [
850
+ // 'O Escudo da Proteção',
851
+ // 'A Força Interior',
852
+ // 'Cultivando o Crescimento',
853
+ // 'O Ciclo da Renovação',
854
+ // 'A Âncora da Sabedoria',
855
+ // ],
856
+ // },
857
+ // ring: {
858
+ // en: [
859
+ // 'Magnetic Pull',
860
+ // 'Hidden Desires',
861
+ // 'The Fated Dance',
862
+ // 'Unveiling the Shadows',
863
+ // 'Your Love Power',
864
+ // ],
865
+ // pt: [
866
+ // 'Força Magnética',
867
+ // 'Desejos Ocultos',
868
+ // 'A Dança do Destino',
869
+ // 'Revelando as Sombras',
870
+ // 'Seu Poder no Amor',
871
+ // ],
872
+ // },
873
+ // lantern: {
874
+ // en: [
875
+ // 'The Call to Awakening',
876
+ // 'Walking Through Shadows',
877
+ // 'The Inner Flame',
878
+ // 'Revelations and Truths',
879
+ // 'Becoming the Light',
880
+ // ],
881
+ // pt: [
882
+ // 'O Chamado para o Despertar',
883
+ // 'Caminhando Pelas Sombras',
884
+ // 'A Chama Interior',
885
+ // 'Revelações e Verdades',
886
+ // 'Tornando-se a Luz',
887
+ // ],
888
+ // },
889
+ // orb: {
890
+ // en: [
891
+ // 'The Path Unfolding',
892
+ // 'A Calling Beyond the Self',
893
+ // 'Turning Points of Fate',
894
+ // 'Mastering the Journey',
895
+ // 'Legacy and Impact',
896
+ // ],
897
+ // pt: [
898
+ // 'O Caminho que se Revela',
899
+ // 'Um Chamado Além de Si Mesmo',
900
+ // 'Pontos de Virada do Destino',
901
+ // 'Dominando a Jornada',
902
+ // 'Legado e Impacto',
903
+ // ],
904
+ // },
905
+ // };
906
+
907
+ // const sectionsEN = conceptSections[conceptSlug]?.en;
908
+ // const sectionsPT = conceptSections[conceptSlug]?.pt;
909
+
910
+ // if (!sectionsEN || !sectionsPT) {
911
+ // throw new Error(`❌ Unknown concept: ${conceptSlug}`);
912
+ // }
913
+
914
+ // // ✅ Step 3: Extract English and Portuguese content separately
915
+ // const enMatches = cleanedResponse.match(/EN:\s*([\s\S]+?)\s*PT:/);
916
+ // const ptMatches = cleanedResponse.match(/PT:\s*([\s\S]+)/);
917
+
918
+ // if (!enMatches || !ptMatches) {
919
+ // console.error('❌ [ERROR] Missing English or Portuguese content in response.');
920
+ // throw new Error('❌ Missing English or Portuguese content in response.');
921
+ // }
922
+
923
+ // let enContent = enMatches[1].trim();
924
+ // let ptContent = ptMatches[1].trim();
925
+
926
+ // console.log('✅ [MATCH SUCCESS] Extracted English Content:', enContent.slice(0, 500) + '...');
927
+ // console.log('✅ [MATCH SUCCESS] Extracted Portuguese Content:', ptContent.slice(0, 500) + '...');
928
+
929
+ // // ✅ Step 4: Debug **why** PT content has "EN:"
930
+ // if (ptContent.includes('EN:')) {
931
+ // console.warn('⚠️ PT content contains "EN:". Check if parsing was incorrect.');
932
+ // }
933
+
934
+ // // ✅ Step 5: Extract structured sections
935
+ // function extractSections(text: string, sectionTitles: string[]) {
936
+ // return sectionTitles.map((title) => {
937
+ // console.log(`🔍 [PROCESSING] Extracting section: "${title}"`);
938
+
939
+ // const regex = new RegExp(`\\d+\\.\\s*${title}:\\s*([\\s\\S]+?)(?=\\n\\d+\\.\\s*[A-Z]|$)`);
940
+ // const match = text.match(regex);
941
+
942
+ // if (!match) {
943
+ // console.warn(`⚠️ [WARNING] Missing section: "${title}"`);
944
+ // return { type: 'section', title, content: ['❌ Section Missing'] };
945
+ // }
946
+
947
+ // const paragraphs = match[1]
948
+ // .trim()
949
+ // .split(/\n{2,}/)
950
+ // .map((p) => p.trim())
951
+ // .filter((p) => p.length > 0);
952
+
953
+ // console.log(`✅ [EXTRACTED] "${title}" - Parsed Content:`, paragraphs);
954
+
955
+ // return { type: 'section', title, content: paragraphs };
956
+ // });
957
+ // }
958
+
959
+ // const structuredContentEN = extractSections(enContent, sectionsEN);
960
+ // const structuredContentPT = extractSections(ptContent, sectionsPT);
961
+
962
+ // console.log('🎯 [FINAL RESULT] Parsed English Content:', JSON.stringify(structuredContentEN, null, 2));
963
+ // console.log('🎯 [FINAL RESULT] Parsed Portuguese Content:', JSON.stringify(structuredContentPT, null, 2));
964
+
965
+ // console.log('✅ [COMPLETE] Structured content parsing finished successfully.');
966
+
967
+ // return {
968
+ // structuredContentEN,
969
+ // structuredContentPT,
970
+ // };
971
+ // }
732
972
  /**
733
973
  * Queue image generation for a concept.
734
974
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zodic/shared",
3
- "version": "0.0.234",
3
+ "version": "0.0.236",
4
4
  "module": "index.ts",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -361,28 +361,29 @@ Rules & Formatting:
361
361
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
362
362
  • Avoid mentioning zodiac signs or planets explicitly in the text.
363
363
  • Ensure the content is symbolic, empowering, and deeply aligned with the Crown’s themes.
364
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
364
365
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
365
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
366
- • Balance the description of the concept itself and of the bearer's traits.
366
+ • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Crown of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
367
+ • Balance the description of the concept's reflection of the sign combination and of the bearer's traits.
367
368
 
368
369
 
369
370
  Response Format:
370
371
 
371
372
  EN:
372
373
 
373
- 1. Core Identity: Describe the essence of this Crown, its symbolic representation of inner truth and individuality. [Around 200 words]
374
- 2. Strengths and Challenges: Highlight the primary strengths this Crown offers and the challenges it may present. [Around 200 words]
375
- 3. Path to Fulfillment: Explore how this Crown guides its bearer toward self-actualization and purpose. [Around 200 words]
376
- 4. Emotional Depth: Reflect on how this Crown shapes emotional understanding and resilience. [Around 200 words]
377
- 5. Vision and Aspirations: Discuss how this Crown inspires its bearer to envision and pursue their dreams. [Around 200 words]
374
+ 1. Core Identity: Describe the essence of this Crown, its symbolic representation of inner truth and individuality.
375
+ 2. Strengths and Challenges: Highlight the primary strengths this Crown offers and the challenges it may present.
376
+ 3. Path to Fulfillment: Explore how this Crown guides its bearer toward self-actualization and purpose.
377
+ 4. Emotional Depth: Reflect on how this Crown shapes emotional understanding and resilience.
378
+ 5. Vision and Aspirations: Discuss how this Crown inspires its bearer to envision and pursue their dreams.
378
379
 
379
380
  PT:
380
381
 
381
- 1. Identidade Essencial: Descreva a essência desta Coroa, sua representação simbólica da verdade interior e individualidade. [Aproximadamente 200 palavras]
382
- 2. Forças e Desafios: Destaque as principais forças que esta Coroa oferece e os desafios que pode apresentar. [Aproximadamente 200 palavras]
383
- 3. Caminho para a Plenitude: Explore como esta Coroa orienta seu portador em direção à autorrealização e propósito. [Aproximadamente 200 palavras]
384
- 4. Profundidade Emocional: Reflita sobre como esta Coroa molda a compreensão emocional e a resiliência. [Aproximadamente 200 palavras]
385
- 5. Visão e Aspirações: Discuta como esta Coroa inspira seu portador a visualizar e perseguir seus sonhos. [Aproximadamente 200 palavras]
382
+ 1. Identidade Essencial: Descreva a essência desta Coroa, sua representação simbólica da verdade interior e individualidade.
383
+ 2. Forças e Desafios: Destaque as principais forças que esta Coroa oferece e os desafios que pode apresentar.
384
+ 3. Caminho para a Plenitude: Explore como esta Coroa orienta seu portador em direção à autorrealização e propósito.
385
+ 4. Profundidade Emocional: Reflita sobre como esta Coroa molda a compreensão emocional e a resiliência.
386
+ 5. Visão e Aspirações: Discuta como esta Coroa inspira seu portador a visualizar e perseguir seus sonhos.
386
387
  `;
387
388
 
388
389
  export const PROMPT_GENERATE_SCEPTER_CONTENT = `
@@ -395,28 +396,29 @@ Rules & Formatting:
395
396
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
396
397
  • Avoid mentioning zodiac signs or planets explicitly in the text.
397
398
  • Ensure the content is symbolic, insightful, and deeply aligned with the Scepter’s themes.
399
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
398
400
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
399
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
400
- • Balance the description of the concept itself and of the bearer's traits.
401
+ • Avoid using the full name of the concept (e.g., The Scepter of Fiery Focus, The Scepter of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition. This is important.
402
+ • Balance the description of the concept's reflection of the sign combination and of the bearer's traits.
401
403
 
402
404
  Response Format:
403
405
 
404
406
  EN:
405
407
 
406
- 1. The Power of Expression: Describe how the Scepter enhances the bearer’s ability to articulate thoughts, convey emotions, and leave an impact through speech, writing, and presence. Highlight its role in creativity, persuasion, and intellectual engagement. [Around 200 words]
407
- 2. The Dance of Action and Reaction: Explore how the Scepter influences the bearer’s approach to decision-making, assertiveness, and taking initiative, as well as their responsiveness to external circumstances. [Around 200 words]
408
- 3. Navigating Challenges: Reflect on how the Scepter empowers the bearer to overcome obstacles, face adversity with resilience, and turn conflicts into opportunities for personal growth and self-mastery. [Around 200 words]
409
- 4. The Mirror of Relationships: Discuss how the Scepter shapes the bearer’s connections with others, their role in partnerships, and the way they interact with allies, rivals, and the wider social sphere. [Around 200 words]
410
- 5. Impact on the World: Examine how the Scepter enables the bearer to influence their surroundings, shape perceptions, and carve a lasting presence in their environment, whether through leadership, collaboration, or individual expression. [Around 200 words]
408
+ 1. The Power of Expression: Describe how the Scepter enhances the bearer’s ability to articulate thoughts, convey emotions, and leave an impact through speech, writing, and presence. Highlight its role in creativity, persuasion, and intellectual engagement.
409
+ 2. The Dance of Action and Reaction: Explore how the Scepter influences the bearer’s approach to decision-making, assertiveness, and taking initiative, as well as their responsiveness to external circumstances.
410
+ 3. Navigating Challenges: Reflect on how the Scepter empowers the bearer to overcome obstacles, face adversity with resilience, and turn conflicts into opportunities for personal growth and self-mastery.
411
+ 4. The Mirror of Relations: Discuss how the Scepter shapes the bearer’s connections with others, their role in partnerships, and the way they interact with allies, rivals, and the wider social sphere.
412
+ 5. Impact on the World: Examine how the Scepter enables the bearer to influence their surroundings, shape perceptions, and carve a lasting presence in their environment, whether through leadership, collaboration, or individual expression.
411
413
 
412
414
 
413
415
  PT:
414
416
 
415
- 1. O Poder da Expressão: Descreva como o Cetro aprimora a capacidade do portador de articular pensamentos, transmitir emoções e deixar um impacto através da fala, escrita e presença. Destaque seu papel na criatividade, persuasão e engajamento intelectual. [Aproximadamente 200 palavras]
416
- 2. A Dança da Ação e Reação: Explore como o Cetro influencia a abordagem do portador na tomada de decisões, assertividade e iniciativa, bem como sua capacidade de resposta às circunstâncias externas. [Aproximadamente 200 palavras]
417
- 3. Navegando Desafios: Reflita sobre como o Cetro capacita o portador a superar obstáculos, enfrentar adversidades com resiliência e transformar conflitos em oportunidades de crescimento pessoal e autodomínio. [Aproximadamente 200 palavras]
418
- 4. O Espelho dos Relacionamentos: Discuta como o Cetro molda as conexões do portador com os outros, seu papel em parcerias e a forma como interage com aliados, rivais e a esfera social mais ampla. [Aproximadamente 200 palavras]
419
- 5. Impacto no Mundo: Examine como o Cetro permite ao portador influenciar seu ambiente, moldar percepções e deixar uma presença duradoura, seja por meio da liderança, colaboração ou expressão individual. [Aproximadamente 200 palavras]
417
+ 1. O Poder da Expressão: Descreva como o Cetro aprimora a capacidade do portador de articular pensamentos, transmitir emoções e deixar um impacto através da fala, escrita e presença. Destaque seu papel na criatividade, persuasão e engajamento intelectual.
418
+ 2. A Dança da Ação e Reação: Explore como o Cetro influencia a abordagem do portador na tomada de decisões, assertividade e iniciativa, bem como sua capacidade de resposta às circunstâncias externas.
419
+ 3. Navegando Desafios: Reflita sobre como o Cetro capacita o portador a superar obstáculos, enfrentar adversidades com resiliência e transformar conflitos em oportunidades de crescimento pessoal e autodomínio.
420
+ 4. O Espelho das Relações: Discuta como o Cetro molda as conexões do portador com os outros, seu papel em parcerias e a forma como interage com aliados, rivais e a esfera social mais ampla.
421
+ 5. Impacto no Mundo: Examine como o Cetro permite ao portador influenciar seu ambiente, moldar percepções e deixar uma presença duradoura, seja por meio da liderança, colaboração ou expressão individual.
420
422
  `;
421
423
 
422
424
  export const PROMPT_GENERATE_RING_CONTENT = `
@@ -429,27 +431,28 @@ Rules & Formatting:
429
431
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
430
432
  • Avoid mentioning zodiac signs or planets explicitly in the text.
431
433
  • Ensure the content is symbolic, poetic, and deeply aligned with the Ring’s themes.
434
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
432
435
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
433
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
434
- • Balance the description of the concept itself and of the bearer's traits.
436
+ • Avoid using the full name of the concept (e.g., The Ring of Tidal Connection, The Ring of Safe Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
437
+ • Balance the description of the concept's reflection of the sign combination and of the bearer's traits.
435
438
 
436
439
  Response Format:
437
440
 
438
441
  EN:
439
442
 
440
- 1. Magnetic Pull: Explore what the bearer unconsciously attracts in love, the qualities they draw into their life, and the recurring patterns that shape their relationships. [Around 200 words]
441
- 2. Hidden Desires: Reveal the unspoken parts of the bearer’s romantic self, the emotions, needs, and passions that influence their approach to love, whether acknowledged or not. [Around 200 words]
442
- 3. The Fated Dance: Describe how destiny and unseen forces shape the bearer’s relationships, including karmic encounters, serendipitous connections, and lessons bound by fate. [Around 200 words]
443
- 4. Unveiling the Shadows: Reflect on the hidden lessons of past loves, the patterns that must be understood, and how past relationships contribute to emotional wisdom and healing. [Around 200 words]
444
- 5. Your Love Power: Explore the bearer’s unique way of loving, their capacity for connection, and how they can embrace and express love in its truest, most fulfilling form. [Around 200 words]
443
+ 1. Magnetic Pull: Explore what the bearer unconsciously attracts in love, the qualities they draw into their life, and the recurring patterns that shape their relationships.
444
+ 2. Hidden Desires: Reveal the unspoken parts of the bearer’s romantic self, the emotions, needs, and passions that influence their approach to love, whether acknowledged or not.
445
+ 3. The Fated Dance: Describe how destiny and unseen forces shape the bearer’s relationships, including karmic encounters, serendipitous connections, and lessons bound by fate.
446
+ 4. Unveiling the Shadows: Reflect on the hidden lessons of past loves, the patterns that must be understood, and how past relationships contribute to emotional wisdom and healing.
447
+ 5. Your Love Power: Explore the bearer’s unique way of loving, their capacity for connection, and how they can embrace and express love in its truest, most fulfilling form.
445
448
 
446
449
  PT:
447
450
 
448
- 1. Força Magnética: Explore o que o portador atrai inconscientemente no amor, as qualidades que surgem em sua vida e os padrões recorrentes que moldam seus relacionamentos. [Aproximadamente 200 palavras]
449
- 2. Desejos Ocultos: Revele as partes não ditas do eu romântico do portador, as emoções, necessidades e paixões que influenciam sua abordagem ao amor, reconhecidas ou não. [Aproximadamente 200 palavras]
450
- 3. A Dança do Destino: Descreva como o destino e forças invisíveis moldam os relacionamentos do portador, incluindo encontros kármicos, conexões inesperadas e lições entrelaçadas pelo tempo. [Aproximadamente 200 palavras]
451
- 4. Revelando as Sombras: Reflita sobre as lições ocultas dos amores passados, os padrões que precisam ser compreendidos e como os relacionamentos anteriores contribuem para a sabedoria emocional e a cura. [Aproximadamente 200 palavras]
452
- 5. Seu Poder no Amor: Explore a maneira única do portador de amar, sua capacidade de se conectar e como ele pode abraçar e expressar o amor em sua forma mais verdadeira e plena. [Aproximadamente 200 palavras]
451
+ 1. Força Magnética: Explore o que o portador atrai inconscientemente no amor, as qualidades que surgem em sua vida e os padrões recorrentes que moldam seus relacionamentos.
452
+ 2. Desejos Ocultos: Revele as partes não ditas do eu romântico do portador, as emoções, necessidades e paixões que influenciam sua abordagem ao amor, reconhecidas ou não.
453
+ 3. A Dança do Destino: Descreva como o destino e forças invisíveis moldam os relacionamentos do portador, incluindo encontros kármicos, conexões inesperadas e lições entrelaçadas pelo tempo.
454
+ 4. Revelando as Sombras: Reflita sobre as lições ocultas dos amores passados, os padrões que precisam ser compreendidos e como os relacionamentos anteriores contribuem para a sabedoria emocional e a cura.
455
+ 5. Seu Poder no Amor: Explore a maneira única do portador de amar, sua capacidade de se conectar e como ele pode abraçar e expressar o amor em sua forma mais verdadeira e plena.
453
456
  `;
454
457
 
455
458
  export const PROMPT_GENERATE_AMULET_CONTENT = `
@@ -462,27 +465,26 @@ Rules & Formatting:
462
465
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
463
466
  • Avoid mentioning zodiac signs or planets explicitly in the text.
464
467
  • Ensure the content is symbolic, inspiring, and deeply aligned with the Amulet’s themes.
468
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
465
469
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
466
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
467
- • Balance the description of the concept itself and of the bearer's traits.
470
+ • Avoid using the full name of the concept (e.g., The Amulet of Warm Resilience, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
471
+ • Balance the description of the concept's reflection of the sign combination and of the bearer's traits.
468
472
 
469
473
  Response Format:
470
474
 
471
475
  EN:
472
-
473
- 1. The Shield of Protection: Describe how the Amulet serves as a source of spiritual and emotional protection, safeguarding the bearer through life’s challenges. [Around 200 words]
474
- 2. The Strength Within: Reflect on how the Amulet strengthens the bearer’s ability to overcome difficulties, offering courage and stability. [Around 200 words]
475
- 3. Nurturing Growth: Discuss how the Amulet fosters personal growth and self-reflection, guiding the bearer toward healing and emotional maturity. [Around 200 words]
476
- 4. The Cycle of Renewal: Highlight the Amulet’s connection to renewal and transformation, symbolizing the cycles of letting go, healing, and starting anew. [Around 200 words]
477
- 5. The Anchor of Wisdom: Explore how the Amulet represents grounding and wisdom, helping the bearer remain steady and balanced in life’s transitions. [Around 200 words]
478
-
476
+ 1. The Shield of Protection – How does the bearer instinctively guard themselves—through resilience, wisdom, or intuition? What strengths help them navigate challenges?
477
+ 2. The Strength Within What fuels the bearer’s inner strength? How do they stay grounded in adversity, and what deeper truths emerge from their struggles?
478
+ 3. Nurturing Growth How does the bearer evolve through life’s lessons? What drives their healing, self-awareness, and ability to transform experience into wisdom?
479
+ 4. The Cycle of Renewal How does the bearer handle change? Do they embrace it, resist it, or transform through deep introspection? What helps them let go and start anew?
480
+ 5. The Anchor of Wisdom What keeps the bearer steady? Where do they find clarity, and how does their understanding shape their choices and path?
481
+
479
482
  PT:
480
-
481
- 1. O Escudo da Proteção: Descreva como o Amuleto serve como uma fonte de proteção espiritual e emocional, resguardando o portador diante dos desafios da vida. [Aproximadamente 200 palavras]
482
- 2. A Força Interior: Reflita sobre como o Amuleto fortalece a capacidade do portador de superar dificuldades, oferecendo coragem e estabilidade. [Aproximadamente 200 palavras]
483
- 3. Cultivando o Crescimento: Discuta como o Amuleto estimula o crescimento pessoal e a autorreflexão, guiando o portador rumo à cura e maturidade emocional. [Aproximadamente 200 palavras]
484
- 4. O Ciclo da Renovação: Destaque a conexão do Amuleto com a renovação e a transformação, simbolizando os ciclos de deixar ir, curar e recomeçar. [Aproximadamente 200 palavras]
485
- 5. A Âncora da Sabedoria: Explore como o Amuleto representa estabilidade e sabedoria, ajudando o portador a permanecer firme e equilibrado nas transições da vida. [Aproximadamente 200 palavras]
483
+ 1. O Escudo da Proteção – Como o portador se protege—pela resiliência, sabedoria ou intuição? Quais forças o ajudam a enfrentar desafios?
484
+ 2. A Força Interior O que sustenta sua força interior? Como ele se mantém firme na adversidade e o que aprende com isso?
485
+ 3. Cultivando o Crescimento Como ele evolui através das lições da vida? O que impulsiona sua cura, autoconhecimento e sabedoria?
486
+ 4. O Ciclo da Renovação Como lida com mudanças? Ele as abraça, resiste ou se transforma por meio da introspecção? O que o ajuda a recomeçar?
487
+ 5. A Âncora da Sabedoria O que o mantém centrado? Onde encontra clareza e como essa compreensão guia suas escolhas?
486
488
  `;
487
489
 
488
490
  export const PROMPT_GENERATE_LANTERN_CONTENT = `
@@ -496,28 +498,30 @@ Rules & Formatting:
496
498
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
497
499
  • Avoid mentioning zodiac signs or planets explicitly in the text.
498
500
  • Ensure the content is symbolic, introspective, and deeply aligned with the Lantern’s themes.
501
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
499
502
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
500
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
503
+ • Avoid using the full name of the concept (e.g., The Lantern of Deep Lights, The Lantern of Dancing Shadows). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
501
504
  • Balance the description of the concept itself and of the bearer's traits.
505
+ • To mention the word "Lantern" in Portuguese, use "Candeia".
502
506
 
503
507
  Response Format:
504
508
 
505
509
  EN:
506
510
 
507
- 1. The Call to Awakening: Describe the moment of realization, the inner stirring that signals the beginning of transformation. What urges the bearer to seek truth beyond the ordinary? [Around 200 words]
508
- 2. Walking Through Shadows: Explore the challenges, doubts, and illusions that must be faced. How does the Lantern guide the bearer through the unknown, revealing lessons hidden in darkness? [Around 200 words]
509
- 3. The Inner Flame: Reflect on the source of wisdom and intuition within. What fuels the bearer’s spirit, keeping their light strong even in moments of uncertainty? [Around 200 words]
510
- 4. Revelations and Truths: Discuss the insights that emerge along the journey. What profound realizations shape the bearer’s path and redefine their understanding of self and purpose? [Around 200 words]
511
- 5. Becoming the Light: Examine how the bearer’s transformation not only changes them but also inspires others. How do they embody their wisdom and illuminate the world around them? [Around 200 words]
511
+ 1. The Call to Awakening: Explore what fuels the bearer’s search for deeper meaning. What inner forces, questions, or realizations drive them toward transformation and a greater understanding of themselves?
512
+ 2. Walking Through Shadows: Explore the challenges, doubts, and illusions that must be faced. How does the Lantern guide the bearer through the unknown, revealing lessons hidden in darkness?
513
+ 3. The Inner Flame: Reflect on the source of wisdom and intuition within. What fuels the bearer’s spirit, keeping their light strong even in moments of uncertainty?
514
+ 4. Revelations and Truths: Discuss the insights that emerge along the journey. What profound realizations shape the bearer’s path and redefine their understanding of self and purpose?
515
+ 5. Becoming the Light: Examine how the bearer’s transformation not only changes them but also inspires others. How do they embody their wisdom and illuminate the world around them?
512
516
 
513
517
 
514
518
  PT:
515
519
 
516
- 1. O Chamado para o Despertar: Descreva o momento de realização, o chamado interior que sinaliza o início da transformação. O que impulsiona o portador a buscar a verdade além do comum? [Aproximadamente 200 palavras]
517
- 2. Caminhando Pelas Sombras: Explore os desafios, dúvidas e ilusões que devem ser enfrentados. Como a Lanterna guia o portador pelo desconhecido, revelando lições ocultas na escuridão? [Aproximadamente 200 palavras]
518
- 3. A Chama Interior: Reflita sobre a fonte de sabedoria e intuição dentro do portador. O que alimenta seu espírito, mantendo sua luz forte mesmo nos momentos de incerteza? [Aproximadamente 200 palavras]
519
- 4. Revelações e Verdades: Discuta os insights que emergem ao longo da jornada. Que profundas realizações moldam o caminho do portador e redefinem sua compreensão sobre si e seu propósito? [Aproximadamente 200 palavras]
520
- 5. Tornando-se a Luz: Examine como a transformação do portador não apenas o muda, mas também inspira os outros. Como ele incorpora sua sabedoria e ilumina o mundo ao seu redor? [Aproximadamente 200 palavras]
520
+ 1. O Chamado para o Despertar: Explore o que impulsiona o portador a buscar um significado mais profundo. Quais forças internas, questionamentos ou percepções o movem em direção à transformação e a uma maior compreensão de si mesmo?
521
+ 2. Caminhando Pelas Sombras: Explore os desafios, dúvidas e ilusões que devem ser enfrentados. Como a Candeia guia o portador pelo desconhecido, revelando lições ocultas na escuridão?
522
+ 3. A Chama Interior: Reflita sobre a fonte de sabedoria e intuição dentro do portador. O que alimenta seu espírito, mantendo sua luz forte mesmo nos momentos de incerteza?
523
+ 4. Revelações e Verdades: Discuta os insights que emergem ao longo da jornada. Que profundas realizações moldam o caminho do portador e redefinem sua compreensão sobre si e seu propósito?
524
+ 5. Tornando-se a Luz: Examine como a transformação do portador não apenas o muda, mas também inspira os outros. Como ele incorpora sua sabedoria e ilumina o mundo ao seu redor?
521
525
  `;
522
526
 
523
527
  export const PROMPT_GENERATE_ORB_CONTENT = `
@@ -530,27 +534,28 @@ Rules & Formatting:
530
534
  • Write each section with depth and clarity, around 200 words per topic to ensure a rich and engaging exploration.
531
535
  • Avoid mentioning zodiac signs or planets explicitly in the text.
532
536
  • Ensure the content is symbolic, expansive, and deeply aligned with the Orb’s themes.
537
+ • Ensure the content provides meaningful insights, helping the reader understand how their unique sign combination shapes their personality, emotions, and life journey.
533
538
  • Keep the Portuguese version faithful in tone and depth to the English version, adapting naturally rather than translating literally.
534
- • Avoid repeating the full name of the concept (e.g., The Crown of Fiery Focus, The Amulet of Eternal Harmony). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
539
+ • Avoid repeating the full name of the concept (e.g., The Orb of Fiery Fate, The Orb of Timely Achievements). Instead, refer to it using general and unnespecific forms, without unnecessary repetition.
535
540
  • Balance the description of the concept itself and of the bearer's traits.
536
541
 
537
542
  Response Format:
538
543
 
539
544
  EN:
540
545
 
541
- 1. The Path Unfolding: Describe the bearer’s journey toward purpose, the unseen forces that guide them, and how their destiny gradually reveals itself. [Around 200 words]
542
- 2. A Calling Beyond the Self: Explore the deeper purpose that pulls the bearer forward. How do they sense their role in the world, and what mission feels written in their soul? [Around 200 words]
543
- 3. Turning Points of Fate: Reflect on the pivotal moments that shape the bearer’s direction—serendipities, choices, and events that act as cosmic signposts along their path. [Around 200 words]
544
- 4. Mastering the Journey: Discuss how the bearer learns to align with their destiny, embracing both challenges and gifts, and refining their path with clarity and intention. [Around 200 words]
545
- 5. Legacy and Impact: Examine how the bearer’s purpose extends beyond them. How do they leave their mark on the world, inspire others, or contribute to something greater than themselves? [Around 200 words]
546
+ 1. The Path Unfolding: Describe the bearer’s journey toward purpose, the unseen forces that guide them, and how their destiny gradually reveals itself.
547
+ 2. A Calling Beyond the Self: Explore the deeper purpose that pulls the bearer forward. How do they sense their role in the world, and what mission feels written in their soul?
548
+ 3. Turning Points of Fate: Reflect on the pivotal moments that shape the bearer’s direction—serendipities, choices, and events that act as cosmic signposts along their path.
549
+ 4. Mastering the Journey: Discuss how the bearer learns to align with their destiny, embracing both challenges and gifts, and refining their path with clarity and intention.
550
+ 5. Legacy and Impact: Examine how the bearer’s purpose extends beyond them. How do they leave their mark on the world, inspire others, or contribute to something greater than themselves?
546
551
 
547
552
  PT:
548
553
 
549
- 1. O Caminho que se Revela: Descreva a jornada do portador rumo ao propósito, as forças invisíveis que o guiam e como seu destino se revela gradualmente. [Aproximadamente 200 palavras]
550
- 2. Um Chamado Além de Si Mesmo: Explore o propósito mais profundo que impulsiona o portador. Como ele sente seu papel no mundo e que missão parece estar escrita em sua alma? [Aproximadamente 200 palavras]
551
- 3. Pontos de Virada do Destino: Reflita sobre os momentos decisivos que moldam a direção do portador—sincronicidades, escolhas e eventos que atuam como sinais cósmicos ao longo de seu caminho. [Aproximadamente 200 palavras]
552
- 4. Dominando a Jornada: Discuta como o portador aprende a se alinhar com seu destino, abraçando tanto os desafios quanto os dons, refinando seu caminho com clareza e intenção. [Aproximadamente 200 palavras]
553
- 5. Legado e Impacto: Examine como o propósito do portador se estende além dele. Como ele deixa sua marca no mundo, inspira os outros ou contribui para algo maior do que si mesmo? [Aproximadamente 200 palavras]
554
+ 1. O Caminho que se Revela: Descreva a jornada do portador rumo ao propósito, as forças invisíveis que o guiam e como seu destino se revela gradualmente.
555
+ 2. Um Chamado Além de Si Mesmo: Explore o propósito mais profundo que impulsiona o portador. Como ele sente seu papel no mundo e que missão parece estar escrita em sua alma?
556
+ 3. Pontos de Virada do Destino: Reflita sobre os momentos decisivos que moldam a direção do portador—sincronicidades, escolhas e eventos que atuam como sinais cósmicos ao longo de seu caminho.
557
+ 4. Dominando a Jornada: Discuta como o portador aprende a se alinhar com seu destino, abraçando tanto os desafios quanto os dons, refinando seu caminho com clareza e intenção.
558
+ 5. Legado e Impacto: Examine como o propósito do portador se estende além dele. Como ele deixa sua marca no mundo, inspira os outros ou contribui para algo maior do que si mesmo?
554
559
  `;
555
560
 
556
561
  export const PROMPT_GENERATE_CROWN_LEONARDO = `