trackops 1.0.1 → 2.0.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 (83) hide show
  1. package/README.md +292 -272
  2. package/bin/trackops.js +108 -50
  3. package/lib/config.js +267 -38
  4. package/lib/control.js +534 -480
  5. package/lib/env.js +244 -0
  6. package/lib/i18n.js +61 -53
  7. package/lib/init.js +170 -47
  8. package/lib/locale.js +63 -0
  9. package/lib/opera-bootstrap.js +1075 -0
  10. package/lib/opera.js +524 -125
  11. package/lib/preferences.js +74 -0
  12. package/lib/registry.js +27 -13
  13. package/lib/release.js +56 -0
  14. package/lib/resources.js +42 -0
  15. package/lib/runtime-state.js +144 -0
  16. package/lib/server.js +1004 -521
  17. package/lib/skills.js +148 -124
  18. package/lib/workspace.js +260 -0
  19. package/locales/en.json +418 -132
  20. package/locales/es.json +418 -132
  21. package/package.json +8 -9
  22. package/scripts/postinstall-locale.js +21 -0
  23. package/scripts/skills-marketplace-smoke.js +124 -0
  24. package/scripts/smoke-tests.js +570 -0
  25. package/scripts/sync-skill-version.js +21 -0
  26. package/scripts/validate-skill.js +89 -0
  27. package/skills/trackops/SKILL.md +89 -0
  28. package/skills/trackops/agents/openai.yaml +3 -0
  29. package/skills/trackops/references/activation.md +73 -0
  30. package/skills/trackops/references/troubleshooting.md +49 -0
  31. package/skills/trackops/references/workflow.md +26 -0
  32. package/skills/trackops/scripts/bootstrap-trackops.js +203 -0
  33. package/skills/trackops/skill.json +29 -0
  34. package/templates/opera/agent.md +10 -9
  35. package/templates/opera/architecture/dependency-graph.md +24 -0
  36. package/templates/opera/architecture/runtime-automation.md +24 -0
  37. package/templates/opera/architecture/runtime-operations.md +34 -0
  38. package/templates/opera/en/agent.md +27 -0
  39. package/templates/opera/en/architecture/dependency-graph.md +24 -0
  40. package/templates/opera/en/architecture/runtime-automation.md +24 -0
  41. package/templates/opera/en/architecture/runtime-operations.md +34 -0
  42. package/templates/opera/en/genesis.md +79 -0
  43. package/templates/opera/en/references/autonomy-and-recovery.md +23 -0
  44. package/templates/opera/en/references/opera-cycle.md +62 -0
  45. package/templates/opera/en/registry.md +28 -0
  46. package/templates/opera/en/reviews/delivery-audit.md +18 -0
  47. package/templates/opera/en/reviews/integration-audit.md +18 -0
  48. package/templates/opera/en/router.md +49 -0
  49. package/templates/opera/genesis.md +79 -94
  50. package/templates/opera/reviews/delivery-audit.md +18 -0
  51. package/templates/opera/reviews/integration-audit.md +18 -0
  52. package/templates/opera/router.md +15 -5
  53. package/templates/skills/changelog-updater/locales/en/SKILL.md +11 -0
  54. package/templates/skills/commiter/locales/en/SKILL.md +11 -0
  55. package/templates/skills/opera-contract-auditor/SKILL.md +38 -0
  56. package/templates/skills/opera-contract-auditor/locales/en/SKILL.md +38 -0
  57. package/templates/skills/opera-policy-guard/SKILL.md +26 -0
  58. package/templates/skills/opera-policy-guard/locales/en/SKILL.md +26 -0
  59. package/templates/skills/project-starter-skill/SKILL.md +89 -164
  60. package/templates/skills/project-starter-skill/locales/en/SKILL.md +104 -0
  61. package/ui/css/panels.css +956 -953
  62. package/ui/index.html +1 -1
  63. package/ui/js/api.js +211 -194
  64. package/ui/js/app.js +200 -199
  65. package/ui/js/i18n.js +14 -0
  66. package/ui/js/onboarding.js +439 -437
  67. package/ui/js/state.js +130 -129
  68. package/ui/js/utils.js +175 -172
  69. package/ui/js/views/board.js +255 -254
  70. package/ui/js/views/execution.js +256 -256
  71. package/ui/js/views/insights.js +340 -339
  72. package/ui/js/views/overview.js +366 -361
  73. package/ui/js/views/settings.js +340 -202
  74. package/ui/js/views/sidebar.js +131 -132
  75. package/ui/js/views/skills.js +163 -162
  76. package/ui/js/views/tasks.js +406 -405
  77. package/ui/js/views/topbar.js +239 -183
  78. package/templates/etapa/agent.md +0 -26
  79. package/templates/etapa/genesis.md +0 -94
  80. package/templates/etapa/references/autonomy-and-recovery.md +0 -117
  81. package/templates/etapa/references/etapa-cycle.md +0 -193
  82. package/templates/etapa/registry.md +0 -28
  83. package/templates/etapa/router.md +0 -39
