@bakapiano/ccsm 0.6.0 → 0.8.4

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 (68) hide show
  1. package/CLAUDE.md +377 -123
  2. package/README.md +172 -38
  3. package/bin/ccsm.js +194 -0
  4. package/lib/favorites.js +23 -45
  5. package/lib/jsonStore.js +60 -0
  6. package/lib/labels.js +21 -41
  7. package/lib/webTerminal.js +173 -0
  8. package/package.json +11 -3
  9. package/public/css/base.css +82 -0
  10. package/public/css/cards.css +149 -0
  11. package/public/css/feedback.css +219 -0
  12. package/public/css/forms.css +282 -0
  13. package/public/css/layout.css +107 -0
  14. package/public/css/modal.css +169 -0
  15. package/public/css/responsive.css +10 -0
  16. package/public/css/sidebar.css +165 -0
  17. package/public/css/tables.css +266 -0
  18. package/public/css/terminals.css +112 -0
  19. package/public/css/tokens.css +63 -0
  20. package/public/css/wco.css +70 -0
  21. package/public/css/widgets.css +204 -0
  22. package/public/favicon.svg +1 -1
  23. package/public/index.html +52 -490
  24. package/public/js/actions.js +87 -0
  25. package/public/js/api.js +103 -0
  26. package/public/js/backend.js +28 -0
  27. package/public/js/components/App.js +45 -0
  28. package/public/js/components/Card.js +24 -0
  29. package/public/js/components/DialogHost.js +45 -0
  30. package/public/js/components/Fab.js +11 -0
  31. package/public/js/components/FavoritesTable.js +81 -0
  32. package/public/js/components/Footer.js +12 -0
  33. package/public/js/components/NewSessionModal.js +142 -0
  34. package/public/js/components/OfflineBanner.js +52 -0
  35. package/public/js/components/PageHead.js +33 -0
  36. package/public/js/components/Pagination.js +27 -0
  37. package/public/js/components/ProgressList.js +32 -0
  38. package/public/js/components/RecentTable.js +68 -0
  39. package/public/js/components/RepoPicker.js +40 -0
  40. package/public/js/components/ReposEditor.js +74 -0
  41. package/public/js/components/ServerStatus.js +18 -0
  42. package/public/js/components/SessionsTable.js +71 -0
  43. package/public/js/components/Sidebar.js +52 -0
  44. package/public/js/components/SnapshotPanel.js +77 -0
  45. package/public/js/components/TerminalView.js +108 -0
  46. package/public/js/components/TitleCell.js +40 -0
  47. package/public/js/components/Toast.js +8 -0
  48. package/public/js/components/WorkspacePicker.js +19 -0
  49. package/public/js/components/WorkspacesGrid.js +41 -0
  50. package/public/js/dialog.js +59 -0
  51. package/public/js/html.js +6 -0
  52. package/public/js/icons.js +114 -0
  53. package/public/js/main.js +81 -0
  54. package/public/js/pages/AboutPage.js +85 -0
  55. package/public/js/pages/ConfigurePage.js +194 -0
  56. package/public/js/pages/LaunchPage.js +117 -0
  57. package/public/js/pages/SessionsPage.js +47 -0
  58. package/public/js/pages/TerminalsPage.js +74 -0
  59. package/public/js/state.js +87 -0
  60. package/public/js/streaming.js +96 -0
  61. package/public/js/toast.js +14 -0
  62. package/public/js/util.js +24 -0
  63. package/public/manifest.webmanifest +14 -0
  64. package/scripts/install.js +132 -0
  65. package/scripts/uninstall.js +56 -0
  66. package/server.js +286 -30
  67. package/public/app.js +0 -1353
  68. package/public/styles.css +0 -1639
