trackops 2.0.2 → 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.
Files changed (48) hide show
  1. package/README.md +238 -0
  2. package/lib/init.js +2 -2
  3. package/lib/locale.js +41 -17
  4. package/lib/opera-bootstrap.js +68 -7
  5. package/lib/opera.js +10 -2
  6. package/lib/registry.js +18 -0
  7. package/lib/server.js +312 -207
  8. package/locales/en.json +4 -0
  9. package/locales/es.json +4 -0
  10. package/package.json +1 -1
  11. package/skills/trackops/SKILL.md +39 -4
  12. package/skills/trackops/agents/openai.yaml +2 -2
  13. package/skills/trackops/locales/en/SKILL.md +39 -4
  14. package/skills/trackops/locales/en/references/activation.md +15 -0
  15. package/skills/trackops/locales/en/references/troubleshooting.md +12 -0
  16. package/skills/trackops/references/activation.md +15 -0
  17. package/skills/trackops/references/troubleshooting.md +12 -0
  18. package/skills/trackops/skill.json +4 -4
  19. package/ui/css/base.css +19 -1
  20. package/ui/css/charts.css +106 -8
  21. package/ui/css/components.css +554 -17
  22. package/ui/css/onboarding.css +133 -0
  23. package/ui/css/panels.css +345 -406
  24. package/ui/css/terminal.css +125 -0
  25. package/ui/css/timeline.css +58 -0
  26. package/ui/css/tokens.css +170 -113
  27. package/ui/index.html +3 -0
  28. package/ui/js/api.js +49 -13
  29. package/ui/js/app.js +28 -32
  30. package/ui/js/charts.js +526 -0
  31. package/ui/js/filters.js +247 -0
  32. package/ui/js/icons.js +82 -57
  33. package/ui/js/keyboard.js +229 -0
  34. package/ui/js/onboarding.js +33 -42
  35. package/ui/js/router.js +20 -3
  36. package/ui/js/views/board.js +84 -114
  37. package/ui/js/views/dashboard.js +870 -0
  38. package/ui/js/views/projects.js +745 -0
  39. package/ui/js/views/scrum.js +476 -0
  40. package/ui/js/views/settings.js +197 -247
  41. package/ui/js/views/sidebar.js +37 -31
  42. package/ui/js/views/tasks.js +218 -101
  43. package/ui/js/views/timeline.js +265 -0
  44. package/ui/js/views/topbar.js +94 -107
  45. package/ui/app.js +0 -950
  46. package/ui/js/views/insights.js +0 -340
  47. package/ui/js/views/overview.js +0 -369
  48. package/ui/styles.css +0 -688
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trackops",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "Operational project control with task management, document generation, multi-project dashboard, and optional OPERA methodology",
5
5
  "main": "lib/control.js",