package/locales/es.json CHANGED
@@ -1,142 +1,428 @@
1
- {
2
- "status.pending": "Pendiente",
3
- "status.in_progress": "En progreso",
4
- "status.in_review": "En revision",
5
- "status.blocked": "Bloqueada",
6
- "status.completed": "Completada",
7
- "status.cancelled": "Cancelada",
8
-
9
- "doc.header.taskPlan": "{projectName} — Plan de Tareas (task_plan.md)",
10
- "doc.header.progress": "{projectName} — Diario de Progreso (progress.md)",
11
- "doc.header.findings": "{projectName} — Biblioteca de Hallazgos (findings.md)",
12
- "doc.autogenerated": "AUTOGENERADO desde `project_control.json`. No editar manualmente.",
13
-
14
- "doc.section.operativeState": "Estado Operativo",
15
- "doc.section.externalDecisions": "Decisiones externas pendientes",
16
- "doc.section.readyTasks": "Proximas tareas listas",
17
- "doc.section.currentState": "Estado Actual",
18
- "doc.section.executionSummary": "Resumen de Ejecucion",
19
- "doc.section.activeTasks": "Tareas activas",
20
- "doc.section.reviewTasks": "Tareas en revision",
21
- "doc.section.activeBlockers": "Bloqueadores activos",
22
- "doc.section.recentActivity": "Actividad reciente",
23
- "doc.section.milestones": "Hitos Registrados",
24
- "doc.section.openFindings": "Hallazgos Abiertos",
25
- "doc.section.resolvedFindings": "Hallazgos Resueltos",
26
- "doc.section.phase": "Fase {phaseId} — {phaseLabel}",
27
-
28
- "doc.label.activePhase": "Fase activa",
29
- "doc.label.currentFocus": "Foco actual",
30
- "doc.label.deliveryTarget": "Objetivo de entrega",
31
- "doc.label.blockers": "Bloqueadores",
32
- "doc.label.nextStep": "Proximo paso recomendado",
33
- "doc.label.phase": "Fase",
34
- "doc.label.lastTest": "Ultimo test",
35
- "doc.label.nextStepShort": "Proximo paso",
36
- "doc.label.lastUpdate": "Ultima actualizacion operativa",
37
- "doc.label.progress": "Progreso: {completed}/{total} tareas requeridas completadas",
38
- "doc.label.phaseActive": "Activa",
39
- "doc.label.phaseClosed": "Cerrada",
40
- "doc.label.phasePending": "Pendiente",
41
- "doc.label.totalTasks": "Total de tareas",
42
- "doc.label.completedTasks": "Completadas",
43
- "doc.label.inProgressTasks": "En progreso",
44
- "doc.label.inReviewTasks": "En revision",
45
- "doc.label.pendingTasks": "Pendientes",
46
- "doc.label.blockedTasks": "Bloqueadas",
47
- "doc.label.findingOpen": "abierto",
48
- "doc.label.findingResolved": "resuelto",
49
- "doc.label.findingStatus": "Estado",
50
- "doc.label.findingDetail": "Detalle",
51
- "doc.label.findingImpact": "Impacto",
52
-
53
- "doc.label.noBlockers": "Ninguno",
54
- "doc.label.noOpenTasks": "Sin tareas abiertas",
55
- "doc.label.noReadyTasks": "No hay tareas listas; revisar bloqueadores.",
56
- "doc.label.noTasks": "Sin tareas registradas",
57
- "doc.label.noFindings": "No hay hallazgos abiertos.",
58
- "doc.label.noResolvedFindings": "No hay hallazgos resueltos registrados.",
59
- "doc.label.noDecisions": "Ninguna",
60
- "doc.label.noActiveTasks": "No hay tareas en progreso en este momento.",
61
- "doc.label.noReviewTasks": "No hay tareas en revision.",
62
- "doc.label.noActiveBlockers": "Sin bloqueadores activos.",
63
- "doc.label.noHistory": "Sin movimientos registrados.",
64
-
65
- "cli.runtimeUpdated": "Runtime actualizado en {path}",
66
- "cli.docsSynced": "Documentacion operativa sincronizada.",
67
- "cli.taskUpdated": "Tarea '{taskId}' actualizada con accion '{action}'.",
68
- "cli.taskNotFound": "No existe la tarea '{taskId}'.",
69
- "cli.actionNotSupported": "Accion no soportada: {action}",
70
- "cli.mustProvideActionAndId": "Debes indicar accion e id de tarea.",
71
- "cli.noReadyTasks": "No hay tareas listas. Revisa bloqueadores y dependencias.",
72
- "cli.hooksInstalled": "Git hooks instalados en .githooks",
73
- "cli.hooksError": "No se pudo configurar core.hooksPath.",
74
- "cli.noProjectFound": "No se encontro project_control.json en este directorio ni superiores.",
75
- "cli.emptyNote": "Nota sin contenido.",
76
- "cli.undocumentedBlocker": "Bloqueador no documentado.",
77
-
78
- "cli.status.title": "{projectName} — Control Operativo",
79
- "cli.status.focus": "Foco: {focus}",
80
- "cli.status.activePhase": "Fase activa: {phaseId} — {phaseLabel}",
81
- "cli.status.tasks": "Tareas: {completed} completadas, {inProgress} en progreso, {inReview} en revision, {pending} pendientes, {blocked} bloqueadas",
82
- "cli.status.readyTasks": "Proximas tareas listas:",
83
- "cli.status.noReadyTasks": "No hay tareas listas; revisar bloqueadores o dependencias.",
84
- "cli.status.blockers": "Bloqueadores:",
85
- "cli.status.noBlockers": "Sin bloqueadores.",
86
- "cli.status.decisions": "Decisiones externas:",
87
- "cli.status.noDecisions": "Ninguna.",
88
- "cli.status.repo": "Repositorio:",
89
- "cli.status.branch": "Rama: {branch} | Arbol: {treeStatus}",
90
- "cli.status.treeClean": "limpio",
91
- "cli.status.treeDirty": "sucio ({staged} staged, {unstaged} unstaged, {untracked} untracked)",
92
- "cli.status.lastCommit": "Ultimo commit: {hash} {subject}",
93
- "cli.status.divergence": "Divergencia: ahead {ahead}, behind {behind}",
94
- "cli.status.runtime": "Runtime: {path}",
95
- "cli.status.docsSynced": "Documentacion sincronizada: {status}",
96
- "cli.status.docsSyncedYes": "si",
97
- "cli.status.docsSyncedNo": "no ({files})",
98
-
99
- "cli.next.phase": "fase",
100
- "cli.next.priority": "prioridad",
101
- "cli.next.stream": "stream",
102
- "cli.next.summary": "resumen",
103
-
1
+ {
2
+ "status.pending": "Pendiente",
3
+ "status.in_progress": "En progreso",
4
+ "status.in_review": "En revision",
5
+ "status.blocked": "Bloqueada",
6
+ "status.completed": "Completada",
7
+ "status.cancelled": "Cancelada",
8
+
9
+ "doc.header.taskPlan": "{projectName} — Plan de Tareas (task_plan.md)",
10
+ "doc.header.progress": "{projectName} — Diario de Progreso (progress.md)",
11
+ "doc.header.findings": "{projectName} — Biblioteca de Hallazgos (findings.md)",
12
+ "doc.autogenerated": "AUTOGENERADO desde `project_control.json`. No editar manualmente.",
13
+
14
+ "doc.section.operativeState": "Estado Operativo",
15
+ "doc.section.externalDecisions": "Decisiones externas pendientes",
16
+ "doc.section.readyTasks": "Proximas tareas listas",
17
+ "doc.section.currentState": "Estado Actual",
18
+ "doc.section.executionSummary": "Resumen de Ejecucion",
19
+ "doc.section.activeTasks": "Tareas activas",
20
+ "doc.section.reviewTasks": "Tareas en revision",
21
+ "doc.section.activeBlockers": "Bloqueadores activos",
22
+ "doc.section.recentActivity": "Actividad reciente",
23
+ "doc.section.milestones": "Hitos Registrados",
24
+ "doc.section.openFindings": "Hallazgos Abiertos",
25
+ "doc.section.resolvedFindings": "Hallazgos Resueltos",
26
+ "doc.section.phase": "Fase {phaseId} — {phaseLabel}",
27
+
28
+ "doc.label.activePhase": "Fase activa",
29
+ "doc.label.currentFocus": "Foco actual",
30
+ "doc.label.deliveryTarget": "Objetivo de entrega",
31
+ "doc.label.blockers": "Bloqueadores",
32
+ "doc.label.nextStep": "Proximo paso recomendado",
33
+ "doc.label.phase": "Fase",
34
+ "doc.label.lastTest": "Ultimo test",
35
+ "doc.label.nextStepShort": "Proximo paso",
36
+ "doc.label.lastUpdate": "Ultima actualizacion operativa",
37
+ "doc.label.progress": "Progreso: {completed}/{total} tareas requeridas completadas",
38
+ "doc.label.phaseActive": "Activa",
39
+ "doc.label.phaseClosed": "Cerrada",
40
+ "doc.label.phasePending": "Pendiente",
41
+ "doc.label.totalTasks": "Total de tareas",
42
+ "doc.label.completedTasks": "Completadas",
43
+ "doc.label.inProgressTasks": "En progreso",
44
+ "doc.label.inReviewTasks": "En revision",
45
+ "doc.label.pendingTasks": "Pendientes",
46
+ "doc.label.blockedTasks": "Bloqueadas",
47
+ "doc.label.findingOpen": "abierto",
48
+ "doc.label.findingResolved": "resuelto",
49
+ "doc.label.findingStatus": "Estado",
50
+ "doc.label.findingDetail": "Detalle",
51
+ "doc.label.findingImpact": "Impacto",
52
+
53
+ "doc.label.noBlockers": "Ninguno",
54
+ "doc.label.noOpenTasks": "Sin tareas abiertas",
55
+ "doc.label.noReadyTasks": "No hay tareas listas; revisar bloqueadores.",
56
+ "doc.label.noTasks": "Sin tareas registradas",
57
+ "doc.label.noFindings": "No hay hallazgos abiertos.",
58
+ "doc.label.noResolvedFindings": "No hay hallazgos resueltos registrados.",
59
+ "doc.label.noDecisions": "Ninguna",
60
+ "doc.label.noActiveTasks": "No hay tareas en progreso en este momento.",
61
+ "doc.label.noReviewTasks": "No hay tareas en revision.",
62
+ "doc.label.noActiveBlockers": "Sin bloqueadores activos.",
63
+ "doc.label.noHistory": "Sin movimientos registrados.",
64
+
65
+ "cli.runtimeUpdated": "Runtime actualizado en {path}",
66
+ "cli.docsSynced": "Documentacion operativa sincronizada.",
67
+ "cli.taskUpdated": "Tarea '{taskId}' actualizada con accion '{action}'.",
68
+ "cli.taskNotFound": "No existe la tarea '{taskId}'.",
69
+ "cli.actionNotSupported": "Accion no soportada: {action}",
70
+ "cli.mustProvideActionAndId": "Debes indicar accion e id de tarea.",
71
+ "cli.noReadyTasks": "No hay tareas listas. Revisa bloqueadores y dependencias.",
72
+ "cli.hooksInstalled": "Git hooks instalados en .githooks",
73
+ "cli.hooksError": "No se pudo configurar core.hooksPath.",
74
+ "cli.noProjectFound": "No se encontro project_control.json en este directorio ni superiores.",
75
+ "cli.emptyNote": "Nota sin contenido.",
76
+ "cli.undocumentedBlocker": "Bloqueador no documentado.",
77
+
78
+ "cli.status.title": "{projectName} — Control Operativo",
79
+ "cli.status.focus": "Foco: {focus}",
80
+ "cli.status.activePhase": "Fase activa: {phaseId} — {phaseLabel}",
81
+ "cli.status.tasks": "Tareas: {completed} completadas, {inProgress} en progreso, {inReview} en revision, {pending} pendientes, {blocked} bloqueadas",
82
+ "cli.status.readyTasks": "Proximas tareas listas:",
83
+ "cli.status.noReadyTasks": "No hay tareas listas; revisar bloqueadores o dependencias.",
84
+ "cli.status.blockers": "Bloqueadores:",
85
+ "cli.status.noBlockers": "Sin bloqueadores.",
86
+ "cli.status.decisions": "Decisiones externas:",
87
+ "cli.status.noDecisions": "Ninguna.",
88
+ "cli.status.repo": "Repositorio:",
89
+ "cli.status.branch": "Rama: {branch} | Arbol: {treeStatus}",
90
+ "cli.status.treeClean": "limpio",
91
+ "cli.status.treeDirty": "sucio ({staged} staged, {unstaged} unstaged, {untracked} untracked)",
92
+ "cli.status.lastCommit": "Ultimo commit: {hash} {subject}",
93
+ "cli.status.divergence": "Divergencia: ahead {ahead}, behind {behind}",
94
+ "cli.status.runtime": "Runtime: {path}",
95
+ "cli.status.docsSynced": "Documentacion sincronizada: {status}",
96
+ "cli.status.docsSyncedYes": "si",
97
+ "cli.status.docsSyncedNo": "no ({files})",
98
+
99
+ "cli.next.phase": "fase",
100
+ "cli.next.priority": "prioridad",
101
+ "cli.next.stream": "stream",
102
+ "cli.next.summary": "resumen",
103
+
104
104
  "cli.help.title": "Control operativo del proyecto",
105
105
  "cli.help.usage": "Uso:",
106
-
107
- "server.ready": "Ops dashboard listo en http://{host}:{port}",
108
- "server.defaultProject": "Proyecto por defecto: {name} ({id})",
109
- "server.titleRequired": "El titulo es obligatorio.",
110
- "server.taskCreatedNote": "Tarea creada desde el dashboard.",
111
- "server.taskEditedNote": "Tarea editada desde el dashboard.",
112
- "server.payloadTooLarge": "Payload demasiado grande (>{limit}).",
113
- "server.invalidJson": "JSON invalido.",
114
- "server.sessionNotFound": "Sesion no encontrada.",
115
- "server.noActiveSession": "No hay sesion activa para iniciar stream.",
116
- "server.commandRequired": "Se requiere un comando.",
117
- "server.projectNotResolved": "No se pudo resolver el proyecto.",
118
-
119
- "init.welcome": "Proyecto inicializado con trackops.",
120
- "init.opsExists": "Ops ya esta instalado en este proyecto.",
121
- "init.created": "Creado {file}",
122
- "init.updated": "Actualizado {file}",
123
- "init.registered": "Proyecto registrado en el portfolio global.",
124
- "init.defaultFocus": "Bootstrap operativo del proyecto",
125
- "init.defaultTarget": "Proyecto gestionado con trackops",
126
- "init.defaultTaskTitle": "Configurar proyecto con trackops",
127
- "init.defaultTaskSummary": "Verificar estructura inicial, ajustar fases y confirmar integracion operativa.",
128
-
106
+ "cli.help.commands": "Comandos:",
107
+ "cli.help.init.desc": "Inicializa TrackOps en el directorio actual.",
108
+ "cli.help.workspace.desc": "Muestra o migra el layout actual del workspace.",
109
+ "cli.help.env.desc": "Audita o sincroniza el contrato .env del workspace.",
110
+ "cli.help.release.desc": "Publica el snapshot configurado de app/.",
111
+ "cli.help.version.desc": "Imprime la version instalada de TrackOps.",
112
+ "cli.help.status.desc": "Muestra el estado del proyecto: foco, fase activa, tareas listas, bloqueadores y repo.",
113
+ "cli.help.next.desc": "Cola priorizada de siguientes tareas ejecutables.",
114
+ "cli.help.sync.desc": "Regenera task_plan.md, progress.md y findings.md desde project_control.json.",
115
+ "cli.help.dashboard.desc": "Lanza el dashboard web local en un puerto libre e imprime URLs local/red.",
116
+ "cli.help.refreshRepo.desc": "Actualiza el snapshot runtime del repo con el estado git.",
117
+ "cli.help.installHooks.desc": "Configura git core.hooksPath para usar el directorio de hooks de TrackOps.",
118
+ "cli.help.register.desc": "Registra el proyecto actual en el portfolio multiproyecto.",
119
+ "cli.help.projects.desc": "Lista los proyectos registrados.",
120
+ "cli.help.task.desc": "Acciones: start, review, complete, block, pending, cancel, note.",
121
+ "cli.help.opera.desc": "Gestiona OPERA.",
122
+ "cli.help.opera.upgradeHint": "Upgrade: trackops opera upgrade --stable [--reset]",
123
+ "cli.help.locale.desc": "Muestra o actualiza el idioma global de TrackOps.",
124
+ "cli.help.doctor.desc": "Explica el origen efectivo del idioma para esta maquina/proyecto.",
125
+ "cli.help.skill.desc": "Gestiona skills.",
126
+ "cli.help.help.desc": "Muestra esta ayuda.",
127
+ "cli.help.globalWorkflow": "Flujo global del agente:",
128
+ "cli.help.globalWorkflow.line1": "Instala con 'npx skills add Baxahaun/trackops'",
129
+ "cli.help.globalWorkflow.line2": "y los flags globales/de agente que necesites; despues usa 'trackops init' y 'trackops opera install' de forma explicita dentro de cada proyecto.",
130
+ "cli.usage.workspace": "Uso: trackops workspace <status|migrate>",
131
+ "cli.usage.env": "Uso: trackops env <status|sync>",
132
+ "cli.usage.opera": "Uso: trackops opera <install|bootstrap|handoff|status|configure|upgrade>",
133
+ "cli.usage.skill": "Uso: trackops skill <install|list|remove|catalog> [name]",
134
+ "cli.usage.locale": "Uso: trackops locale <get|set> [es|en]",
135
+ "cli.usage.doctor": "Uso: trackops doctor locale",
136
+ "cli.error.unknownCommand": "Comando desconocido: {command}",
137
+ "cli.error.runHelp": "Ejecuta 'trackops help' para ver el uso.",
138
+ "cli.error.noWorkspace": "No se encontro ningun workspace TrackOps en este directorio ni en sus padres.",
139
+ "locale.effective": "Idioma efectivo",
140
+ "locale.source": "Origen",
141
+ "locale.global": "Idioma global",
142
+ "locale.project": "Idioma del proyecto",
143
+ "locale.env": "Idioma por entorno",
144
+ "locale.system": "Idioma del sistema",
145
+ "locale.runtimeFile": "Archivo runtime",
146
+ "locale.none": "ninguno",
147
+ "locale.invalid": "Idioma invalido: {value}.",
148
+ "locale.updated": "Idioma global actualizado a {locale}.",
149
+ "locale.source.explicit": "flag explicito",
150
+ "locale.source.project": "proyecto",
151
+ "locale.source.global": "global",
152
+ "locale.source.env": "entorno",
153
+ "locale.source.system": "sistema",
154
+ "locale.source.prompt": "prompt",
155
+ "locale.source.manual": "manual",
156
+
157
+ "server.ready": "Ops dashboard listo en http://{host}:{port}",
158
+ "server.bannerTitle": "Serving!",
159
+ "server.localUrl": "- Local: {url}",
160
+ "server.networkUrl": "- Network: {url}",
161
+ "server.networkAltUrl": "- Network alt: {url}",
162
+ "server.copiedToClipboard": "Direccion local copiada al portapapeles.",
163
+ "server.clipboardUnavailable": "No se pudo copiar la direccion local al portapapeles.",
164
+ "server.portFallback": "El puerto {requestedPort} estaba ocupado; usando {actualPort}.",
165
+ "server.portBusyStrict": "El puerto solicitado {port} ya esta en uso.",
166
+ "server.portSearchExhausted": "No se encontro un puerto libre a partir de {port} tras {limit} intentos.",
167
+ "server.invalidPort": "Puerto invalido: {value}.",
168
+ "server.noNetworkAddress": "- Network: no se detecto una direccion externa util.",
169
+ "server.defaultProject": "Proyecto por defecto: {name} ({id})",
170
+ "server.titleRequired": "El titulo es obligatorio.",
171
+ "server.taskCreatedNote": "Tarea creada desde el dashboard.",
172
+ "server.taskEditedNote": "Tarea editada desde el dashboard.",
173
+ "server.payloadTooLarge": "Payload demasiado grande (>{limit}).",
174
+ "server.invalidJson": "JSON invalido.",
175
+ "server.sessionNotFound": "Sesion no encontrada.",
176
+ "server.noActiveSession": "No hay sesion activa para iniciar stream.",
177
+ "server.commandRequired": "Se requiere un comando.",
178
+ "server.projectNotResolved": "No se pudo resolver el proyecto.",
179
+ "server.invalidLocale": "Idioma invalido: {value}.",
180
+
181
+ "init.welcome": "Proyecto inicializado con trackops.",
182
+ "init.opsExists": "Ops ya esta instalado en este proyecto.",
183
+ "init.created": "Creado {file}",
184
+ "init.updated": "Actualizado {file}",
185
+ "init.registered": "Proyecto registrado en el portfolio global.",
186
+ "init.defaultFocus": "Bootstrap operativo del proyecto",
187
+ "init.defaultTarget": "Proyecto gestionado con trackops",
188
+ "init.defaultTaskTitle": "Configurar proyecto con trackops",
189
+ "init.defaultTaskSummary": "Verificar estructura inicial, ajustar fases y confirmar integracion operativa.",
190
+
129
191
  "opera.installed": "Metodologia OPERA instalada (v{version}).",
130
192
  "opera.alreadyInstalled": "OPERA ya esta instalado en este proyecto (v{version}).",
131
193
  "opera.notInstalled": "OPERA no esta instalado en este proyecto.",
132
194
  "opera.upgraded": "OPERA actualizado a v{version}.",
133
195
  "opera.primitiveDetected": "Detectada instalacion OPERA existente (sin gestion por Ops).",
134
-
135
- "skill.installed": "Skill '{name}' instalada.",
136
- "skill.removed": "Skill '{name}' desinstalada.",
137
- "skill.notFound": "Skill '{name}' no encontrada en el catalogo.",
138
- "skill.alreadyInstalled": "Skill '{name}' ya esta instalada.",
196
+ "opera.status.version": "OPERA v{version}",
197
+ "opera.status.installed": " Instalado: {value}",
198
+ "opera.status.skills": " Skills: {value}",
199
+ "opera.status.locale": " Idioma: {locale} ({source})",
200
+ "opera.status.legacy": " Legacy: {value}",
201
+ "opera.status.contractVersion": " Version de contrato: {value}",
202
+ "opera.status.contractReadiness": " Readiness del contrato: {value}",
203
+ "opera.status.bootstrap": " Bootstrap: {value}",
204
+ "opera.status.mode": " Modo: {value}",
205
+ "opera.status.route": " Ruta: {value}",
206
+ "opera.status.ownership": " Ownership: {value}",
207
+ "opera.status.missing": " Faltan: {value}",
208
+ "opera.status.resume": " Reanudar: trackops opera bootstrap --resume",
209
+ "opera.status.handoff": " Handoff: {value}",
210
+ "opera.status.qualityReport": " Quality report: {value}",
211
+ "opera.status.structure": " Estructura:",
212
+ "opera.configure.invalidPhases": "JSON de fases invalido.",
213
+ "opera.configure.updated": "Configuracion actualizada.",
214
+ "opera.upgrade.runInstallFirst": "Ejecuta 'trackops opera install' primero.",
215
+ "opera.upgrade.usage": "Uso: trackops opera upgrade --stable [--reset]",
216
+ "opera.upgrade.legacyUnsupported": "Proyecto OPERA legacy detectado. Ejecuta 'trackops opera upgrade --stable --reset' para moverlo al modelo estable actual.",
217
+ "opera.upgrade.backup": "Backup: {path}",
218
+ "postinstall.localeSet": "TrackOps ha fijado el idioma en '{locale}' ({source}).",
219
+
220
+ "skill.installed": "Skill '{name}' instalada.",
221
+ "skill.removed": "Skill '{name}' desinstalada.",
222
+ "skill.notFound": "Skill '{name}' no encontrada en el catalogo.",
223
+ "skill.alreadyInstalled": "Skill '{name}' ya esta instalada.",
139
224
  "skill.notInstalled": "Skill '{name}' no esta instalada.",
140
225
  "skill.catalogTitle": "Skills disponibles:",
141
- "skill.listTitle": "Skills instaladas:"
226
+ "skill.listTitle": "Skills instaladas:",
227
+
228
+ "cli.status.bootstrap": "Bootstrap: {status} | Idioma: {locale}",
229
+
230
+ "bootstrap.header": "Bootstrap OPERA",
231
+ "bootstrap.subtitle": "Primero clasifica al usuario y el estado del proyecto. TrackOps decidira si continuar por terminal o derivar el arranque al agente.",
232
+ "bootstrap.question.technicalLevel": "Nivel tecnico del usuario",
233
+ "bootstrap.question.projectState": "Estado actual del proyecto",
234
+ "bootstrap.question.docsState": "Documentacion disponible",
235
+ "bootstrap.question.decisionOwnership": "Quien debe tomar las decisiones clave",
236
+ "bootstrap.question.problemStatement": "Problema principal que se quiere resolver",
237
+ "bootstrap.question.targetUser": "Usuario objetivo principal",
238
+ "bootstrap.question.desiredOutcome": "Resultado singular deseado",
239
+ "bootstrap.question.externalServices": "Servicios externos (separados por comas)",
240
+ "bootstrap.question.sourceOfTruth": "Fuente de la verdad",
241
+ "bootstrap.question.payload": "Payload / objetivo de entrega",
242
+ "bootstrap.question.behaviorRules": "Reglas de comportamiento (separadas por punto y coma)",
243
+ "bootstrap.question.inputSchema": "Schema JSON de entrada",
244
+ "bootstrap.question.outputSchema": "Schema JSON de salida",
245
+ "bootstrap.question.invariants": "Invariantes arquitectonicas (separadas por punto y coma)",
246
+ "bootstrap.question.pipeline": "Pasos del pipeline (separados por punto y coma)",
247
+ "bootstrap.question.templates": "Archivos template (separados por comas)",
248
+ "bootstrap.question.repoTasks": "¿Incluir tareas opcionales de repo? [y/n]",
249
+ "bootstrap.completed": "Bootstrap OPERA completado.",
250
+ "bootstrap.pending": "Bootstrap OPERA guardado como pendiente. Reanuda con 'trackops opera bootstrap --resume'.",
251
+ "bootstrap.awaitingAgent": "Bootstrap OPERA derivado al agente. Completa el handoff y reanuda con 'trackops opera bootstrap --resume'.",
252
+ "bootstrap.handoffFile": "Archivo de handoff",
253
+ "bootstrap.infer.envSourceHint": "Detectados archivos de entorno",
254
+ "bootstrap.noneDefined": "Aun no definido.",
255
+ "bootstrap.pendingValue": "Pendiente de definir.",
256
+ "bootstrap.servicePending": "pendiente",
257
+ "bootstrap.defaultFocus": "Completar bootstrap OPERA",
258
+ "bootstrap.defaultTarget": "Entrega objetivo pendiente de definir",
259
+ "bootstrap.blocker.missingData": "Todavia faltan datos clave del bootstrap.",
260
+ "bootstrap.blocker.awaitingAgent": "Esperando el resultado del handoff al agente.",
261
+ "bootstrap.history.seeded": "Sembrada por bootstrap OPERA.",
262
+ "bootstrap.acceptance.discovery": "Preguntas de descubrimiento respondidas.",
263
+ "bootstrap.acceptance.schema": "Schema de entrada/salida definido en genesis.md.",
264
+ "bootstrap.acceptance.rules": "Reglas de comportamiento documentadas.",
265
+ "bootstrap.acceptance.plan": "Plan revisado y aceptado.",
266
+ "bootstrap.acceptance.intake": "El agente genero ops/bootstrap/intake.json.",
267
+ "bootstrap.acceptance.specDossier": "El agente genero ops/bootstrap/spec-dossier.md.",
268
+ "bootstrap.acceptance.resume": "OPERA pudo ingerir el contexto y continuar.",
269
+ "bootstrap.acceptance.env": "Credenciales requeridas verificadas.",
270
+ "bootstrap.acceptance.tests": "Checks de conectividad pasando.",
271
+ "bootstrap.acceptance.shape": "Shapes externos validados contra genesis.md.",
272
+ "bootstrap.acceptance.findings": "Hallazgos documentados.",
273
+ "bootstrap.acceptance.sops": "SOPs documentados.",
274
+ "bootstrap.acceptance.tools": "Herramientas base implementadas.",
275
+ "bootstrap.acceptance.graph": "Grafo de pipeline documentado.",
276
+ "bootstrap.acceptance.integration": "Tests de integracion pasando.",
277
+ "bootstrap.acceptance.outputs": "Outputs validados contra templates.",
278
+ "bootstrap.acceptance.delivery": "Formato de entrega revisado.",
279
+ "bootstrap.acceptance.ui": "Revision visual completada cuando aplica.",
280
+ "bootstrap.acceptance.tmp": ".tmp limpio.",
281
+ "bootstrap.acceptance.deploy": "Despliegue completado.",
282
+ "bootstrap.acceptance.triggers": "Triggers configurados.",
283
+ "bootstrap.acceptance.smoke": "Smoke test pasando.",
284
+ "bootstrap.task.bootstrap.title": "Completar bootstrap OPERA",
285
+ "bootstrap.task.bootstrap.summary": "Convertir la estructura OPERA instalada en un modelo operativo especifico del proyecto.",
286
+ "bootstrap.task.bootstrap.handoffSummary": "Preparar el handoff al agente para convertir una idea o especificacion parcial en contexto operativo estructurado.",
287
+ "bootstrap.task.prove.title": "Validar integraciones",
288
+ "bootstrap.task.prove.summary": "Verificar credenciales, conectividad y shape de respuestas antes de seguir construyendo.",
289
+ "bootstrap.task.structure.title": "Estructurar el sistema",
290
+ "bootstrap.task.structure.summary": "Documentar SOPs, implementar herramientas y capturar el grafo de dependencias.",
291
+ "bootstrap.task.refine.title": "Refinar la entrega",
292
+ "bootstrap.task.refine.summary": "Validar outputs contra templates y pulir el formato de entrega.",
293
+ "bootstrap.task.automate.title": "Automatizar el runtime",
294
+ "bootstrap.task.automate.summary": "Configurar despliegue, triggers y validacion smoke.",
295
+ "bootstrap.task.repoReadme.title": "Alinear README con el contexto OPERA",
296
+ "bootstrap.task.repoReadme.summary": "Revisar si el README debe reflejar el bootstrap OPERA.",
297
+ "bootstrap.task.repoLicense.title": "Revisar politica de licencia",
298
+ "bootstrap.task.repoLicense.summary": "Confirmar si el metadato de licencia requiere actualizacion.",
299
+ "bootstrap.task.repoChangelog.title": "Definir politica de changelog",
300
+ "bootstrap.task.repoChangelog.summary": "Decidir como se mantendra CHANGELOG.md en este proyecto.",
301
+ "bootstrap.task.repoGithub.title": "Revisar tareas de gobernanza GitHub",
302
+ "bootstrap.task.repoGithub.summary": "Comprobar si deben activarse tareas de automatizacion o gobernanza del repositorio.",
303
+ "bootstrap.field.singularDesiredOutcome": "Resultado deseado",
304
+ "bootstrap.field.desiredOutcome": "Resultado deseado",
305
+ "bootstrap.field.problemStatement": "Problema principal",
306
+ "bootstrap.field.targetUser": "Usuario objetivo",
307
+ "bootstrap.field.decisionOwnership": "Propiedad de decision",
308
+ "bootstrap.field.sourceOfTruth": "Fuente de la verdad",
309
+ "bootstrap.field.payload": "Payload",
310
+ "bootstrap.field.inputSchema": "Schema de entrada",
311
+ "bootstrap.field.outputSchema": "Schema de salida",
312
+ "bootstrap.field.intakeJson": "Archivo intake.json",
313
+ "bootstrap.field.specDossier": "Archivo spec-dossier.md",
314
+ "bootstrap.decisionImpact": "Necesario para completar el bootstrap OPERA.",
315
+ "bootstrap.pendingDecision.handoff": "Enviar el handoff de TrackOps al agente",
316
+ "bootstrap.pendingDecision.handoffImpact": "Necesario para que el agente genere intake.json y spec-dossier.md.",
317
+ "bootstrap.finding.genesisConflictTitle": "Genesis requiere revision manual",
318
+ "bootstrap.finding.genesisConflictDetail": "TrackOps detecto un genesis.md no plantilla y detuvo la sobreescritura automatica.",
319
+ "bootstrap.finding.genesisConflictImpact": "El bootstrap no puede completarse hasta revisar la constitucion existente.",
320
+
321
+ "ui.nav.overview": "Resumen",
322
+ "ui.nav.tasks": "Tareas",
323
+ "ui.nav.board": "Tablero",
324
+ "ui.nav.execution": "Ejecucion",
325
+ "ui.nav.skills": "Skills",
326
+ "ui.nav.insights": "Analiticas",
327
+ "ui.nav.settings": "Configuracion",
328
+ "ui.nav.help": "Ayuda y Tour",
329
+ "ui.nav.logs": "Registros",
330
+ "ui.sidebar.aria": "Navegacion principal",
331
+ "ui.sidebar.home": "TrackOps — Ir al inicio",
332
+ "ui.sidebar.menu": "Menu",
333
+ "ui.sidebar.general": "General",
334
+ "ui.sidebar.pendingCount": "{count} pendientes",
335
+ "ui.sidebar.tasksBadge": "{count} tareas",
336
+ "ui.sidebar.errors": "errores",
337
+ "ui.topbar.openMenu": "Abrir menu",
338
+ "ui.topbar.searchAria": "Buscar tareas",
339
+ "ui.topbar.searchPlaceholder": "Buscar tareas...",
340
+ "ui.topbar.timer": "Seguimiento de tiempo",
341
+ "ui.topbar.syncAria": "Sincronizar documentacion",
342
+ "ui.topbar.sync": "Sincronizar",
343
+ "ui.topbar.refresh": "Refrescar estado",
344
+ "ui.topbar.repoClean": "Repo limpio",
345
+ "ui.topbar.repoDirty": "{staged}s {unstaged}u {untracked}?",
346
+ "ui.topbar.noBranch": "sin rama",
347
+ "ui.topbar.unavailable": "no disponible",
348
+ "ui.topbar.activeProject": "Proyecto activo",
349
+ "ui.topbar.language": "Idioma",
350
+ "ui.topbar.languageAria": "Seleccionar idioma del dashboard",
351
+ "ui.topbar.languageEs": "ES",
352
+ "ui.topbar.languageEn": "EN",
353
+ "ui.topbar.localeUpdated": "Idioma actualizado.",
354
+ "ui.topbar.syncing": "Sincronizando...",
355
+ "ui.topbar.synced": "Documentacion sincronizada.",
356
+ "ui.onboarding.prev": "Anterior",
357
+ "ui.onboarding.next": "Siguiente ->",
358
+ "ui.onboarding.start": "Empezar",
359
+ "ui.onboarding.step": "Paso {current} de {total}",
360
+ "ui.onboarding.welcome.title": "Bienvenido a TrackOps",
361
+ "ui.onboarding.welcome.desc": "Tu motor operativo local para desarrollo. Este tour solo tarda un par de minutos.",
362
+ "ui.onboarding.nav.title": "Navegacion principal",
363
+ "ui.onboarding.nav.desc": "La barra lateral te lleva por las vistas principales y destaca el trabajo pendiente.",
364
+ "ui.onboarding.kpi.title": "Metricas instantaneas",
365
+ "ui.onboarding.kpi.desc": "Las KPI resumen trabajo abierto, completado, bloqueado y en revision en tiempo real.",
366
+ "ui.onboarding.activity.title": "Actividad semanal",
367
+ "ui.onboarding.activity.desc": "Este grafico muestra cambios recientes de estado para detectar picos o huecos de actividad.",
368
+ "ui.onboarding.progress.title": "Progreso global",
369
+ "ui.onboarding.progress.desc": "El donut desglosa el estado general de las tareas del proyecto.",
370
+ "ui.onboarding.time.title": "Seguimiento de tiempo",
371
+ "ui.onboarding.time.desc": "Registra tiempo por tarea y guardalo para analisis posterior.",
372
+ "ui.onboarding.search.title": "Busqueda global",
373
+ "ui.onboarding.search.desc": "Filtra tareas desde cualquier vista y cambia de proyecto activo desde la barra superior.",
374
+ "ui.onboarding.board.title": "Tablero Kanban",
375
+ "ui.onboarding.board.desc": "Arrastra tarjetas entre columnas para cambiar estado y regenerar docs operativos.",
376
+ "ui.onboarding.tasks.title": "Editor de tareas",
377
+ "ui.onboarding.tasks.desc": "Selecciona una tarea para editar estado, prioridad, criterios y notas.",
378
+ "ui.onboarding.execution.title": "Consola integrada",
379
+ "ui.onboarding.execution.desc": "Ejecuta comandos shell directamente desde el dashboard.",
380
+ "ui.onboarding.insights.title": "Analiticas del proyecto",
381
+ "ui.onboarding.insights.desc": "Revisa salud, tiempos, progreso por fase y actividad reciente.",
382
+ "ui.onboarding.skills.title": "Centro de skills",
383
+ "ui.onboarding.skills.desc": "Instala nuevas capacidades para tu copiloto desde el catalogo integrado.",
384
+ "ui.onboarding.theme.title": "Tema claro / oscuro",
385
+ "ui.onboarding.theme.desc": "Cambia el tema sin salir del dashboard.",
386
+ "ui.onboarding.done.title": "Todo listo",
387
+ "ui.onboarding.done.desc": "Puedes relanzar este tour desde Ayuda y Tour en la barra lateral.",
388
+
389
+ "ui.execution.eyebrow": "Ejecucion",
390
+ "ui.execution.title": "Consola de comandos",
391
+ "ui.execution.run": "Ejecutar",
392
+ "ui.execution.command": "Comando",
393
+ "ui.execution.commandAria": "Introduce el comando a ejecutar",
394
+ "ui.execution.runButtonAria": "Ejecutar comando",
395
+ "ui.execution.quickTitle": "Comandos rapidos",
396
+ "ui.execution.runQuick": "Ejecutar {label}",
397
+ "ui.execution.sessions": "Sesiones",
398
+ "ui.execution.noSessions": "Sin sesiones activas.",
399
+ "ui.execution.noSessionTitle": "ops@terminal — sin sesion activa",
400
+ "ui.execution.stopAria": "Detener proceso",
401
+ "ui.execution.stop": "Detener",
402
+ "ui.execution.output": "Salida del comando",
403
+ "ui.execution.outputPlaceholder": "# Ejecuta un comando para ver la salida aqui...",
404
+ "ui.execution.started": "Iniciado",
405
+ "ui.execution.running": "Ejecutando...",
406
+ "ui.execution.quick.status": "status",
407
+ "ui.execution.quick.sync": "sincronizar docs",
408
+ "ui.execution.quick.next": "siguientes tareas",
409
+ "ui.execution.quick.repo": "refrescar repo",
410
+ "ui.settings.workspaceTitle": "Workspace",
411
+ "ui.settings.workspaceRoot": "Raiz del workspace",
412
+ "ui.settings.appRoot": "Raiz de app",
413
+ "ui.settings.opsRoot": "Raiz de ops",
414
+ "ui.settings.envTitle": "Entorno",
415
+ "ui.settings.envHealthyBadge": "Listo",
416
+ "ui.settings.envMissingBadge": "{count} faltantes",
417
+ "ui.settings.envBridgeMode": "Modo de puente",
418
+ "ui.settings.envRootFile": ".env raiz",
419
+ "ui.settings.envExampleFile": ".env.example",
420
+ "ui.settings.envAppBridge": "Puente app/.env",
421
+ "ui.settings.envRequiredKeys": "Claves requeridas",
422
+ "ui.settings.envPresentKeys": "Claves presentes",
423
+ "ui.settings.envMissingKeys": "Claves faltantes",
424
+ "ui.settings.envNoMissing": "Ninguna",
425
+ "ui.settings.envLastAudit": "Ultima auditoria",
426
+ "ui.settings.envSync": "Sincronizar env",
427
+ "ui.settings.envSynced": "Entorno sincronizado."
142
428
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trackops",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
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": {
@@ -10,6 +10,8 @@
10
10
  "bin/",
11
11
  "lib/",
12
12
  "locales/",
13
+ "skills/",
14
+ "scripts/",
13
15
  "ui/",
14
16
  "templates/"
15
17
  ],
@@ -45,15 +47,12 @@
45
47
  "node": ">=18"
46
48
  },
