agent-afk 5.207.2 → 5.208.1

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 (64) hide show
  1. package/dist/agent/tools/handlers/web-request.d.ts +2 -2
  2. package/dist/agent/tools/handlers/web-scrape.d.ts +2 -2
  3. package/dist/cli.mjs +581 -581
  4. package/dist/index.mjs +1 -1
  5. package/dist/telegram.mjs +1 -1
  6. package/dist/web-server/shared/ledger-adapter.d.ts +3 -0
  7. package/dist/web-ui-assets/assets/index-3YQ3Lxgf.css +1 -0
  8. package/dist/web-ui-assets/assets/index-Ye2O81KT.js +298 -0
  9. package/dist/web-ui-assets/index.html +14 -87
  10. package/package.json +2 -2
  11. package/dist/web-server/frontend/ansi-strip.d.ts +0 -1
  12. package/dist/web-server/frontend/app-approvals.d.ts +0 -7
  13. package/dist/web-server/frontend/app-chrome.d.ts +0 -3
  14. package/dist/web-server/frontend/app-views.d.ts +0 -3
  15. package/dist/web-server/frontend/app.d.ts +0 -1
  16. package/dist/web-server/frontend/at-file-panel.d.ts +0 -5
  17. package/dist/web-server/frontend/bg-jobs-panel.d.ts +0 -14
  18. package/dist/web-server/frontend/chrome.d.ts +0 -1
  19. package/dist/web-server/frontend/composer-value.d.ts +0 -1
  20. package/dist/web-server/frontend/composer-wiring.d.ts +0 -7
  21. package/dist/web-server/frontend/diff-viewer.d.ts +0 -17
  22. package/dist/web-server/frontend/dom-utils.d.ts +0 -2
  23. package/dist/web-server/frontend/ledger-adapter.d.ts +0 -2
  24. package/dist/web-server/frontend/markdown-dom.d.ts +0 -1
  25. package/dist/web-server/frontend/memory-panel.d.ts +0 -6
  26. package/dist/web-server/frontend/model-selector.d.ts +0 -10
  27. package/dist/web-server/frontend/queue-panel.d.ts +0 -21
  28. package/dist/web-server/frontend/queue-reorder.d.ts +0 -5
  29. package/dist/web-server/frontend/render-approvals.d.ts +0 -22
  30. package/dist/web-server/frontend/render-incremental.d.ts +0 -3
  31. package/dist/web-server/frontend/render.d.ts +0 -16
  32. package/dist/web-server/frontend/schedule-form.d.ts +0 -7
  33. package/dist/web-server/frontend/schedule-history.d.ts +0 -1
  34. package/dist/web-server/frontend/schedules-view.d.ts +0 -33
  35. package/dist/web-server/frontend/scroll-pin.d.ts +0 -7
  36. package/dist/web-server/frontend/session-status.d.ts +0 -11
  37. package/dist/web-server/frontend/slash-autocomplete-render.d.ts +0 -3
  38. package/dist/web-server/frontend/slash-autocomplete.d.ts +0 -39
  39. package/dist/web-server/frontend/slash-highlight.d.ts +0 -8
  40. package/dist/web-server/frontend/sse-client.d.ts +0 -20
  41. package/dist/web-server/frontend/subagent-tree.d.ts +0 -27
  42. package/dist/web-server/frontend/thinking-panel.d.ts +0 -3
  43. package/dist/web-server/frontend/tool-trace-panel.d.ts +0 -2
  44. package/dist/web-server/frontend/view-model.d.ts +0 -66
  45. package/dist/web-server/frontend/web-token.d.ts +0 -3
  46. package/dist/web-ui-assets/app.js +0 -65
  47. package/dist/web-ui-assets/approvals.css +0 -55
  48. package/dist/web-ui-assets/at-file.css +0 -110
  49. package/dist/web-ui-assets/bg-jobs.css +0 -130
  50. package/dist/web-ui-assets/chrome.js +0 -1
  51. package/dist/web-ui-assets/diff-viewer.css +0 -168
  52. package/dist/web-ui-assets/memory.css +0 -146
  53. package/dist/web-ui-assets/model-selector.css +0 -118
  54. package/dist/web-ui-assets/schedules.css +0 -201
  55. package/dist/web-ui-assets/styles.css +0 -680
  56. /package/dist/{web → http-client}/egress-guard.d.ts +0 -0
  57. /package/dist/{web → http-client}/extract.d.ts +0 -0
  58. /package/dist/{web → http-client}/extraction-advisory.d.ts +0 -0
  59. /package/dist/{web → http-client}/index.d.ts +0 -0
  60. /package/dist/{web → http-client}/retryFetch.d.ts +0 -0
  61. /package/dist/{web → http-client}/scrape.d.ts +0 -0
  62. /package/dist/{web → http-client}/search.d.ts +0 -0
  63. /package/dist/{web → http-client}/types.d.ts +0 -0
  64. /package/dist/{web → http-client}/web-request.d.ts +0 -0
