@cluesmith/codev 1.4.0 → 1.4.2

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 (35) hide show
  1. package/bin/af.js +0 -0
  2. package/bin/codev.js +0 -0
  3. package/bin/consult.js +0 -0
  4. package/bin/generate-image.js +0 -0
  5. package/dist/agent-farm/servers/dashboard-server.js +487 -5
  6. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  7. package/dist/commands/adopt.d.ts.map +1 -1
  8. package/dist/commands/adopt.js +10 -0
  9. package/dist/commands/adopt.js.map +1 -1
  10. package/dist/commands/init.d.ts.map +1 -1
  11. package/dist/commands/init.js +8 -0
  12. package/dist/commands/init.js.map +1 -1
  13. package/package.json +1 -1
  14. package/skeleton/templates/projectlist-archive.md +21 -0
  15. package/skeleton/templates/projectlist.md +17 -0
  16. package/templates/dashboard/css/activity.css +151 -0
  17. package/templates/dashboard/css/dialogs.css +149 -0
  18. package/templates/dashboard/css/files.css +530 -0
  19. package/templates/dashboard/css/layout.css +124 -0
  20. package/templates/dashboard/css/projects.css +501 -0
  21. package/templates/dashboard/css/statusbar.css +23 -0
  22. package/templates/dashboard/css/tabs.css +314 -0
  23. package/templates/dashboard/css/utilities.css +50 -0
  24. package/templates/dashboard/css/variables.css +45 -0
  25. package/templates/dashboard/index.html +158 -0
  26. package/templates/dashboard/js/activity.js +238 -0
  27. package/templates/dashboard/js/dialogs.js +328 -0
  28. package/templates/dashboard/js/files.js +436 -0
  29. package/templates/dashboard/js/main.js +487 -0
  30. package/templates/dashboard/js/projects.js +544 -0
  31. package/templates/dashboard/js/state.js +91 -0
  32. package/templates/dashboard/js/tabs.js +500 -0
  33. package/templates/dashboard/js/utils.js +57 -0
  34. package/templates/dashboard-split.html +1186 -171
  35. package/templates/open.html +7 -2
