issue-flow 0.7.7 → 0.9.0

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 (83) hide show
  1. package/README.md +16 -0
  2. package/dist/{analyze-2RVGY5OK.js → analyze-VSWAEVN3.js} +6 -6
  3. package/dist/{chunk-WO6ERABE.js → chunk-57MH6RYJ.js} +106 -7
  4. package/dist/chunk-57MH6RYJ.js.map +1 -0
  5. package/dist/{chunk-6UTVPKNF.js → chunk-66ZGYXTH.js} +53 -9
  6. package/dist/chunk-66ZGYXTH.js.map +1 -0
  7. package/dist/{chunk-WGDLUPSF.js → chunk-DP43WJY4.js} +75 -11
  8. package/dist/chunk-DP43WJY4.js.map +1 -0
  9. package/dist/{chunk-ZYBYMEWG.js → chunk-DTNM3LTO.js} +33 -10
  10. package/dist/chunk-DTNM3LTO.js.map +1 -0
  11. package/dist/{chunk-KHTLN54U.js → chunk-JGKPSWOA.js} +2 -2
  12. package/dist/{chunk-EYVXLRRD.js → chunk-KXAG24DD.js} +219 -3
  13. package/dist/chunk-KXAG24DD.js.map +1 -0
  14. package/dist/{chunk-XPW46TI5.js → chunk-M37YZYDO.js} +3 -3
  15. package/dist/{chunk-G37JNQKB.js → chunk-M72ZEPWD.js} +2 -2
  16. package/dist/{chunk-RUTDK6ZF.js → chunk-MTJQOOMG.js} +105 -4
  17. package/dist/chunk-MTJQOOMG.js.map +1 -0
  18. package/dist/{chunk-OPIDR2DC.js → chunk-NB6WKTBL.js} +2 -2
  19. package/dist/chunk-TJMZWRS6.js +265 -0
  20. package/dist/chunk-TJMZWRS6.js.map +1 -0
  21. package/dist/{chunk-6IOPYFUM.js → chunk-TLSIK656.js} +6 -6
  22. package/dist/{chunk-JOK7VXRV.js → chunk-VNKSMWDN.js} +17 -3
  23. package/dist/chunk-VNKSMWDN.js.map +1 -0
  24. package/dist/{chunk-6L2BPOE3.js → chunk-WHEU55ZP.js} +7 -7
  25. package/dist/{chunk-EOTULFWV.js → chunk-X7XBF5TS.js} +6 -6
  26. package/dist/cli.js +91 -29
  27. package/dist/cli.js.map +1 -1
  28. package/dist/{config-OAZG7KIK.js → config-J5DW6HSY.js} +3 -3
  29. package/dist/execute-Z2DKGVLR.js +14 -0
  30. package/dist/{generate-BEJF3SVJ.js → generate-ERDPOTKX.js} +6 -6
  31. package/dist/init-UY6ZCIFT.js +9 -0
  32. package/dist/plan-REMAMCX4.js +16 -0
  33. package/dist/pr-KERP52TI.js +20 -0
  34. package/dist/pr-review-IU4N3TEK.js +16 -0
  35. package/dist/prd-SHVQW6RM.js +16 -0
  36. package/dist/review-L5F77QAC.js +14 -0
  37. package/dist/run-BRBFHVUO.js +1860 -0
  38. package/dist/run-BRBFHVUO.js.map +1 -0
  39. package/dist/{web-3SBYL7QJ.js → web-WQISLO66.js} +4 -4
  40. package/package.json +1 -1
  41. package/prompts/execute.md +2 -2
  42. package/prompts/plan.md +10 -1
  43. package/prompts/pr.md +9 -4
  44. package/web/CLAUDE.md +70 -8
  45. package/web/public/app.css +444 -0
  46. package/web/public/app.js +573 -17
  47. package/web/public/index.html +50 -0
  48. package/dist/chunk-3E6KASSE.js +0 -123
  49. package/dist/chunk-3E6KASSE.js.map +0 -1
  50. package/dist/chunk-6UTVPKNF.js.map +0 -1
  51. package/dist/chunk-EYVXLRRD.js.map +0 -1
  52. package/dist/chunk-JOK7VXRV.js.map +0 -1
  53. package/dist/chunk-RUTDK6ZF.js.map +0 -1
  54. package/dist/chunk-WGDLUPSF.js.map +0 -1
  55. package/dist/chunk-WO6ERABE.js.map +0 -1
  56. package/dist/chunk-ZYBYMEWG.js.map +0 -1
  57. package/dist/execute-AOEM52CD.js +0 -14
  58. package/dist/init-TBC3WI74.js +0 -9
  59. package/dist/plan-YDZYB2BO.js +0 -16
  60. package/dist/pr-SIXMJIZF.js +0 -16
  61. package/dist/pr-review-AY56ZPJR.js +0 -16
  62. package/dist/prd-MBSSBLGO.js +0 -16
  63. package/dist/review-2MDDHZ4X.js +0 -14
  64. package/dist/run-SEB6F3W4.js +0 -733
  65. package/dist/run-SEB6F3W4.js.map +0 -1
  66. /package/dist/{analyze-2RVGY5OK.js.map → analyze-VSWAEVN3.js.map} +0 -0
  67. /package/dist/{chunk-KHTLN54U.js.map → chunk-JGKPSWOA.js.map} +0 -0
  68. /package/dist/{chunk-XPW46TI5.js.map → chunk-M37YZYDO.js.map} +0 -0
  69. /package/dist/{chunk-G37JNQKB.js.map → chunk-M72ZEPWD.js.map} +0 -0
  70. /package/dist/{chunk-OPIDR2DC.js.map → chunk-NB6WKTBL.js.map} +0 -0
  71. /package/dist/{chunk-6IOPYFUM.js.map → chunk-TLSIK656.js.map} +0 -0
  72. /package/dist/{chunk-6L2BPOE3.js.map → chunk-WHEU55ZP.js.map} +0 -0
  73. /package/dist/{chunk-EOTULFWV.js.map → chunk-X7XBF5TS.js.map} +0 -0
  74. /package/dist/{config-OAZG7KIK.js.map → config-J5DW6HSY.js.map} +0 -0
  75. /package/dist/{execute-AOEM52CD.js.map → execute-Z2DKGVLR.js.map} +0 -0
  76. /package/dist/{generate-BEJF3SVJ.js.map → generate-ERDPOTKX.js.map} +0 -0
  77. /package/dist/{init-TBC3WI74.js.map → init-UY6ZCIFT.js.map} +0 -0
  78. /package/dist/{plan-YDZYB2BO.js.map → plan-REMAMCX4.js.map} +0 -0
  79. /package/dist/{pr-SIXMJIZF.js.map → pr-KERP52TI.js.map} +0 -0
  80. /package/dist/{pr-review-AY56ZPJR.js.map → pr-review-IU4N3TEK.js.map} +0 -0
  81. /package/dist/{prd-MBSSBLGO.js.map → prd-SHVQW6RM.js.map} +0 -0
  82. /package/dist/{review-2MDDHZ4X.js.map → review-L5F77QAC.js.map} +0 -0
  83. /package/dist/{web-3SBYL7QJ.js.map → web-WQISLO66.js.map} +0 -0