@@ -1,168 +0,0 @@
1
- /* ── diff-viewer.css ────────────────────────────────────────────────────────
2
- * Styles for the enhanced diff viewer (diff-viewer.ts).
3
- * All classes are prefixed `dv-` to avoid collisions with the legacy
4
- * `.diff-add / .diff-del / .diff-ctx / .diff-hunk` classes in styles.css.
5
- *
6
- * Relies on custom properties defined in styles.css:
7
- * --mono, --success, --error, --text-dim, --text-faint,
8
- * --bg-sunken, --accent, --border, --radius
9
- * ────────────────────────────────────────────────────────────────────────── */
10
-
11
- .dv-root {
12
- font-family: var(--mono);
13
- font-size: 12px;
14
- line-height: 1.5;
15
- border: 1px solid var(--border);
16
- border-radius: var(--radius);
17
- overflow: hidden;
18
- }
19
-
20
- /* File header ──────────────────────────────────────────────────────────── */
21
-
22
- .dv-file-header {
23
- display: flex;
24
- align-items: center;
25
- gap: 6px;
26
- padding: 5px 10px;
27
- background: var(--bg-sunken);
28
- border-bottom: 1px solid var(--border);
29
- font-size: 11px;
30
- color: var(--text-dim);
31
- }
32
-
33
- .dv-file-icon { flex: 0 0 auto; }
34
-
35
- .dv-file-name {
36
- color: var(--text);
37
- overflow: hidden;
38
- text-overflow: ellipsis;
39
- white-space: nowrap;
40
- }
41
-
42
- /* Empty state ──────────────────────────────────────────────────────────── */
43
-
44
- .dv-empty {
45
- padding: 8px 12px;
46
- color: var(--text-faint);
47
- font-style: italic;
48
- }
49
-
50
- /* Hunk container (<details>) ───────────────────────────────────────────── */
51
-
52
- .dv-hunk {
53
- border-bottom: 1px solid var(--border);
54
- }
55
-
56
- .dv-hunk:last-child { border-bottom: 0; }
57
-
58
- /* Hunk header (<summary>) ──────────────────────────────────────────────── */
59
-
60
- .dv-hunk-header {
61
- display: flex;
62
- align-items: center;
63
- gap: 6px;
64
- padding: 3px 8px;
65
- background: color-mix(in srgb, var(--accent) 6%, var(--bg-sunken));
66
- border-bottom: 1px solid var(--border);
67
- cursor: pointer;
68
- list-style: none;
69
- user-select: none;
70
- color: var(--text-dim);
71
- font-size: 11px;
72
- }
73
-
74
- /* Remove default UA marker across browsers */
75
- .dv-hunk-header::-webkit-details-marker { display: none; }
76
-
77
- .dv-chevron {
78
- flex: 0 0 auto;
79
- font-size: 9px;
80
- color: var(--text-faint);
81
- transition: transform 0.15s ease;
82
- /* Invariant: chevron rotates 90° when the <details> is open.
83
- The selector targets .dv-hunk[open] > summary > .dv-chevron so the
84
- transition is driven by the details[open] attribute, not JS state. */
85
- }
86
-
87
- details.dv-hunk[open] > .dv-hunk-header > .dv-chevron {
88
- transform: rotate(90deg);
89
- }
90
-
91
- .dv-hunk-range {
92
- flex: 1;
93
- color: var(--accent);
94
- opacity: 0.8;
95
- overflow: hidden;
96
- text-overflow: ellipsis;
97
- white-space: nowrap;
98
- }
99
-
100
- .dv-hunk-stats {
101
- flex: 0 0 auto;
102
- color: var(--text-faint);
103
- font-size: 10px;
104
- letter-spacing: 0.04em;
105
- }
106
-
107
- /* Hunk body ────────────────────────────────────────────────────────────── */
108
-
109
- .dv-hunk-body {
110
- overflow-x: auto;
111
- }
112
-
113
- /* Line rows ────────────────────────────────────────────────────────────── */
114
-
115
- .dv-line {
116
- display: flex;
117
- align-items: baseline;
118
- min-width: 0;
119
- white-space: pre;
120
- }
121
-
122
- .dv-line-add {
123
- background: color-mix(in srgb, var(--success) 8%, transparent);
124
- color: var(--success);
125
- }
126
-
127
- .dv-line-del {
128
- background: color-mix(in srgb, var(--error) 8%, transparent);
129
- color: var(--error);
130
- }
131
-
132
- .dv-line-ctx {
133
- color: var(--text-dim);
134
- }
135
-
136
- /* Gutter (line numbers) ────────────────────────────────────────────────── */
137
-
138
- .dv-gutter {
139
- flex: 0 0 3.5ch;
140
- text-align: right;
141
- padding: 0 6px 0 4px;
142
- color: var(--text-faint);
143
- user-select: none;
144
- border-right: 1px solid var(--border);
145
- /* Gutter numbers use same font but smaller — they frame, not compete. */
146
- font-size: 10px;
147
- line-height: 1.7;
148
- }
149
-
150
- /* Sigil (+ / - / space) ────────────────────────────────────────────────── */
151
-
152
- .dv-sigil {
153
- flex: 0 0 1.4ch;
154
- text-align: center;
155
- user-select: none;
156
- font-weight: 600;
157
- }
158
-
159
- .dv-line-ctx .dv-sigil { opacity: 0; }
160
-
161
- /* Content ──────────────────────────────────────────────────────────────── */
162
-
163
- .dv-content {
164
- flex: 1;
165
- padding: 0 8px;
166
- /* No overflow here — horizontal scroll lives on .dv-hunk-body so long
167
- lines push it wide enough to trigger the scrollbar. */
168
- }
@@ -1,146 +0,0 @@
1
- /* ── memory view ─────────────────────────────────────────────────────────── */
2
-
3
- .mem-view { flex: 1; display: flex; flex-direction: column; overflow-y: auto; padding: 24px; }
4
- .mem-panel { display: flex; flex-direction: column; flex: 1; }
5
-
6
- .mem-inner { max-width: 900px; width: 100%; margin: 0 auto; display: flex; flex-direction: column; gap: 20px; }
7
-
8
- /* ── header ──────────────────────────────────────────────────────────────── */
9
- .mem-title { margin: 0; font-size: 18px; font-weight: 600; color: var(--text); }
10
-
11
- /* ── hot memory section ──────────────────────────────────────────────────── */
12
- .mem-hot {
13
- background: var(--bg-raised); border: 1px solid var(--border);
14
- border-radius: var(--radius); padding: 16px;
15
- }
16
- .mem-hot-header {
17
- display: flex; align-items: center; justify-content: space-between;
18
- margin-bottom: 10px; gap: 12px;
19
- }
20
- .mem-hot-title {
21
- font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em;
22
- color: var(--text-dim); font-weight: 600;
23
- }
24
- .mem-hot-meta { display: flex; align-items: center; gap: 10px; }
25
- .mem-hot-pct {
26
- font-family: var(--mono); font-size: 11px; color: var(--text-dim);
27
- }
28
- .mem-hot-truncated {
29
- font-size: 10px; color: var(--warning); padding: 1px 6px;
30
- border: 1px solid color-mix(in srgb, var(--warning) 40%, transparent);
31
- border-radius: 4px; text-transform: uppercase; letter-spacing: 0.05em;
32
- }
33
-
34
- /* Usage meter bar */
35
- .mem-usage-bar {
36
- height: 3px; background: var(--bg-sunken); border-radius: 2px; margin-bottom: 10px;
37
- }
38
- .mem-usage-fill {
39
- height: 100%; border-radius: 2px; background: var(--accent);
40
- transition: width 0.3s ease;
41
- }
42
- .mem-usage-fill.is-warn { background: var(--warning); }
43
- .mem-usage-fill.is-full { background: var(--error); }
44
-
45
- .mem-hot-pre {
46
- font-family: var(--mono); font-size: 12px; color: var(--text-dim);
47
- background: var(--bg-sunken); border: 1px solid var(--border);
48
- border-radius: 6px; padding: 12px; margin: 0;
49
- white-space: pre-wrap; word-break: break-word;
50
- max-height: 240px; overflow-y: auto;
51
- }
52
- .mem-hot-empty {
53
- font-size: 13px; color: var(--text-faint); font-style: italic;
54
- padding: 8px 0;
55
- }
56
-
57
- /* ── search bar ──────────────────────────────────────────────────────────── */
58
- .mem-search-row {
59
- display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
60
- }
61
- .mem-search-input {
62
- flex: 1; min-width: 180px; padding: 8px 12px;
63
- background: var(--bg-raised); border: 1px solid var(--border);
64
- border-radius: 6px; color: var(--text); font: inherit; font-size: 13px;
65
- }
66
- .mem-search-input:focus { outline: none; border-color: var(--accent); }
67
- .mem-search-input::placeholder { color: var(--text-faint); }
68
- .mem-cat-select {
69
- padding: 8px 10px; background: var(--bg-raised); border: 1px solid var(--border);
70
- border-radius: 6px; color: var(--text); font: inherit; font-size: 13px;
71
- cursor: pointer;
72
- }
73
- .mem-cat-select:focus { outline: none; border-color: var(--accent); }
74
- .mem-search-btn {
75
- font: inherit; font-size: 13px; font-weight: 600;
76
- color: #1a0d05; background: var(--accent);
77
- border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer;
78
- white-space: nowrap; transition: opacity 0.15s ease;
79
- }
80
- .mem-search-btn:hover:not(:disabled) { opacity: 0.88; }
81
- .mem-search-btn:disabled { opacity: 0.5; cursor: default; }
82
-
83
- /* ── result list ─────────────────────────────────────────────────────────── */
84
- .mem-results { display: flex; flex-direction: column; gap: 8px; }
85
-
86
- .mem-empty {
87
- text-align: center; padding: 40px 20px; color: var(--text-dim);
88
- }
89
- .mem-empty-icon { font-size: 32px; margin-bottom: 10px; }
90
- .mem-empty-title { font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
91
- .mem-empty-sub { font-size: 13px; }
92
-
93
- .mem-loading { padding: 20px; text-align: center; color: var(--text-dim); font-size: 13px; }
94
- .mem-error { padding: 12px; background: color-mix(in srgb, var(--error) 10%, transparent);
95
- border: 1px solid color-mix(in srgb, var(--error) 30%, transparent);
96
- border-radius: 6px; color: var(--error); font-size: 13px; }
97
-
98
- /* ── result card ─────────────────────────────────────────────────────────── */
99
- .mem-card {
100
- background: var(--bg-raised); border: 1px solid var(--border);
101
- border-radius: var(--radius); padding: 12px 14px;
102
- transition: border-color 0.15s ease;
103
- }
104
- .mem-card:hover { border-color: color-mix(in srgb, var(--accent) 35%, transparent); }
105
-
106
- .mem-card-top {
107
- display: flex; align-items: center; gap: 7px; margin-bottom: 8px; flex-wrap: wrap;
108
- }
109
-
110
- /* Type badge */
111
- .mem-badge-type {
112
- font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em;
113
- padding: 2px 7px; border-radius: 4px;
114
- }
115
- .mem-badge-fact {
116
- background: color-mix(in srgb, var(--accent) 15%, transparent);
117
- color: var(--accent);
118
- border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
119
- }
120
- .mem-badge-procedure {
121
- background: color-mix(in srgb, var(--purple) 12%, transparent);
122
- color: var(--purple);
123
- border: 1px solid color-mix(in srgb, var(--purple) 30%, transparent);
124
- }
125
-
126
- /* Category badge */
127
- .mem-badge-cat {
128
- font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em;
129
- padding: 2px 6px; border-radius: 4px;
130
- background: var(--bg-sunken); border: 1px solid var(--border);
131
- color: var(--text-faint);
132
- }
133
- .mem-badge-preference { color: var(--cyan); border-color: color-mix(in srgb, var(--cyan) 30%, transparent); }
134
- .mem-badge-convention { color: var(--mint); border-color: color-mix(in srgb, var(--mint) 30%, transparent); }
135
- .mem-badge-decision { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 30%, transparent); }
136
- .mem-badge-learning { color: var(--lavender); border-color: color-mix(in srgb, var(--lavender) 30%, transparent); }
137
-
138
- .mem-card-date {
139
- margin-left: auto; font-size: 11px; color: var(--text-faint); white-space: nowrap;
140
- }
141
-
142
- /* Content preview */
143
- .mem-card-content {
144
- font-size: 13px; color: var(--text-dim); line-height: 1.5;
145
- white-space: pre-wrap; word-break: break-word;
146
- }
@@ -1,118 +0,0 @@
1
- /*
2
- * Model selector widget and model badge styles.
3
- *
4
- * All values use the CSS custom properties defined in styles.css (:root).
5
- * No hardcoded colours; no inline styles; no id selectors.
6
- *
7
- * Two concerns:
8
- * .model-selector / .model-selector__* — the <select> widget used in forms.
9
- * .model-badge / .model-badge--* — the small pill used in sidebar rows.
10
- */
11
-
12
- /* ── model selector widget ────────────────────────────────────────────────── */
13
-
14
- .model-selector {
15
- display: flex;
16
- flex-direction: column;
17
- gap: 3px;
18
- }
19
-
20
- .model-selector__label {
21
- display: flex;
22
- flex-direction: column;
23
- gap: 3px;
24
- font-size: 11px;
25
- text-transform: uppercase;
26
- letter-spacing: 0.06em;
27
- color: var(--text-dim);
28
- }
29
-
30
- /*
31
- * Contract: .model-selector__select appearance intentionally resets the
32
- * native <select> chrome so it matches the dark-theme inputs already defined
33
- * as .nsf-select in styles.css. The two rulesets are kept separate so the
34
- * selector can be used outside the new-session form without pulling in
35
- * form-specific layout.
36
- */
37
- .model-selector__select {
38
- width: 100%;
39
- padding: 5px 8px;
40
- background: var(--bg-sunken);
41
- border: 1px solid var(--border);
42
- border-radius: 6px;
43
- color: var(--text);
44
- font: inherit;
45
- font-size: 12px;
46
- /* Remove native arrow on WebKit/Blink; we rely on the default UA arrow
47
- which is acceptable in this minimal dark surface. */
48
- appearance: auto;
49
- cursor: pointer;
50
- }
51
-
52
- .model-selector__select:focus {
53
- outline: none;
54
- border-color: var(--accent);
55
- }
56
-
57
- .model-selector__select:disabled {
58
- opacity: 0.5;
59
- cursor: default;
60
- }
61
-
62
- /* Drop-down options inherit the page background on systems that respect it. */
63
- .model-selector__select option {
64
- background: var(--bg-raised);
65
- color: var(--text);
66
- }
67
-
68
- /* ── model badge pill ─────────────────────────────────────────────────────── */
69
-
70
- /*
71
- * Base pill: matches the existing .badge sizing and shape in styles.css so
72
- * the model badge fits naturally alongside .badge-live / .badge-readonly in
73
- * the .session-meta row without additional adjustment.
74
- */
75
- .model-badge {
76
- font-size: 10px;
77
- padding: 1px 6px;
78
- border-radius: 999px;
79
- font-family: var(--mono);
80
- letter-spacing: 0.03em;
81
- /* Default: text-dim, for unknown tiers. */
82
- color: var(--text-faint);
83
- background: color-mix(in srgb, var(--text-faint) 14%, transparent);
84
- flex-shrink: 0;
85
- }
86
-
87
- /*
88
- * Tier-specific colour modifiers.
89
- *
90
- * Invariant: modifier classes are always applied IN ADDITION to .model-badge,
91
- * never as standalone classes. The base class carries display/sizing; the
92
- * modifier only supplies colour.
93
- *
94
- * Colour semantics:
95
- * opus — accent (orange) — the premium tier, visually prominent.
96
- * sonnet — success (green) — the recommended default.
97
- * haiku — text-dim (grey) — the fast/light tier, visually quiet.
98
- */
99
- .model-badge--opus {
100
- color: var(--accent);
101
- background: color-mix(in srgb, var(--accent) 14%, transparent);
102
- }
103
-
104
- .model-badge--sonnet {
105
- color: var(--success);
106
- background: color-mix(in srgb, var(--success) 14%, transparent);
107
- }
108
-
109
- .model-badge--haiku {
110
- color: var(--text-dim);
111
- background: color-mix(in srgb, var(--text-dim) 14%, transparent);
112
- }
113
-
114
- /* Fallback: same as base, explicit for documentation clarity. */
115
- .model-badge--default {
116
- color: var(--text-faint);
117
- background: color-mix(in srgb, var(--text-faint) 14%, transparent);
118
- }
@@ -1,201 +0,0 @@
1
- /* ── schedules view ─────────────────────────────────────────────────────── */
2
-
3
- .sched-view { flex: 1; display: flex; flex-direction: column; overflow-y: auto; padding: 24px; }
4
-
5
- .sched-header { max-width: 900px; width: 100%; margin: 0 auto 20px; }
6
- .sched-title-row {
7
- display: flex; align-items: center; justify-content: space-between; gap: 12px;
8
- margin-bottom: 10px;
9
- }
10
- .sched-title { margin: 0; font-size: 18px; font-weight: 600; color: var(--text); }
11
- .sched-add-btn {
12
- font: inherit; font-size: 12px; font-weight: 600;
13
- color: var(--accent); background: transparent;
14
- border: 1px solid var(--border); border-radius: 6px;
15
- padding: 6px 14px; cursor: pointer; white-space: nowrap;
16
- transition: border-color 0.15s ease, background 0.15s ease;
17
- }
18
- .sched-add-btn:hover { border-color: var(--accent); background: var(--bg-raised); }
19
-
20
- .sched-daemon-status {
21
- display: flex; align-items: center; gap: 8px;
22
- font-size: 12px; color: var(--text-dim);
23
- }
24
- .sched-dot-ok, .sched-dot-off {
25
- width: 8px; height: 8px; border-radius: 50%; flex: 0 0 8px;
26
- }
27
- .sched-dot-ok { background: var(--success); }
28
- .sched-dot-off { background: var(--text-faint); }
29
-
30
- /* ── empty state ────────────────────────────────────────────────────────── */
31
- .sched-empty {
32
- text-align: center; padding: 48px 20px; color: var(--text-dim);
33
- max-width: 900px; width: 100%; margin: 0 auto;
34
- }
35
- .sched-empty-icon { font-size: 36px; margin-bottom: 12px; }
36
- .sched-empty-title { font-size: 16px; font-weight: 600; margin-bottom: 6px; color: var(--text); }
37
- .sched-empty-sub { font-size: 13px; }
38
-
39
- /* ── schedule cards ─────────────────────────────────────────────────────── */
40
- .sched-list { max-width: 900px; width: 100%; margin: 0 auto; display: flex; flex-direction: column; gap: 10px; }
41
- .sched-card {
42
- background: var(--bg-raised); border: 1px solid var(--border);
43
- border-radius: var(--radius); padding: 14px 16px;
44
- transition: border-color 0.15s ease;
45
- }
46
- .sched-card:hover { border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
47
- .sched-card-disabled { opacity: 0.6; }
48
- .sched-card-disabled:hover { border-color: var(--border); }
49
-
50
- .sched-card-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
51
- .sched-card-name { font-size: 14px; font-weight: 600; color: var(--text); }
52
-
53
- /* ── toggle switch ──────────────────────────────────────────────────────── */
54
- .sched-toggle {
55
- position: relative; width: 36px; height: 20px;
56
- background: var(--border); border: none; border-radius: 10px;
57
- cursor: pointer; padding: 0;
58
- transition: background 0.2s ease;
59
- }
60
- .sched-toggle.is-on { background: var(--success); }
61
- .sched-toggle-dot {
62
- position: absolute; top: 2px; left: 2px;
63
- width: 16px; height: 16px; border-radius: 50%;
64
- background: var(--text); transition: transform 0.2s ease;
65
- }
66
- .sched-toggle.is-on .sched-toggle-dot { transform: translateX(16px); }
67
-
68
- /* ── card details ───────────────────────────────────────────────────────── */
69
- .sched-card-details { display: flex; flex-direction: column; gap: 5px; margin-bottom: 10px; }
70
- .sched-detail-row { display: flex; align-items: baseline; gap: 10px; font-size: 12px; }
71
- .sched-detail-label {
72
- color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.06em;
73
- font-size: 10px; min-width: 68px; flex: 0 0 auto;
74
- }
75
- .sched-detail-value { color: var(--text-dim); display: flex; align-items: baseline; gap: 8px; }
76
- .sched-detail-code {
77
- font-family: var(--mono); font-size: 12px; color: var(--accent);
78
- background: var(--bg-sunken); border: 1px solid var(--border);
79
- border-radius: 4px; padding: 1px 6px;
80
- }
81
- .sched-cron-raw {
82
- font-family: var(--mono); font-size: 10px; color: var(--text-faint);
83
- background: var(--bg-sunken); border: 1px solid var(--border);
84
- border-radius: 3px; padding: 0 4px;
85
- }
86
-
87
- .sched-card-meta {
88
- display: flex; align-items: center; gap: 10px;
89
- font-size: 10px; color: var(--text-faint); margin-top: 4px;
90
- }
91
- .sched-card-id { font-family: var(--mono); }
92
- .sched-card-time { margin-left: auto; }
93
-
94
- /* ── card actions ───────────────────────────────────────────────────────── */
95
- .sched-card-actions {
96
- display: flex; gap: 8px; padding-top: 10px;
97
- border-top: 1px solid var(--border);
98
- }
99
- .sched-action-btn {
100
- font: inherit; font-size: 11px; color: var(--text-dim);
101
- background: transparent; border: 1px solid var(--border);
102
- border-radius: 5px; padding: 3px 10px; cursor: pointer;
103
- transition: color 0.15s ease, border-color 0.15s ease;
104
- }
105
- .sched-action-btn:hover { color: var(--text); border-color: var(--accent); }
106
- .sched-action-danger { color: var(--error); }
107
- .sched-action-danger:hover { color: var(--error); border-color: var(--error); }
108
-
109
- /* ── modal overlay ──────────────────────────────────────────────────────── */
110
- .sched-overlay {
111
- position: fixed; inset: 0; z-index: 50;
112
- display: flex; align-items: center; justify-content: center;
113
- background: rgba(0, 0, 0, 0.65);
114
- }
115
- .sched-modal {
116
- background: var(--bg-raised); border: 1px solid var(--border);
117
- border-radius: var(--radius); padding: 24px;
118
- width: 480px; max-width: 92vw; max-height: 85vh; overflow-y: auto;
119
- }
120
- .sched-modal-wide { width: 600px; }
121
- .sched-modal-title { margin: 0 0 18px; font-size: 16px; font-weight: 600; color: var(--text); }
122
-
123
- /* ── form fields ────────────────────────────────────────────────────────── */
124
- .sched-field { margin-bottom: 14px; }
125
- .sched-label {
126
- display: block; font-size: 11px; text-transform: uppercase;
127
- letter-spacing: 0.06em; color: var(--text-dim); margin-bottom: 5px;
128
- }
129
- .sched-input, .sched-select {
130
- width: 100%; padding: 8px 10px;
131
- background: var(--bg-sunken); border: 1px solid var(--border);
132
- border-radius: 6px; color: var(--text); font: inherit; font-size: 13px;
133
- }
134
- .sched-input:focus, .sched-select:focus { outline: none; border-color: var(--accent); }
135
- .sched-input-mono { font-family: var(--mono); font-size: 12px; }
136
- .sched-cron-preview {
137
- font-size: 11px; color: var(--text-dim); margin-top: 5px;
138
- font-style: italic; min-height: 16px;
139
- }
140
-
141
- .sched-btn-row { display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px; }
142
- .sched-cancel-btn {
143
- font: inherit; font-size: 13px; color: var(--text-dim);
144
- background: transparent; border: 1px solid var(--border);
145
- border-radius: 6px; padding: 8px 18px; cursor: pointer;
146
- }
147
- .sched-cancel-btn:hover { border-color: var(--text-dim); }
148
- .sched-save-btn {
149
- font: inherit; font-size: 13px; font-weight: 600;
150
- color: #1a0d05; background: var(--accent);
151
- border: none; border-radius: 6px; padding: 8px 22px; cursor: pointer;
152
- transition: opacity 0.15s ease;
153
- }
154
- .sched-save-btn:hover:not(:disabled) { opacity: 0.88; }
155
- .sched-save-btn:disabled { opacity: 0.5; cursor: default; }
156
-
157
- /* ── history records ────────────────────────────────────────────────────── */
158
- .sched-history-body { max-height: 50vh; overflow-y: auto; margin-bottom: 16px; }
159
- .sched-history-loading { padding: 20px; color: var(--text-dim); text-align: center; }
160
- .sched-hist-row {
161
- padding: 10px 12px; border-radius: 6px; margin-bottom: 6px;
162
- background: var(--bg-sunken); border: 1px solid var(--border);
163
- }
164
- .sched-hist-header { display: flex; align-items: center; gap: 8px; font-size: 12px; }
165
- .sched-hist-dot { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 7px; }
166
- .sched-hist-dot-success { background: var(--success); }
167
- .sched-hist-dot-error { background: var(--error); }
168
- .sched-hist-dot-skipped { background: var(--warning); }
169
- .sched-hist-status { color: var(--text-dim); text-transform: uppercase; font-size: 10px; letter-spacing: 0.06em; font-family: var(--mono); }
170
- .sched-hist-time { color: var(--text-faint); font-size: 11px; }
171
- .sched-hist-duration { color: var(--text-dim); font-family: var(--mono); font-size: 11px; margin-left: auto; }
172
- .sched-hist-trigger {
173
- font-size: 10px; color: var(--text-faint); border: 1px solid var(--border);
174
- border-radius: 3px; padding: 0 4px;
175
- }
176
- .sched-hist-error {
177
- margin-top: 6px; font-size: 12px; color: var(--error);
178
- font-family: var(--mono); white-space: pre-wrap; word-break: break-word;
179
- }
180
- .sched-hist-skip { margin-top: 6px; font-size: 12px; color: var(--warning); }
181
- .sched-hist-excerpt {
182
- margin-top: 6px; font-size: 11px; color: var(--text-faint);
183
- font-family: var(--mono); white-space: pre-wrap; word-break: break-word;
184
- max-height: 80px; overflow-y: auto;
185
- }
186
-
187
- /* ── nav tabs ───────────────────────────────────────────────────────────── */
188
- .sidebar-nav {
189
- display: flex; border-bottom: 1px solid var(--border);
190
- }
191
- .sidebar-nav-btn {
192
- flex: 1; padding: 8px 0; background: none; border: none;
193
- border-bottom: 2px solid transparent;
194
- color: var(--text-dim); font: inherit; font-size: 11px;
195
- text-transform: uppercase; letter-spacing: 0.06em;
196
- cursor: pointer; transition: color 0.15s ease, border-color 0.15s ease;
197
- }
198
- .sidebar-nav-btn:hover { color: var(--text); }
199
- .sidebar-nav-btn.is-active {
200
- color: var(--accent); border-bottom-color: var(--accent);
201
- }