trackops 2.0.3 → 2.0.4
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/README.md +238 -0
- package/lib/init.js +2 -2
- package/lib/locale.js +41 -17
- package/lib/opera-bootstrap.js +68 -7
- package/lib/opera.js +10 -2
- package/lib/registry.js +18 -0
- package/lib/server.js +312 -207
- package/locales/en.json +4 -0
- package/locales/es.json +4 -0
- package/package.json +1 -1
- package/skills/trackops/locales/en/references/activation.md +15 -0
- package/skills/trackops/locales/en/references/troubleshooting.md +12 -0
- package/skills/trackops/references/activation.md +15 -0
- package/skills/trackops/references/troubleshooting.md +12 -0
- package/skills/trackops/skill.json +2 -2
- package/ui/css/base.css +19 -1
- package/ui/css/charts.css +106 -8
- package/ui/css/components.css +554 -17
- package/ui/css/onboarding.css +133 -0
- package/ui/css/panels.css +345 -406
- package/ui/css/terminal.css +125 -0
- package/ui/css/timeline.css +58 -0
- package/ui/css/tokens.css +170 -113
- package/ui/index.html +3 -0
- package/ui/js/api.js +49 -13
- package/ui/js/app.js +28 -32
- package/ui/js/charts.js +526 -0
- package/ui/js/filters.js +247 -0
- package/ui/js/icons.js +82 -57
- package/ui/js/keyboard.js +229 -0
- package/ui/js/onboarding.js +33 -42
- package/ui/js/router.js +20 -3
- package/ui/js/views/board.js +84 -114
- package/ui/js/views/dashboard.js +870 -0
- package/ui/js/views/projects.js +745 -0
- package/ui/js/views/scrum.js +476 -0
- package/ui/js/views/settings.js +197 -247
- package/ui/js/views/sidebar.js +37 -31
- package/ui/js/views/tasks.js +218 -101
- package/ui/js/views/timeline.js +265 -0
- package/ui/js/views/topbar.js +94 -107
- package/ui/app.js +0 -950
- package/ui/js/views/insights.js +0 -340
- package/ui/js/views/overview.js +0 -369
- package/ui/styles.css +0 -688
package/package.json
CHANGED
|
@@ -73,3 +73,18 @@ trackops locale get
|
|
|
73
73
|
trackops locale set en
|
|
74
74
|
trackops doctor locale
|
|
75
75
|
```
|
|
76
|
+
|
|
77
|
+
## Uninstall
|
|
78
|
+
|
|
79
|
+
Global:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx skills remove --global trackops -y
|
|
83
|
+
npm uninstall -g trackops
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Local:
|
|
87
|
+
|
|
88
|
+
- there is no `trackops uninstall` command yet
|
|
89
|
+
- review and remove `.trackops-workspace.json`, `ops/`, and `app/.env` if it was only the bridge
|
|
90
|
+
- do not delete `/.env` or `/.env.example` without checking whether the project still needs them
|
|
@@ -53,3 +53,15 @@ Check that both files exist and contain usable data:
|
|
|
53
53
|
- Run `trackops env status`.
|
|
54
54
|
- Run `trackops env sync`.
|
|
55
55
|
- If bridge mode is `copy`, do not edit `app/.env` directly.
|
|
56
|
+
|
|
57
|
+
## I want to remove TrackOps completely
|
|
58
|
+
|
|
59
|
+
- Remove the global skill:
|
|
60
|
+
`npx skills remove --global trackops -y`
|
|
61
|
+
- Remove the global runtime:
|
|
62
|
+
`npm uninstall -g trackops`
|
|
63
|
+
- Inside the repository, local removal is still manual:
|
|
64
|
+
- review `.trackops-workspace.json`
|
|
65
|
+
- review `ops/`
|
|
66
|
+
- review `app/.env` if it was only the bridge
|
|
67
|
+
- Do not delete `/.env` or `/.env.example` before checking whether the project still depends on them
|
|
@@ -73,3 +73,18 @@ trackops locale get
|
|
|
73
73
|
trackops locale set es
|
|
74
74
|
trackops doctor locale
|
|
75
75
|
```
|
|
76
|
+
|
|
77
|
+
## Desinstalacion
|
|
78
|
+
|
|
79
|
+
Global:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx skills remove --global trackops -y
|
|
83
|
+
npm uninstall -g trackops
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Local:
|
|
87
|
+
|
|
88
|
+
- no existe todavia `trackops uninstall`
|
|
89
|
+
- revisa y elimina manualmente `.trackops-workspace.json`, `ops/` y `app/.env` si solo era bridge
|
|
90
|
+
- no borres `/.env` ni `/.env.example` sin revisar si el proyecto sigue necesitandolos
|
|
@@ -53,3 +53,15 @@ Comprueba que existan ambos archivos y contengan datos utiles:
|
|
|
53
53
|
- Ejecuta `trackops env status`.
|
|
54
54
|
- Ejecuta `trackops env sync`.
|
|
55
55
|
- Si el modo bridge es `copy`, no edites `app/.env` directamente.
|
|
56
|
+
|
|
57
|
+
## Quiero quitar TrackOps por completo
|
|
58
|
+
|
|
59
|
+
- Quita la skill global:
|
|
60
|
+
`npx skills remove --global trackops -y`
|
|
61
|
+
- Quita el runtime global:
|
|
62
|
+
`npm uninstall -g trackops`
|
|
63
|
+
- En el repo, la retirada local sigue siendo manual:
|
|
64
|
+
- revisa `.trackops-workspace.json`
|
|
65
|
+
- revisa `ops/`
|
|
66
|
+
- revisa `app/.env` si era solo bridge
|
|
67
|
+
- No borres `/.env` ni `/.env.example` sin comprobar antes si el proyecto sigue dependiendo de ellos
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"name": "trackops",
|
|
3
3
|
"shortDescription": "Global TrackOps skill that explains TrackOps, requires explicit runtime install, and guides per-repository activation.",
|
|
4
4
|
"description": "Explains what TrackOps does, installs the global skill layer, requires explicit runtime installation with npm, supports Spanish and English, activates TrackOps repository by repository, and routes OPERA onboarding into either direct bootstrap or agent-led discovery.",
|
|
5
|
-
"skillVersion": "2.0.
|
|
6
|
-
"trackopsVersion": "2.0.
|
|
5
|
+
"skillVersion": "2.0.4",
|
|
6
|
+
"trackopsVersion": "2.0.4",
|
|
7
7
|
"npmPackage": "trackops",
|
|
8
8
|
"bootstrapPolicy": "explicit_install",
|
|
9
9
|
"supportedAgentsV1": [
|
package/ui/css/base.css
CHANGED
|
@@ -20,7 +20,8 @@ body {
|
|
|
20
20
|
font-family: var(--font-ui);
|
|
21
21
|
font-size: var(--text-base);
|
|
22
22
|
color: var(--text-primary);
|
|
23
|
-
background
|
|
23
|
+
background: var(--bg-gradient);
|
|
24
|
+
background-attachment: fixed;
|
|
24
25
|
line-height: 1.55;
|
|
25
26
|
min-height: 100dvh;
|
|
26
27
|
overflow-x: hidden;
|
|
@@ -69,6 +70,12 @@ body {
|
|
|
69
70
|
"sidebar topbar"
|
|
70
71
|
"sidebar content";
|
|
71
72
|
min-height: 100dvh;
|
|
73
|
+
transition: grid-template-columns var(--duration-slow) var(--ease-out);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.app-shell:has(.sidebar:hover),
|
|
77
|
+
.app-shell:has(.sidebar:focus-within) {
|
|
78
|
+
grid-template-columns: var(--sidebar-width-expanded) 1fr;
|
|
72
79
|
}
|
|
73
80
|
|
|
74
81
|
#sidebar {
|
|
@@ -95,6 +102,7 @@ body {
|
|
|
95
102
|
padding: var(--content-pad);
|
|
96
103
|
min-height: calc(100dvh - var(--topbar-height));
|
|
97
104
|
overflow-y: auto;
|
|
105
|
+
scroll-behavior: smooth;
|
|
98
106
|
}
|
|
99
107
|
|
|
100
108
|
/* ── Tipografía ── */
|
|
@@ -236,6 +244,16 @@ ul, ol { list-style: none; }
|
|
|
236
244
|
.text-warning { color: var(--warning); }
|
|
237
245
|
.text-danger { color: var(--danger); }
|
|
238
246
|
|
|
247
|
+
/* ── Reduced motion (WCAG 2.2 AA) ── */
|
|
248
|
+
@media (prefers-reduced-motion: reduce) {
|
|
249
|
+
*, *::before, *::after {
|
|
250
|
+
animation-duration: 0.01ms !important;
|
|
251
|
+
animation-iteration-count: 1 !important;
|
|
252
|
+
transition-duration: 0.01ms !important;
|
|
253
|
+
scroll-behavior: auto !important;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
239
257
|
/* ── Responsive: sidebar colapsable en pantallas menores a 1024px ── */
|
|
240
258
|
@media (max-width: 1024px) {
|
|
241
259
|
.app-shell {
|
package/ui/css/charts.css
CHANGED
|
@@ -6,13 +6,25 @@
|
|
|
6
6
|
CHART CARD CONTAINER
|
|
7
7
|
─────────────────────────────────── */
|
|
8
8
|
.chart-card {
|
|
9
|
-
background: var(--
|
|
10
|
-
|
|
9
|
+
background: var(--glass-bg);
|
|
10
|
+
backdrop-filter: blur(var(--glass-blur));
|
|
11
|
+
-webkit-backdrop-filter: blur(var(--glass-blur));
|
|
12
|
+
border: 1px solid var(--glass-border);
|
|
11
13
|
border-radius: var(--radius-xl);
|
|
12
14
|
padding: var(--space-5);
|
|
13
15
|
display: flex;
|
|
14
16
|
flex-direction: column;
|
|
15
17
|
gap: var(--space-4);
|
|
18
|
+
box-shadow: var(--glass-shadow), var(--glass-inner);
|
|
19
|
+
transition:
|
|
20
|
+
border-color var(--duration-base) var(--ease-out),
|
|
21
|
+
box-shadow var(--duration-base) var(--ease-out),
|
|
22
|
+
transform var(--duration-base) var(--ease-out);
|
|
23
|
+
}
|
|
24
|
+
.chart-card:hover {
|
|
25
|
+
border-color: var(--glass-border-hover);
|
|
26
|
+
box-shadow: var(--shadow-sm);
|
|
27
|
+
transform: translateY(-2px);
|
|
16
28
|
}
|
|
17
29
|
|
|
18
30
|
.chart-title {
|
|
@@ -62,7 +74,7 @@
|
|
|
62
74
|
.bar-fill {
|
|
63
75
|
height: 100%;
|
|
64
76
|
border-radius: var(--radius-full);
|
|
65
|
-
background: linear-gradient(90deg, var(--accent)
|
|
77
|
+
background: linear-gradient(90deg, var(--accent) 0%, var(--accent-hover) 100%);
|
|
66
78
|
transform-origin: left;
|
|
67
79
|
animation: barGrow 0.8s var(--ease-out) both;
|
|
68
80
|
}
|
|
@@ -104,13 +116,13 @@
|
|
|
104
116
|
width: 100%;
|
|
105
117
|
min-height: 4px;
|
|
106
118
|
border-radius: var(--radius-xs) var(--radius-xs) 2px 2px;
|
|
107
|
-
background: linear-gradient(180deg, var(--accent) 0%, rgba(
|
|
119
|
+
background: linear-gradient(180deg, var(--accent) 0%, rgba(59,130,246,0.4) 100%);
|
|
108
120
|
transform-origin: bottom;
|
|
109
121
|
animation: heightGrow 0.9s var(--ease-out) both;
|
|
110
122
|
transition: background var(--duration-fast);
|
|
111
123
|
}
|
|
112
124
|
.activity-bar:hover {
|
|
113
|
-
background: linear-gradient(180deg, var(--accent-hover) 0%, rgba(
|
|
125
|
+
background: linear-gradient(180deg, var(--accent-hover) 0%, rgba(96,165,250,0.5) 100%);
|
|
114
126
|
}
|
|
115
127
|
|
|
116
128
|
.activity-bar-label {
|
|
@@ -129,7 +141,7 @@
|
|
|
129
141
|
|
|
130
142
|
.donut-track {
|
|
131
143
|
fill: none;
|
|
132
|
-
stroke:
|
|
144
|
+
stroke: rgba(255,255,255,0.06);
|
|
133
145
|
stroke-width: 12;
|
|
134
146
|
}
|
|
135
147
|
|
|
@@ -275,8 +287,10 @@
|
|
|
275
287
|
}
|
|
276
288
|
|
|
277
289
|
.health-card {
|
|
278
|
-
background: var(--
|
|
279
|
-
|
|
290
|
+
background: var(--glass-bg-subtle);
|
|
291
|
+
backdrop-filter: blur(var(--glass-blur-sm));
|
|
292
|
+
-webkit-backdrop-filter: blur(var(--glass-blur-sm));
|
|
293
|
+
border: 1px solid var(--glass-border);
|
|
280
294
|
border-radius: var(--radius-md);
|
|
281
295
|
padding: var(--space-4);
|
|
282
296
|
display: flex;
|
|
@@ -325,3 +339,87 @@
|
|
|
325
339
|
z-index: var(--z-panel);
|
|
326
340
|
}
|
|
327
341
|
.chart-tooltip.is-visible { opacity: 1; }
|
|
342
|
+
|
|
343
|
+
/* ───────────────────────────────────
|
|
344
|
+
PERIOD SELECTOR
|
|
345
|
+
─────────────────────────────────── */
|
|
346
|
+
.period-selector {
|
|
347
|
+
display: flex;
|
|
348
|
+
gap: var(--space-1);
|
|
349
|
+
background: var(--surface-3);
|
|
350
|
+
border-radius: var(--radius-full);
|
|
351
|
+
padding: 2px;
|
|
352
|
+
border: 1px solid var(--border);
|
|
353
|
+
}
|
|
354
|
+
.period-btn {
|
|
355
|
+
padding: 0.3rem 0.85rem;
|
|
356
|
+
font-size: var(--text-xs);
|
|
357
|
+
font-weight: 600;
|
|
358
|
+
border-radius: var(--radius-full);
|
|
359
|
+
color: var(--text-secondary);
|
|
360
|
+
transition:
|
|
361
|
+
background var(--duration-fast) var(--ease-out),
|
|
362
|
+
color var(--duration-fast) var(--ease-out);
|
|
363
|
+
}
|
|
364
|
+
.period-btn:hover {
|
|
365
|
+
color: var(--text-primary);
|
|
366
|
+
background: var(--surface-4);
|
|
367
|
+
}
|
|
368
|
+
.period-btn.is-active {
|
|
369
|
+
background: var(--accent);
|
|
370
|
+
color: white;
|
|
371
|
+
box-shadow: var(--shadow-sm);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* ───────────────────────────────────
|
|
375
|
+
LINE / AREA CHART SVG
|
|
376
|
+
─────────────────────────────────── */
|
|
377
|
+
.line-chart-container {
|
|
378
|
+
position: relative;
|
|
379
|
+
overflow: visible;
|
|
380
|
+
}
|
|
381
|
+
.line-chart-container svg {
|
|
382
|
+
display: block;
|
|
383
|
+
overflow: visible;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/* ───────────────────────────────────
|
|
387
|
+
HEATMAP CHART
|
|
388
|
+
─────────────────────────────────── */
|
|
389
|
+
.heatmap-container {
|
|
390
|
+
overflow-x: auto;
|
|
391
|
+
scrollbar-width: thin;
|
|
392
|
+
scrollbar-color: var(--surface-3) transparent;
|
|
393
|
+
}
|
|
394
|
+
.heatmap-container svg {
|
|
395
|
+
display: block;
|
|
396
|
+
}
|
|
397
|
+
.heatmap-label {
|
|
398
|
+
font-family: var(--font-mono);
|
|
399
|
+
font-size: 10px;
|
|
400
|
+
fill: var(--text-muted);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* ───────────────────────────────────
|
|
404
|
+
DEPENDENCY GRAPH
|
|
405
|
+
─────────────────────────────────── */
|
|
406
|
+
.dep-graph-container {
|
|
407
|
+
overflow-x: auto;
|
|
408
|
+
padding: var(--space-3) 0;
|
|
409
|
+
}
|
|
410
|
+
.dep-graph-container svg {
|
|
411
|
+
display: block;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* ───────────────────────────────────
|
|
415
|
+
CHART WRAPPER (responsive)
|
|
416
|
+
─────────────────────────────────── */
|
|
417
|
+
.chart-wrapper {
|
|
418
|
+
position: relative;
|
|
419
|
+
width: 100%;
|
|
420
|
+
min-height: 200px;
|
|
421
|
+
}
|
|
422
|
+
.chart-wrapper svg {
|
|
423
|
+
width: 100%;
|
|
424
|
+
height: auto;
|
|
425
|
+
}
|