@agent-link/server 0.1.157 → 0.1.159
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.
- package/package.json +1 -1
- package/web/app.js +655 -59
- package/web/landing.html +76 -20
- package/web/landing.zh.html +76 -20
- package/web/modules/backgroundRouting.js +2 -1
- package/web/modules/connection.js +22 -1
- package/web/modules/loop.js +337 -0
- package/web/modules/loopTemplates.js +110 -0
- package/web/modules/team.js +8 -8
- package/web/style.css +682 -13
package/web/style.css
CHANGED
|
@@ -255,7 +255,7 @@ body {
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
.sidebar-section {
|
|
258
|
-
padding: 0.75rem;
|
|
258
|
+
padding: 0.5rem 0.75rem;
|
|
259
259
|
border-bottom: 1px solid var(--border);
|
|
260
260
|
}
|
|
261
261
|
|
|
@@ -292,7 +292,9 @@ body {
|
|
|
292
292
|
font-size: 0.8rem;
|
|
293
293
|
color: var(--text-primary);
|
|
294
294
|
font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
|
|
295
|
-
|
|
295
|
+
overflow: hidden;
|
|
296
|
+
text-overflow: ellipsis;
|
|
297
|
+
white-space: nowrap;
|
|
296
298
|
line-height: 1.3;
|
|
297
299
|
}
|
|
298
300
|
|
|
@@ -314,6 +316,8 @@ body {
|
|
|
314
316
|
display: flex;
|
|
315
317
|
flex-direction: column;
|
|
316
318
|
gap: 2px;
|
|
319
|
+
max-height: 120px;
|
|
320
|
+
overflow-y: auto;
|
|
317
321
|
}
|
|
318
322
|
.workdir-history-item {
|
|
319
323
|
display: flex;
|
|
@@ -365,7 +369,6 @@ body {
|
|
|
365
369
|
}
|
|
366
370
|
|
|
367
371
|
.sidebar-sessions {
|
|
368
|
-
flex: 1;
|
|
369
372
|
display: flex;
|
|
370
373
|
flex-direction: column;
|
|
371
374
|
overflow: hidden;
|
|
@@ -390,19 +393,19 @@ body {
|
|
|
390
393
|
display: flex;
|
|
391
394
|
align-items: center;
|
|
392
395
|
justify-content: space-between;
|
|
393
|
-
font-size: 0.
|
|
396
|
+
font-size: 0.7rem;
|
|
394
397
|
text-transform: uppercase;
|
|
395
398
|
letter-spacing: 0.05em;
|
|
396
399
|
color: var(--text-secondary);
|
|
397
|
-
margin-bottom:
|
|
400
|
+
margin-bottom: 4px;
|
|
398
401
|
}
|
|
399
402
|
|
|
400
403
|
.sidebar-refresh-btn {
|
|
401
404
|
display: flex;
|
|
402
405
|
align-items: center;
|
|
403
406
|
justify-content: center;
|
|
404
|
-
width:
|
|
405
|
-
height:
|
|
407
|
+
width: 20px;
|
|
408
|
+
height: 20px;
|
|
406
409
|
background: none;
|
|
407
410
|
border: none;
|
|
408
411
|
border-radius: 4px;
|
|
@@ -2907,6 +2910,18 @@ body {
|
|
|
2907
2910
|
color: var(--text-primary);
|
|
2908
2911
|
}
|
|
2909
2912
|
|
|
2913
|
+
.team-mode-select {
|
|
2914
|
+
display: none;
|
|
2915
|
+
padding: 4px 8px;
|
|
2916
|
+
border: 1px solid var(--border);
|
|
2917
|
+
border-radius: 6px;
|
|
2918
|
+
background: var(--bg-tertiary);
|
|
2919
|
+
color: var(--text-primary);
|
|
2920
|
+
font-size: 0.75rem;
|
|
2921
|
+
font-weight: 500;
|
|
2922
|
+
cursor: pointer;
|
|
2923
|
+
}
|
|
2924
|
+
|
|
2910
2925
|
/* ── Team create panel ── */
|
|
2911
2926
|
.team-create-panel {
|
|
2912
2927
|
flex: 1;
|
|
@@ -3702,12 +3717,29 @@ body {
|
|
|
3702
3717
|
|
|
3703
3718
|
/* ── Teams sidebar section (history list in sidebar) ── */
|
|
3704
3719
|
.sidebar-teams {
|
|
3705
|
-
padding: 0.75rem;
|
|
3706
|
-
max-height: 35%;
|
|
3720
|
+
padding: 0.5rem 0.75rem;
|
|
3707
3721
|
overflow: hidden;
|
|
3708
|
-
flex-shrink: 0;
|
|
3709
3722
|
display: flex;
|
|
3710
3723
|
flex-direction: column;
|
|
3724
|
+
min-height: 0;
|
|
3725
|
+
}
|
|
3726
|
+
|
|
3727
|
+
/* ── Loops sidebar section ── */
|
|
3728
|
+
.sidebar-loops {
|
|
3729
|
+
padding: 0.5rem 0.75rem;
|
|
3730
|
+
overflow: hidden;
|
|
3731
|
+
display: flex;
|
|
3732
|
+
flex-direction: column;
|
|
3733
|
+
min-height: 0;
|
|
3734
|
+
}
|
|
3735
|
+
|
|
3736
|
+
.loop-history-list {
|
|
3737
|
+
flex: 1 1 auto;
|
|
3738
|
+
overflow-y: auto;
|
|
3739
|
+
min-height: 0;
|
|
3740
|
+
display: flex;
|
|
3741
|
+
flex-direction: column;
|
|
3742
|
+
gap: 2px;
|
|
3711
3743
|
}
|
|
3712
3744
|
|
|
3713
3745
|
.team-history-list {
|
|
@@ -4180,9 +4212,12 @@ body {
|
|
|
4180
4212
|
gap: 0.4rem;
|
|
4181
4213
|
}
|
|
4182
4214
|
|
|
4183
|
-
.team-mode-
|
|
4184
|
-
|
|
4185
|
-
|
|
4215
|
+
.team-mode-toggle {
|
|
4216
|
+
display: none;
|
|
4217
|
+
}
|
|
4218
|
+
|
|
4219
|
+
.team-mode-select {
|
|
4220
|
+
display: block;
|
|
4186
4221
|
}
|
|
4187
4222
|
|
|
4188
4223
|
/* Message area */
|
|
@@ -4319,6 +4354,73 @@ body {
|
|
|
4319
4354
|
.team-create-panel {
|
|
4320
4355
|
padding: 1rem;
|
|
4321
4356
|
}
|
|
4357
|
+
|
|
4358
|
+
/* Loop dashboard — responsive */
|
|
4359
|
+
.loop-active-item {
|
|
4360
|
+
flex-direction: column;
|
|
4361
|
+
align-items: flex-start;
|
|
4362
|
+
gap: 8px;
|
|
4363
|
+
}
|
|
4364
|
+
|
|
4365
|
+
.loop-active-item-actions {
|
|
4366
|
+
width: 100%;
|
|
4367
|
+
justify-content: flex-start;
|
|
4368
|
+
flex-wrap: wrap;
|
|
4369
|
+
gap: 6px;
|
|
4370
|
+
}
|
|
4371
|
+
|
|
4372
|
+
.loop-active-item-actions .loop-action-btn {
|
|
4373
|
+
min-height: 36px;
|
|
4374
|
+
padding: 6px 14px;
|
|
4375
|
+
}
|
|
4376
|
+
|
|
4377
|
+
.loop-active-item-meta {
|
|
4378
|
+
flex-wrap: wrap;
|
|
4379
|
+
}
|
|
4380
|
+
|
|
4381
|
+
.loop-detail-actions {
|
|
4382
|
+
flex-wrap: wrap;
|
|
4383
|
+
}
|
|
4384
|
+
|
|
4385
|
+
.loop-detail-actions .loop-action-btn {
|
|
4386
|
+
min-height: 36px;
|
|
4387
|
+
padding: 6px 14px;
|
|
4388
|
+
}
|
|
4389
|
+
|
|
4390
|
+
.loop-exec-item {
|
|
4391
|
+
flex-direction: column;
|
|
4392
|
+
align-items: flex-start;
|
|
4393
|
+
gap: 6px;
|
|
4394
|
+
}
|
|
4395
|
+
|
|
4396
|
+
.loop-exec-item-left {
|
|
4397
|
+
flex-wrap: wrap;
|
|
4398
|
+
}
|
|
4399
|
+
|
|
4400
|
+
.loop-exec-item-right {
|
|
4401
|
+
width: 100%;
|
|
4402
|
+
}
|
|
4403
|
+
|
|
4404
|
+
.loop-exec-item-right .loop-action-btn {
|
|
4405
|
+
min-height: 36px;
|
|
4406
|
+
width: 100%;
|
|
4407
|
+
text-align: center;
|
|
4408
|
+
}
|
|
4409
|
+
|
|
4410
|
+
.loop-schedule-detail {
|
|
4411
|
+
flex-wrap: wrap;
|
|
4412
|
+
}
|
|
4413
|
+
|
|
4414
|
+
.loop-running-banner {
|
|
4415
|
+
left: 1rem;
|
|
4416
|
+
right: 1rem;
|
|
4417
|
+
transform: none;
|
|
4418
|
+
bottom: 70px;
|
|
4419
|
+
}
|
|
4420
|
+
|
|
4421
|
+
.loop-exec-messages {
|
|
4422
|
+
max-height: calc(100vh - 160px);
|
|
4423
|
+
}
|
|
4322
4424
|
}
|
|
4323
4425
|
|
|
4324
4426
|
/* ══════════════════════════════════════════
|
|
@@ -4340,4 +4442,571 @@ body {
|
|
|
4340
4442
|
.folder-picker-dialog {
|
|
4341
4443
|
width: calc(100vw - 1rem);
|
|
4342
4444
|
}
|
|
4445
|
+
|
|
4446
|
+
/* Loop — extra-small adjustments */
|
|
4447
|
+
.loop-detail-name {
|
|
4448
|
+
font-size: 1rem;
|
|
4449
|
+
}
|
|
4450
|
+
|
|
4451
|
+
.loop-active-item-name {
|
|
4452
|
+
font-size: 0.82rem;
|
|
4453
|
+
}
|
|
4454
|
+
|
|
4455
|
+
.loop-schedule-options {
|
|
4456
|
+
padding: 8px;
|
|
4457
|
+
}
|
|
4458
|
+
|
|
4459
|
+
.loop-schedule-radio {
|
|
4460
|
+
font-size: 0.82rem;
|
|
4461
|
+
}
|
|
4462
|
+
|
|
4463
|
+
.loop-cron-input {
|
|
4464
|
+
width: 110px;
|
|
4465
|
+
}
|
|
4466
|
+
}
|
|
4467
|
+
|
|
4468
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
4469
|
+
Loop Mode Styles
|
|
4470
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
4471
|
+
|
|
4472
|
+
/* ── Loop name input ── */
|
|
4473
|
+
.loop-name-input {
|
|
4474
|
+
width: 100%;
|
|
4475
|
+
padding: 8px 10px;
|
|
4476
|
+
border: 1px solid var(--border);
|
|
4477
|
+
border-radius: 6px;
|
|
4478
|
+
background: var(--bg-secondary);
|
|
4479
|
+
color: var(--text-primary);
|
|
4480
|
+
font-size: 0.9rem;
|
|
4481
|
+
font-family: inherit;
|
|
4482
|
+
}
|
|
4483
|
+
.loop-name-input:focus {
|
|
4484
|
+
outline: none;
|
|
4485
|
+
border-color: var(--accent);
|
|
4486
|
+
}
|
|
4487
|
+
|
|
4488
|
+
/* ── Schedule selector ── */
|
|
4489
|
+
.loop-schedule-options {
|
|
4490
|
+
display: flex;
|
|
4491
|
+
flex-direction: column;
|
|
4492
|
+
gap: 8px;
|
|
4493
|
+
border: 1px solid var(--border);
|
|
4494
|
+
border-radius: 8px;
|
|
4495
|
+
padding: 12px;
|
|
4496
|
+
background: var(--bg-secondary);
|
|
4497
|
+
}
|
|
4498
|
+
.loop-schedule-radio {
|
|
4499
|
+
display: flex;
|
|
4500
|
+
align-items: center;
|
|
4501
|
+
gap: 8px;
|
|
4502
|
+
font-size: 0.85rem;
|
|
4503
|
+
color: var(--text-primary);
|
|
4504
|
+
cursor: pointer;
|
|
4505
|
+
}
|
|
4506
|
+
.loop-schedule-radio input[type="radio"] {
|
|
4507
|
+
margin: 0;
|
|
4508
|
+
accent-color: var(--accent);
|
|
4509
|
+
}
|
|
4510
|
+
.loop-schedule-detail {
|
|
4511
|
+
display: inline-flex;
|
|
4512
|
+
align-items: center;
|
|
4513
|
+
gap: 4px;
|
|
4514
|
+
font-size: 0.82rem;
|
|
4515
|
+
color: var(--text-secondary);
|
|
4516
|
+
margin-left: 4px;
|
|
4517
|
+
}
|
|
4518
|
+
.loop-time-input {
|
|
4519
|
+
width: 46px;
|
|
4520
|
+
padding: 3px 6px;
|
|
4521
|
+
border: 1px solid var(--border);
|
|
4522
|
+
border-radius: 4px;
|
|
4523
|
+
background: var(--bg-primary);
|
|
4524
|
+
color: var(--text-primary);
|
|
4525
|
+
font-size: 0.82rem;
|
|
4526
|
+
font-family: inherit;
|
|
4527
|
+
text-align: center;
|
|
4528
|
+
}
|
|
4529
|
+
.loop-time-input:focus {
|
|
4530
|
+
outline: none;
|
|
4531
|
+
border-color: var(--accent);
|
|
4532
|
+
}
|
|
4533
|
+
.loop-day-select {
|
|
4534
|
+
padding: 3px 6px;
|
|
4535
|
+
border: 1px solid var(--border);
|
|
4536
|
+
border-radius: 4px;
|
|
4537
|
+
background: var(--bg-primary);
|
|
4538
|
+
color: var(--text-primary);
|
|
4539
|
+
font-size: 0.82rem;
|
|
4540
|
+
font-family: inherit;
|
|
4541
|
+
cursor: pointer;
|
|
4542
|
+
}
|
|
4543
|
+
.loop-day-select:focus {
|
|
4544
|
+
outline: none;
|
|
4545
|
+
border-color: var(--accent);
|
|
4546
|
+
}
|
|
4547
|
+
.loop-cron-input {
|
|
4548
|
+
width: 140px;
|
|
4549
|
+
padding: 3px 8px;
|
|
4550
|
+
border: 1px solid var(--border);
|
|
4551
|
+
border-radius: 4px;
|
|
4552
|
+
background: var(--bg-primary);
|
|
4553
|
+
color: var(--text-primary);
|
|
4554
|
+
font-size: 0.82rem;
|
|
4555
|
+
font-family: 'SF Mono', 'Fira Code', monospace;
|
|
4556
|
+
}
|
|
4557
|
+
.loop-cron-input:focus {
|
|
4558
|
+
outline: none;
|
|
4559
|
+
border-color: var(--accent);
|
|
4560
|
+
}
|
|
4561
|
+
|
|
4562
|
+
/* ── Template selected highlight ── */
|
|
4563
|
+
.loop-template-selected {
|
|
4564
|
+
border-color: rgba(59,130,246,0.4) !important;
|
|
4565
|
+
background: linear-gradient(135deg, rgba(59,130,246,0.08) 0%, rgba(59,130,246,0.03) 100%) !important;
|
|
4566
|
+
}
|
|
4567
|
+
|
|
4568
|
+
/* ── Active Loops list ── */
|
|
4569
|
+
.loop-active-section {
|
|
4570
|
+
margin-top: 24px;
|
|
4571
|
+
border-top: 1px solid var(--border);
|
|
4572
|
+
padding-top: 16px;
|
|
4573
|
+
}
|
|
4574
|
+
.loop-active-header {
|
|
4575
|
+
font-size: 0.8rem;
|
|
4576
|
+
font-weight: 600;
|
|
4577
|
+
color: var(--text-secondary);
|
|
4578
|
+
text-transform: uppercase;
|
|
4579
|
+
letter-spacing: 0.04em;
|
|
4580
|
+
margin-bottom: 10px;
|
|
4581
|
+
}
|
|
4582
|
+
.loop-active-list {
|
|
4583
|
+
display: flex;
|
|
4584
|
+
flex-direction: column;
|
|
4585
|
+
gap: 6px;
|
|
4586
|
+
}
|
|
4587
|
+
.loop-active-item {
|
|
4588
|
+
display: flex;
|
|
4589
|
+
align-items: center;
|
|
4590
|
+
justify-content: space-between;
|
|
4591
|
+
gap: 12px;
|
|
4592
|
+
padding: 10px 14px;
|
|
4593
|
+
border: 1px solid var(--border);
|
|
4594
|
+
border-radius: 8px;
|
|
4595
|
+
transition: border-color 0.15s;
|
|
4596
|
+
}
|
|
4597
|
+
.loop-active-item:hover {
|
|
4598
|
+
border-color: rgba(59,130,246,0.3);
|
|
4599
|
+
}
|
|
4600
|
+
.loop-active-item-info {
|
|
4601
|
+
flex: 1;
|
|
4602
|
+
min-width: 0;
|
|
4603
|
+
cursor: pointer;
|
|
4604
|
+
}
|
|
4605
|
+
.loop-active-item-top {
|
|
4606
|
+
display: flex;
|
|
4607
|
+
align-items: center;
|
|
4608
|
+
gap: 8px;
|
|
4609
|
+
margin-bottom: 2px;
|
|
4610
|
+
}
|
|
4611
|
+
.loop-active-item-name {
|
|
4612
|
+
font-size: 0.85rem;
|
|
4613
|
+
font-weight: 600;
|
|
4614
|
+
color: var(--text-primary);
|
|
4615
|
+
overflow: hidden;
|
|
4616
|
+
text-overflow: ellipsis;
|
|
4617
|
+
white-space: nowrap;
|
|
4618
|
+
}
|
|
4619
|
+
.loop-status-dot {
|
|
4620
|
+
width: 8px;
|
|
4621
|
+
height: 8px;
|
|
4622
|
+
border-radius: 50%;
|
|
4623
|
+
flex-shrink: 0;
|
|
4624
|
+
}
|
|
4625
|
+
.loop-status-dot-on {
|
|
4626
|
+
background: #10B981;
|
|
4627
|
+
}
|
|
4628
|
+
.loop-status-dot-off {
|
|
4629
|
+
background: var(--text-secondary);
|
|
4630
|
+
opacity: 0.4;
|
|
4631
|
+
}
|
|
4632
|
+
.loop-active-item-meta {
|
|
4633
|
+
display: flex;
|
|
4634
|
+
align-items: center;
|
|
4635
|
+
gap: 10px;
|
|
4636
|
+
font-size: 0.75rem;
|
|
4637
|
+
color: var(--text-secondary);
|
|
4638
|
+
}
|
|
4639
|
+
.loop-active-item-actions {
|
|
4640
|
+
display: flex;
|
|
4641
|
+
gap: 4px;
|
|
4642
|
+
flex-shrink: 0;
|
|
4643
|
+
}
|
|
4644
|
+
|
|
4645
|
+
/* ── Loop action buttons ── */
|
|
4646
|
+
.loop-action-btn {
|
|
4647
|
+
padding: 5px 12px;
|
|
4648
|
+
font-size: 0.78rem;
|
|
4649
|
+
font-weight: 500;
|
|
4650
|
+
color: var(--text-primary);
|
|
4651
|
+
background: var(--bg-secondary);
|
|
4652
|
+
border: 1px solid var(--border);
|
|
4653
|
+
border-radius: 6px;
|
|
4654
|
+
cursor: pointer;
|
|
4655
|
+
transition: all 0.15s;
|
|
4656
|
+
white-space: nowrap;
|
|
4657
|
+
}
|
|
4658
|
+
.loop-action-btn:hover:not(:disabled) {
|
|
4659
|
+
border-color: var(--accent);
|
|
4660
|
+
color: var(--accent);
|
|
4661
|
+
}
|
|
4662
|
+
.loop-action-btn:disabled {
|
|
4663
|
+
opacity: 0.4;
|
|
4664
|
+
cursor: not-allowed;
|
|
4665
|
+
}
|
|
4666
|
+
.loop-action-btn.loop-action-sm {
|
|
4667
|
+
padding: 3px 8px;
|
|
4668
|
+
font-size: 0.72rem;
|
|
4669
|
+
}
|
|
4670
|
+
.loop-action-btn.loop-action-run {
|
|
4671
|
+
color: #10B981;
|
|
4672
|
+
border-color: rgba(16,185,129,0.3);
|
|
4673
|
+
}
|
|
4674
|
+
.loop-action-btn.loop-action-run:hover:not(:disabled) {
|
|
4675
|
+
background: rgba(16,185,129,0.1);
|
|
4676
|
+
border-color: #10B981;
|
|
4677
|
+
}
|
|
4678
|
+
.loop-action-btn.loop-action-cancel {
|
|
4679
|
+
color: var(--error);
|
|
4680
|
+
border-color: rgba(239,68,68,0.3);
|
|
4681
|
+
}
|
|
4682
|
+
.loop-action-btn.loop-action-cancel:hover {
|
|
4683
|
+
background: rgba(239,68,68,0.1);
|
|
4684
|
+
border-color: var(--error);
|
|
4685
|
+
}
|
|
4686
|
+
.loop-action-btn.loop-action-delete {
|
|
4687
|
+
color: var(--error);
|
|
4688
|
+
border-color: rgba(239,68,68,0.3);
|
|
4689
|
+
}
|
|
4690
|
+
.loop-action-btn.loop-action-delete:hover {
|
|
4691
|
+
background: rgba(239,68,68,0.1);
|
|
4692
|
+
border-color: var(--error);
|
|
4693
|
+
}
|
|
4694
|
+
|
|
4695
|
+
/* ── Loop detail view ── */
|
|
4696
|
+
.loop-detail-header {
|
|
4697
|
+
margin-bottom: 16px;
|
|
4698
|
+
}
|
|
4699
|
+
.loop-detail-info {
|
|
4700
|
+
margin-bottom: 16px;
|
|
4701
|
+
}
|
|
4702
|
+
.loop-detail-name {
|
|
4703
|
+
font-size: 1.15rem;
|
|
4704
|
+
font-weight: 600;
|
|
4705
|
+
color: var(--text-primary);
|
|
4706
|
+
margin: 0 0 6px;
|
|
4707
|
+
}
|
|
4708
|
+
.loop-detail-meta {
|
|
4709
|
+
display: flex;
|
|
4710
|
+
align-items: center;
|
|
4711
|
+
gap: 10px;
|
|
4712
|
+
margin-bottom: 10px;
|
|
4713
|
+
}
|
|
4714
|
+
.loop-detail-schedule {
|
|
4715
|
+
font-size: 0.82rem;
|
|
4716
|
+
color: var(--text-secondary);
|
|
4717
|
+
}
|
|
4718
|
+
.loop-status-badge {
|
|
4719
|
+
font-size: 0.72rem;
|
|
4720
|
+
font-weight: 600;
|
|
4721
|
+
padding: 2px 8px;
|
|
4722
|
+
border-radius: 10px;
|
|
4723
|
+
text-transform: uppercase;
|
|
4724
|
+
letter-spacing: 0.03em;
|
|
4725
|
+
}
|
|
4726
|
+
.loop-status-enabled {
|
|
4727
|
+
background: rgba(16,185,129,0.15);
|
|
4728
|
+
color: #10B981;
|
|
4729
|
+
}
|
|
4730
|
+
.loop-status-disabled {
|
|
4731
|
+
background: rgba(156,163,175,0.15);
|
|
4732
|
+
color: var(--text-secondary);
|
|
4733
|
+
}
|
|
4734
|
+
.loop-detail-actions {
|
|
4735
|
+
display: flex;
|
|
4736
|
+
gap: 6px;
|
|
4737
|
+
}
|
|
4738
|
+
.loop-detail-prompt-section {
|
|
4739
|
+
margin-bottom: 20px;
|
|
4740
|
+
padding: 12px 14px;
|
|
4741
|
+
border: 1px solid var(--border);
|
|
4742
|
+
border-radius: 8px;
|
|
4743
|
+
background: var(--bg-secondary);
|
|
4744
|
+
}
|
|
4745
|
+
.loop-detail-prompt-label {
|
|
4746
|
+
font-size: 0.75rem;
|
|
4747
|
+
font-weight: 600;
|
|
4748
|
+
color: var(--text-secondary);
|
|
4749
|
+
text-transform: uppercase;
|
|
4750
|
+
letter-spacing: 0.03em;
|
|
4751
|
+
margin-bottom: 6px;
|
|
4752
|
+
}
|
|
4753
|
+
.loop-detail-prompt-text {
|
|
4754
|
+
font-size: 0.84rem;
|
|
4755
|
+
color: var(--text-primary);
|
|
4756
|
+
line-height: 1.6;
|
|
4757
|
+
white-space: pre-wrap;
|
|
4758
|
+
}
|
|
4759
|
+
|
|
4760
|
+
/* ── Execution history ── */
|
|
4761
|
+
.loop-exec-history-section {
|
|
4762
|
+
border-top: 1px solid var(--border);
|
|
4763
|
+
padding-top: 16px;
|
|
4764
|
+
}
|
|
4765
|
+
.loop-exec-history-header {
|
|
4766
|
+
font-size: 0.8rem;
|
|
4767
|
+
font-weight: 600;
|
|
4768
|
+
color: var(--text-secondary);
|
|
4769
|
+
text-transform: uppercase;
|
|
4770
|
+
letter-spacing: 0.04em;
|
|
4771
|
+
margin-bottom: 10px;
|
|
4772
|
+
}
|
|
4773
|
+
.loop-loading {
|
|
4774
|
+
display: flex;
|
|
4775
|
+
align-items: center;
|
|
4776
|
+
gap: 10px;
|
|
4777
|
+
padding: 20px 0;
|
|
4778
|
+
font-size: 0.85rem;
|
|
4779
|
+
color: var(--text-secondary);
|
|
4780
|
+
}
|
|
4781
|
+
.loop-exec-empty {
|
|
4782
|
+
font-size: 0.85rem;
|
|
4783
|
+
color: var(--text-secondary);
|
|
4784
|
+
padding: 16px 0;
|
|
4785
|
+
}
|
|
4786
|
+
.loop-exec-list {
|
|
4787
|
+
display: flex;
|
|
4788
|
+
flex-direction: column;
|
|
4789
|
+
gap: 4px;
|
|
4790
|
+
}
|
|
4791
|
+
.loop-exec-item {
|
|
4792
|
+
display: flex;
|
|
4793
|
+
align-items: center;
|
|
4794
|
+
justify-content: space-between;
|
|
4795
|
+
gap: 12px;
|
|
4796
|
+
padding: 8px 12px;
|
|
4797
|
+
border: 1px solid var(--border);
|
|
4798
|
+
border-radius: 6px;
|
|
4799
|
+
transition: border-color 0.15s;
|
|
4800
|
+
}
|
|
4801
|
+
.loop-exec-item:hover {
|
|
4802
|
+
border-color: rgba(59,130,246,0.2);
|
|
4803
|
+
}
|
|
4804
|
+
.loop-exec-item-left {
|
|
4805
|
+
display: flex;
|
|
4806
|
+
align-items: center;
|
|
4807
|
+
gap: 10px;
|
|
4808
|
+
flex: 1;
|
|
4809
|
+
min-width: 0;
|
|
4810
|
+
font-size: 0.82rem;
|
|
4811
|
+
}
|
|
4812
|
+
.loop-exec-item-right {
|
|
4813
|
+
flex-shrink: 0;
|
|
4814
|
+
}
|
|
4815
|
+
.loop-exec-status-icon {
|
|
4816
|
+
font-size: 0.9rem;
|
|
4817
|
+
width: 18px;
|
|
4818
|
+
text-align: center;
|
|
4819
|
+
flex-shrink: 0;
|
|
4820
|
+
}
|
|
4821
|
+
.loop-exec-status-running {
|
|
4822
|
+
color: var(--accent);
|
|
4823
|
+
animation: loop-spin 1s linear infinite;
|
|
4824
|
+
}
|
|
4825
|
+
@keyframes loop-spin {
|
|
4826
|
+
from { transform: rotate(0deg); }
|
|
4827
|
+
to { transform: rotate(360deg); }
|
|
4828
|
+
}
|
|
4829
|
+
.loop-exec-status-success {
|
|
4830
|
+
color: #10B981;
|
|
4831
|
+
}
|
|
4832
|
+
.loop-exec-status-error {
|
|
4833
|
+
color: var(--error);
|
|
4834
|
+
}
|
|
4835
|
+
.loop-exec-status-cancelled {
|
|
4836
|
+
color: var(--text-secondary);
|
|
4837
|
+
}
|
|
4838
|
+
.loop-exec-time {
|
|
4839
|
+
color: var(--text-primary);
|
|
4840
|
+
font-weight: 500;
|
|
4841
|
+
white-space: nowrap;
|
|
4842
|
+
}
|
|
4843
|
+
.loop-exec-running-label {
|
|
4844
|
+
color: var(--accent);
|
|
4845
|
+
font-weight: 500;
|
|
4846
|
+
font-size: 0.78rem;
|
|
4847
|
+
}
|
|
4848
|
+
.loop-exec-duration {
|
|
4849
|
+
color: var(--text-secondary);
|
|
4850
|
+
white-space: nowrap;
|
|
4851
|
+
}
|
|
4852
|
+
.loop-exec-error-text {
|
|
4853
|
+
color: var(--error);
|
|
4854
|
+
font-size: 0.75rem;
|
|
4855
|
+
overflow: hidden;
|
|
4856
|
+
text-overflow: ellipsis;
|
|
4857
|
+
white-space: nowrap;
|
|
4858
|
+
}
|
|
4859
|
+
.loop-exec-trigger-badge {
|
|
4860
|
+
font-size: 0.68rem;
|
|
4861
|
+
padding: 1px 6px;
|
|
4862
|
+
border-radius: 8px;
|
|
4863
|
+
background: rgba(139,92,246,0.15);
|
|
4864
|
+
color: #8B5CF6;
|
|
4865
|
+
text-transform: uppercase;
|
|
4866
|
+
letter-spacing: 0.03em;
|
|
4867
|
+
}
|
|
4868
|
+
|
|
4869
|
+
/* ── Execution messages ── */
|
|
4870
|
+
.loop-exec-messages {
|
|
4871
|
+
max-height: calc(100vh - 200px);
|
|
4872
|
+
overflow-y: auto;
|
|
4873
|
+
}
|
|
4874
|
+
|
|
4875
|
+
/* ── Running Loop notification banner ── */
|
|
4876
|
+
.loop-running-banner {
|
|
4877
|
+
position: fixed;
|
|
4878
|
+
bottom: 80px;
|
|
4879
|
+
left: 50%;
|
|
4880
|
+
transform: translateX(-50%);
|
|
4881
|
+
display: flex;
|
|
4882
|
+
align-items: center;
|
|
4883
|
+
gap: 10px;
|
|
4884
|
+
padding: 8px 16px;
|
|
4885
|
+
background: var(--bg-secondary);
|
|
4886
|
+
border: 1px solid var(--accent);
|
|
4887
|
+
border-radius: 20px;
|
|
4888
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
|
|
4889
|
+
z-index: 100;
|
|
4890
|
+
font-size: 0.82rem;
|
|
4891
|
+
color: var(--text-primary);
|
|
4892
|
+
}
|
|
4893
|
+
.loop-running-banner-dot {
|
|
4894
|
+
width: 8px;
|
|
4895
|
+
height: 8px;
|
|
4896
|
+
border-radius: 50%;
|
|
4897
|
+
background: var(--accent);
|
|
4898
|
+
animation: loop-pulse 1.5s ease-in-out infinite;
|
|
4899
|
+
}
|
|
4900
|
+
@keyframes loop-pulse {
|
|
4901
|
+
0%, 100% { opacity: 1; }
|
|
4902
|
+
50% { opacity: 0.3; }
|
|
4903
|
+
}
|
|
4904
|
+
|
|
4905
|
+
/* ── Modal dialog (generic) ── */
|
|
4906
|
+
.modal-overlay {
|
|
4907
|
+
position: fixed;
|
|
4908
|
+
top: 0; left: 0; right: 0; bottom: 0;
|
|
4909
|
+
background: rgba(0, 0, 0, 0.5);
|
|
4910
|
+
z-index: 1000;
|
|
4911
|
+
display: flex;
|
|
4912
|
+
align-items: center;
|
|
4913
|
+
justify-content: center;
|
|
4914
|
+
}
|
|
4915
|
+
.modal-dialog {
|
|
4916
|
+
width: 380px;
|
|
4917
|
+
max-width: 90vw;
|
|
4918
|
+
background: var(--bg-secondary);
|
|
4919
|
+
border: 1px solid var(--border);
|
|
4920
|
+
border-radius: 12px;
|
|
4921
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
4922
|
+
}
|
|
4923
|
+
.modal-title {
|
|
4924
|
+
padding: 12px 16px;
|
|
4925
|
+
font-size: 0.95rem;
|
|
4926
|
+
font-weight: 600;
|
|
4927
|
+
border-bottom: 1px solid var(--border);
|
|
4928
|
+
color: var(--text-primary);
|
|
4929
|
+
}
|
|
4930
|
+
.modal-body {
|
|
4931
|
+
padding: 16px;
|
|
4932
|
+
font-size: 0.88rem;
|
|
4933
|
+
line-height: 1.5;
|
|
4934
|
+
color: var(--text-primary);
|
|
4935
|
+
}
|
|
4936
|
+
.modal-actions {
|
|
4937
|
+
padding: 10px 16px;
|
|
4938
|
+
display: flex;
|
|
4939
|
+
justify-content: flex-end;
|
|
4940
|
+
gap: 8px;
|
|
4941
|
+
border-top: 1px solid var(--border);
|
|
4942
|
+
}
|
|
4943
|
+
.modal-confirm-btn {
|
|
4944
|
+
padding: 6px 20px;
|
|
4945
|
+
background: var(--error);
|
|
4946
|
+
color: #fff;
|
|
4947
|
+
border: none;
|
|
4948
|
+
border-radius: 8px;
|
|
4949
|
+
font-size: 0.85rem;
|
|
4950
|
+
font-weight: 600;
|
|
4951
|
+
cursor: pointer;
|
|
4952
|
+
transition: background 0.15s;
|
|
4953
|
+
}
|
|
4954
|
+
.modal-confirm-btn:hover {
|
|
4955
|
+
background: #c04444;
|
|
4956
|
+
}
|
|
4957
|
+
.modal-cancel-btn {
|
|
4958
|
+
padding: 6px 20px;
|
|
4959
|
+
background: transparent;
|
|
4960
|
+
color: var(--text-primary);
|
|
4961
|
+
border: 1px solid var(--border);
|
|
4962
|
+
border-radius: 8px;
|
|
4963
|
+
font-size: 0.85rem;
|
|
4964
|
+
cursor: pointer;
|
|
4965
|
+
transition: border-color 0.15s;
|
|
4966
|
+
}
|
|
4967
|
+
.modal-cancel-btn:hover {
|
|
4968
|
+
border-color: var(--text-primary);
|
|
4969
|
+
}
|
|
4970
|
+
|
|
4971
|
+
/* ── Loop error banner ── */
|
|
4972
|
+
.loop-error-banner {
|
|
4973
|
+
display: flex;
|
|
4974
|
+
align-items: center;
|
|
4975
|
+
gap: 8px;
|
|
4976
|
+
margin-top: 12px;
|
|
4977
|
+
padding: 10px 14px;
|
|
4978
|
+
background: rgba(239, 68, 68, 0.1);
|
|
4979
|
+
border: 1px solid rgba(239, 68, 68, 0.3);
|
|
4980
|
+
border-radius: 8px;
|
|
4981
|
+
color: var(--error);
|
|
4982
|
+
font-size: 0.84rem;
|
|
4983
|
+
cursor: pointer;
|
|
4984
|
+
transition: background 0.15s;
|
|
4985
|
+
}
|
|
4986
|
+
.loop-error-banner:hover {
|
|
4987
|
+
background: rgba(239, 68, 68, 0.15);
|
|
4988
|
+
}
|
|
4989
|
+
.loop-error-icon {
|
|
4990
|
+
flex-shrink: 0;
|
|
4991
|
+
font-size: 1rem;
|
|
4992
|
+
}
|
|
4993
|
+
.loop-error-text {
|
|
4994
|
+
flex: 1;
|
|
4995
|
+
min-width: 0;
|
|
4996
|
+
overflow-wrap: anywhere;
|
|
4997
|
+
}
|
|
4998
|
+
.loop-error-dismiss {
|
|
4999
|
+
flex-shrink: 0;
|
|
5000
|
+
opacity: 0.6;
|
|
5001
|
+
font-size: 0.8rem;
|
|
5002
|
+
}
|
|
5003
|
+
.loop-error-dismiss:hover {
|
|
5004
|
+
opacity: 1;
|
|
5005
|
+
}
|
|
5006
|
+
|
|
5007
|
+
/* ── Load more executions ── */
|
|
5008
|
+
.loop-load-more {
|
|
5009
|
+
display: flex;
|
|
5010
|
+
justify-content: center;
|
|
5011
|
+
padding: 12px 0 4px;
|
|
4343
5012
|
}
|