@jevitate/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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ai-cli.d.ts +31 -0
  3. package/dist/ai-cli.js +238 -0
  4. package/dist/ai-cli.js.map +1 -0
  5. package/dist/bin.d.ts +2 -0
  6. package/dist/bin.js +50663 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/data-dir.d.ts +9 -0
  9. package/dist/data-dir.js +13 -0
  10. package/dist/data-dir.js.map +1 -0
  11. package/dist/envelope.d.ts +11 -0
  12. package/dist/envelope.js +7 -0
  13. package/dist/envelope.js.map +1 -0
  14. package/dist/explore-api.d.ts +187 -0
  15. package/dist/explore-api.js +302 -0
  16. package/dist/explore-api.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +3 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/init-keys.d.ts +14 -0
  21. package/dist/init-keys.js +18 -0
  22. package/dist/init-keys.js.map +1 -0
  23. package/dist/init-mcp.d.ts +87 -0
  24. package/dist/init-mcp.js +198 -0
  25. package/dist/init-mcp.js.map +1 -0
  26. package/dist/init-skills.d.ts +80 -0
  27. package/dist/init-skills.js +256 -0
  28. package/dist/init-skills.js.map +1 -0
  29. package/dist/journey-api.d.ts +37 -0
  30. package/dist/journey-api.js +55 -0
  31. package/dist/journey-api.js.map +1 -0
  32. package/dist/load-api.d.ts +48 -0
  33. package/dist/load-api.js +84 -0
  34. package/dist/load-api.js.map +1 -0
  35. package/dist/mcp-api.d.ts +116 -0
  36. package/dist/mcp-api.js +359 -0
  37. package/dist/mcp-api.js.map +1 -0
  38. package/dist/mission-api.d.ts +56 -0
  39. package/dist/mission-api.js +65 -0
  40. package/dist/mission-api.js.map +1 -0
  41. package/dist/program.d.ts +77 -0
  42. package/dist/program.js +1938 -0
  43. package/dist/program.js.map +1 -0
  44. package/dist/record-api.d.ts +74 -0
  45. package/dist/record-api.js +93 -0
  46. package/dist/record-api.js.map +1 -0
  47. package/dist/regression-api.d.ts +17 -0
  48. package/dist/regression-api.js +16 -0
  49. package/dist/regression-api.js.map +1 -0
  50. package/dist/self-heal-adapter.d.ts +31 -0
  51. package/dist/self-heal-adapter.js +70 -0
  52. package/dist/self-heal-adapter.js.map +1 -0
  53. package/dist/source-api.d.ts +147 -0
  54. package/dist/source-api.js +208 -0
  55. package/dist/source-api.js.map +1 -0
  56. package/dist/source-run-api.d.ts +57 -0
  57. package/dist/source-run-api.js +91 -0
  58. package/dist/source-run-api.js.map +1 -0
  59. package/dist/ui-api.d.ts +35 -0
  60. package/dist/ui-api.js +369 -0
  61. package/dist/ui-api.js.map +1 -0
  62. package/dist/ux-api.d.ts +75 -0
  63. package/dist/ux-api.js +231 -0
  64. package/dist/ux-api.js.map +1 -0
  65. package/dist/version.d.ts +1 -0
  66. package/dist/version.js +37 -0
  67. package/dist/version.js.map +1 -0
  68. package/package.json +85 -0
  69. package/skills/jevitate-explore/SKILL.md +108 -0
  70. package/skills/jevitate-load-test/SKILL.md +42 -0
  71. package/skills/jevitate-mission-scope/SKILL.md +107 -0
  72. package/skills/jevitate-record/SKILL.md +78 -0
  73. package/skills/jevitate-run-journey/SKILL.md +72 -0
  74. package/skills/jevitate-sources/SKILL.md +88 -0
  75. package/skills/jevitate-ux-review/SKILL.md +68 -0
  76. package/ui/app.js +538 -0
  77. package/ui/index.html +546 -0
