oficina-opencode 3.1.0 → 3.1.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.
- package/README.md +1 -1
- package/commands/oficina.md +7 -6
- package/dashboard/.dom-check.html +1257 -0
- package/dashboard/README-DASHBOARD.md +64 -0
- package/dashboard/assets/factory.css +1543 -0
- package/dashboard/assets/tokens.css +208 -0
- package/dashboard/build-kanban-data.mjs +279 -0
- package/dashboard/dashboard.css +753 -0
- package/dashboard/dashboard.html +121 -0
- package/dashboard/dashboard.js +610 -0
- package/dashboard/data/snapshot.json +883 -0
- package/dashboard/debate.html +134 -0
- package/dashboard/factory/build-snapshot.mjs +89 -0
- package/dashboard/factory/factory-app.js +1185 -0
- package/dashboard/factory/factory-core.js +541 -0
- package/dashboard/factory/snapshot.js +850 -0
- package/dashboard/factory.html +350 -0
- package/dashboard/kanban-data.json +671 -0
- package/dashboard/kanban-source.js +643 -0
- package/dashboard/kanban.check.mjs +454 -0
- package/dashboard/kanban.html +1257 -0
- package/dashboard/leadership.html +1008 -0
- package/dashboard/lib/debate-app.js +1149 -0
- package/dashboard/lib/debate-core.js +698 -0
- package/dashboard/lib/debate-data.js +163 -0
- package/dashboard/lib/debate-demo.js +110 -0
- package/dashboard/lib/debate.css +1155 -0
- package/dashboard/lib/leadership-model.js +946 -0
- package/dashboard/probe.mjs +35 -0
- package/dashboard/scripts/serve.mjs +122 -0
- package/dashboard/scripts/snapshot-data.mjs +93 -0
- package/dashboard/scripts/snapshot.mjs +28 -0
- package/dashboard/server.mjs +242 -0
- package/dashboard/shot.mjs +54 -0
- package/dashboard/shots/desktop-gates.png +0 -0
- package/dashboard/shots/desktop-light.png +0 -0
- package/dashboard/shots/desktop-real.png +0 -0
- package/dashboard/shots/mobile.png +0 -0
- package/dashboard/test/factory-core.test.mjs +244 -0
- package/dashboard/tests/debate-core.test.mjs +336 -0
- package/dashboard/tests/leadership-model.test.mjs +404 -0
- package/dist/cli.js +24 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/dashboard.d.ts +33 -0
- package/dist/core/dashboard.d.ts.map +1 -0
- package/dist/core/dashboard.js +115 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +11 -0
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/environment.d.ts +28 -0
- package/dist/core/environment.d.ts.map +1 -0
- package/dist/core/environment.js +80 -0
- package/dist/core/environment.js.map +1 -0
- package/dist/core/systemPrompt.d.ts.map +1 -1
- package/dist/core/systemPrompt.js +3 -0
- package/dist/core/systemPrompt.js.map +1 -1
- package/dist/tools/index.d.ts +9 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +26 -22
- package/dist/tools/index.js.bak +972 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/v2.d.ts +5 -0
- package/dist/v2.d.ts.map +1 -1
- package/dist/v2.js +57 -5
- package/dist/v2.js.bak +517 -0
- package/dist/v2.js.map +1 -1
- package/docs/QUE-ES.md +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="es" data-theme="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Factory · Oficina de Agents</title>
|
|
7
|
+
<meta
|
|
8
|
+
name="description"
|
|
9
|
+
content="Panel de la Factory: detecta huecos de cobertura del catálogo, fabrica agentes nuevos y muestra el match en la próxima card."
|
|
10
|
+
/>
|
|
11
|
+
<link rel="stylesheet" href="assets/tokens.css" />
|
|
12
|
+
<link rel="stylesheet" href="assets/factory.css" />
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<a class="skip-link" href="#factory-panel">Saltar a la línea de fabricación</a>
|
|
16
|
+
<div class="shell">
|
|
17
|
+
<header class="topbar">
|
|
18
|
+
<div class="brand">
|
|
19
|
+
<span class="brand-mark" aria-hidden="true">
|
|
20
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6">
|
|
21
|
+
<rect x="4" y="3.5" width="16" height="3.5" rx="1" />
|
|
22
|
+
<path d="M12 7v4" />
|
|
23
|
+
<rect x="7" y="11" width="10" height="4.5" rx="1" />
|
|
24
|
+
<path d="M9 20h10" stroke-dasharray="2 2" />
|
|
25
|
+
<path d="M4 20h2" />
|
|
26
|
+
</svg>
|
|
27
|
+
</span>
|
|
28
|
+
<div class="brand-text">
|
|
29
|
+
<h1 class="brand-title">Factory</h1>
|
|
30
|
+
<p class="brand-sub">
|
|
31
|
+
oficina · <b>agent foundry</b> · card T-08
|
|
32
|
+
</p>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="topbar-spacer"></div>
|
|
37
|
+
|
|
38
|
+
<div class="status-strip" aria-label="Estado de la fuente de datos">
|
|
39
|
+
<span class="chip" id="source-chip" data-live="none" title="fuente de datos">
|
|
40
|
+
<span class="dot" aria-hidden="true"></span>
|
|
41
|
+
<span id="source-text">conectando</span>
|
|
42
|
+
</span>
|
|
43
|
+
<span class="chip" id="counts-chip">— cards</span>
|
|
44
|
+
<span class="chip" id="poll-chip">poll —</span>
|
|
45
|
+
<span class="chip" id="clock-chip">sync —</span>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="controls">
|
|
49
|
+
<button type="button" class="btn btn-primary" id="btn-fabricate">
|
|
50
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true">
|
|
51
|
+
<path d="M13 2 4.5 13.5H11L9.5 22 19 9.5h-6z" />
|
|
52
|
+
</svg>
|
|
53
|
+
<span class="btn-label">Fabricar agente</span>
|
|
54
|
+
</button>
|
|
55
|
+
<button type="button" class="btn" id="btn-pause" aria-pressed="false">
|
|
56
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true">
|
|
57
|
+
<path d="M9 5v14M15 5v14" />
|
|
58
|
+
</svg>
|
|
59
|
+
<span class="btn-label">Pausar</span>
|
|
60
|
+
</button>
|
|
61
|
+
<button type="button" class="btn btn-ghost" id="btn-resync" title="Releer .oficina/ (R)">
|
|
62
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true">
|
|
63
|
+
<path d="M20 11a8 8 0 1 0-2.3 5.7" />
|
|
64
|
+
<path d="M20 4v7h-7" />
|
|
65
|
+
</svg>
|
|
66
|
+
<span class="btn-label">Sync</span>
|
|
67
|
+
</button>
|
|
68
|
+
<button type="button" class="btn btn-ghost" id="btn-theme" aria-pressed="true">
|
|
69
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true">
|
|
70
|
+
<circle cx="12" cy="12" r="4" />
|
|
71
|
+
<path d="M12 2v2M12 20v2M2 12h2M20 12h2M5 5l1.5 1.5M17.5 17.5 19 19M19 5l-1.5 1.5M6.5 17.5 5 19" />
|
|
72
|
+
</svg>
|
|
73
|
+
<span class="btn-label">Claro</span>
|
|
74
|
+
</button>
|
|
75
|
+
<details class="keys">
|
|
76
|
+
<summary aria-label="Atajos de teclado">?</summary>
|
|
77
|
+
<div class="keys-panel">
|
|
78
|
+
<dl>
|
|
79
|
+
<dt>F</dt><dd>Fabricar agente</dd>
|
|
80
|
+
<dt>Espacio</dt><dd>Pausar / reanudar polling</dd>
|
|
81
|
+
<dt>R</dt><dd>Releer .oficina/</dd>
|
|
82
|
+
<dt>Esc</dt><dd>Cerrar ficha o ayuda</dd>
|
|
83
|
+
<dt>?</dt><dd>Este panel</dd>
|
|
84
|
+
</dl>
|
|
85
|
+
</div>
|
|
86
|
+
</details>
|
|
87
|
+
</div>
|
|
88
|
+
</header>
|
|
89
|
+
|
|
90
|
+
<main class="workspace">
|
|
91
|
+
<!-- ================= 01 · detection ================= -->
|
|
92
|
+
<aside class="panel" aria-labelledby="detect-title">
|
|
93
|
+
<div class="panel-head">
|
|
94
|
+
<span class="panel-eyebrow">01 · detección</span>
|
|
95
|
+
<h2 class="panel-title" id="detect-title">Huecos de cobertura</h2>
|
|
96
|
+
<span class="panel-head-right" id="gap-count">— gaps</span>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<div class="coverage">
|
|
100
|
+
<div class="coverage-top">
|
|
101
|
+
<div class="coverage-value" id="coverage-value">—<small>%</small></div>
|
|
102
|
+
<div class="coverage-label">
|
|
103
|
+
cobertura del roster<br />
|
|
104
|
+
<span id="coverage-note">leyendo .oficina/…</span>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<div
|
|
108
|
+
class="meter"
|
|
109
|
+
role="progressbar"
|
|
110
|
+
aria-label="Cobertura del catálogo sobre las cards abiertas"
|
|
111
|
+
aria-valuemin="0"
|
|
112
|
+
aria-valuemax="100"
|
|
113
|
+
aria-valuenow="0"
|
|
114
|
+
>
|
|
115
|
+
<span class="meter-fill" id="coverage-fill" data-tone="bad"></span>
|
|
116
|
+
<span class="meter-threshold" id="coverage-threshold" data-label="umbral 60%"></span>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="meter-scale" aria-hidden="true">
|
|
119
|
+
<span style="left: 0">0</span>
|
|
120
|
+
<span style="left: 30%">30</span>
|
|
121
|
+
<span style="left: 60%">60</span>
|
|
122
|
+
<span style="left: 100%">100</span>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<div class="panel-body" style="padding: 0">
|
|
127
|
+
<div class="gap-list" id="gap-list" role="group" aria-label="Cards bajo el umbral de cobertura">
|
|
128
|
+
<div class="empty">Leyendo cards…</div>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</aside>
|
|
132
|
+
|
|
133
|
+
<!-- ================= 02 · factory line ================= -->
|
|
134
|
+
<section class="panel" id="factory-panel" data-scene="idle" aria-labelledby="factory-title">
|
|
135
|
+
<div class="panel-head">
|
|
136
|
+
<span class="panel-eyebrow">02 · línea de fabricación</span>
|
|
137
|
+
<h2 class="panel-title" id="factory-title">Prensa de fichas</h2>
|
|
138
|
+
<span class="panel-head-right" id="fabricate-hint">esperando datos…</span>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div class="stage">
|
|
142
|
+
<div class="scene">
|
|
143
|
+
<div class="scene-readout" aria-hidden="true">
|
|
144
|
+
<span>foundry · línea 01</span>
|
|
145
|
+
<span>card → agente</span>
|
|
146
|
+
</div>
|
|
147
|
+
<svg viewBox="0 0 640 252" role="img" aria-labelledby="scene-title scene-desc">
|
|
148
|
+
<title id="scene-title">Prensa de la factory</title>
|
|
149
|
+
<desc id="scene-desc">
|
|
150
|
+
Una card entra a la prensa, se escribe una ficha markdown y el agente resultante sale hacia el catálogo.
|
|
151
|
+
</desc>
|
|
152
|
+
<defs>
|
|
153
|
+
<linearGradient id="g-ember" x1="0" y1="0" x2="0" y2="1">
|
|
154
|
+
<stop offset="0" stop-color="oklch(0.88 0.13 78)" />
|
|
155
|
+
<stop offset="1" stop-color="oklch(0.66 0.19 45)" />
|
|
156
|
+
</linearGradient>
|
|
157
|
+
<linearGradient id="g-metal" x1="0" y1="0" x2="1" y2="0">
|
|
158
|
+
<stop offset="0" stop-color="oklch(0.36 0.015 62)" />
|
|
159
|
+
<stop offset="0.5" stop-color="oklch(0.52 0.015 62)" />
|
|
160
|
+
<stop offset="1" stop-color="oklch(0.33 0.015 62)" />
|
|
161
|
+
</linearGradient>
|
|
162
|
+
<filter id="soft-glow" x="-50%" y="-50%" width="200%" height="200%">
|
|
163
|
+
<feGaussianBlur stdDeviation="3.2" result="b" />
|
|
164
|
+
<feMerge>
|
|
165
|
+
<feMergeNode in="b" />
|
|
166
|
+
<feMergeNode in="SourceGraphic" />
|
|
167
|
+
</feMerge>
|
|
168
|
+
</filter>
|
|
169
|
+
</defs>
|
|
170
|
+
|
|
171
|
+
<!-- floor -->
|
|
172
|
+
<line x1="24" y1="228" x2="616" y2="228" stroke="oklch(0.34 0.014 62)" stroke-width="1" />
|
|
173
|
+
<line x1="24" y1="222" x2="616" y2="222" stroke="oklch(0.26 0.014 62)" stroke-width="1" />
|
|
174
|
+
|
|
175
|
+
<!-- press frame -->
|
|
176
|
+
<rect x="196" y="40" width="9" height="176" rx="2" fill="url(#g-metal)" />
|
|
177
|
+
<rect x="435" y="40" width="9" height="176" rx="2" fill="url(#g-metal)" />
|
|
178
|
+
<rect x="188" y="40" width="264" height="11" rx="3" fill="url(#g-metal)" />
|
|
179
|
+
<circle cx="205" cy="46" r="2" fill="oklch(0.2 0.01 62)" />
|
|
180
|
+
<circle cx="435" cy="46" r="2" fill="oklch(0.2 0.01 62)" />
|
|
181
|
+
|
|
182
|
+
<!-- head -->
|
|
183
|
+
<g class="press-head">
|
|
184
|
+
<rect x="314" y="38" width="12" height="26" fill="oklch(0.44 0.014 62)" />
|
|
185
|
+
<rect x="256" y="63" width="128" height="36" rx="4" fill="url(#g-ember)" filter="url(#soft-glow)" />
|
|
186
|
+
<rect x="256" y="63" width="128" height="9" rx="3" fill="oklch(1 0 0 / 0.22)" />
|
|
187
|
+
<rect x="262" y="96" width="116" height="5" rx="2" fill="oklch(0.45 0.09 50)" />
|
|
188
|
+
<text x="320" y="87" text-anchor="middle" class="tag" fill="oklch(0.24 0.04 50)" style="font-weight: 700; letter-spacing: 0.2em">F</text>
|
|
189
|
+
</g>
|
|
190
|
+
|
|
191
|
+
<!-- sparks -->
|
|
192
|
+
<g class="sparks" fill="oklch(0.9 0.14 82)" filter="url(#soft-glow)">
|
|
193
|
+
<circle class="spark" cx="296" cy="128" r="2.6" />
|
|
194
|
+
<circle class="spark" cx="312" cy="134" r="2" />
|
|
195
|
+
<circle class="spark" cx="330" cy="127" r="2.4" />
|
|
196
|
+
<circle class="spark" cx="344" cy="136" r="1.8" />
|
|
197
|
+
<circle class="spark" cx="284" cy="138" r="1.6" />
|
|
198
|
+
<circle class="spark" cx="320" cy="120" r="1.4" />
|
|
199
|
+
<circle class="spark" cx="352" cy="126" r="1.5" />
|
|
200
|
+
<circle class="spark" cx="274" cy="128" r="1.3" />
|
|
201
|
+
</g>
|
|
202
|
+
|
|
203
|
+
<!-- mold: the card being pressed -->
|
|
204
|
+
<g class="mold">
|
|
205
|
+
<rect x="246" y="150" width="128" height="56" rx="5" fill="oklch(0.245 0.016 62)" stroke="oklch(0.4 0.016 62)" />
|
|
206
|
+
<rect x="246" y="150" width="4" height="56" rx="2" fill="oklch(0.79 0.16 62)" />
|
|
207
|
+
<text x="260" y="166" class="label">card</text>
|
|
208
|
+
<text x="260" y="192" class="tag" id="scene-mold-label">T-08</text>
|
|
209
|
+
</g>
|
|
210
|
+
|
|
211
|
+
<!-- conveyor -->
|
|
212
|
+
<line class="belt-dashes" x1="36" y1="212" x2="604" y2="212" stroke="oklch(0.46 0.014 62)" stroke-width="2" />
|
|
213
|
+
<line x1="36" y1="218" x2="604" y2="218" stroke="oklch(0.3 0.014 62)" stroke-width="1" />
|
|
214
|
+
|
|
215
|
+
<!-- output agent chip -->
|
|
216
|
+
<g class="out-chip">
|
|
217
|
+
<rect x="452" y="150" width="128" height="56" rx="5" fill="oklch(0.79 0.16 62 / 0.12)" stroke="oklch(0.79 0.16 62 / 0.6)" />
|
|
218
|
+
<text x="466" y="166" class="label" fill="oklch(0.82 0.12 70)">agente</text>
|
|
219
|
+
<text x="466" y="190" class="tag" id="scene-out-label">motion</text>
|
|
220
|
+
</g>
|
|
221
|
+
|
|
222
|
+
<!-- catalog bin -->
|
|
223
|
+
<g>
|
|
224
|
+
<rect class="bin-pulse" x="586" y="144" width="34" height="72" rx="4" fill="oklch(0.79 0.16 62)" opacity="0" />
|
|
225
|
+
<rect x="586" y="152" width="34" height="64" rx="4" fill="oklch(0.235 0.016 62)" stroke="oklch(0.36 0.015 62)" />
|
|
226
|
+
<line x1="594" y1="164" x2="612" y2="164" stroke="oklch(0.44 0.014 62)" />
|
|
227
|
+
<line x1="594" y1="174" x2="612" y2="174" stroke="oklch(0.44 0.014 62)" />
|
|
228
|
+
<line x1="594" y1="184" x2="606" y2="184" stroke="oklch(0.44 0.014 62)" />
|
|
229
|
+
<text x="603" y="232" text-anchor="middle" class="label">catálogo</text>
|
|
230
|
+
</g>
|
|
231
|
+
|
|
232
|
+
<!-- agent name under the press -->
|
|
233
|
+
<text x="320" y="243" text-anchor="middle" class="label" id="scene-agent">sin huecos</text>
|
|
234
|
+
</svg>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
<div class="steps-wrap">
|
|
239
|
+
<ol class="steps" id="steps">
|
|
240
|
+
<li class="step" data-status="pending">
|
|
241
|
+
<span class="step-icon" aria-hidden="true">01</span>
|
|
242
|
+
<span class="step-label">Detectar hueco de cobertura<span class="step-meta"></span></span>
|
|
243
|
+
<span class="step-end">gap</span>
|
|
244
|
+
</li>
|
|
245
|
+
<li class="step" data-status="pending">
|
|
246
|
+
<span class="step-icon" aria-hidden="true">02</span>
|
|
247
|
+
<span class="step-label">Sintetizar rol y capabilities<span class="step-meta"></span></span>
|
|
248
|
+
<span class="step-end">rol</span>
|
|
249
|
+
</li>
|
|
250
|
+
<li class="step" data-status="pending">
|
|
251
|
+
<span class="step-icon" aria-hidden="true">03</span>
|
|
252
|
+
<span class="step-label">Escribir la ficha .md<span class="step-meta"></span></span>
|
|
253
|
+
<span class="step-end">ficha</span>
|
|
254
|
+
</li>
|
|
255
|
+
<li class="step" data-status="pending">
|
|
256
|
+
<span class="step-icon" aria-hidden="true">04</span>
|
|
257
|
+
<span class="step-label">Registrar en el catálogo dinámico<span class="step-meta"></span></span>
|
|
258
|
+
<span class="step-end">roster</span>
|
|
259
|
+
</li>
|
|
260
|
+
<li class="step" data-status="pending">
|
|
261
|
+
<span class="step-icon" aria-hidden="true">05</span>
|
|
262
|
+
<span class="step-label">Match en la próxima card<span class="step-meta"></span></span>
|
|
263
|
+
<span class="step-end">match</span>
|
|
264
|
+
</li>
|
|
265
|
+
</ol>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div class="term-wrap">
|
|
269
|
+
<div class="term">
|
|
270
|
+
<div class="term-bar">
|
|
271
|
+
<span class="term-dots" aria-hidden="true"><i></i><i></i><i></i></span>
|
|
272
|
+
<span class="term-path"><b id="term-path-text">sin ficha en fabricación</b></span>
|
|
273
|
+
<span class="term-tag" id="term-tag">idle</span>
|
|
274
|
+
</div>
|
|
275
|
+
<pre class="term-body" id="term-body" aria-live="polite" aria-label="Ficha markdown en escritura"><span class="term-placeholder">La ficha .md se escribe acá cuando la factory sintetiza un agente.</span></pre>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</section>
|
|
279
|
+
|
|
280
|
+
<!-- ================= 03 · catalog ================= -->
|
|
281
|
+
<aside class="panel" aria-labelledby="roster-title">
|
|
282
|
+
<div class="panel-head">
|
|
283
|
+
<span class="panel-eyebrow">03 · catálogo</span>
|
|
284
|
+
<h2 class="panel-title" id="roster-title">Roster dinámico</h2>
|
|
285
|
+
<span class="panel-head-right" id="roster-count">—</span>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="panel-body" style="padding-top: 0; padding-bottom: 0">
|
|
288
|
+
<div class="roster-grid" id="roster-grid" role="group" aria-label="Agentes del catálogo">
|
|
289
|
+
<div class="empty">Leyendo roster…</div>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
|
|
293
|
+
<div class="match">
|
|
294
|
+
<div class="match-head">
|
|
295
|
+
<h3>proyección de match</h3>
|
|
296
|
+
<span class="panel-head-right" id="match-count">—</span>
|
|
297
|
+
</div>
|
|
298
|
+
<div id="match-body">
|
|
299
|
+
<div class="empty">Sin proyección todavía.</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
</aside>
|
|
303
|
+
</main>
|
|
304
|
+
|
|
305
|
+
<footer class="footbar">
|
|
306
|
+
<span>read-only · proyección local, no escribe en disco</span>
|
|
307
|
+
<span class="sep" aria-hidden="true"></span>
|
|
308
|
+
<span>umbral <b>60%</b> · <span id="gap-count-foot">—</span></span>
|
|
309
|
+
<span class="sep" aria-hidden="true"></span>
|
|
310
|
+
<a href="../.oficina/roster.json">roster.json</a>
|
|
311
|
+
<a href="../.opencode/agents/">.opencode/agents/</a>
|
|
312
|
+
<span class="legend" aria-hidden="true">
|
|
313
|
+
<i data-tone="bad"></i> bajo umbral
|
|
314
|
+
<i data-tone="ok"></i> cubierto
|
|
315
|
+
<i data-tone="ember"></i> fabricado
|
|
316
|
+
</span>
|
|
317
|
+
</footer>
|
|
318
|
+
</div>
|
|
319
|
+
|
|
320
|
+
<div class="toasts" id="toasts" role="status" aria-live="polite" aria-atomic="false"></div>
|
|
321
|
+
<div class="visually-hidden" id="live-region" role="status" aria-live="polite" aria-atomic="true"></div>
|
|
322
|
+
|
|
323
|
+
<dialog class="modal" id="agent-dialog" aria-labelledby="dialog-title">
|
|
324
|
+
<div class="modal-head">
|
|
325
|
+
<span class="modal-avatar" id="dialog-avatar" aria-hidden="true">?</span>
|
|
326
|
+
<div>
|
|
327
|
+
<h2 class="modal-title" id="dialog-title">Ficha del agente</h2>
|
|
328
|
+
<p class="modal-sub" id="dialog-sub">—</p>
|
|
329
|
+
</div>
|
|
330
|
+
<button type="button" class="modal-close" id="btn-dialog-close" aria-label="Cerrar ficha">×</button>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="modal-meta" id="dialog-meta"></div>
|
|
333
|
+
<div class="modal-body md" id="dialog-body"></div>
|
|
334
|
+
<div class="modal-foot">
|
|
335
|
+
<button type="button" class="btn" id="btn-copy">
|
|
336
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true">
|
|
337
|
+
<rect x="9" y="9" width="11" height="11" rx="2" />
|
|
338
|
+
<path d="M15 9V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h4" />
|
|
339
|
+
</svg>
|
|
340
|
+
<span class="btn-label">Copiar ficha</span>
|
|
341
|
+
</button>
|
|
342
|
+
<span class="note" id="dialog-origin"></span>
|
|
343
|
+
</div>
|
|
344
|
+
</dialog>
|
|
345
|
+
|
|
346
|
+
<script src="factory/factory-core.js"></script>
|
|
347
|
+
<script src="factory/snapshot.js"></script>
|
|
348
|
+
<script src="factory/factory-app.js"></script>
|
|
349
|
+
</body>
|
|
350
|
+
</html>
|