47
49
  "scripts": {
48
- "ops": "node bin/trackops.js",
49
- "ops:help": "node bin/trackops.js help",
50
- "ops:dashboard": "node bin/trackops.js dashboard",
51
- "ops:status": "node bin/trackops.js status",
52
- "ops:next": "node bin/trackops.js next",
53
- "ops:sync": "node bin/trackops.js sync",
54
- "ops:repo": "node bin/trackops.js refresh-repo",
50
+ "postinstall": "node scripts/postinstall-locale.js",
55
51
  "test": "node scripts/smoke-tests.js",
56
52
  "test:smoke": "node scripts/smoke-tests.js",
57
- "release:check": "npm test && npm pack --dry-run"
53
+ "skill:sync-version": "node scripts/sync-skill-version.js",
54
+ "skill:validate": "node scripts/validate-skill.js",
55
+ "skill:smoke": "node scripts/skills-marketplace-smoke.js",
56
+ "release:check": "npm test && npm run skill:validate && npm run skill:smoke && npm pack --dry-run"
58
57
  }
59
58
  }
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+
3
+ const runtimeState = require("../lib/runtime-state");
4
+ const { setLocale, t } = require("../lib/i18n");
5
+
6
+ function isGlobalInstall() {
7
+ return String(process.env.npm_config_global || "").toLowerCase() === "true";
8
+ }
9
+
10
+ async function main() {
11
+ if (!isGlobalInstall()) return;
12
+ const result = await runtimeState.ensureGlobalLocale({ interactive: true });
13
+ if (!result?.locale) return;
14
+ setLocale(result.locale);
15
+ process.stdout.write(`${t("postinstall.localeSet", { locale: result.locale, source: t(`locale.source.${result.source}`) })}\n`);
16
+ }
17
+
18
+ main().catch((error) => {
19
+ process.stderr.write(`${error.message}\n`);
20
+ process.exit(0);
21
+ });