@@ -0,0 +1,124 @@
1
+ /* Dashboard Layout - Header, Main, Panes */
2
+
3
+ /* Header */
4
+ .header {
5
+ display: flex;
6
+ justify-content: space-between;
7
+ align-items: center;
8
+ padding: 12px 16px;
9
+ background: var(--bg-secondary);
10
+ border-bottom: 1px solid var(--border);
11
+ }
12
+
13
+ .header h1 {
14
+ font-size: 16px;
15
+ font-weight: 600;
16
+ }
17
+
18
+ .header-actions {
19
+ display: flex;
20
+ gap: 8px;
21
+ }
22
+
23
+ .btn {
24
+ padding: 6px 12px;
25
+ border-radius: 4px;
26
+ border: 1px solid var(--border);
27
+ background: var(--bg-tertiary);
28
+ color: var(--text-secondary);
29
+ cursor: pointer;
30
+ font-size: 13px;
31
+ }
32
+
33
+ .btn:hover {
34
+ background: var(--tab-active);
35
+ }
36
+
37
+ .btn-danger {
38
+ border-color: #ef4444;
39
+ color: #ef4444;
40
+ }
41
+
42
+ .btn-danger:hover {
43
+ background: rgba(239, 68, 68, 0.1);
44
+ }
45
+
46
+ /* Main content area */
47
+ .main {
48
+ display: flex;
49
+ flex: 1;
50
+ overflow: hidden;
51
+ }
52
+
53
+ /* Left pane - Architect */
54
+ .left-pane {
55
+ width: 50%;
56
+ min-width: 20%;
57
+ max-width: 80%;
58
+ resize: horizontal;
59
+ overflow: auto;
60
+ border-right: 1px solid var(--border);
61
+ display: flex;
62
+ flex-direction: column;
63
+ }
64
+
65
+ .pane-header {
66
+ padding: 8px 12px;
67
+ background: var(--bg-secondary);
68
+ border-bottom: 1px solid var(--border);
69
+ font-size: 12px;
70
+ color: var(--text-muted);
71
+ text-transform: uppercase;
72
+ letter-spacing: 0.5px;
73
+ display: flex;
74
+ align-items: center;
75
+ gap: 6px;
76
+ }
77
+
78
+ .pane-header .status-dot {
79
+ width: 8px;
80
+ height: 8px;
81
+ border-radius: 50%;
82
+ background: var(--status-active);
83
+ }
84
+
85
+ .pane-header .status-dot.inactive {
86
+ background: var(--text-muted);
87
+ }
88
+
89
+ #architect-content {
90
+ flex: 1;
91
+ display: flex;
92
+ flex-direction: column;
93
+ }
94
+
95
+ .left-pane iframe {
96
+ flex: 1;
97
+ width: 100%;
98
+ border: none;
99
+ background: #000;
100
+ }
101
+
102
+ .architect-placeholder {
103
+ flex: 1;
104
+ display: flex;
105
+ flex-direction: column;
106
+ align-items: center;
107
+ justify-content: center;
108
+ color: var(--text-muted);
109
+ gap: 16px;
110
+ }
111
+
112
+ .architect-placeholder code {
113
+ background: var(--bg-tertiary);
114
+ padding: 4px 8px;
115
+ border-radius: 4px;
116
+ font-size: 13px;
117
+ }
118
+
119
+ /* Right pane - Tabs */
120
+ .right-pane {
121
+ width: 50%;
122
+ display: flex;
123
+ flex-direction: column;
124
+ }
@@ -0,0 +1,501 @@
1
+ /* Projects Tab Styles (Spec 0045) */
2
+
3
+ .projects-container {
4
+ flex: 1;
5
+ overflow-y: auto;
6
+ padding: 16px;
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 16px;
10
+ }
11
+
12
+ /* Welcome Screen */
13
+ .projects-welcome {
14
+ max-width: 600px;
15
+ margin: 40px auto;
16
+ text-align: center;
17
+ }
18
+
19
+ .projects-welcome h2 {
20
+ font-size: 24px;
21
+ margin-bottom: 16px;
22
+ color: var(--text-primary);
23
+ }
24
+
25
+ .projects-welcome p {
26
+ color: var(--text-secondary);
27
+ line-height: 1.6;
28
+ margin-bottom: 16px;
29
+ }
30
+
31
+ .projects-welcome ol {
32
+ text-align: left;
33
+ margin: 24px 0;
34
+ padding-left: 24px;
35
+ }
36
+
37
+ .projects-welcome li {
38
+ margin-bottom: 8px;
39
+ color: var(--text-secondary);
40
+ }
41
+
42
+ .projects-welcome li strong {
43
+ color: var(--text-primary);
44
+ }
45
+
46
+ .projects-welcome .quick-tip {
47
+ margin-top: 24px;
48
+ padding: 12px;
49
+ background: var(--bg-tertiary);
50
+ border-radius: 6px;
51
+ border-left: 3px solid var(--accent);
52
+ color: var(--text-secondary);
53
+ }
54
+
55
+ .projects-welcome hr {
56
+ border: none;
57
+ border-top: 1px solid var(--border);
58
+ margin: 24px 0;
59
+ }
60
+
61
+ /* Status Summary */
62
+ .status-summary {
63
+ background: var(--bg-secondary);
64
+ border: 1px solid var(--border);
65
+ border-radius: 6px;
66
+ padding: 12px 16px;
67
+ }
68
+
69
+ .status-summary-header {
70
+ display: flex;
71
+ justify-content: space-between;
72
+ align-items: center;
73
+ margin-bottom: 8px;
74
+ }
75
+
76
+ .status-summary-header span {
77
+ font-size: 11px;
78
+ text-transform: uppercase;
79
+ letter-spacing: 0.5px;
80
+ color: var(--text-muted);
81
+ }
82
+
83
+ .status-summary-header button {
84
+ padding: 4px 8px;
85
+ border-radius: 4px;
86
+ border: 1px solid var(--border);
87
+ background: var(--bg-tertiary);
88
+ color: var(--text-secondary);
89
+ cursor: pointer;
90
+ font-size: 14px;
91
+ }
92
+
93
+ .status-summary-header button:hover {
94
+ background: var(--tab-hover);
95
+ }
96
+
97
+ .status-summary .active-projects {
98
+ margin-bottom: 8px;
99
+ }
100
+
101
+ .status-summary .active-count {
102
+ font-size: 14px;
103
+ color: var(--text-primary);
104
+ }
105
+
106
+ .status-summary .active-list {
107
+ margin-top: 4px;
108
+ padding-left: 16px;
109
+ font-size: 13px;
110
+ color: var(--text-secondary);
111
+ }
112
+
113
+ .status-summary .active-list li {
114
+ margin: 2px 0;
115
+ }
116
+
117
+ .status-summary .completed {
118
+ font-size: 13px;
119
+ color: var(--text-muted);
120
+ }
121
+
122
+ /* Kanban Grid */
123
+ .kanban-grid {
124
+ width: 100%;
125
+ border-collapse: collapse;
126
+ font-size: 13px;
127
+ }
128
+
129
+ .kanban-grid th,
130
+ .kanban-grid td {
131
+ padding: 8px 6px;
132
+ text-align: center;
133
+ border-bottom: 1px solid var(--border);
134
+ }
135
+
136
+ .kanban-grid th {
137
+ background: var(--bg-secondary);
138
+ font-size: 10px;
139
+ text-transform: uppercase;
140
+ letter-spacing: 0.5px;
141
+ color: var(--text-muted);
142
+ position: sticky;
143
+ top: 0;
144
+ z-index: 1;
145
+ }
146
+
147
+ .kanban-grid th:first-child,
148
+ .kanban-grid td:first-child {
149
+ text-align: left;
150
+ padding-left: 12px;
151
+ width: 40%;
152
+ }
153
+
154
+ .kanban-grid th:not(:first-child),
155
+ .kanban-grid td:not(:first-child) {
156
+ width: 8%;
157
+ }
158
+
159
+ .kanban-grid tbody tr {
160
+ cursor: default;
161
+ transition: background 0.15s;
162
+ }
163
+
164
+ .kanban-grid tbody tr:hover {
165
+ background: var(--bg-secondary);
166
+ }
167
+
168
+ .kanban-grid tbody tr:focus {
169
+ outline: 2px solid var(--accent);
170
+ outline-offset: -2px;
171
+ }
172
+
173
+ .kanban-grid .project-cell {
174
+ display: flex;
175
+ align-items: center;
176
+ gap: 8px;
177
+ }
178
+
179
+ .kanban-grid .project-id {
180
+ font-family: monospace;
181
+ color: var(--text-muted);
182
+ }
183
+
184
+ .kanban-grid .project-title {
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ white-space: nowrap;
188
+ }
189
+
190
+ .kanban-grid .project-cell.clickable {
191
+ cursor: pointer;
192
+ }
193
+
194
+ .kanban-grid .project-cell.clickable:hover .project-title {
195
+ text-decoration: underline;
196
+ color: var(--accent);
197
+ }
198
+
199
+ .kanban-grid .tick-badge {
200
+ font-size: 10px;
201
+ padding: 1px 4px;
202
+ background: var(--bg-tertiary);
203
+ border-radius: 3px;
204
+ color: var(--text-muted);
205
+ }
206
+
207
+ /* Stage cell styling */
208
+ .stage-cell {
209
+ font-size: 12px;
210
+ position: relative;
211
+ }
212
+
213
+ .stage-cell .checkmark {
214
+ color: #22c55e;
215
+ font-weight: bold;
216
+ }
217
+
218
+ .stage-cell .current-indicator {
219
+ display: inline-block;
220
+ width: 12px;
221
+ height: 12px;
222
+ border: 2px solid #f97316;
223
+ border-radius: 50%;
224
+ }
225
+
226
+ .stage-cell .celebration {
227
+ font-size: 16px;
228
+ }
229
+
230
+ .stage-cell a {
231
+ color: var(--text-primary);
232
+ text-decoration: underline;
233
+ }
234
+
235
+ /* Arrow between columns */
236
+ .kanban-grid th:not(:first-child):not(:last-child)::after,
237
+ .kanban-grid td.stage-cell:not(:last-child)::after {
238
+ content: '→';
239
+ position: absolute;
240
+ right: -8px;
241
+ color: var(--text-muted);
242
+ font-size: 10px;
243
+ }
244
+
245
+ /* Projects info header */
246
+ .projects-info {
247
+ background: var(--bg-secondary);
248
+ border: 1px solid var(--border);
249
+ border-radius: 6px;
250
+ padding: 12px 16px;
251
+ margin-bottom: 12px;
252
+ }
253
+
254
+ .projects-info p {
255
+ color: var(--text-secondary);
256
+ font-size: 13px;
257
+ margin: 0 0 8px 0;
258
+ }
259
+
260
+ .projects-info p:last-child {
261
+ margin-bottom: 0;
262
+ }
263
+
264
+ .projects-info strong {
265
+ color: var(--text-primary);
266
+ }
267
+
268
+ .projects-info a {
269
+ color: var(--accent);
270
+ text-decoration: none;
271
+ }
272
+
273
+ .projects-info a:hover {
274
+ text-decoration: underline;
275
+ }
276
+
277
+ /* Project details row */
278
+ .project-details-row td {
279
+ padding: 0 !important;
280
+ border-bottom: 1px solid var(--border);
281
+ }
282
+
283
+ .project-details-content {
284
+ padding: 16px;
285
+ background: var(--bg-secondary);
286
+ }
287
+
288
+ .project-details-content h3 {
289
+ font-size: 16px;
290
+ margin-bottom: 8px;
291
+ color: var(--text-primary);
292
+ }
293
+
294
+ .project-details-content p {
295
+ margin-bottom: 8px;
296
+ color: var(--text-secondary);
297
+ font-size: 13px;
298
+ }
299
+
300
+ .project-details-content .notes {
301
+ font-style: italic;
302
+ color: var(--text-muted);
303
+ }
304
+
305
+ .project-details-links {
306
+ display: flex;
307
+ gap: 8px;
308
+ margin-top: 12px;
309
+ }
310
+
311
+ .project-details-links a {
312
+ padding: 4px 10px;
313
+ background: var(--bg-tertiary);
314
+ border: 1px solid var(--border);
315
+ border-radius: 4px;
316
+ color: var(--text-secondary);
317
+ text-decoration: none;
318
+ font-size: 12px;
319
+ }
320
+
321
+ .project-details-links a:hover {
322
+ background: var(--tab-hover);
323
+ color: var(--text-primary);
324
+ }
325
+
326
+ .project-dependencies {
327
+ margin-top: 8px;
328
+ font-size: 12px;
329
+ color: var(--text-muted);
330
+ }
331
+
332
+ .project-ticks {
333
+ margin-top: 8px;
334
+ font-size: 12px;
335
+ display: flex;
336
+ align-items: center;
337
+ gap: 6px;
338
+ flex-wrap: wrap;
339
+ }
340
+
341
+ .project-ticks .tick-badge {
342
+ background: #238636;
343
+ color: white;
344
+ padding: 2px 6px;
345
+ border-radius: 3px;
346
+ font-size: 11px;
347
+ }
348
+
349
+ /* Collapsible project sections */
350
+ .project-section {
351
+ border: 1px solid var(--border);
352
+ border-radius: 6px;
353
+ background: var(--bg-secondary);
354
+ margin-bottom: 12px;
355
+ }
356
+
357
+ .project-section summary {
358
+ padding: 12px 16px;
359
+ cursor: pointer;
360
+ font-size: 14px;
361
+ font-weight: 500;
362
+ color: var(--text-primary);
363
+ display: flex;
364
+ align-items: center;
365
+ gap: 8px;
366
+ user-select: none;
367
+ }
368
+
369
+ .project-section summary:hover {
370
+ background: var(--bg-tertiary);
371
+ }
372
+
373
+ .project-section summary::marker {
374
+ content: '';
375
+ }
376
+
377
+ .project-section summary::before {
378
+ content: '▶';
379
+ font-size: 10px;
380
+ transition: transform 0.2s;
381
+ color: var(--text-muted);
382
+ }
383
+
384
+ .project-section[open] summary::before {
385
+ transform: rotate(90deg);
386
+ }
387
+
388
+ .project-section .section-count {
389
+ font-size: 12px;
390
+ color: var(--text-muted);
391
+ font-weight: normal;
392
+ }
393
+
394
+ .project-section .kanban-grid {
395
+ margin: 0;
396
+ border-radius: 0 0 6px 6px;
397
+ }
398
+
399
+ /* Terminal projects section */
400
+ .terminal-projects {
401
+ margin-top: 16px;
402
+ border: 1px solid var(--border);
403
+ border-radius: 6px;
404
+ background: var(--bg-secondary);
405
+ }
406
+
407
+ .terminal-projects summary {
408
+ padding: 12px 16px;
409
+ cursor: pointer;
410
+ font-size: 13px;
411
+ color: var(--text-muted);
412
+ display: flex;
413
+ align-items: center;
414
+ gap: 8px;
415
+ }
416
+
417
+ .terminal-projects summary:hover {
418
+ background: var(--bg-tertiary);
419
+ }
420
+
421
+ .terminal-projects summary::marker {
422
+ content: '';
423
+ }
424
+
425
+ .terminal-projects summary::before {
426
+ content: '▶';
427
+ font-size: 10px;
428
+ transition: transform 0.2s;
429
+ color: var(--text-muted);
430
+ }
431
+
432
+ .terminal-projects[open] summary::before {
433
+ transform: rotate(90deg);
434
+ }
435
+
436
+ .terminal-projects ul {
437
+ list-style: none;
438
+ padding: 0 16px 16px;
439
+ }
440
+
441
+ .terminal-projects li {
442
+ padding: 8px 0;
443
+ border-bottom: 1px solid var(--border);
444
+ display: flex;
445
+ gap: 8px;
446
+ align-items: center;
447
+ }
448
+
449
+ .terminal-projects li:last-child {
450
+ border-bottom: none;
451
+ }
452
+
453
+ .terminal-projects .project-abandoned {
454
+ color: var(--project-abandoned);
455
+ text-decoration: line-through;
456
+ }
457
+
458
+ .terminal-projects .project-on-hold {
459
+ color: var(--project-on-hold);
460
+ font-style: italic;
461
+ }
462
+
463
+ /* Error banner */
464
+ .projects-error {
465
+ padding: 16px;
466
+ background: rgba(239, 68, 68, 0.1);
467
+ border: 1px solid var(--status-error);
468
+ border-radius: 6px;
469
+ display: flex;
470
+ align-items: center;
471
+ gap: 12px;
472
+ }
473
+
474
+ .projects-error-message {
475
+ flex: 1;
476
+ color: var(--text-secondary);
477
+ }
478
+
479
+ .projects-error button {
480
+ padding: 6px 12px;
481
+ background: var(--bg-tertiary);
482
+ border: 1px solid var(--border);
483
+ border-radius: 4px;
484
+ color: var(--text-secondary);
485
+ cursor: pointer;
486
+ }
487
+
488
+ .projects-error button:hover {
489
+ background: var(--tab-hover);
490
+ }
491
+
492
+ /* Stage link styling */
493
+ .stage-link {
494
+ text-decoration: none;
495
+ color: inherit;
496
+ cursor: pointer;
497
+ }
498
+
499
+ .stage-link:hover .stage-indicator {
500
+ transform: scale(1.2);
501
+ }
@@ -0,0 +1,23 @@
1
+ /* Status Bar */
2
+
3
+ .status-bar {
4
+ padding: 8px 16px;
5
+ background: var(--bg-secondary);
6
+ border-top: 1px solid var(--border);
7
+ font-size: 12px;
8
+ color: var(--text-muted);
9
+ display: flex;
10
+ gap: 16px;
11
+ }
12
+
13
+ .status-item {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 6px;
17
+ }
18
+
19
+ .status-item .dot {
20
+ width: 6px;
21
+ height: 6px;
22
+ border-radius: 50%;
23
+ }