stakeout-cli 0.1.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 (56) hide show
  1. package/LICENSE +131 -0
  2. package/README.md +152 -0
  3. package/dist/commands/chat.d.ts +5 -0
  4. package/dist/commands/chat.js +162 -0
  5. package/dist/commands/clear.d.ts +7 -0
  6. package/dist/commands/clear.js +89 -0
  7. package/dist/commands/config.d.ts +10 -0
  8. package/dist/commands/config.js +64 -0
  9. package/dist/commands/dashboard.d.ts +5 -0
  10. package/dist/commands/dashboard.js +9 -0
  11. package/dist/commands/digest.d.ts +6 -0
  12. package/dist/commands/digest.js +113 -0
  13. package/dist/commands/export.d.ts +8 -0
  14. package/dist/commands/export.js +118 -0
  15. package/dist/commands/hook.d.ts +6 -0
  16. package/dist/commands/hook.js +57 -0
  17. package/dist/commands/init.d.ts +6 -0
  18. package/dist/commands/init.js +70 -0
  19. package/dist/commands/log.d.ts +9 -0
  20. package/dist/commands/log.js +103 -0
  21. package/dist/commands/note.d.ts +9 -0
  22. package/dist/commands/note.js +48 -0
  23. package/dist/commands/record.d.ts +6 -0
  24. package/dist/commands/record.js +106 -0
  25. package/dist/commands/repo.d.ts +7 -0
  26. package/dist/commands/repo.js +60 -0
  27. package/dist/commands/search.d.ts +5 -0
  28. package/dist/commands/search.js +69 -0
  29. package/dist/commands/stats.d.ts +1 -0
  30. package/dist/commands/stats.js +99 -0
  31. package/dist/commands/tag.d.ts +8 -0
  32. package/dist/commands/tag.js +61 -0
  33. package/dist/commands/tui.d.ts +1 -0
  34. package/dist/commands/tui.js +5 -0
  35. package/dist/commands/watch.d.ts +6 -0
  36. package/dist/commands/watch.js +101 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +195 -0
  39. package/dist/lib/config.d.ts +5 -0
  40. package/dist/lib/config.js +51 -0
  41. package/dist/lib/database.d.ts +31 -0
  42. package/dist/lib/database.js +222 -0
  43. package/dist/lib/diff.d.ts +3 -0
  44. package/dist/lib/diff.js +118 -0
  45. package/dist/lib/summarizer.d.ts +2 -0
  46. package/dist/lib/summarizer.js +90 -0
  47. package/dist/tui/App.d.ts +1 -0
  48. package/dist/tui/App.js +125 -0
  49. package/dist/types/index.d.ts +38 -0
  50. package/dist/types/index.js +1 -0
  51. package/dist/web/public/app.js +387 -0
  52. package/dist/web/public/index.html +131 -0
  53. package/dist/web/public/styles.css +571 -0
  54. package/dist/web/server.d.ts +1 -0
  55. package/dist/web/server.js +402 -0
  56. package/package.json +69 -0
