@assistkick/create 1.2.0 → 1.4.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 (54) hide show
  1. package/package.json +2 -1
  2. package/templates/assistkick-product-system/GITHUB_APP_SETUP.md +88 -0
  3. package/templates/assistkick-product-system/packages/backend/src/routes/git.ts +231 -0
  4. package/templates/assistkick-product-system/packages/backend/src/routes/kanban.ts +4 -4
  5. package/templates/assistkick-product-system/packages/backend/src/routes/pipeline.ts +49 -2
  6. package/templates/assistkick-product-system/packages/backend/src/routes/terminal.ts +82 -0
  7. package/templates/assistkick-product-system/packages/backend/src/server.ts +19 -6
  8. package/templates/assistkick-product-system/packages/backend/src/services/github_app_service.ts +146 -0
  9. package/templates/assistkick-product-system/packages/backend/src/services/init.ts +69 -2
  10. package/templates/assistkick-product-system/packages/backend/src/services/project_service.ts +71 -0
  11. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.test.ts +87 -0
  12. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.ts +194 -0
  13. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.test.ts +88 -17
  14. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.ts +114 -39
  15. package/templates/assistkick-product-system/packages/backend/src/services/terminal_ws_handler.ts +28 -14
  16. package/templates/assistkick-product-system/packages/frontend/src/App.tsx +1 -1
  17. package/templates/assistkick-product-system/packages/frontend/src/api/client.ts +151 -0
  18. package/templates/assistkick-product-system/packages/frontend/src/components/GitRepoModal.tsx +352 -0
  19. package/templates/assistkick-product-system/packages/frontend/src/components/KanbanView.tsx +208 -95
  20. package/templates/assistkick-product-system/packages/frontend/src/components/ProjectSelector.tsx +17 -1
  21. package/templates/assistkick-product-system/packages/frontend/src/components/TerminalView.tsx +238 -105
  22. package/templates/assistkick-product-system/packages/frontend/src/components/Toolbar.tsx +15 -13
  23. package/templates/assistkick-product-system/packages/frontend/src/constants/graph.ts +1 -0
  24. package/templates/assistkick-product-system/packages/frontend/src/hooks/useProjects.ts +4 -0
  25. package/templates/assistkick-product-system/packages/frontend/src/routes/dashboard.tsx +22 -4
  26. package/templates/assistkick-product-system/packages/frontend/src/styles/index.css +486 -38
  27. package/templates/assistkick-product-system/packages/shared/db/migrations/0001_vengeful_wallop.sql +1 -0
  28. package/templates/assistkick-product-system/packages/shared/db/migrations/0002_greedy_excalibur.sql +4 -0
  29. package/templates/assistkick-product-system/packages/shared/db/migrations/0003_lonely_cyclops.sql +17 -0
  30. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0001_snapshot.json +826 -0
  31. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0002_snapshot.json +854 -0
  32. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0003_snapshot.json +862 -0
  33. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/_journal.json +21 -0
  34. package/templates/assistkick-product-system/packages/shared/db/schema.ts +10 -3
  35. package/templates/assistkick-product-system/packages/shared/lib/claude-service.ts +54 -1
  36. package/templates/assistkick-product-system/packages/shared/lib/git_workflow.ts +25 -0
  37. package/templates/assistkick-product-system/packages/shared/lib/pipeline-state-store.ts +4 -0
  38. package/templates/assistkick-product-system/packages/shared/lib/pipeline.ts +329 -89
  39. package/templates/assistkick-product-system/packages/shared/lib/pipeline_orchestrator.ts +186 -0
  40. package/templates/assistkick-product-system/packages/shared/lib/session.ts +10 -6
  41. package/templates/assistkick-product-system/packages/shared/tools/db_explorer.ts +275 -0
  42. package/templates/assistkick-product-system/packages/shared/tools/end_session.ts +2 -2
  43. package/templates/assistkick-product-system/packages/shared/tools/get_kanban.ts +2 -1
  44. package/templates/assistkick-product-system/packages/shared/tools/move_card.ts +3 -2
  45. package/templates/assistkick-product-system/packages/shared/tools/update_node.ts +2 -2
  46. package/templates/assistkick-product-system/tests/kanban.test.ts +1 -1
  47. package/templates/assistkick-product-system/tests/pipeline_stats_all_cards.test.ts +1 -1
  48. package/templates/assistkick-product-system/tests/web_terminal.test.ts +189 -150
  49. package/templates/skills/assistkick-bootstrap/SKILL.md +33 -25
  50. package/templates/skills/assistkick-code-reviewer/SKILL.md +23 -15
  51. package/templates/skills/assistkick-db-explorer/SKILL.md +86 -0
  52. package/templates/skills/assistkick-debugger/SKILL.md +30 -22
  53. package/templates/skills/assistkick-developer/SKILL.md +37 -29
  54. package/templates/skills/assistkick-interview/SKILL.md +34 -26