package/ui/index.html ADDED
@@ -0,0 +1,546 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Jevitate UI</title>
7
+ <style>
8
+ /* ---- design system (approved neon-brutalist export) ---- */
9
+ /* NOTE: no external font import here — the server's CSP is
10
+ `default-src 'self'` with no font-src override, so a Google Fonts
11
+ @import (or any external font file) would be blocked outright and
12
+ break the page. Font stacks below fall back to system fonts. */
13
+ :root {
14
+ --ink: #050505;
15
+ --surface: #18181b;
16
+ --surface-alt: #0a0a0a;
17
+ --magenta: #ff00ff;
18
+ --cyan: #00ffff;
19
+ --yellow: #ffff00;
20
+ --amber: #f0b100;
21
+ --green: #00c950;
22
+ --red: #fb2c36;
23
+ --sec: #99a1af;
24
+ }
25
+ * {
26
+ box-sizing: border-box;
27
+ border-radius: 0 !important;
28
+ }
29
+ html,
30
+ body {
31
+ margin: 0;
32
+ padding: 0;
33
+ }
34
+ body {
35
+ background: var(--ink);
36
+ color: #fff;
37
+ }
38
+ a {
39
+ color: inherit;
40
+ }
41
+ button {
42
+ font: inherit;
43
+ cursor: pointer;
44
+ }
45
+ .dots {
46
+ background-color: #050505;
47
+ background-image: radial-gradient(#18181b 1px, transparent 1px);
48
+ background-size: 24px 24px;
49
+ min-height: 100vh;
50
+ }
51
+ .disp {
52
+ font-family: "Archivo", system-ui, sans-serif;
53
+ font-weight: 900;
54
+ font-style: italic;
55
+ transform: skewX(-4deg);
56
+ letter-spacing: -1.9px;
57
+ }
58
+ .head {
59
+ font-family: "Archivo", system-ui, sans-serif;
60
+ font-weight: 900;
61
+ letter-spacing: -1px;
62
+ }
63
+ .mono {
64
+ font-family: "JetBrains Mono", ui-monospace, monospace;
65
+ }
66
+ .body-txt {
67
+ font-family: "Public Sans", system-ui, sans-serif;
68
+ }
69
+ .glow-m {
70
+ text-shadow: 0 0 8px rgba(255, 0, 255, 0.6), 0 0 20px rgba(255, 0, 255, 0.35);
71
+ }
72
+ .glow-c {
73
+ text-shadow: 0 0 8px rgba(0, 255, 255, 0.6), 0 0 20px rgba(0, 255, 255, 0.35);
74
+ }
75
+ .card {
76
+ border: 2px solid #fff;
77
+ background: var(--surface);
78
+ transition: box-shadow 0.2s ease, transform 0.2s ease;
79
+ padding: 24px;
80
+ display: block;
81
+ width: 100%;
82
+ text-align: left;
83
+ color: inherit;
84
+ }
85
+ .card:hover {
86
+ box-shadow: 8px 8px 0 0 var(--magenta);
87
+ transform: translate(-1px, -1px);
88
+ }
89
+ .led {
90
+ width: 8px;
91
+ height: 8px;
92
+ display: inline-block;
93
+ }
94
+ .led-c {
95
+ background: var(--cyan);
96
+ box-shadow: 0 0 8px 2px var(--cyan);
97
+ }
98
+ .led-m {
99
+ background: var(--magenta);
100
+ box-shadow: 0 0 8px 2px var(--magenta);
101
+ }
102
+ .led-y {
103
+ background: var(--amber);
104
+ box-shadow: 0 0 8px 2px var(--amber);
105
+ }
106
+ .led-g {
107
+ background: var(--green);
108
+ box-shadow: 0 0 8px 2px var(--green);
109
+ }
110
+ .led-r {
111
+ background: var(--red);
112
+ box-shadow: 0 0 8px 2px var(--red);
113
+ }
114
+ .badge {
115
+ border: 2px solid;
116
+ padding: 4px 10px;
117
+ display: inline-flex;
118
+ align-items: center;
119
+ gap: 8px;
120
+ }
121
+ .btn-primary {
122
+ font-family: "Archivo", system-ui, sans-serif;
123
+ font-weight: 900;
124
+ text-transform: uppercase;
125
+ background: linear-gradient(180deg, #fff 0%, #d1d1d1 45%, #fff 50%, #e5e5e5 100%);
126
+ color: #000;
127
+ border: 2px solid var(--magenta);
128
+ box-shadow: 6px 6px 0 0 var(--magenta);
129
+ height: 54px;
130
+ padding: 0 26px;
131
+ transition: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
132
+ letter-spacing: 0.5px;
133
+ }
134
+ .btn-primary:hover {
135
+ transform: translateY(-2px);
136
+ box-shadow: 8px 8px 0 0 var(--magenta);
137
+ }
138
+ .btn-primary:active {
139
+ transform: translateY(2px);
140
+ box-shadow: 3px 3px 0 0 var(--magenta);
141
+ }
142
+ .btn-primary:disabled {
143
+ opacity: 0.5;
144
+ cursor: not-allowed;
145
+ transform: none;
146
+ }
147
+ .btn-ghost-w {
148
+ font-family: "Archivo", system-ui, sans-serif;
149
+ font-weight: 900;
150
+ text-transform: uppercase;
151
+ background: transparent;
152
+ color: #fff;
153
+ border: 2px solid #fff;
154
+ height: 54px;
155
+ padding: 0 22px;
156
+ transition: 0.15s;
157
+ letter-spacing: 0.5px;
158
+ }
159
+ .btn-ghost-w:hover {
160
+ border-color: var(--red);
161
+ color: var(--red);
162
+ box-shadow: 0 0 14px rgba(251, 44, 54, 0.5);
163
+ }
164
+ .btn-ghost-c {
165
+ font-family: "Archivo", system-ui, sans-serif;
166
+ font-weight: 900;
167
+ text-transform: uppercase;
168
+ background: transparent;
169
+ color: var(--cyan);
170
+ border: 2px solid var(--cyan);
171
+ height: 54px;
172
+ padding: 0 22px;
173
+ transition: 0.15s;
174
+ letter-spacing: 0.5px;
175
+ }
176
+ .btn-ghost-c:hover {
177
+ box-shadow: 0 0 14px rgba(0, 255, 255, 0.5);
178
+ }
179
+ .divider {
180
+ border-top: 2px solid #18181b;
181
+ }
182
+ .ta {
183
+ background: var(--surface-alt);
184
+ border: 2px solid #fff;
185
+ color: #fff;
186
+ font-family: "JetBrains Mono", ui-monospace, monospace;
187
+ outline: none;
188
+ transition: 0.15s;
189
+ width: 100%;
190
+ padding: 14px;
191
+ font-size: 14px;
192
+ resize: vertical;
193
+ }
194
+ .ta:focus {
195
+ border-color: var(--cyan);
196
+ box-shadow: 0 0 0 3px rgba(0, 255, 255, 0.35);
197
+ }
198
+ @keyframes blink {
199
+ 0%,
200
+ 49% {
201
+ opacity: 1;
202
+ }
203
+ 50%,
204
+ 100% {
205
+ opacity: 0;
206
+ }
207
+ }
208
+ .cursor-blink {
209
+ animation: blink 1s step-end infinite;
210
+ }
211
+ .scanlines {
212
+ background: linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px);
213
+ background-size: 100% 3px;
214
+ pointer-events: none;
215
+ position: fixed;
216
+ inset: 0;
217
+ z-index: 50;
218
+ }
219
+
220
+ /* ---- layout (no Tailwind — CSP blocks the CDN) ---- */
221
+ .screen {
222
+ min-height: 100vh;
223
+ width: 100%;
224
+ padding: 56px 24px;
225
+ }
226
+ @media (min-width: 768px) {
227
+ .screen {
228
+ padding-left: 64px;
229
+ padding-right: 64px;
230
+ }
231
+ }
232
+ .eyebrow {
233
+ font-size: 12px;
234
+ color: var(--sec);
235
+ }
236
+ .queue-heading {
237
+ display: flex;
238
+ flex-wrap: wrap;
239
+ align-items: center;
240
+ gap: 24px;
241
+ margin-top: 24px;
242
+ }
243
+ .queue-title {
244
+ font-size: 44px;
245
+ margin: 0;
246
+ }
247
+ @media (min-width: 768px) {
248
+ .queue-title {
249
+ font-size: 68px;
250
+ }
251
+ }
252
+ .count {
253
+ background: var(--magenta);
254
+ color: #000;
255
+ box-shadow: 5px 5px 0 0 rgba(0, 255, 255, 0.9);
256
+ padding: 4px 16px;
257
+ font-family: "Archivo", system-ui, sans-serif;
258
+ font-weight: 900;
259
+ font-size: 24px;
260
+ }
261
+ .sub {
262
+ font-size: 12px;
263
+ color: var(--sec);
264
+ margin-top: 16px;
265
+ }
266
+ .queue-list {
267
+ margin-top: 40px;
268
+ display: flex;
269
+ flex-direction: column;
270
+ gap: 32px;
271
+ max-width: 980px;
272
+ }
273
+ .card-top {
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: space-between;
277
+ flex-wrap: wrap;
278
+ gap: 12px;
279
+ }
280
+ .card-title {
281
+ font-size: 28px;
282
+ margin: 16px 0 0;
283
+ }
284
+ .card-meta {
285
+ display: flex;
286
+ flex-wrap: wrap;
287
+ column-gap: 32px;
288
+ row-gap: 8px;
289
+ margin-top: 20px;
290
+ font-size: 12px;
291
+ color: var(--sec);
292
+ }
293
+ .card-meta strong {
294
+ color: #fff;
295
+ font-weight: 500;
296
+ }
297
+ .card-meta .agent {
298
+ color: var(--cyan);
299
+ }
300
+ .card-actions {
301
+ display: flex;
302
+ flex-wrap: wrap;
303
+ gap: 16px;
304
+ margin-top: 24px;
305
+ }
306
+ .empty-state {
307
+ min-height: 60vh;
308
+ display: flex;
309
+ flex-direction: column;
310
+ align-items: center;
311
+ justify-content: center;
312
+ text-align: center;
313
+ padding: 40px 16px;
314
+ }
315
+ .empty-state h2 {
316
+ font-size: 48px;
317
+ color: #3f3f46;
318
+ margin: 0;
319
+ }
320
+ @media (min-width: 768px) {
321
+ .empty-state h2 {
322
+ font-size: 76px;
323
+ }
324
+ }
325
+ .empty-state .sub {
326
+ font-size: 18px;
327
+ margin-top: 32px;
328
+ }
329
+ .empty-state p {
330
+ font-family: "Public Sans", system-ui, sans-serif;
331
+ font-size: 14px;
332
+ color: #52525b;
333
+ margin-top: 24px;
334
+ }
335
+ .back-link {
336
+ background: transparent;
337
+ border: none;
338
+ color: var(--cyan);
339
+ font-size: 14px;
340
+ padding: 0;
341
+ }
342
+ .detail-grid {
343
+ display: grid;
344
+ grid-template-columns: 1fr;
345
+ gap: 40px;
346
+ margin-top: 32px;
347
+ }
348
+ @media (min-width: 1024px) {
349
+ .detail-grid {
350
+ grid-template-columns: 1fr 1fr;
351
+ }
352
+ }
353
+ .detail-title {
354
+ font-size: 40px;
355
+ margin: 24px 0 0;
356
+ }
357
+ @media (min-width: 768px) {
358
+ .detail-title {
359
+ font-size: 56px;
360
+ }
361
+ }
362
+ .detail-url {
363
+ font-size: 14px;
364
+ color: var(--cyan);
365
+ margin-top: 24px;
366
+ word-break: break-all;
367
+ }
368
+ .detail-meta {
369
+ display: grid;
370
+ grid-template-columns: 1fr 1fr;
371
+ gap: 16px;
372
+ margin-top: 24px;
373
+ font-size: 12px;
374
+ color: var(--sec);
375
+ }
376
+ .detail-meta strong {
377
+ color: #fff;
378
+ font-weight: 500;
379
+ }
380
+ .detail-reason {
381
+ font-family: "Public Sans", system-ui, sans-serif;
382
+ font-size: 17px;
383
+ color: #d1d5dc;
384
+ margin-top: 24px;
385
+ }
386
+ .section-label {
387
+ font-size: 12px;
388
+ color: var(--sec);
389
+ margin-top: 32px;
390
+ margin-bottom: 8px;
391
+ }
392
+ .thread {
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 10px;
396
+ max-height: 260px;
397
+ overflow-y: auto;
398
+ }
399
+ .thread-entry {
400
+ border: 2px solid #333;
401
+ padding: 10px 12px;
402
+ font-size: 13px;
403
+ }
404
+ .thread-entry .who {
405
+ font-family: "JetBrains Mono", ui-monospace, monospace;
406
+ font-size: 11px;
407
+ color: var(--sec);
408
+ margin-bottom: 4px;
409
+ }
410
+ .thread-entry.human {
411
+ border-color: var(--cyan);
412
+ }
413
+ .findings {
414
+ display: flex;
415
+ flex-direction: column;
416
+ gap: 12px;
417
+ }
418
+ .finding {
419
+ border: 2px solid;
420
+ padding: 10px 12px;
421
+ }
422
+ .finding.low {
423
+ border-color: var(--sec);
424
+ }
425
+ .finding.med {
426
+ border-color: var(--amber);
427
+ }
428
+ .finding.high {
429
+ border-color: var(--red);
430
+ }
431
+ .finding .title {
432
+ font-weight: 700;
433
+ }
434
+ .finding .evidence {
435
+ font-family: "JetBrains Mono", ui-monospace, monospace;
436
+ font-size: 12px;
437
+ color: var(--sec);
438
+ margin-top: 6px;
439
+ }
440
+ .detail-actions {
441
+ display: flex;
442
+ flex-wrap: wrap;
443
+ gap: 16px;
444
+ margin-top: 24px;
445
+ }
446
+ .browser-frame {
447
+ background: var(--surface-alt);
448
+ border: 2px solid #fff;
449
+ }
450
+ .browser-chrome {
451
+ display: flex;
452
+ align-items: center;
453
+ gap: 8px;
454
+ padding: 10px 16px;
455
+ border-bottom: 2px solid #fff;
456
+ background: var(--surface);
457
+ }
458
+ .browser-chrome .chrome-url {
459
+ font-size: 12px;
460
+ color: var(--sec);
461
+ margin-left: 12px;
462
+ }
463
+ .screenshot-body {
464
+ padding: 0;
465
+ min-height: 320px;
466
+ display: flex;
467
+ align-items: center;
468
+ justify-content: center;
469
+ }
470
+ .screenshot-body img {
471
+ display: block;
472
+ width: 100%;
473
+ height: auto;
474
+ }
475
+ .screenshot-placeholder {
476
+ display: flex;
477
+ flex-direction: column;
478
+ align-items: center;
479
+ justify-content: center;
480
+ gap: 12px;
481
+ padding: 64px 24px;
482
+ color: var(--sec);
483
+ width: 100%;
484
+ }
485
+ .screenshot-placeholder svg {
486
+ width: 40px;
487
+ height: 40px;
488
+ opacity: 0.6;
489
+ }
490
+ .screenshot-caption {
491
+ font-size: 12px;
492
+ color: var(--sec);
493
+ margin-top: 12px;
494
+ }
495
+ .toast {
496
+ position: fixed;
497
+ left: 50%;
498
+ bottom: 32px;
499
+ transform: translateX(-50%);
500
+ background: var(--surface);
501
+ border: 2px solid var(--magenta);
502
+ box-shadow: 6px 6px 0 0 var(--magenta);
503
+ color: #fff;
504
+ font-family: "JetBrains Mono", ui-monospace, monospace;
505
+ font-size: 13px;
506
+ padding: 14px 20px;
507
+ z-index: 100;
508
+ }
509
+ .visually-hidden {
510
+ position: absolute;
511
+ width: 1px;
512
+ height: 1px;
513
+ overflow: hidden;
514
+ clip: rect(0 0 0 0);
515
+ white-space: nowrap;
516
+ }
517
+ </style>
518
+ </head>
519
+ <body class="dots">
520
+ <div class="scanlines" aria-hidden="true"></div>
521
+
522
+ <section id="screen-queue" class="screen">
523
+ <div class="mono eyebrow">[ QUEUE &middot; PENDING ]</div>
524
+ <div class="queue-heading">
525
+ <h1 class="disp glow-m queue-title">PENDING QUEUE</h1>
526
+ <span class="count head" id="queue-count">00</span>
527
+ </div>
528
+ <div class="mono sub" id="queue-sub">[ jevitate ui &middot; single-user ]</div>
529
+
530
+ <div class="queue-list" id="queue-list">
531
+ <!-- queue cards or empty state injected by app.js -->
532
+ </div>
533
+ </section>
534
+
535
+ <section id="screen-detail" class="screen" hidden>
536
+ <button type="button" id="back-link" class="mono back-link">[&lt;- QUEUE]</button>
537
+ <div class="detail-grid" id="detail-root">
538
+ <!-- item detail injected by app.js -->
539
+ </div>
540
+ </section>
541
+
542
+ <div id="toast" class="toast mono" role="status" aria-live="polite" hidden></div>
543
+
544
+ <script src="/app.js"></script>
545
+ </body>
546
+ </html>