@@ -18,6 +18,7 @@
18
18
  --ok-bg: #dcfce7;
19
19
  --idle-bg: #e5e7eb;
20
20
  --shadow: 0 1px 2px rgb(0 0 0 / 0.06);
21
+ --overlay: rgb(0 0 0 / 0.45);
21
22
  }
22
23
 
23
24
  @media (prefers-color-scheme: dark) {
@@ -38,6 +39,7 @@
38
39
  --ok-bg: #14301f;
39
40
  --idle-bg: #262d38;
40
41
  --shadow: none;
42
+ --overlay: rgb(0 0 0 / 0.65);
41
43
  }
42
44
  }
43
45
 
@@ -110,6 +112,53 @@ a:hover {
110
112
  text-decoration: underline;
111
113
  }
112
114
 
115
+ /* ---- Abas ---- */
116
+
117
+ .tabs {
118
+ display: flex;
119
+ gap: 4px;
120
+ border-bottom: 1px solid var(--border);
121
+ }
122
+
123
+ .tab {
124
+ appearance: none;
125
+ background: none;
126
+ border: none;
127
+ border-bottom: 2px solid transparent;
128
+ margin-bottom: -1px;
129
+ padding: 8px 14px;
130
+ font: inherit;
131
+ font-weight: 600;
132
+ color: var(--muted);
133
+ cursor: pointer;
134
+ border-radius: 6px 6px 0 0;
135
+ }
136
+
137
+ .tab:hover {
138
+ color: var(--fg);
139
+ background: var(--card);
140
+ }
141
+
142
+ .tab.is-active {
143
+ color: var(--accent);
144
+ border-bottom-color: var(--accent);
145
+ }
146
+
147
+ /* O painel repete o grid de main: as seções dentro dele são os cards que antes
148
+ eram filhos diretos de main e dependem desse espaçamento. */
149
+ .tab-panel {
150
+ display: grid;
151
+ gap: 16px;
152
+ }
153
+
154
+ .tab-panel[hidden] {
155
+ display: none;
156
+ }
157
+
158
+ .tab-panel > * {
159
+ min-width: 0;
160
+ }
161
+
113
162
  /* ---- Cabeçalho ---- */