@@ -48,7 +48,7 @@
48
48
  box-sizing: border-box;
49
49
  }
50
50
 
51
- html, body {
51
+ html, body, #root {
52
52
  width: 100%;
53
53
  height: 100%;
54
54
  overflow: hidden;
@@ -58,6 +58,19 @@ html, body {
58
58
  color: var(--text-primary);
59
59
  }
60
60
 
61
+ .app-container {
62
+ display: flex;
63
+ flex-direction: column;
64
+ height: 100%;
65
+ overflow: hidden;
66
+ }
67
+
68
+ .main-content {
69
+ flex: 1;
70
+ overflow: hidden;
71
+ position: relative;
72
+ }
73
+
61
74
  /* Toolbar */
62
75
  .toolbar {
63
76
  display: flex;
@@ -1193,16 +1206,16 @@ html, body {
1193
1206
  padding: 16px;
1194
1207
  overflow-y: auto;
1195
1208
  flex: 1;
1196
- font-size: 12px;
1209
+ font-size: 14px;
1197
1210
  line-height: 1.6;
1198
1211
  }
1199
1212
 
1200
- .panel-body h1 { font-size: 16px; margin: 12px 0 8px; color: var(--text-primary); }
1201
- .panel-body h2 { font-size: 14px; margin: 12px 0 6px; color: var(--text-primary); }
1202
- .panel-body h3 { font-size: 13px; margin: 10px 0 4px; color: var(--text-primary); }
1203
- .panel-body p { margin: 4px 0; color: var(--text-secondary); }
1213
+ .panel-body h1 { font-size: 18px; margin: 12px 0 8px; color: var(--text-primary); }
1214
+ .panel-body h2 { font-size: 16px; margin: 12px 0 6px; color: var(--text-primary); }
1215
+ .panel-body h3 { font-size: 15px; margin: 10px 0 4px; color: var(--text-primary); }
1216
+ .panel-body p { margin: 4px 0; color: var(--text-primary); }
1204
1217
  .panel-body ul { padding-left: 20px; margin: 4px 0; }
1205
- .panel-body li { color: var(--text-secondary); margin: 2px 0; }
1218
+ .panel-body li { color: var(--text-primary); margin: 2px 0; }
1206
1219
  .panel-body code {
1207
1220
  background: var(--bg-tertiary);
1208
1221
  padding: 1px 4px;
@@ -1752,7 +1765,7 @@ html, body {
1752
1765
  .panel-task-list-toggle {
1753
1766
  background: none;
1754
1767
  border: none;
1755
- color: var(--text-secondary);
1768
+ color: var(--text-primary);
1756
1769
  font-size: 12px;
1757
1770
  font-family: var(--font-mono);
1758
1771
  cursor: pointer;
@@ -1790,10 +1803,9 @@ html, body {
1790
1803
  /* Tool call activity indicators */
1791
1804
  .kanban-tool-calls {
1792
1805
  display: flex;
1793
- flex-direction: column;
1806
+ flex-wrap: wrap;
1794
1807
  gap: 2px;
1795
- margin-top: 2px;
1796
- padding: 2px 8px;
1808
+ padding: 2px 0;
1797
1809
  }
1798
1810
 
1799
1811
  .kanban-tool-badge {
@@ -1805,6 +1817,69 @@ html, body {
1805
1817
  color: var(--accent-blue, #4dabf7);
1806
1818
  }
1807
1819
 
1820
+ /* Per-stage stats with tabs */
1821
+ .kanban-stage-stats {
1822
+ margin-top: 4px;
1823
+ border-top: 1px solid var(--border-color);
1824
+ padding-top: 2px;
1825
+ }
1826
+
1827
+ .kanban-stage-tabs {
1828
+ display: flex;
1829
+ gap: 0;
1830
+ border-bottom: 1px solid var(--border-color);
1831
+ }
1832
+
1833
+ .kanban-stage-tab {
1834
+ background: none;
1835
+ border: none;
1836
+ border-bottom: 2px solid transparent;
1837
+ color: var(--text-secondary);
1838
+ font-size: 10px;
1839
+ font-family: var(--font-mono);
1840
+ padding: 2px 8px;
1841
+ cursor: pointer;
1842
+ transition: color 0.15s, border-color 0.15s;
1843
+ }
1844
+
1845
+ .kanban-stage-tab:hover {
1846
+ color: var(--text-primary);
1847
+ }
1848
+
1849
+ .kanban-stage-tab.active {
1850
+ color: var(--accent-blue, #4dabf7);
1851
+ border-bottom-color: var(--accent-blue, #4dabf7);
1852
+ }
1853
+
1854
+ .kanban-stage-body {
1855
+ padding: 3px 4px;
1856
+ }
1857
+
1858
+ .kanban-stage-meta {
1859
+ display: flex;
1860
+ flex-wrap: wrap;
1861
+ gap: 4px;
1862
+ padding: 2px 0;
1863
+ }
1864
+
1865
+ .kanban-stage-meta-item {
1866
+ font-size: 10px;
1867
+ font-family: var(--font-mono);
1868
+ color: var(--text-secondary);
1869
+ background: rgba(255, 255, 255, 0.05);
1870
+ padding: 1px 4px;
1871
+ border-radius: 3px;
1872
+ }
1873
+
1874
+ .kanban-stage-model {
1875
+ opacity: 0.7;
1876
+ }
1877
+
1878
+ .kanban-stop-reason {
1879
+ color: var(--accent-orange, #ffa94d);
1880
+ background: rgba(255, 169, 77, 0.1);
1881
+ }
1882
+
1808
1883
  /* Work Summary (Side Panel) */
1809
1884
  .panel-work-summary {
1810
1885
  margin-top: 12px;
@@ -2752,14 +2827,174 @@ html, body {
2752
2827
  font-size: 14px;
2753
2828
  }
2754
2829
 
2755
- /* Terminal View */
2830
+ /* Terminal View — multi-session layout */
2756
2831
  .terminal-view {
2757
- flex-direction: column;
2832
+ flex-direction: row;
2758
2833
  height: 100%;
2759
2834
  width: 100%;
2835
+ overflow: hidden;
2836
+ }
2837
+
2838
+ /* Sidebar — session list */
2839
+ .terminal-sidebar {
2840
+ display: flex;
2841
+ flex-direction: column;
2842
+ width: 220px;
2843
+ min-width: 220px;
2844
+ border-right: 1px solid var(--border-color);
2845
+ background: var(--bg-secondary);
2846
+ overflow: hidden;
2847
+ }
2848
+
2849
+ .terminal-sidebar-header {
2850
+ padding: 10px 12px;
2851
+ font-size: 11px;
2852
+ font-family: var(--font-mono);
2853
+ text-transform: uppercase;
2854
+ letter-spacing: 0.08em;
2855
+ color: var(--text-muted);
2856
+ border-bottom: 1px solid var(--border-color);
2857
+ flex-shrink: 0;
2858
+ }
2859
+
2860
+ .terminal-session-list {
2861
+ flex: 1;
2862
+ overflow-y: auto;
2863
+ }
2864
+
2865
+ .terminal-no-sessions {
2866
+ padding: 16px 12px;
2867
+ font-size: 12px;
2868
+ color: var(--text-muted);
2869
+ font-family: var(--font-mono);
2870
+ }
2871
+
2872
+ .terminal-session-item {
2873
+ display: flex;
2874
+ flex-direction: column;
2875
+ padding: 8px 10px;
2876
+ cursor: pointer;
2877
+ border-bottom: 1px solid var(--border-color);
2760
2878
  position: relative;
2761
2879
  }
2762
2880
 
2881
+ .terminal-session-item:hover {
2882
+ background: var(--tab-hover-bg);
2883
+ }
2884
+
2885
+ .terminal-session-item--active {
2886
+ background: var(--tab-active-bg);
2887
+ border-left: 2px solid var(--accent);
2888
+ padding-left: 8px;
2889
+ }
2890
+
2891
+ .terminal-session-name {
2892
+ font-size: 12px;
2893
+ font-family: var(--font-mono);
2894
+ color: var(--text-primary);
2895
+ white-space: nowrap;
2896
+ overflow: hidden;
2897
+ text-overflow: ellipsis;
2898
+ padding-right: 20px;
2899
+ }
2900
+
2901
+ .terminal-session-project {
2902
+ font-size: 11px;
2903
+ color: var(--text-muted);
2904
+ font-family: var(--font-mono);
2905
+ white-space: nowrap;
2906
+ overflow: hidden;
2907
+ text-overflow: ellipsis;
2908
+ padding-right: 20px;
2909
+ margin-top: 2px;
2910
+ }
2911
+
2912
+ .terminal-session-kill {
2913
+ position: absolute;
2914
+ top: 8px;
2915
+ right: 8px;
2916
+ width: 18px;
2917
+ height: 18px;
2918
+ border: none;
2919
+ background: transparent;
2920
+ color: var(--text-muted);
2921
+ cursor: pointer;
2922
+ font-size: 11px;
2923
+ display: flex;
2924
+ align-items: center;
2925
+ justify-content: center;
2926
+ border-radius: 3px;
2927
+ padding: 0;
2928
+ line-height: 1;
2929
+ }
2930
+
2931
+ .terminal-session-kill:hover {
2932
+ background: var(--error-color);
2933
+ color: #fff;
2934
+ }
2935
+
2936
+ /* New session area at sidebar bottom */
2937
+ .terminal-new-session {
2938
+ display: flex;
2939
+ flex-direction: column;
2940
+ gap: 6px;
2941
+ padding: 10px;
2942
+ border-top: 1px solid var(--border-color);
2943
+ flex-shrink: 0;
2944
+ }
2945
+
2946
+ .terminal-project-picker {
2947
+ width: 100%;
2948
+ padding: 5px 8px;
2949
+ font-size: 12px;
2950
+ font-family: var(--font-mono);
2951
+ background: var(--bg-tertiary);
2952
+ color: var(--text-primary);
2953
+ border: 1px solid var(--border-color);
2954
+ border-radius: 4px;
2955
+ cursor: pointer;
2956
+ }
2957
+
2958
+ .terminal-new-session-btn {
2959
+ width: 100%;
2960
+ padding: 6px 8px;
2961
+ font-size: 12px;
2962
+ font-family: var(--font-mono);
2963
+ background: var(--accent);
2964
+ color: #fff;
2965
+ border: none;
2966
+ border-radius: 4px;
2967
+ cursor: pointer;
2968
+ }
2969
+
2970
+ .terminal-new-session-btn:hover:not(:disabled) {
2971
+ opacity: 0.85;
2972
+ }
2973
+
2974
+ .terminal-new-session-btn:disabled {
2975
+ opacity: 0.5;
2976
+ cursor: not-allowed;
2977
+ }
2978
+
2979
+ /* Right panel — terminal content */
2980
+ .terminal-panel {
2981
+ flex: 1;
2982
+ display: flex;
2983
+ flex-direction: column;
2984
+ min-width: 0;
2985
+ position: relative;
2986
+ }
2987
+
2988
+ .terminal-empty-state {
2989
+ flex: 1;
2990
+ display: flex;
2991
+ align-items: center;
2992
+ justify-content: center;
2993
+ color: var(--text-muted);
2994
+ font-size: 13px;
2995
+ font-family: var(--font-mono);
2996
+ }
2997
+
2763
2998
  .terminal-container {
2764
2999
  flex: 1;
2765
3000
  padding: 4px;
@@ -2780,6 +3015,7 @@ html, body {
2780
3015
  color: #1e1e2e;
2781
3016
  font-size: 13px;
2782
3017
  font-family: var(--font-mono);
3018
+ flex-shrink: 0;
2783
3019
  }
2784
3020
 
2785
3021
  .terminal-reconnect-btn {
@@ -2801,31 +3037,7 @@ html, body {
2801
3037
  color: var(--text-secondary);
2802
3038
  font-size: 13px;
2803
3039
  font-family: var(--font-mono);
2804
- }
2805
-
2806
- .terminal-overlay {
2807
- position: absolute;
2808
- inset: 0;
2809
- display: flex;
2810
- align-items: center;
2811
- justify-content: center;
2812
- background: rgba(0,0,0,0.6);
2813
- z-index: 10;
2814
- }
2815
-
2816
- .terminal-connect-btn {
2817
- padding: 12px 24px;
2818
- border: 1px solid var(--accent);
2819
- border-radius: 6px;
2820
- background: var(--accent);
2821
- color: #fff;
2822
- font-size: 14px;
2823
- font-family: var(--font-mono);
2824
- cursor: pointer;
2825
- }
2826
-
2827
- .terminal-connect-btn:hover {
2828
- opacity: 0.9;
3040
+ flex-shrink: 0;
2829
3041
  }
2830
3042
 
2831
3043
  /* Login Page */
@@ -3356,3 +3568,239 @@ html, body {
3356
3568
  font-size: 14px;
3357
3569
  padding: 12px 0;
3358
3570
  }
3571
+
3572
+ /* ===== Git Repo Modal ===== */
3573
+
3574
+ .project-selector-git-btn {
3575
+ color: var(--text-secondary);
3576
+ }
3577
+
3578
+ .project-selector-git-btn.connected {
3579
+ color: var(--accent);
3580
+ }
3581
+
3582
+ .project-selector-git-btn svg {
3583
+ display: block;
3584
+ }
3585
+
3586
+ .git-modal-overlay {
3587
+ position: fixed;
3588
+ top: 0;
3589
+ left: 0;
3590
+ right: 0;
3591
+ bottom: 0;
3592
+ background: rgba(0, 0, 0, 0.5);
3593
+ z-index: 1000;
3594
+ display: flex;
3595
+ align-items: center;
3596
+ justify-content: center;
3597
+ }
3598
+
3599
+ .git-modal {
3600
+ background: var(--bg-secondary);
3601
+ border: 1px solid var(--border-color);
3602
+ border-radius: 8px;
3603
+ width: 480px;
3604
+ max-width: 90vw;
3605
+ max-height: 80vh;
3606
+ overflow-y: auto;
3607
+ box-shadow: 0 8px 32px var(--panel-shadow);
3608
+ font-family: var(--font-mono);
3609
+ font-size: 13px;
3610
+ }
3611
+
3612
+ .git-modal-header {
3613
+ display: flex;
3614
+ justify-content: space-between;
3615
+ align-items: center;
3616
+ padding: 16px 20px 12px;
3617
+ border-bottom: 1px solid var(--border-color);
3618
+ }
3619
+
3620
+ .git-modal-header h3 {
3621
+ margin: 0;
3622
+ font-size: 14px;
3623
+ color: var(--text-primary);
3624
+ font-weight: 600;
3625
+ }
3626
+
3627
+ .git-modal-close {
3628
+ background: none;
3629
+ border: none;
3630
+ color: var(--text-secondary);
3631
+ cursor: pointer;
3632
+ font-size: 18px;
3633
+ padding: 0 4px;
3634
+ line-height: 1;
3635
+ }
3636
+
3637
+ .git-modal-close:hover {
3638
+ color: var(--text-primary);
3639
+ }
3640
+
3641
+ .git-modal-error {
3642
+ padding: 8px 20px;
3643
+ color: var(--error-color);
3644
+ font-size: 12px;
3645
+ background: rgba(255, 107, 107, 0.08);
3646
+ border-bottom: 1px solid var(--border-color);
3647
+ }
3648
+
3649
+ .git-modal-success {
3650
+ padding: 8px 20px;
3651
+ color: #69db7c;
3652
+ font-size: 12px;
3653
+ background: rgba(105, 219, 124, 0.08);
3654
+ border-bottom: 1px solid var(--border-color);
3655
+ }
3656
+
3657
+ .git-modal-tabs {
3658
+ display: flex;
3659
+ border-bottom: 1px solid var(--border-color);
3660
+ padding: 0 16px;
3661
+ }
3662
+
3663
+ .git-modal-tab {
3664
+ background: none;
3665
+ border: none;
3666
+ color: var(--text-secondary);
3667
+ cursor: pointer;
3668
+ font-family: var(--font-mono);
3669
+ font-size: 12px;
3670
+ padding: 10px 12px;
3671
+ border-bottom: 2px solid transparent;
3672
+ }
3673
+
3674
+ .git-modal-tab:hover {
3675
+ color: var(--text-primary);
3676
+ }
3677
+
3678
+ .git-modal-tab.active {
3679
+ color: var(--accent);
3680
+ border-bottom-color: var(--accent);
3681
+ }
3682
+
3683
+ .git-modal-body {
3684
+ padding: 16px 20px;
3685
+ }
3686
+
3687
+ .git-modal-loading {
3688
+ color: var(--text-muted);
3689
+ text-align: center;
3690
+ padding: 20px 0;
3691
+ }
3692
+
3693
+ .git-modal-info {
3694
+ color: var(--text-secondary);
3695
+ font-size: 12px;
3696
+ line-height: 1.5;
3697
+ margin-bottom: 12px;
3698
+ }
3699
+
3700
+ .git-status-row {
3701
+ display: flex;
3702
+ justify-content: space-between;
3703
+ padding: 6px 0;
3704
+ border-bottom: 1px solid var(--border-color);
3705
+ }
3706
+
3707
+ .git-status-label {
3708
+ color: var(--text-secondary);
3709
+ font-size: 12px;
3710
+ }
3711
+
3712
+ .git-status-value {
3713
+ color: var(--text-primary);
3714
+ font-size: 12px;
3715
+ }
3716
+
3717
+ .git-status-value.connected {
3718
+ color: #69db7c;
3719
+ }
3720
+
3721
+ .git-status-url {
3722
+ max-width: 240px;
3723
+ overflow: hidden;
3724
+ text-overflow: ellipsis;
3725
+ white-space: nowrap;
3726
+ }
3727
+
3728
+ .git-modal-label {
3729
+ display: block;
3730
+ color: var(--text-secondary);
3731
+ font-size: 11px;
3732
+ text-transform: uppercase;
3733
+ letter-spacing: 0.05em;
3734
+ margin-bottom: 6px;
3735
+ margin-top: 12px;
3736
+ }
3737
+
3738
+ .git-modal-select {
3739
+ width: 100%;
3740
+ padding: 8px 10px;
3741
+ background: var(--bg-tertiary);
3742
+ border: 1px solid var(--border-color);
3743
+ border-radius: 4px;
3744
+ color: var(--text-primary);
3745
+ font-family: var(--font-mono);
3746
+ font-size: 12px;
3747
+ }
3748
+
3749
+ .git-modal-input {
3750
+ width: 100%;
3751
+ padding: 8px 10px;
3752
+ background: var(--bg-tertiary);
3753
+ border: 1px solid var(--border-color);
3754
+ border-radius: 4px;
3755
+ color: var(--text-primary);
3756
+ font-family: var(--font-mono);
3757
+ font-size: 12px;
3758
+ box-sizing: border-box;
3759
+ }
3760
+
3761
+ .git-modal-input:focus {
3762
+ outline: none;
3763
+ border-color: var(--accent);
3764
+ }
3765
+
3766
+ .git-modal-btn {
3767
+ display: inline-block;
3768
+ padding: 8px 16px;
3769
+ border: 1px solid var(--border-color);
3770
+ border-radius: 4px;
3771
+ background: var(--bg-tertiary);
3772
+ color: var(--text-primary);
3773
+ font-family: var(--font-mono);
3774
+ font-size: 12px;
3775
+ cursor: pointer;
3776
+ margin-top: 12px;
3777
+ }
3778
+
3779
+ .git-modal-btn:hover {
3780
+ background: var(--tab-hover-bg);
3781
+ }
3782
+
3783
+ .git-modal-btn:disabled {
3784
+ opacity: 0.5;
3785
+ cursor: not-allowed;
3786
+ }
3787
+
3788
+ .git-modal-btn-primary {
3789
+ background: var(--accent);
3790
+ color: #fff;
3791
+ border-color: var(--accent);
3792
+ }
3793
+
3794
+ .git-modal-btn-primary:hover {
3795
+ opacity: 0.9;
3796
+ }
3797
+
3798
+ .git-modal-btn-danger {
3799
+ color: var(--error-color);
3800
+ border-color: var(--error-color);
3801
+ margin-top: 16px;
3802
+ }
3803
+
3804
+ .git-modal-btn-danger:hover {
3805
+ background: rgba(255, 107, 107, 0.1);
3806
+ }
@@ -0,0 +1 @@
1
+ ALTER TABLE `pipeline_state` ADD `stage_stats_json` text;
@@ -0,0 +1,4 @@
1
+ ALTER TABLE `projects` ADD `repo_url` text;--> statement-breakpoint
2
+ ALTER TABLE `projects` ADD `github_installation_id` text;--> statement-breakpoint
3
+ ALTER TABLE `projects` ADD `github_repo_full_name` text;--> statement-breakpoint
4
+ ALTER TABLE `projects` ADD `base_branch` text;
@@ -0,0 +1,17 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_sessions` (
3
+ `session_number` integer NOT NULL,
4
+ `started_at` text NOT NULL,
5
+ `ended_at` text,
6
+ `summary` text,
7
+ `nodes_touched` text,
8
+ `questions_resolved` integer DEFAULT 0 NOT NULL,
9
+ `body` text,
10
+ `project_id` text NOT NULL,
11
+ PRIMARY KEY(`session_number`, `project_id`)
12
+ );
13
+ --> statement-breakpoint
14
+ INSERT INTO `__new_sessions`("session_number", "started_at", "ended_at", "summary", "nodes_touched", "questions_resolved", "body", "project_id") SELECT "session_number", "started_at", "ended_at", "summary", "nodes_touched", "questions_resolved", "body", "project_id" FROM `sessions`;--> statement-breakpoint
15
+ DROP TABLE `sessions`;--> statement-breakpoint
16
+ ALTER TABLE `__new_sessions` RENAME TO `sessions`;--> statement-breakpoint
17
+ PRAGMA foreign_keys=ON;