6
6
  "bin": {
@@ -1,13 +1,40 @@
1
1
  ---
2
2
  name: "trackops"
3
- description: "Skill global de TrackOps para preparar al agente, exigir la instalacion explicita del runtime con npm y guiar la activacion local de TrackOps y OPERA dentro de cada repositorio."
3
+ description: "Skill global de TrackOps para explicar que hace TrackOps, exigir la instalacion explicita del runtime con npm y guiar la activacion local de proyectos y OPERA en cada repositorio."
4
4
  ---
5
5
 
6
6
  # TrackOps
7
7
 
8
8
  Si la conversacion y el proyecto deben trabajar en ingles, lee `locales/en/SKILL.md` antes de seguir.
9
9
 
10
- ## Capa global
10
+ TrackOps sirve para trabajar con agentes sobre proyectos reales sin mezclar la aplicacion y la capa operativa.
11
+
12
+ Esta skill es la puerta de entrada cuando alguien:
13
+
14
+ - quiere arrancar un proyecto con agentes IA
15
+ - ya tiene un repo y necesita orden operativo
16
+ - necesita activar TrackOps y, si hace falta, OPERA
17
+ - quiere trabajar en espanol o en ingles con el mismo flujo
18
+
19
+ ## Que hace esta skill
20
+
21
+ Esta skill:
22
+
23
+ - explica que es TrackOps y cuando conviene usarlo
24
+ - exige una instalacion explicita y visible del runtime
25
+ - guia la activacion por repositorio
26
+ - ayuda a decidir si OPERA debe seguir por `direct bootstrap` o por `agent handoff`
27
+
28
+ ## Que no hace esta skill
29
+
30
+ Esta skill no:
31
+
32
+ - instala paquetes por su cuenta
33
+ - ejecuta codigo remoto en silencio
34
+ - modifica un repositorio antes de que el runtime exista
35
+ - sustituye al runtime `trackops`
36
+
37
+ ## Flujo rapido
11
38
 
12
39
  Instala la skill del marketplace con:
13
40
 
@@ -29,7 +56,7 @@ Reglas:
29
56
  - la skill puede verificar `trackops --version`, pero no debe encadenar instalaciones silenciosas
30
57
  - la skill no debe crear archivos dentro de un repositorio por si sola
31
58
 
32
- ## Capa local del proyecto
59
+ ## Activacion en un proyecto
33
60
 
34
61
  Dentro del repositorio:
35
62
 
@@ -49,7 +76,7 @@ Reglas base:
49
76
  - deja la documentacion operativa generada dentro de `ops/`
50
77
  - usa `trackops locale get|set` y `trackops doctor locale` cuando el idioma importe
51
78
 
52
- ## Onboarding de OPERA
79
+ ## Como entra OPERA
53
80
 
54
81
  OPERA ya no asume que todo usuario es tecnico.
55
82
 
@@ -80,6 +107,14 @@ Si TrackOps deriva al agente:
80
107
  trackops opera bootstrap --resume
81
108
  ```
82
109
 
110
+ ## Que debe entender alguien que llega desde skills.sh
111
+
112
+ - la skill global instala instrucciones en el agente
113
+ - el runtime se instala por separado con npm
114
+ - `trackops init` activa el proyecto
115
+ - `trackops opera install` anade el framework operativo completo solo cuando hace falta
116
+ - TrackOps separa producto y operacion para que el repo no se vuelva caotico
117
+
83
118
  ## Que referencia leer y cuando
84
119
 
85
120
  - lee `references/activation.md` solo para instalacion, verificacion del runtime, locale bootstrap y activacion de un repo
@@ -1,7 +1,7 @@
1
1
  interface:
2
2
  display_name: "TrackOps"
3
- short_description: "Guide explicit TrackOps install and activate OPERA"
4
- default_prompt: "Use $trackops to install the global skill, require explicit npm installation of the TrackOps runtime, and then activate TrackOps and OPERA in this repository."
3
+ short_description: "Explain TrackOps and guide explicit install"
4
+ default_prompt: "Use $trackops to explain what TrackOps does, require explicit npm installation of the TrackOps runtime, and then activate TrackOps and OPERA in this repository."
5
5
 
6
6
  policy:
7
7
  allow_implicit_invocation: true
@@ -1,13 +1,40 @@
1
1
  ---
2
2
  name: "trackops"
3
- description: "Global TrackOps skill for preparing the agent, requiring explicit npm runtime installation, and guiding local TrackOps and OPERA activation inside each repository."
3
+ description: "Global TrackOps skill for explaining what TrackOps does, requiring explicit npm runtime installation, and guiding local project and OPERA activation inside each repository."
4
4
  ---
5
5
 
6
6
  # TrackOps
7
7
 
8
8
  Use this localized file when the conversation and project should run in English.
9
9
 
10
- ## Global layer
10
+ TrackOps is for working with agents on real projects without mixing the product itself with the operational layer.
11
+
12
+ Use this skill when someone:
13
+
14
+ - wants to start a project with AI agents
15
+ - already has a repository and needs operational structure
16
+ - needs to activate TrackOps and, if needed, OPERA
17
+ - wants the same workflow in English or Spanish
18
+
19
+ ## What this skill does
20
+
21
+ This skill:
22
+
23
+ - explains what TrackOps is and when to use it
24
+ - requires an explicit and visible runtime installation
25
+ - guides per-repository activation
26
+ - helps route OPERA into either `direct bootstrap` or `agent handoff`
27
+
28
+ ## What this skill does not do
29
+
30
+ This skill does not:
31
+
32
+ - install packages by itself
33
+ - execute remote code silently
34
+ - modify a repository before the runtime exists
35
+ - replace the `trackops` runtime
36
+
37
+ ## Quick flow
11
38
 
12
39
  Install the marketplace skill with:
13
40
 
@@ -29,7 +56,7 @@ Rules:
29
56
  - the skill may verify `trackops --version`, but it must not chain silent installs
30
57
  - the skill must not create repository files by itself
31
58
 
32
- ## Local project layer
59
+ ## Project activation
33
60
 
34
61
  Inside the repository:
35
62
 
@@ -49,7 +76,7 @@ Core rules:
49
76
  - keep generated operational docs under `ops/`
50
77
  - use `trackops locale get|set` and `trackops doctor locale` when language matters
51
78
 
52
- ## OPERA onboarding
79
+ ## How OPERA enters the flow
53
80
 
54
81
  OPERA no longer assumes every user is technical.
55
82
 
@@ -80,6 +107,14 @@ If TrackOps routes bootstrap to the agent:
80
107
  trackops opera bootstrap --resume
81
108
  ```
82
109
 
110
+ ## What someone arriving from skills.sh should understand
111
+
112
+ - the global skill installs instructions into the agent
113
+ - the runtime is installed separately with npm
114
+ - `trackops init` activates the project
115
+ - `trackops opera install` adds the full operating framework only when needed
116
+ - TrackOps separates product and operations so the repository stays manageable
117
+
83
118
  ## Which reference to read and when
84
119
 
85
120
  - read `locales/en/references/activation.md` only for installation, runtime verification, locale bootstrap, and repository activation
@@ -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
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "trackops",
3
- "shortDescription": "Global TrackOps skill for secure agent guidance, explicit runtime install, bilingual onboarding, and local project orchestration.",
4
- "description": "Installs TrackOps as a global skill, requires explicit runtime installation with npm, lets users choose Spanish or English, activates local project orchestration, and routes OPERA onboarding into either direct bootstrap or agent-led discovery.",
5
- "skillVersion": "2.0.2",
6
- "trackopsVersion": "2.0.2",
3
+ "shortDescription": "Global TrackOps skill that explains TrackOps, requires explicit runtime install, and guides per-repository activation.",
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.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-color: var(--surface-0);
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(--surface-2);
10
- border: 1px solid var(--border);
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), #818CF8);
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(99,102,241,0.4) 100%);
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(129,140,248,0.5) 100%);
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: var(--surface-3);
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(--surface-3);
279
- border: 1px solid var(--border);
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
+ }