@@ -0,0 +1,204 @@
1
+ /* Workspace cards · clone-progress list · pagination · snapshot preview */
2
+
3
+ .workspace-grid {
4
+ display: grid;
5
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
6
+ gap: var(--s-3);
7
+ }
8
+ .workspace-card {
9
+ padding: var(--s-4);
10
+ border: 1px solid var(--border);
11
+ background: var(--bg-elev);
12
+ border-radius: var(--r-md);
13
+ transition: border-color .12s, box-shadow .12s;
14
+ }
15
+ .workspace-card:hover {
16
+ border-color: var(--border-strong);
17
+ box-shadow: var(--shadow);
18
+ }
19
+ .workspace-card.in-use {
20
+ background: var(--bg);
21
+ border-color: var(--ink-faint);
22
+ }
23
+ .workspace-card .ws-head {
24
+ display: flex;
25
+ align-items: baseline;
26
+ justify-content: space-between;
27
+ gap: var(--s-2);
28
+ margin-bottom: 4px;
29
+ }
30
+ .workspace-card .ws-name {
31
+ font-size: 14.5px;
32
+ font-weight: 600;
33
+ letter-spacing: -0.01em;
34
+ color: var(--ink);
35
+ }
36
+ .workspace-card .ws-tag {
37
+ font-family: var(--mono);
38
+ font-size: 10px;
39
+ text-transform: uppercase;
40
+ letter-spacing: 0.08em;
41
+ padding: 2px 7px;
42
+ border-radius: 4px;
43
+ background: var(--bg);
44
+ color: var(--ink-muted);
45
+ border: 1px solid var(--border-soft);
46
+ }
47
+ .workspace-card.in-use .ws-tag {
48
+ background: var(--bg-elev);
49
+ color: var(--ink-mid);
50
+ border-color: var(--ink-faint);
51
+ }
52
+ .workspace-card .ws-path {
53
+ font-family: var(--mono);
54
+ font-size: 11px;
55
+ color: var(--ink-muted);
56
+ word-break: break-all;
57
+ margin-bottom: var(--s-3);
58
+ }
59
+ .workspace-card .ws-repos {
60
+ display: flex;
61
+ flex-wrap: wrap;
62
+ gap: 4px;
63
+ }
64
+ .workspace-card .ws-repo {
65
+ font-family: var(--mono);
66
+ font-size: 10.5px;
67
+ padding: 2px 7px;
68
+ border-radius: 4px;
69
+ background: var(--bg);
70
+ color: var(--ink-muted);
71
+ border: 1px solid var(--border-soft);
72
+ }
73
+ .workspace-card .ws-repo.cloned {
74
+ color: var(--green);
75
+ background: rgba(74, 138, 74, 0.06);
76
+ border-color: rgba(74, 138, 74, 0.25);
77
+ }
78
+
79
+ /* Clone progress — one row per repo, NDJSON-driven by /api/sessions/new */
80
+ .progress-list {
81
+ display: flex;
82
+ flex-direction: column;
83
+ gap: var(--s-2);
84
+ margin-top: var(--s-3);
85
+ }
86
+ .progress-list:empty { display: none; }
87
+
88
+ .progress-item {
89
+ border: 1px solid var(--border);
90
+ background: var(--bg);
91
+ border-radius: var(--r-sm);
92
+ padding: var(--s-3) var(--s-4);
93
+ }
94
+ .progress-item .head {
95
+ display: grid;
96
+ grid-template-columns: 1fr auto auto;
97
+ align-items: baseline;
98
+ gap: var(--s-3);
99
+ margin-bottom: var(--s-2);
100
+ }
101
+ .progress-item .name {
102
+ font-family: var(--body);
103
+ font-size: 12.5px;
104
+ font-weight: 600;
105
+ color: var(--ink);
106
+ }
107
+ .progress-item .phase {
108
+ font-family: var(--mono);
109
+ font-size: 10.5px;
110
+ color: var(--ink-muted);
111
+ letter-spacing: 0.04em;
112
+ }
113
+ .progress-item .pct {
114
+ font-family: var(--mono);
115
+ font-size: 11.5px;
116
+ color: var(--ink-mid);
117
+ font-variant-numeric: tabular-nums;
118
+ }
119
+ .progress-bar {
120
+ height: 3px;
121
+ background: var(--border);
122
+ position: relative;
123
+ overflow: hidden;
124
+ border-radius: 2px;
125
+ }
126
+ .progress-bar .fill {
127
+ height: 100%;
128
+ width: 0;
129
+ background: var(--ink);
130
+ transition: width .2s ease;
131
+ border-radius: 2px;
132
+ }
133
+ .progress-bar .fill.indeterminate {
134
+ width: 35% !important;
135
+ animation: indeterm 1.4s ease-in-out infinite;
136
+ }
137
+ @keyframes indeterm {
138
+ from { transform: translateX(-110%); }
139
+ to { transform: translateX(330%); }
140
+ }
141
+ .progress-item.ok .fill { background: var(--green); }
142
+ .progress-item.error .fill { background: var(--red); }
143
+ .progress-item .detail {
144
+ margin-top: 4px;
145
+ font-family: var(--mono);
146
+ font-size: 10.5px;
147
+ color: var(--ink-muted);
148
+ min-height: 12px;
149
+ }
150
+
151
+ /* Pagination row — sits below table inside .card-body-flush card */
152
+ .pagination {
153
+ display: flex;
154
+ align-items: center;
155
+ gap: var(--s-3);
156
+ padding: var(--s-3) var(--s-6);
157
+ border-top: 1px solid var(--border-soft);
158
+ background: var(--bg);
159
+ font-size: 12.5px;
160
+ color: var(--ink-mid);
161
+ flex-wrap: wrap;
162
+ }
163
+ .pagination-info {
164
+ flex: 1;
165
+ text-align: center;
166
+ font-family: var(--mono);
167
+ font-size: 11.5px;
168
+ color: var(--ink-muted);
169
+ }
170
+ .pagination-info strong {
171
+ color: var(--ink);
172
+ font-weight: 600;
173
+ }
174
+ .pagination select {
175
+ font-size: 11.5px;
176
+ padding: 4px 24px 4px 8px;
177
+ }
178
+
179
+ /* Snapshot raw-text preview (collapsible <details>) */
180
+ .snapshot-detail { margin-top: var(--s-4); }
181
+ .snapshot-detail summary {
182
+ cursor: pointer;
183
+ font-size: 12.5px;
184
+ color: var(--ink-mid);
185
+ padding: var(--s-2) 0;
186
+ user-select: none;
187
+ font-weight: 500;
188
+ }
189
+ .snapshot-detail summary::marker { color: var(--ink-mid); }
190
+ .snapshot-detail summary:hover { color: var(--ink); }
191
+ .preview {
192
+ font-family: var(--mono);
193
+ font-size: 11.5px;
194
+ color: var(--ink-mid);
195
+ background: var(--bg);
196
+ border: 1px solid var(--border);
197
+ border-radius: var(--r-sm);
198
+ padding: var(--s-3);
199
+ margin-top: var(--s-2);
200
+ max-height: 280px;
201
+ overflow: auto;
202
+ white-space: pre;
203
+ line-height: 1.55;
204
+ }
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
2
  <!-- terminal window body -->
3
- <rect x="2" y="4" width="28" height="24" rx="3" fill="#c45f3f"/>
3
+ <rect x="2" y="4" width="28" height="24" rx="3" fill="#1a1815"/>
4
4
  <!-- title bar divider -->
5
5
  <line x1="2" y1="10" x2="30" y2="10" stroke="#faf9f5" stroke-width="0.6" opacity="0.45"/>
6
6
  <!-- traffic-light dots -->