@@ -0,0 +1,571 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ --bg-primary: #0a0a0f;
9
+ --bg-secondary: #12121a;
10
+ --bg-tertiary: #1a1a25;
11
+ --accent: #00ff88;
12
+ --accent-dim: #00cc6a;
13
+ --text-primary: #e0e0e0;
14
+ --text-secondary: #888;
15
+ --text-muted: #555;
16
+ --border: #2a2a35;
17
+ --danger: #ff4444;
18
+ --warning: #ffaa00;
19
+ }
20
+
21
+ body {
22
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
23
+ background: var(--bg-primary);
24
+ color: var(--text-primary);
25
+ min-height: 100vh;
26
+ }
27
+
28
+ .container {
29
+ max-width: 1200px;
30
+ margin: 0 auto;
31
+ padding: 20px;
32
+ }
33
+
34
+ header {
35
+ display: flex;
36
+ justify-content: space-between;
37
+ align-items: center;
38
+ padding: 20px 0;
39
+ border-bottom: 1px solid var(--border);
40
+ margin-bottom: 30px;
41
+ }
42
+
43
+ .logo {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 12px;
47
+ }
48
+
49
+ .logo-icon {
50
+ font-size: 28px;
51
+ }
52
+
53
+ .logo h1 {
54
+ font-size: 24px;
55
+ font-weight: 700;
56
+ letter-spacing: 4px;
57
+ color: var(--accent);
58
+ }
59
+
60
+ .tagline {
61
+ font-size: 12px;
62
+ color: var(--text-secondary);
63
+ text-transform: uppercase;
64
+ letter-spacing: 2px;
65
+ }
66
+
67
+ .status {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 8px;
71
+ padding: 8px 16px;
72
+ background: var(--bg-secondary);
73
+ border-radius: 20px;
74
+ border: 1px solid var(--border);
75
+ }
76
+
77
+ .status-dot {
78
+ width: 8px;
79
+ height: 8px;
80
+ background: var(--accent);
81
+ border-radius: 50%;
82
+ animation: pulse 2s infinite;
83
+ }
84
+
85
+ @keyframes pulse {
86
+ 0%, 100% { opacity: 1; }
87
+ 50% { opacity: 0.4; }
88
+ }
89
+
90
+ #status-text {
91
+ font-size: 11px;
92
+ letter-spacing: 2px;
93
+ color: var(--text-secondary);
94
+ }
95
+
96
+ .stats-bar {
97
+ display: grid;
98
+ grid-template-columns: repeat(4, 1fr);
99
+ gap: 20px;
100
+ margin-bottom: 30px;
101
+ }
102
+
103
+ .stat {
104
+ background: var(--bg-secondary);
105
+ border: 1px solid var(--border);
106
+ border-radius: 8px;
107
+ padding: 20px;
108
+ text-align: center;
109
+ }
110
+
111
+ .stat-value {
112
+ display: block;
113
+ font-size: 32px;
114
+ font-weight: 700;
115
+ color: var(--accent);
116
+ margin-bottom: 8px;
117
+ }
118
+
119
+ .stat-label {
120
+ font-size: 11px;
121
+ color: var(--text-secondary);
122
+ text-transform: uppercase;
123
+ letter-spacing: 1px;
124
+ }
125
+
126
+ .chart-stat {
127
+ display: flex;
128
+ flex-direction: column;
129
+ align-items: center;
130
+ justify-content: center;
131
+ }
132
+
133
+ .chart-stat canvas {
134
+ margin-bottom: 8px;
135
+ }
136
+
137
+ .actions {
138
+ display: flex;
139
+ gap: 12px;
140
+ margin-bottom: 30px;
141
+ }
142
+
143
+ .btn {
144
+ display: flex;
145
+ align-items: center;
146
+ gap: 8px;
147
+ padding: 12px 20px;
148
+ border: none;
149
+ border-radius: 6px;
150
+ font-family: inherit;
151
+ font-size: 13px;
152
+ font-weight: 600;
153
+ cursor: pointer;
154
+ transition: all 0.2s;
155
+ }
156
+
157
+ .btn-icon {
158
+ font-size: 14px;
159
+ }
160
+
161
+ .btn-primary {
162
+ background: var(--accent);
163
+ color: var(--bg-primary);
164
+ }
165
+
166
+ .btn-primary:hover {
167
+ background: var(--accent-dim);
168
+ transform: translateY(-1px);
169
+ }
170
+
171
+ .btn-primary:disabled {
172
+ background: var(--text-muted);
173
+ cursor: not-allowed;
174
+ transform: none;
175
+ }
176
+
177
+ .btn-secondary {
178
+ background: var(--bg-tertiary);
179
+ color: var(--text-primary);
180
+ border: 1px solid var(--border);
181
+ }
182
+
183
+ .btn-secondary:hover {
184
+ background: var(--border);
185
+ }
186
+
187
+ .btn-ghost {
188
+ background: transparent;
189
+ color: var(--text-secondary);
190
+ border: 1px solid var(--border);
191
+ }
192
+
193
+ .btn-ghost:hover {
194
+ background: var(--bg-secondary);
195
+ color: var(--text-primary);
196
+ }
197
+
198
+ .feed-header {
199
+ display: flex;
200
+ justify-content: space-between;
201
+ align-items: center;
202
+ margin-bottom: 20px;
203
+ }
204
+
205
+ .feed-header h2 {
206
+ font-size: 14px;
207
+ text-transform: uppercase;
208
+ letter-spacing: 2px;
209
+ color: var(--text-secondary);
210
+ }
211
+
212
+ .feed-filters {
213
+ display: flex;
214
+ gap: 12px;
215
+ }
216
+
217
+ .feed-filters input,
218
+ .feed-filters select {
219
+ background: var(--bg-secondary);
220
+ border: 1px solid var(--border);
221
+ border-radius: 4px;
222
+ padding: 8px 12px;
223
+ color: var(--text-primary);
224
+ font-family: inherit;
225
+ font-size: 12px;
226
+ }
227
+
228
+ .feed-filters input:focus,
229
+ .feed-filters select:focus {
230
+ outline: none;
231
+ border-color: var(--accent);
232
+ }
233
+
234
+ .feed {
235
+ display: flex;
236
+ flex-direction: column;
237
+ gap: 12px;
238
+ }
239
+
240
+ .entry {
241
+ background: var(--bg-secondary);
242
+ border: 1px solid var(--border);
243
+ border-radius: 8px;
244
+ padding: 20px;
245
+ transition: border-color 0.2s;
246
+ }
247
+
248
+ .entry:hover {
249
+ border-color: var(--accent-dim);
250
+ }
251
+
252
+ .entry-header {
253
+ display: flex;
254
+ justify-content: space-between;
255
+ align-items: flex-start;
256
+ margin-bottom: 12px;
257
+ }
258
+
259
+ .entry-meta {
260
+ display: flex;
261
+ align-items: center;
262
+ gap: 12px;
263
+ }
264
+
265
+ .entry-id {
266
+ font-size: 12px;
267
+ color: var(--accent);
268
+ font-weight: 600;
269
+ }
270
+
271
+ .entry-time {
272
+ font-size: 12px;
273
+ color: var(--text-muted);
274
+ }
275
+
276
+ .entry-commit {
277
+ font-size: 11px;
278
+ color: var(--text-secondary);
279
+ font-family: monospace;
280
+ background: var(--bg-tertiary);
281
+ padding: 2px 6px;
282
+ border-radius: 3px;
283
+ }
284
+
285
+ .entry-summary {
286
+ font-size: 14px;
287
+ line-height: 1.6;
288
+ color: var(--text-primary);
289
+ margin-bottom: 12px;
290
+ }
291
+
292
+ .entry-files {
293
+ display: flex;
294
+ flex-wrap: wrap;
295
+ gap: 8px;
296
+ }
297
+
298
+ .entry-file {
299
+ font-size: 11px;
300
+ color: var(--text-secondary);
301
+ background: var(--bg-tertiary);
302
+ padding: 4px 8px;
303
+ border-radius: 4px;
304
+ }
305
+
306
+ .entry-dirs {
307
+ margin-top: 8px;
308
+ }
309
+
310
+ .entry-dir {
311
+ font-size: 11px;
312
+ color: var(--warning);
313
+ margin-right: 8px;
314
+ }
315
+
316
+ .loading {
317
+ text-align: center;
318
+ padding: 40px;
319
+ color: var(--text-muted);
320
+ }
321
+
322
+ .empty {
323
+ text-align: center;
324
+ padding: 60px;
325
+ color: var(--text-muted);
326
+ }
327
+
328
+ .empty-icon {
329
+ font-size: 48px;
330
+ margin-bottom: 16px;
331
+ opacity: 0.5;
332
+ }
333
+
334
+ .toast {
335
+ position: fixed;
336
+ bottom: 20px;
337
+ right: 20px;
338
+ background: var(--bg-tertiary);
339
+ border: 1px solid var(--border);
340
+ border-radius: 8px;
341
+ padding: 16px 24px;
342
+ font-size: 13px;
343
+ opacity: 0;
344
+ transform: translateY(20px);
345
+ transition: all 0.3s;
346
+ pointer-events: none;
347
+ }
348
+
349
+ .toast.show {
350
+ opacity: 1;
351
+ transform: translateY(0);
352
+ }
353
+
354
+ .toast.success {
355
+ border-color: var(--accent);
356
+ }
357
+
358
+ .toast.error {
359
+ border-color: var(--danger);
360
+ }
361
+
362
+ .modal {
363
+ display: none;
364
+ position: fixed;
365
+ top: 0;
366
+ left: 0;
367
+ width: 100%;
368
+ height: 100%;
369
+ background: rgba(0, 0, 0, 0.8);
370
+ justify-content: center;
371
+ align-items: center;
372
+ }
373
+
374
+ .modal.show {
375
+ display: flex;
376
+ }
377
+
378
+ .modal-content {
379
+ background: var(--bg-secondary);
380
+ border: 1px solid var(--border);
381
+ border-radius: 12px;
382
+ padding: 30px;
383
+ width: 100%;
384
+ max-width: 400px;
385
+ }
386
+
387
+ .modal-content h3 {
388
+ margin-bottom: 20px;
389
+ font-size: 16px;
390
+ }
391
+
392
+ .config-form {
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 16px;
396
+ margin-bottom: 24px;
397
+ }
398
+
399
+ .config-form label {
400
+ display: flex;
401
+ flex-direction: column;
402
+ gap: 6px;
403
+ font-size: 12px;
404
+ color: var(--text-secondary);
405
+ }
406
+
407
+ .config-form input,
408
+ .config-form select {
409
+ background: var(--bg-tertiary);
410
+ border: 1px solid var(--border);
411
+ border-radius: 4px;
412
+ padding: 10px;
413
+ color: var(--text-primary);
414
+ font-family: inherit;
415
+ font-size: 13px;
416
+ }
417
+
418
+ .modal-actions {
419
+ display: flex;
420
+ gap: 12px;
421
+ justify-content: flex-end;
422
+ }
423
+
424
+ .header-actions {
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 12px;
428
+ }
429
+
430
+ .btn-sm {
431
+ padding: 8px 12px;
432
+ font-size: 12px;
433
+ }
434
+
435
+ .search-bar {
436
+ display: flex;
437
+ gap: 12px;
438
+ margin-bottom: 20px;
439
+ }
440
+
441
+ .search-bar input {
442
+ flex: 1;
443
+ background: var(--bg-secondary);
444
+ border: 1px solid var(--border);
445
+ border-radius: 6px;
446
+ padding: 12px 16px;
447
+ color: var(--text-primary);
448
+ font-family: inherit;
449
+ font-size: 14px;
450
+ }
451
+
452
+ .search-bar input:focus {
453
+ outline: none;
454
+ border-color: var(--accent);
455
+ }
456
+
457
+ .search-bar input::placeholder {
458
+ color: var(--text-muted);
459
+ }
460
+
461
+ .modal-header {
462
+ display: flex;
463
+ justify-content: space-between;
464
+ align-items: center;
465
+ margin-bottom: 20px;
466
+ }
467
+
468
+ .modal-header h3 {
469
+ margin: 0;
470
+ }
471
+
472
+ .modal-wide {
473
+ max-width: 700px;
474
+ }
475
+
476
+ .stats-grid {
477
+ display: grid;
478
+ grid-template-columns: repeat(2, 1fr);
479
+ gap: 20px;
480
+ }
481
+
482
+ .stats-section {
483
+ background: var(--bg-tertiary);
484
+ border-radius: 8px;
485
+ padding: 16px;
486
+ }
487
+
488
+ .stats-section h4 {
489
+ font-size: 12px;
490
+ text-transform: uppercase;
491
+ letter-spacing: 1px;
492
+ color: var(--text-secondary);
493
+ margin-bottom: 12px;
494
+ }
495
+
496
+ .stats-section .stat-row {
497
+ display: flex;
498
+ justify-content: space-between;
499
+ padding: 6px 0;
500
+ font-size: 13px;
501
+ }
502
+
503
+ .stats-section .stat-row .label {
504
+ color: var(--text-secondary);
505
+ }
506
+
507
+ .stats-section .stat-row .value {
508
+ color: var(--accent);
509
+ font-weight: 600;
510
+ }
511
+
512
+ .stats-section .bar-chart {
513
+ margin-top: 8px;
514
+ }
515
+
516
+ .stats-section .bar-row {
517
+ display: flex;
518
+ align-items: center;
519
+ gap: 8px;
520
+ margin-bottom: 6px;
521
+ }
522
+
523
+ .stats-section .bar-label {
524
+ width: 60px;
525
+ font-size: 11px;
526
+ color: var(--text-secondary);
527
+ }
528
+
529
+ .stats-section .bar {
530
+ height: 16px;
531
+ background: var(--accent);
532
+ border-radius: 2px;
533
+ transition: width 0.3s;
534
+ }
535
+
536
+ .stats-section .bar-value {
537
+ font-size: 11px;
538
+ color: var(--text-muted);
539
+ margin-left: 8px;
540
+ }
541
+
542
+ .highlight {
543
+ background: var(--warning);
544
+ color: var(--bg-primary);
545
+ padding: 0 2px;
546
+ border-radius: 2px;
547
+ }
548
+
549
+ @media (max-width: 768px) {
550
+ .stats-bar {
551
+ grid-template-columns: repeat(2, 1fr);
552
+ }
553
+
554
+ .actions {
555
+ flex-wrap: wrap;
556
+ }
557
+
558
+ .feed-header {
559
+ flex-direction: column;
560
+ gap: 16px;
561
+ align-items: flex-start;
562
+ }
563
+
564
+ .feed-filters {
565
+ width: 100%;
566
+ }
567
+
568
+ .feed-filters input {
569
+ flex: 1;
570
+ }
571
+ }
@@ -0,0 +1 @@
1
+ export declare function createServer(port?: number): import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;