114
163
 
115
164
  .header {
@@ -416,6 +465,16 @@ progress {
416
465
  font-weight: 700;
417
466
  }
418
467
 
468
+ /* Story cuja stage é 'executing' (issue 38) — destaque visual na lista de
469
+ "User stories". A borda esquerda usa box-shadow (não border) para não
470
+ deslocar o conteúdo do item ao ganhar/perder a classe. */
471
+ .story-executing {
472
+ background: var(--run-bg);
473
+ border-radius: 6px;
474
+ box-shadow: inset 3px 0 0 0 var(--run);
475
+ padding-left: 9px;
476
+ }
477
+
419
478
  .icon-completed {
420
479
  color: var(--ok);
421
480
  }
@@ -534,6 +593,223 @@ progress {
534
593
  word-break: break-word;
535
594
  }
536
595
 
596
+ /* ---- Kanban ---- */
597
+
598
+ .kanban {
599
+ display: grid;
600
+ grid-template-columns: repeat(4, minmax(0, 1fr));
601
+ gap: 12px;
602
+ align-items: start;
603
+ }
604
+
605
+ .kanban-column {
606
+ background: var(--bg);
607
+ border: 1px solid var(--border);
608
+ border-radius: 8px;
609
+ padding: 10px;
610
+ display: grid;
611
+ gap: 8px;
612
+ min-width: 0;
613
+ }
614
+
615
+ .kanban-column-head {
616
+ display: flex;
617
+ align-items: center;
618
+ justify-content: space-between;
619
+ gap: 8px;
620
+ }
621
+
622
+ .kanban-column-title {
623
+ margin: 0;
624
+ font-size: 0.72rem;
625
+ font-weight: 600;
626
+ text-transform: uppercase;
627
+ letter-spacing: 0.06em;
628
+ color: var(--muted);
629
+ }
630
+
631
+ .kanban-column-count {
632
+ flex: none;
633
+ background: var(--idle-bg);
634
+ color: var(--muted);
635
+ border-radius: 999px;
636
+ padding: 0 7px;
637
+ font-size: 0.74rem;
638
+ font-variant-numeric: tabular-nums;
639
+ }
640
+
641
+ .kanban-card {
642
+ appearance: none;
643
+ display: grid;
644
+ gap: 6px;
645
+ justify-items: start;
646
+ width: 100%;
647
+ text-align: left;
648
+ background: var(--card);
649
+ border: 1px solid var(--border);
650
+ border-radius: 8px;
651
+ padding: 10px;
652
+ font: inherit;
653
+ color: inherit;
654
+ cursor: pointer;
655
+ box-shadow: var(--shadow);
656
+ }
657
+
658
+ .kanban-card:hover {
659
+ border-color: var(--accent);
660
+ }
661
+
662
+ .kanban-card-head {
663
+ display: flex;
664
+ align-items: center;
665
+ gap: 2px;
666
+ color: var(--muted);
667
+ font-size: 0.8rem;
668
+ }
669
+
670
+ .kanban-card-title {
671
+ display: block;
672
+ font-weight: 600;
673
+ line-height: 1.35;
674
+ overflow-wrap: anywhere;
675
+ }
676
+
677
+ /* Trecho curto: limita a 3 linhas sem truncar a string, então o texto completo
678
+ continua no DOM para leitores de tela e para o drawer. */
679
+ .kanban-card-desc {
680
+ margin: 0;
681
+ color: var(--muted);
682
+ font-size: 0.84rem;
683
+ line-height: 1.4;
684
+ overflow: hidden;
685
+ display: -webkit-box;
686
+ -webkit-box-orient: vertical;
687
+ -webkit-line-clamp: 3;
688
+ line-clamp: 3;
689
+ overflow-wrap: anywhere;
690
+ }
691
+
692
+ .kanban-empty {
693
+ font-size: 0.84rem;
694
+ }
695
+
696
+ @media (max-width: 719px) {
697
+ .kanban {
698
+ grid-template-columns: minmax(0, 1fr);
699
+ }
700
+ }
701
+
702
+ /* ---- Drawer de detalhes ---- */
703
+
704
+ /* Acima do .banner sticky (z-index 10), que senão atravessa o overlay. */
705
+ .drawer-overlay {
706
+ position: fixed;
707
+ inset: 0;
708
+ z-index: 20;
709
+ background: var(--overlay);
710
+ }
711
+
712
+ .drawer {
713
+ position: fixed;
714
+ top: 0;
715
+ right: 0;
716
+ bottom: 0;
717
+ width: min(420px, 100vw);
718
+ z-index: 21;
719
+ display: flex;
720
+ flex-direction: column;
721
+ background: var(--card);
722
+ border-left: 1px solid var(--border);
723
+ padding: 16px;
724
+ gap: 12px;
725
+ }
726
+
727
+ .drawer[hidden],
728
+ .drawer-overlay[hidden] {
729
+ display: none;
730
+ }
731
+
732
+ .drawer-head {
733
+ display: flex;
734
+ align-items: flex-start;
735
+ justify-content: space-between;
736
+ gap: 12px;
737
+ }
738
+
739
+ .drawer-head h2 {
740
+ margin: 0;
741
+ /* O título carrega o id + o título da story: fora do padrão caixa-alta das
742
+ demais seções, que são rótulos fixos e curtos. */
743
+ font-size: 0.95rem;
744
+ text-transform: none;
745
+ letter-spacing: normal;
746
+ color: var(--fg);
747
+ overflow-wrap: anywhere;
748
+ }
749
+
750
+ .drawer-close {
751
+ appearance: none;
752
+ flex: none;
753
+ background: none;
754
+ border: none;
755
+ padding: 2px 6px;
756
+ font: inherit;
757
+ color: var(--muted);
758
+ cursor: pointer;
759
+ border-radius: 6px;
760
+ }
761
+
762
+ .drawer-close:hover {
763
+ color: var(--fg);
764
+ background: var(--idle-bg);
765
+ }
766
+
767
+ /* A rolagem vive aqui, não na página: o drawer é fixo e ocupa a altura toda. */
768
+ .drawer-body {
769
+ overflow-y: auto;
770
+ display: grid;
771
+ gap: 14px;
772
+ align-content: start;
773
+ justify-items: start;
774
+ }
775
+
776
+ .drawer-timing {
777
+ margin: 0;
778
+ font-size: 0.84rem;
779
+ }
780
+
781
+ .drawer-section {
782
+ width: 100%;
783
+ display: grid;
784
+ gap: 6px;
785
+ }
786
+
787
+ .drawer-section-title {
788
+ margin: 0;
789
+ font-size: 0.72rem;
790
+ font-weight: 600;
791
+ text-transform: uppercase;
792
+ letter-spacing: 0.06em;
793
+ color: var(--muted);
794
+ }
795
+
796
+ .drawer-text {
797
+ margin: 0;
798
+ white-space: pre-wrap;
799
+ overflow-wrap: anywhere;
800
+ }
801
+
802
+ .drawer-list {
803
+ margin: 0;
804
+ padding-left: 18px;
805
+ display: grid;
806
+ gap: 4px;
807
+ }
808
+
809
+ .drawer-list li {
810
+ overflow-wrap: anywhere;
811
+ }
812
+
537
813
  /* ---- Diversos ---- */
538
814
 
539
815
  .empty {
@@ -570,4 +846,172 @@ progress {
570
846
  .header-side {
571
847
  align-items: flex-start;
572
848
  }
849
+
850
+ .dashboard-grid {
851
+ grid-template-columns: 1fr;
852
+ }
853
+ }
854
+
855
+ /* ---- Views: dashboard multi-sessão vs detalhe (#35) ---- */
856
+
857
+ .view {
858
+ display: grid;
859
+ gap: 16px;
860
+ min-width: 0;
861
+ }
862
+
863
+ .view[hidden] {
864
+ display: none;
865
+ }
866
+
867
+ .view > * {
868
+ min-width: 0;
869
+ }
870
+
871
+ .back-link {
872
+ appearance: none;
873
+ background: none;
874
+ border: none;
875
+ padding: 0;
876
+ margin: 0 0 6px;
877
+ font: inherit;
878
+ font-size: 0.85rem;
879
+ font-weight: 600;
880
+ color: var(--accent);
881
+ cursor: pointer;
882
+ display: inline-block;
883
+ }
884
+
885
+ .back-link:hover {
886
+ text-decoration: underline;
887
+ }
888
+
889
+ .dashboard-grid {
890
+ display: grid;
891
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
892
+ gap: 16px;
893
+ }
894
+
895
+ .dashboard-card {
896
+ appearance: none;
897
+ text-align: left;
898
+ background: var(--card);
899
+ border: 1px solid var(--border);
900
+ border-radius: 10px;
901
+ padding: 16px;
902
+ box-shadow: var(--shadow);
903
+ color: inherit;
904
+ font: inherit;
905
+ cursor: pointer;
906
+ display: grid;
907
+ gap: 10px;
908
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
909
+ }
910
+
911
+ .dashboard-card:hover,
912
+ .dashboard-card:focus-visible {
913
+ border-color: var(--accent);
914
+ outline: none;
915
+ }
916
+
917
+ .dashboard-card.is-live {
918
+ border-color: var(--run);
919
+ }
920
+
921
+ .dashboard-card-head {
922
+ display: flex;
923
+ justify-content: space-between;
924
+ align-items: center;
925
+ gap: 8px;
926
+ }
927
+
928
+ .dashboard-project {
929
+ font-size: 0.82rem;
930
+ font-weight: 600;
931
+ color: var(--muted);
932
+ overflow-wrap: anywhere;
933
+ }
934
+
935
+ .dashboard-title-row {
936
+ display: flex;
937
+ flex-wrap: wrap;
938
+ align-items: baseline;
939
+ gap: 8px;
940
+ }
941
+
942
+ .dashboard-issue {
943
+ font-weight: 700;
944
+ color: var(--accent);
945
+ font-variant-numeric: tabular-nums;
946
+ }
947
+
948
+ .dashboard-title {
949
+ font-weight: 600;
950
+ overflow-wrap: anywhere;
951
+ }
952
+
953
+ .dashboard-summary {
954
+ margin: 0;
955
+ font-size: 0.9rem;
956
+ overflow: hidden;
957
+ display: -webkit-box;
958
+ -webkit-box-orient: vertical;
959
+ -webkit-line-clamp: 3;
960
+ line-clamp: 3;
961
+ overflow-wrap: anywhere;
962
+ }
963
+
964
+ .dashboard-meta-row {
965
+ display: flex;
966
+ flex-wrap: wrap;
967
+ gap: 10px;
968
+ font-size: 0.82rem;
969
+ color: var(--muted);
970
+ font-variant-numeric: tabular-nums;
971
+ }
972
+
973
+ .dashboard-progress {
974
+ display: block;
975
+ height: 6px;
976
+ background: var(--idle-bg);
977
+ border-radius: 999px;
978
+ overflow: hidden;
979
+ }
980
+
981
+ .dashboard-progress-bar {
982
+ display: block;
983
+ height: 100%;
984
+ background: var(--run);
985
+ border-radius: 999px;
986
+ transition: width 0.3s ease;
987
+ }
988
+
989
+ .dashboard-live-dot {
990
+ font-size: 0.75rem;
991
+ font-weight: 600;
992
+ color: var(--run);
993
+ text-transform: uppercase;
994
+ letter-spacing: 0.04em;
995
+ }
996
+
997
+ .dashboard-live-dot::before {
998
+ content: '';
999
+ display: inline-block;
1000
+ width: 7px;
1001
+ height: 7px;
1002
+ margin-right: 6px;
1003
+ border-radius: 50%;
1004
+ background: var(--run);
1005
+ vertical-align: middle;
1006
+ animation: dashboard-pulse 1.4s ease-in-out infinite;
1007
+ }
1008
+
1009
+ @keyframes dashboard-pulse {
1010
+ 0%,
1011
+ 100% {
1012
+ opacity: 1;
1013
+ }
1014
+ 50% {
1015
+ opacity: 0.35;
1016
+ }
573
1017
  }