@rlabs-cl/arketum 0.0.0-stage → 1.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.
- package/CHANGELOG.md +133 -0
- package/LICENSE +48 -0
- package/README.md +67 -2
- package/THIRD-PARTY-NOTICES +2428 -0
- package/catalogo-de-ejemplo/agentes.yaml +11 -0
- package/catalogo-de-ejemplo/arquetipos/ajuste.yaml +54 -0
- package/catalogo-de-ejemplo/arquetipos/arquetipo-autor.yaml +72 -0
- package/catalogo-de-ejemplo/arquetipos/arquitectura-de-sistema.yaml +72 -0
- package/catalogo-de-ejemplo/arquetipos/despliegue-compose.yaml +104 -0
- package/catalogo-de-ejemplo/arquetipos/digestion.yaml +97 -0
- package/catalogo-de-ejemplo/arquetipos/documento-academico.yaml +131 -0
- package/catalogo-de-ejemplo/arquetipos/inventario-funcional.yaml +42 -0
- package/catalogo-de-ejemplo/arquetipos/levantamiento-de-infraestructura.yaml +117 -0
- package/catalogo-de-ejemplo/arquetipos/plan-de-migracion.yaml +40 -0
- package/catalogo-de-ejemplo/arquetipos/prd.yaml +62 -0
- package/catalogo-de-ejemplo/arquetipos/radio-de-alcance.yaml +141 -0
- package/catalogo-de-ejemplo/arquetipos/rca.yaml +68 -0
- package/catalogo-de-ejemplo/arquetipos/servicio-con-integracion.yaml +154 -0
- package/catalogo-de-ejemplo/carriles/ajuste.yaml +14 -0
- package/catalogo-de-ejemplo/carriles/arquetipo.yaml +13 -0
- package/catalogo-de-ejemplo/carriles/comprobacion.yaml +23 -0
- package/catalogo-de-ejemplo/carriles/correccion.yaml +25 -0
- package/catalogo-de-ejemplo/carriles/despliegue.yaml +36 -0
- package/catalogo-de-ejemplo/carriles/digestion.yaml +14 -0
- package/catalogo-de-ejemplo/carriles/funcionalidad.yaml +34 -0
- package/catalogo-de-ejemplo/carriles/migracion.yaml +27 -0
- package/catalogo-de-ejemplo/carriles/nuevo.yaml +30 -0
- package/catalogo-de-ejemplo/formas/aplicacion-por-capas.yaml +185 -0
- package/catalogo-de-ejemplo/formas/juego-terminal.yaml +161 -0
- package/catalogo-de-ejemplo/formas/monorepo-de-aplicaciones.yaml +207 -0
- package/catalogo-de-ejemplo/incluido.yaml +3 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/e2e_http.py +36 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/pytest.ini +5 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/requirements.txt +2 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/terminal_e2e.py +112 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go.yaml +74 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/e2e_http.py +36 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/pytest.ini +5 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/requirements.txt +2 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/terminal_e2e.py +112 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python.yaml +167 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/app.mjs +182 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/terminal_puente.py +51 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/vitest.config.mjs +12 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript.yaml +88 -0
- package/dist/mcp/arketum.js +3 -0
- package/dist/mcp/ci-cli.js +2 -0
- package/dist/mcp/cli.js +2 -0
- package/dist/mcp/comun-ZEXDDERM.js +1 -0
- package/dist/mcp/comun-ZTEHRDHC.js +1 -0
- package/dist/mcp/panel-cli.js +2 -0
- package/dist/mcp/telemetria-cli.js +1 -0
- package/package.json +33 -4
- package/server.json +15 -0
- package/telemetria.json +27 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const ab=b;(function(p,q){const a1=b,r=p();while(!![]){try{const s=-parseInt(a1(0x12d))/0x1+parseInt(a1(0x144))/0x2+parseInt(a1(0x128))/0x3+parseInt(a1(0xf6))/0x4+parseInt(a1(0x15f))/0x5+parseInt(a1(0x112))/0x6+parseInt(a1(0x12f))/0x7*(-parseInt(a1(0x14e))/0x8);if(s===q)break;else r['push'](r['shift']());}catch(t){r['push'](r['shift']());}}}(a,0xdc027));import{asegurarPanel,claveDelPanel,consultarPanel,decidirEnElPanel,descartarTemaEnElPanel,detenerPanel,estadoCalculado,fijarPuertoDelPanel,historialDelProyecto,huellaDeArketum,leerRegistro,mapaDelProyecto,pendientesParaElPanel,prdVivo,puertoDelPanel,raizDelToken,responderTemaEnElPanel}from'./comun-ZTEHRDHC.js';import{NOMBRE_DEL_FRENTE,NOMBRE_DE_OPCION,OPCIONES_CON_COMENTARIO,OPCIONES_DE_GATE,OPCIONES_DE_TELEMETRIA,carpetaPersonal,conUnaLectura,decidirTelemetriaComoPendiente,guardarIdentidad,hasProjectManifest,identidadPropuesta,leerIdentidad,leerProyecto,openPersonalLog,pendienteDeLaTelemetria,rechazoPorFormato,textoDeIdentidad}from'./comun-ZEXDDERM.js';import{spawn}from'node:child_process';import{join,resolve}from'node:path';import{fileURLToPath}from'node:url';import{randomBytes}from'node:crypto';function b(c,d){c=c-0xf2;const e=a();let f=e[c];if(b['UODQkn']===undefined){var g=function(l){const m='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let n='',o='';for(let p=0x0,q,r,s=0x0;r=l['charAt'](s++);~r&&(q=p%0x4?q*0x40+r:r,p++%0x4)?n+=String['fromCharCode'](0xff&q>>(-0x2*p&0x6)):0x0){r=m['indexOf'](r);}for(let t=0x0,u=n['length'];t<u;t++){o+='%'+('00'+n['charCodeAt'](t)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(o);};b['BOHaPf']=g,b['CMABcH']={},b['UODQkn']=!![];}const h=e[0x0],i=c+h,j=b['CMABcH'][i];return!j?(f=b['BOHaPf'](f),b['CMABcH'][i]=f):f=j,f;}import{createServer}from'node:http';var c=0x40*0x400,d=0xfa0;function e(p){return new Promise((q,r)=>{const a3=b;let s='';p['setEncoding']('utf8'),p['on']('data',t=>{const a2=b;s+=t,s[a2(0x10c)]>c&&(p['removeAllListeners']('data'),r(new Error('demasiado\x20grande')));}),p['on'](a3(0x136),()=>q(s)),p['on']('error',r);});}var f=(p,q,r)=>{const a4=b;p[a4(0x147)](q,{'content-type':'application/json;\x20charset=utf-8','cache-control':a4(0xf3)}),p[a4(0x136)](JSON['stringify'](r));};function g(p){const a5=b;if(typeof p!==a5(0xf4)||p===null)return void 0x0;const q=p,s=z=>typeof q[z]==='string'&&q[z]['trim']()!==''?q[z]['trim']():void 0x0,t=s('unidad'),u=s(a5(0x122)),w=s(a5(0x13a));if(t===void 0x0||u===void 0x0)return void 0x0;const y=w===void 0x0?{}:{'comentario':w};if(q[a5(0x135)]===a5(0x117)){const z=s(a5(0x117)),A=q['eleccion'];if(z===void 0x0||!OPCIONES_DE_GATE[a5(0x10e)](A))return void 0x0;const B=A;if(OPCIONES_CON_COMENTARIO[a5(0x10e)](B)&&w===void 0x0)return void 0x0;return{'tipo':'gate','unidad':t,'gate':z,'huella':u,'eleccion':B,...y};}if(q[a5(0x135)]==='confirmacion'){const C=q['veredictos'];if(typeof C!=='object'||C===null)return void 0x0;const D={};for(const [E,F]of Object[a5(0x13c)](C)){if(F!=='si'&&F!=='no'&&F!=='despues')return void 0x0;D[E]=F;}if(Object['keys'](D)[a5(0x10c)]===0x0||Object[a5(0x133)](D)['includes']('no')&&w===void 0x0)return void 0x0;return{'tipo':'confirmacion','unidad':t,'huella':u,'veredictos':D,...y};}if(q[a5(0x135)]==='delegacion'){const G=s('hasta'),H=q[a5(0x159)];if(G===void 0x0||H!==a5(0x151)&&H!=='revocar')return void 0x0;return{'tipo':'delegacion','unidad':t,'huella':u,'hasta':G,'eleccion':H,...y};}if(q['tipo']===a5(0x123)){const I=s('requisito');if(I===void 0x0||typeof q[a5(0x125)]!=='boolean')return void 0x0;return{'tipo':a5(0x123),'unidad':t,'requisito':I,'huella':u,'confirma':q[a5(0x125)],...y};}return void 0x0;}async function h(p){const a6=b,q=a6(0x149)+randomBytes(0x4)['toString']('hex');let r=0x0;const s=createServer((t,u)=>{const a8=a6;void(async()=>{const a7=b,v=(t[a7(0x14f)]['host']??'')[a7(0x11c)]();if(v!=='127.0.0.1:'+r&&v!=='localhost:'+r)return f(u,0x193,{'error':'solo\x20desde\x20esta\x20máquina'});const w=new URL(t[a7(0x10f)]??'/',a7(0x163)+v);if(t['method']===a7(0x154)&&w['pathname']==='/'){u[a7(0x147)](0xc8,{'content-type':'text/html;\x20charset=utf-8','cache-control':a7(0xf3),'content-security-policy':a7(0x148)}),u[a7(0x136)](i);return;}if(t[a7(0x11d)]===a7(0x154)&&w[a7(0x126)]===a7(0x12b)){const C={'arketum':'panel','huella':p['huella']??'','pid':process['pid']};return f(u,0xc8,C);}if(t['method']===a7(0x105)&&w['pathname']==='/detener'){const D=p[a7(0x14a)]===void 0x0?void 0x0:await p['detener']['clave']();if(p['detener']===void 0x0||D===void 0x0||D===''||t[a7(0x14f)]['x-arketum-clave']!==D)return f(u,0x191,{'error':a7(0x10a)});f(u,0xc8,{'detenido':!![]}),setImmediate(p[a7(0x14a)]['alDetener']);return;}const x=typeof t[a7(0x14f)]['x-arketum-token']===a7(0x139)?t['headers'][a7(0xfb)]:void 0x0,y=x??(t['method']==='GET'?w[a7(0x15d)][a7(0x13f)]('t')??void 0x0:void 0x0),z=y===void 0x0||y===''?void 0x0:await p['raizDe'](y);if(z===void 0x0)return f(u,0x191,{'error':a7(0x108)});const A=await rechazoPorFormato(z);if(A!==void 0x0)return f(u,0x199,{'error':A});const B=await leerProyecto(z);if(B===null)return f(u,0x194,{'error':'aquí\x20no\x20hay\x20un\x20proyecto\x20de\x20Arketum\x20(`.arketum/proyecto.yaml`)'});if(a7(0x12e)in B)return f(u,0x1f4,{'error':B['negativa']});if(t['method']===a7(0x154)&&w[a7(0x126)]===a7(0x15c)){const [E,F,G,H,I]=await conUnaLectura(()=>Promise['all']([estadoCalculado(z,B[a7(0x121)],new Date()[a7(0xf2)]()),pendientesParaElPanel(z,B['manifiesto']),historialDelProyecto(z),mapaDelProyecto(z,B[a7(0x121)]),prdVivo(z,B[a7(0x121)])])),J=textoDeIdentidad(await leerIdentidad()),K=identidadPropuesta();return f(u,0xc8,{'estado':E,...F,'historial':G,'integraciones':{'cuentas':H[a7(0x153)][a7(0x124)],'lineas':H[a7(0x15e)]},'prd':I,...J===void 0x0?{}:{'identidad':J},...K===void 0x0?{}:{'propuesta':K}});}if(t['method']===a7(0x105)&&w[a7(0x126)]==='/api/identidad'){let L;try{L=JSON[a7(0xfc)](await e(t));}catch{return f(u,0x190,{'error':'no\x20es\x20JSON'});}const M=typeof L['soy']===a7(0x139)?L[a7(0x113)]['trim']()[a7(0x141)](0x0,0xc8):'';if(M==='')return f(u,0x190,{'error':a7(0xf7)});const N=M['includes']('@')&&!/\s/['test'](M)?{'correo':M}:{'nombre':M};return await guardarIdentidad(N),f(u,0xc8,{'identidad':textoDeIdentidad(N)});}if(t['method']===a7(0x105)&&w[a7(0x126)]==='/api/telemetria'){let O;try{O=JSON['parse'](await e(t));}catch{return f(u,0x190,{'error':a7(0x10b)});}if(typeof O['acepta']!==a7(0xfe))return f(u,0x190,{'error':a7(0x142)+OPCIONES_DE_TELEMETRIA['si']+a7(0x157)+OPCIONES_DE_TELEMETRIA['no']+'»'});const P=typeof O['comentario']==='string'?O[a7(0x13a)][a7(0x150)]()[a7(0x141)](0x0,0x7d0):'';if(await pendienteDeLaTelemetria()===void 0x0)return f(u,0xc8,{'linea':'\x20\x20·\x20telemetría:\x20ya\x20estaba\x20decidida\x20(o\x20está\x20apagada\x20en\x20esta\x20máquina);\x20no\x20se\x20registra.'});const Q=await decidirTelemetriaComoPendiente(O['acepta'],P===''?void 0x0:P,textoDeIdentidad(await leerIdentidad()),a7(0x102));return f(u,0xc8,{'linea':Q});}if(t['method']==='POST'&&w[a7(0x126)]===a7(0x11b)){let R;try{R=JSON['parse'](await e(t));}catch{return f(u,0x190,{'error':a7(0x10b)});}const S=typeof R['id']==='string'?R['id'][a7(0x150)]():'';if(R[a7(0x156)]!==void 0x0){const W=typeof R[a7(0x156)]===a7(0x139)?R['respuesta'][a7(0x150)]():'';if(S===''||W==='')return f(u,0x190,{'error':'escribe\x20tu\x20respuesta'});if(W[a7(0x10c)]>d)return f(u,0x190,{'error':'la\x20respuesta\x20es\x20demasiado\x20larga:\x20'+W['length']+'\x20de\x20'+d+a7(0x127)});const X=await responderTemaEnElPanel(z,q,S,W,textoDeIdentidad(await leerIdentidad()));return f(u,'error'in X?0x190:0xc8,X);}const T=typeof R['motivo']==='string'?R[a7(0x130)]['trim']()[a7(0x141)](0x0,0x7d0):'';if(S===''||T==='')return f(u,0x190,{'error':a7(0xff)});const U=textoDeIdentidad(await leerIdentidad());if(U===void 0x0)return f(u,0x190,{'error':a7(0x110)});const V=await descartarTemaEnElPanel(z,q,S,T,U);return f(u,'error'in V?0x190:0xc8,V);}if(t['method']==='POST'&&w['pathname']===a7(0x134)){let Y;try{Y=JSON[a7(0xfc)](await e(t));}catch(a0){return f(u,a0['message']==='demasiado\x20grande'?0x19d:0x190,{'error':a0[a7(0x111)]===a7(0x116)?'la\x20respuesta\x20es\x20demasiado\x20grande':a7(0x10b)});}const Z=g(Y);if(Z===void 0x0)return f(u,0x190,{'error':'la\x20respuesta\x20no\x20está\x20completa\x20(con\x20«ajustar»\x20o\x20«rechazar»,\x20y\x20con\x20un\x20«no»,\x20hace\x20falta\x20el\x20comentario)'});return f(u,0xc8,await decidirEnElPanel(z,B[a7(0x121)],q,Z));}f(u,0x194,{'error':'no\x20existe'});})()[a8(0x115)](v=>f(u,0x1f4,{'error':v instanceof Error?v[a8(0x111)]:String(v)}));});return await new Promise((t,u)=>{const a9=a6;s['once']('error',u),s[a9(0x129)](p[a9(0x100)],'127.0.0.1',()=>t());}),r=s[a6(0x137)]()[a6(0x10d)],{'puerto':r,'cerrar':()=>new Promise(t=>{const aa=a6;s['close'](()=>t()),s[aa(0xf9)]();})};}var i='<!doctype\x20html>\x0a<html\x20lang=\x22es\x22>\x0a<head>\x0a<meta\x20charset=\x22utf-8\x22>\x0a<meta\x20name=\x22viewport\x22\x20content=\x22width=device-width,\x20initial-scale=1\x22>\x0a<title>Arketum\x20·\x20panel</title>\x0a<style>\x0a:root\x20{\x20--fondo:#f7f7f5;\x20--carta:#fff;\x20--texto:#1d1d1b;\x20--suave:#6b6b66;\x20--borde:#e2e2dc;\x20--acento:#2f5d8a;\x20--ok:#2e7d4f;\x20--aviso:#a5660b;\x20--mal:#a33a3a;\x20}\x0a@media\x20(prefers-color-scheme:\x20dark)\x20{\x20:root\x20{\x20--fondo:#161615;\x20--carta:#20201e;\x20--texto:#ecece8;\x20--suave:#a3a39c;\x20--borde:#34342f;\x20--acento:#7fb0e0;\x20--ok:#6cc093;\x20--aviso:#e0a64a;\x20--mal:#e07a7a;\x20}\x20}\x0a*\x20{\x20box-sizing:\x20border-box;\x20}\x0abody\x20{\x20margin:0;\x20background:var(--fondo);\x20color:var(--texto);\x20font:15px/1.5\x20system-ui,\x20-apple-system,\x20\x22Segoe\x20UI\x22,\x20sans-serif;\x20}\x0aheader\x20{\x20padding:16px\x2020px\x200;\x20max-width:960px;\x20margin:0\x20auto;\x20}\x0ah1\x20{\x20font-size:20px;\x20margin:0\x200\x204px;\x20}\x0a.sub\x20{\x20color:var(--suave);\x20font-size:13px;\x20}\x0anav\x20{\x20display:flex;\x20gap:8px;\x20margin:14px\x200\x200;\x20border-bottom:1px\x20solid\x20var(--borde);\x20}\x0anav\x20button\x20{\x20background:none;\x20border:0;\x20border-bottom:2px\x20solid\x20transparent;\x20padding:8px\x2010px;\x20color:var(--suave);\x20font:inherit;\x20cursor:pointer;\x20}\x0anav\x20button.activa\x20{\x20color:var(--texto);\x20border-bottom-color:var(--acento);\x20}\x0amain\x20{\x20max-width:960px;\x20margin:0\x20auto;\x20padding:16px\x2020px\x2040px;\x20}\x0a.carta\x20{\x20background:var(--carta);\x20border:1px\x20solid\x20var(--borde);\x20border-radius:10px;\x20padding:14px\x2016px;\x20margin:0\x200\x2012px;\x20}\x0a.cifras\x20{\x20display:flex;\x20flex-wrap:wrap;\x20gap:12px;\x20}\x0a.cifra\x20{\x20flex:1\x201\x20140px;\x20background:var(--carta);\x20border:1px\x20solid\x20var(--borde);\x20border-radius:10px;\x20padding:12px\x2014px;\x20}\x0a.cifra\x20b\x20{\x20display:block;\x20font-size:24px;\x20}\x0a.cifra\x20span\x20{\x20color:var(--suave);\x20font-size:13px;\x20}\x0a.avance\x20b\x20{\x20font-size:40px;\x20}\x0ah2\x20{\x20font-size:15px;\x20margin:18px\x200\x208px;\x20}\x0a.quien\x20{\x20font-weight:600;\x20}\x0a.dato\x20{\x20color:var(--suave);\x20font-size:13px;\x20}\x0apre\x20{\x20white-space:pre-wrap;\x20background:var(--fondo);\x20border:1px\x20solid\x20var(--borde);\x20border-radius:8px;\x20padding:10px;\x20font:13px/1.45\x20ui-monospace,\x20Menlo,\x20monospace;\x20margin:8px\x200;\x20}\x0a.opciones\x20{\x20display:flex;\x20flex-wrap:wrap;\x20gap:8px;\x20margin:8px\x200;\x20}\x0a.opciones\x20button\x20{\x20font:inherit;\x20padding:6px\x2012px;\x20border-radius:8px;\x20border:1px\x20solid\x20var(--borde);\x20background:var(--carta);\x20color:var(--texto);\x20cursor:pointer;\x20}\x0a.opciones\x20button.aprobar\x20{\x20border-color:var(--ok);\x20color:var(--ok);\x20}\x0a.opciones\x20button.rechazar\x20{\x20border-color:var(--mal);\x20color:var(--mal);\x20}\x0atextarea\x20{\x20width:100%;\x20min-height:56px;\x20font:inherit;\x20padding:8px;\x20border-radius:8px;\x20border:1px\x20solid\x20var(--borde);\x20background:var(--carta);\x20color:var(--texto);\x20}\x0a.etiqueta\x20{\x20display:inline-block;\x20font-size:12px;\x20padding:1px\x208px;\x20border-radius:999px;\x20border:1px\x20solid\x20var(--borde);\x20color:var(--suave);\x20margin-left:6px;\x20}\x0a.resultado\x20{\x20margin-top:6px;\x20font-size:13px;\x20}\x0atable\x20{\x20width:100%;\x20border-collapse:collapse;\x20font-size:13px;\x20}\x0ath,\x20td\x20{\x20text-align:left;\x20padding:6px\x208px;\x20border-bottom:1px\x20solid\x20var(--borde);\x20vertical-align:top;\x20}\x0ath\x20{\x20color:var(--suave);\x20font-weight:500;\x20}\x0a.vacio\x20{\x20color:var(--suave);\x20}\x0a.error\x20{\x20color:var(--mal);\x20}\x0a.cambio\x20{\x20color:var(--aviso);\x20margin:0\x200\x206px;\x20}\x0a@media\x20(max-width:\x20600px)\x20{\x20header,\x20main\x20{\x20padding-left:16px;\x20padding-right:16px;\x20}\x20table\x20{\x20font-size:12px;\x20}\x20}\x0a</style>\x0a</head>\x0a<body>\x0a<header>\x0a\x20\x20<h1\x20id=\x22titulo\x22>Arketum</h1>\x0a\x20\x20<div\x20class=\x22sub\x22\x20id=\x22sub\x22>Cargando…</div>\x0a\x20\x20<nav>\x0a\x20\x20\x20\x20<button\x20data-vista=\x22estado\x22\x20class=\x22activa\x22>Estado</button>\x0a\x20\x20\x20\x20<button\x20data-vista=\x22pendientes\x22>Pendientes</button>\x0a\x20\x20\x20\x20<button\x20data-vista=\x22historial\x22>Historial</button>\x0a\x20\x20\x20\x20<button\x20data-vista=\x22integraciones\x22>Integraciones</button>\x0a\x20\x20\x20\x20<button\x20data-vista=\x22prd\x22>PRD</button>\x0a\x20\x20</nav>\x0a</header>\x0a<main\x20id=\x22main\x22></main>\x0a<script>\x0avar\x20token\x20=\x20new\x20URLSearchParams(location.search).get(\x27t\x27)\x20||\x20\x27\x27;\x0avar\x20vista\x20=\x20\x27estado\x27;\x0a//\x20Los\x20nombres\x20de\x20las\x20opciones\x20de\x20un\x20gate,\x20los\x20mismos\x20de\x20la\x20tanda\x20y\x20el\x20chat\x20(td-f02).\x0avar\x20NOMBRES\x20=\x20'+JSON[ab(0x152)](NOMBRE_DE_OPCION)+';\x0a//\x20Las\x20dos\x20respuestas\x20de\x20la\x20telemetría,\x20las\x20mismas\x20de\x20la\x20tanda\x20(tl-f01).\x0avar\x20TELEMETRIA\x20=\x20'+JSON[ab(0x152)](OPCIONES_DE_TELEMETRIA)+ab(0x114)+JSON['stringify'](NOMBRE_DEL_FRENTE)+';\x0afunction\x20pintarEstado()\x20{\x0a\x20\x20//\x20En\x20grande,\x20el\x20avance\x20(pn-f01);\x20luego\x20las\x20cuentas.\x0a\x20\x20var\x20e\x20=\x20datos.estado,\x20h\x20=\x20cajaDeIdentidad()\x20+\x20\x27<div\x20class=\x22cifras\x20avance\x22>\x27;\x0a\x20\x20h\x20+=\x20\x27<div\x20class=\x22cifra\x22><b>\x27\x20+\x20e.progreso.construidas\x20+\x20\x27\x20/\x20\x27\x20+\x20e.progreso.funcionales\x20+\x20\x27</b><span>funcionalidades\x20construidas</span></div>\x27;\x0a\x20\x20h\x20+=\x20\x27<div\x20class=\x22cifra\x22><b>\x27\x20+\x20e.progreso.confirmadas\x20+\x20\x27</b><span>confirmadas\x20por\x20ti</span></div></div><div\x20class=\x22cifras\x22>\x27;\x0a\x20\x20Object.keys(e.porEstado).forEach(function\x20(k)\x20{\x20h\x20+=\x20\x27<div\x20class=\x22cifra\x22><b>\x27\x20+\x20e.porEstado[k]\x20+\x20\x27</b><span>\x27\x20+\x20esc(k)\x20+\x20\x27</span></div>\x27;\x20});\x0a\x20\x20Object.keys(FRENTES).forEach(function\x20(k)\x20{\x20if\x20(e.frentes\x20&&\x20e.frentes[k])\x20h\x20+=\x20\x27<div\x20class=\x22cifra\x22><b>\x27\x20+\x20e.frentes[k]\x20+\x20\x27</b><span>\x27\x20+\x20esc(FRENTES[k])\x20+\x20\x27</span></div>\x27;\x20});\x0a\x20\x20h\x20+=\x20\x27</div>\x27;\x0a\x20\x20if\x20(e.integraciones)\x20h\x20+=\x20\x27<p\x20class=\x22dato\x22>\x27\x20+\x20esc(e.integraciones)\x20+\x20\x27</p>\x27;\x0a\x20\x20h\x20+=\x20\x27<h2>Esperan\x20tu\x20decisión\x20(\x27\x20+\x20e.esperandoALaPersona.length\x20+\x20\x27)</h2>\x27;\x0a\x20\x20h\x20+=\x20e.esperandoALaPersona.length\x20?\x20e.esperandoALaPersona.map(unidad).join(\x27\x27)\x20:\x20\x27<p\x20class=\x22vacio\x22>Nada.</p>\x27;\x0a\x20\x20h\x20+=\x20\x27<h2>En\x20marcha\x20(\x27\x20+\x20e.enMarcha.length\x20+\x20\x27)</h2>\x27;\x0a\x20\x20h\x20+=\x20e.enMarcha.length\x20?\x20e.enMarcha.map(unidad).join(\x27\x27)\x20:\x20\x27<p\x20class=\x22vacio\x22>Nada.</p>\x27;\x0a\x20\x20if\x20(e.confirmacionesDeCerradas\x20&&\x20e.confirmacionesDeCerradas.length)\x20h\x20+=\x20\x27<h2>Confirmaciones\x20de\x20unidades\x20cerradas\x20(\x27\x20+\x20e.confirmacionesDeCerradas.length\x20+\x20\x27)</h2>\x27\x20+\x20e.confirmacionesDeCerradas.map(function\x20(c)\x20{\x20return\x20\x27<div\x20class=\x22carta\x22><div\x20class=\x22quien\x22>\x27\x20+\x20esc(c.unidad)\x20+\x20\x27\x20·\x20¿es\x20lo\x20que\x20querías?</div>\x27\x20+\x20(c.desde\x20?\x20\x27<div\x20class=\x22dato\x22>Desde\x20\x27\x20+\x20esc(c.desde.slice(0,\x2010))\x20+\x20\x27\x20(\x27\x20+\x20dias(c.dias)\x20+\x20\x27);\x20respóndela\x20en\x20Pendientes</div>\x27\x20:\x20\x27\x27)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20//\x20La\x20pregunta\x20de\x20la\x20telemetría,\x20de\x20la\x20instalación\x20(tl-f01):\x20se\x20responde\x20en\x20Pendientes.\x0a\x20\x20if\x20(e.telemetria)\x20h\x20+=\x20\x27<h2>De\x20esta\x20instalación</h2><div\x20class=\x22carta\x22><div\x20class=\x22quien\x22>¿Aceptas\x20enviar\x20un\x20resumen\x20anónimo\x20de\x20uso?</div><div\x20class=\x22dato\x22>Sin\x20decidir\x27\x20+\x20(e.telemetria.desde\x20?\x20\x27\x20desde\x20\x27\x20+\x20esc(e.telemetria.desde.slice(0,\x2010))\x20+\x20\x27\x20(\x27\x20+\x20dias(e.telemetria.dias)\x20+\x20\x27)\x27\x20:\x20\x27\x27)\x20+\x20\x27;\x20no\x20bloquea\x20nada;\x20respóndela\x20en\x20Pendientes</div></div>\x27;\x0a\x20\x20if\x20(e.gruposDeTemas\x20&&\x20e.gruposDeTemas.length)\x20h\x20+=\x20\x27<h2>Para\x20conversar\x20(\x27\x20+\x20e.temas.length\x20+\x20\x27)</h2>\x27\x20+\x20e.gruposDeTemas.map(function\x20(g)\x20{\x20return\x20\x27<div\x20class=\x22carta\x22><div\x20class=\x22quien\x22>\x27\x20+\x20esc(g.titulo)\x20+\x20\x27</div><div\x20class=\x22dato\x22>\x27\x20+\x20esc(g.resumen)\x20+\x20\x27;\x20no\x20bloquean\x20nada;\x20respóndelos\x20en\x20Pendientes</div></div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20else\x20if\x20(e.temas\x20&&\x20e.temas.length)\x20h\x20+=\x20\x27<h2>Para\x20conversar\x20(\x27\x20+\x20e.temas.length\x20+\x20\x27)</h2>\x27\x20+\x20e.temas.map(function\x20(t)\x20{\x20return\x20\x27<div\x20class=\x22carta\x22><div\x20class=\x22quien\x22>\x27\x20+\x20esc(t.titulo)\x20+\x20(t.de\x20===\x20\x27agente\x27\x20?\x20\x27<span\x20class=\x22etiqueta\x22>lo\x20propone\x20el\x20agente</span>\x27\x20:\x20t.de\x20===\x20\x27arketum\x27\x20?\x20\x27<span\x20class=\x22etiqueta\x22>lo\x20calcula\x20Arketum\x27\x20+\x20(t.deDeducido\x20?\x20\x27;\x20deducido\x27\x20:\x20\x27\x27)\x20+\x20\x27</span>\x27\x20:\x20\x27\x27)\x20+\x20\x27</div><div\x20class=\x22dato\x22>Desde\x20\x27\x20+\x20esc(t.desde.slice(0,\x2010))\x20+\x20\x27\x20(\x27\x20+\x20dias(t.dias)\x20+\x20\x27);\x20no\x20bloquea\x20nada\x27\x20+\x20(t.conRespuesta\x20?\x20\x27;\x20con\x20respuesta\x27\x20:\x20\x27\x27)\x20+\x20\x27</div></div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20if\x20(e.solapes\x20&&\x20e.solapes.length)\x20h\x20+=\x20\x27<h2>Tocan\x20lo\x20mismo</h2>\x27\x20+\x20e.solapes.map(function\x20(s)\x20{\x20return\x20\x27<div\x20class=\x22carta\x22>\x27\x20+\x20esc(s.artefacto)\x20+\x20\x27:\x20\x27\x20+\x20s.unidades.map(esc).join(\x27,\x20\x27)\x20+\x20\x27\x20<span\x20class=\x22dato\x22>(se\x20avisa,\x20no\x20se\x20bloquea)</span></div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20if\x20(e.conflictos.length)\x20h\x20+=\x20\x27<h2>Conflictos</h2>\x27\x20+\x20e.conflictos.map(function\x20(c)\x20{\x20return\x20\x27<div\x20class=\x22carta\x20error\x22>\x27\x20+\x20esc(c)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20if\x20(e.unidadesIlegibles.length\x20||\x20e.ilegibles.length)\x20h\x20+=\x20\x27<h2>No\x20se\x20pueden\x20leer</h2>\x27\x20+\x20e.unidadesIlegibles.map(function\x20(u)\x20{\x20return\x20\x27<div\x20class=\x22carta\x20error\x22>\x27\x20+\x20esc(u.id)\x20+\x20\x27:\x20\x27\x20+\x20esc(u.motivo)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27)\x20+\x20e.ilegibles.map(function\x20(x)\x20{\x20return\x20\x27<div\x20class=\x22carta\x20error\x22>\x27\x20+\x20esc(x.file)\x20+\x20\x27:\x20\x27\x20+\x20esc(x.problem)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20return\x20h;\x0a}\x0afunction\x20pintarPendientes()\x20{\x0a\x20\x20var\x20h\x20=\x20cajaDeIdentidad();\x0a\x20\x20if\x20(!datos.pendientes.length)\x20h\x20+=\x20\x27<p\x20class=\x22vacio\x22>No\x20hay\x20nada\x20pendiente\x20de\x20ti.</p>\x27;\x0a\x20\x20datos.pendientes.forEach(function\x20(p,\x20i)\x20{\x0a\x20\x20\x20\x20//\x20La\x20clave,\x20estable\x20entre\x20refrescos;\x20y\x20lo\x20pendiente\x20tal\x20como\x20se\x20pintó,\x20para\x20enviar\x20lo\x20que\x20la\x20persona\x20vio.\x0a\x20\x20\x20\x20var\x20k\x20=\x20p.tipo\x20===\x20\x27bloqueo\x27\x20?\x20\x27bloqueo:\x27\x20+\x20p.unidad\x20:\x20p.tipo\x20===\x20\x27gate_en_el_chat\x27\x20?\x20\x27chat:\x27\x20+\x20p.unidad\x20+\x20\x27:\x27\x20+\x20p.gate\x20:\x20p.tipo\x20===\x20\x27pregunta\x27\x20?\x20\x27pregunta:\x27\x20+\x20p.unidad\x20:\x20p.tipo\x20===\x20\x27gate\x27\x20?\x20\x27gate:\x27\x20+\x20p.unidad\x20+\x20\x27:\x27\x20+\x20p.gate\x20:\x20p.tipo\x20===\x20\x27confirmacion\x27\x20?\x20\x27confirmacion:\x27\x20+\x20p.unidad\x20:\x20p.tipo\x20===\x20\x27delegacion\x27\x20?\x20\x27delegacion:\x27\x20+\x20p.unidad\x20:\x20p.tipo\x20===\x20\x27telemetria\x27\x20?\x20\x27telemetria\x27\x20:\x20\x27declaracion:\x27\x20+\x20p.unidad\x20+\x20\x27:\x27\x20+\x20p.requisito;\x0a\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22carta\x22\x20data-k=\x22\x27\x20+\x20esc(k)\x20+\x20\x27\x22\x20data-p=\x22\x27\x20+\x20esc(JSON.stringify(p))\x20+\x20\x27\x22>\x27;\x0a\x20\x20\x20\x20if\x20(p.tipo\x20===\x20\x27bloqueo\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Una\x20bloqueada\x20espera\x20a\x20la\x20persona,\x20pero\x20no\x20se\x20responde\x20aquí:\x20sin\x20comentario\x20ni\x20botones,\x20se\x20desbloquea\x20con\x20el\x20agente\x20(rp-f01).\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20bloqueada</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div><pre>\x27\x20+\x20esc(p.motivo)\x20+\x20\x27</pre>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.enmienda)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>La\x20bloquea\x20la\x20definición\x20nueva\x20de\x20\x27\x20+\x20esc(p.enmienda)\x20+\x20\x27,\x20que\x20la\x20enmienda.</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Se\x20desbloquea\x20con\x20el\x20agente:\x20cuéntale\x20cómo\x20se\x20resuelve\x20(<code>action:\x20desbloquear</code>).</div></div>\x27;\x0a\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(p.tipo\x20===\x20\x27pregunta\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Una\x20pregunta\x20suelta\x20sin\x20respuesta:\x20se\x20nombra,\x20sin\x20controles;\x20se\x20responde\x20en\x20el\x20chat\x20(ec-f04).\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20pregunta\x20sin\x20respuesta</div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.desde)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<pre>\x27\x20+\x20esc(p.pregunta)\x20+\x20\x27</pre><div\x20class=\x22dato\x22>Se\x20responde\x20en\x20el\x20chat\x20con\x20el\x20agente.</div></div>\x27;\x0a\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(p.tipo\x20===\x20\x27gate_en_el_chat\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20El\x20gate\x20de\x20un\x20requisito\x20o\x20de\x20una\x20contradicción:\x20se\x20nombra,\x20sin\x20controles;\x20se\x20decide\x20en\x20el\x20chat\x20(ec-f07,\x20rp-f01).\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20\x27\x20+\x20esc(p.gate)\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.desde)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Lleva\x20opciones\x20propias:\x20se\x20decide\x20en\x20el\x20chat\x20con\x20el\x20agente\x20(o\x20en\x20el\x20formulario\x20de\x20tu\x20cliente).</div></div>\x27;\x0a\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(p.tipo\x20===\x20\x27gate\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20\x27\x20+\x20esc(p.gate)\x20+\x20\x27<span\x20class=\x22etiqueta\x22>\x27\x20+\x20esc(p.clase\x20===\x20\x27tecnica\x27\x20?\x20\x27técnica\x27\x20:\x20p.clase)\x20+\x20\x27</span></div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.desde)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.explicacion)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Pediste\x20una\x20explicación\x20el\x20\x27\x20+\x20esc(p.explicacion.momento.slice(0,\x2010))\x20+\x20\x27:\x20te\x20la\x20da\x20el\x20agente.</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<pre>\x27\x20+\x20esc(p.resumen)\x20+\x20\x27</pre><textarea\x20placeholder=\x22Comentario\x20(obligatorio\x20para\x20ajustar\x20o\x20rechazar)\x22></textarea><div\x20class=\x22opciones\x22>\x27;\x0a\x20\x20\x20\x20\x20\x20p.opciones.concat([\x27no_entiendo\x27]).forEach(function\x20(o)\x20{\x20h\x20+=\x20\x27<button\x20class=\x22\x27\x20+\x20o\x20+\x20\x27\x22\x20data-eleccion=\x22\x27\x20+\x20o\x20+\x20\x27\x22>\x27\x20+\x20esc((NOMBRES[o]\x20||\x20o)\x20+\x20(o\x20===\x20\x27rechazar\x27\x20&&\x20p.alRechazar\x20?\x20\x27\x20(\x27\x20+\x20p.alRechazar\x20+\x20\x27)\x27\x20:\x20\x27\x27))\x20+\x20\x27</button>\x27;\x20});\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27</div>\x27;\x0a\x20\x20\x20\x20}\x20else\x20if\x20(p.tipo\x20===\x20\x27confirmacion\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20¿es\x20lo\x20que\x20querías?</div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(p.desde)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20p.funcionales.forEach(function\x20(f)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div>\x27\x20+\x20esc(f.titulo)\x20+\x20\x27\x20<span\x20class=\x22dato\x22>\x27\x20+\x20esc(f.id)\x20+\x20\x27</span><div\x20class=\x22opciones\x22>\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20[\x27si\x27,\x20\x27no\x27,\x20\x27despues\x27].forEach(function\x20(v)\x20{\x20h\x20+=\x20\x27<label><input\x20type=\x22radio\x22\x20name=\x22c\x27\x20+\x20i\x20+\x20\x27-\x27\x20+\x20esc(f.id)\x20+\x20\x27\x22\x20value=\x22\x27\x20+\x20v\x20+\x20\x27\x22\x20data-f=\x22\x27\x20+\x20esc(f.id)\x20+\x20\x27\x22>\x20\x27\x20+\x20(v\x20===\x20\x27si\x27\x20?\x20\x27sí\x27\x20:\x20v\x20===\x20\x27despues\x27\x20?\x20\x27después\x27\x20:\x20\x27no\x27)\x20+\x20\x27</label>\x27;\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27</div></div>\x27;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<textarea\x20placeholder=\x22Si\x20alguno\x20es\x20«no»:\x20qué\x20falla\x22></textarea><div\x20class=\x22opciones\x22><button\x20data-confirmar=\x221\x22>Enviar</button></div>\x27;\x0a\x20\x20\x20\x20}\x20else\x20if\x20(p.tipo\x20===\x20\x27telemetria\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20De\x20la\x20instalación,\x20no\x20de\x20este\x20proyecto\x20(tl-f01):\x20lo\x20que\x20elige\x20es\x20su\x20cita,\x20con\x20su\x20comentario\x20si\x20lo\x20escribe.\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>¿Aceptas\x20enviar\x20un\x20resumen\x20anónimo\x20de\x20uso?<span\x20class=\x22etiqueta\x22>de\x20esta\x20instalación</span></div>\x27\x20+\x20(p.desde\x20?\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27\x20:\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<pre>\x27\x20+\x20esc(p.pregunta)\x20+\x20\x27</pre><textarea\x20placeholder=\x22Comentario\x20(opcional)\x22></textarea>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22opciones\x22><button\x20class=\x22aprobar\x22\x20data-telemetria=\x22si\x22>\x27\x20+\x20esc(TELEMETRIA.si)\x20+\x20\x27</button><button\x20class=\x22rechazar\x22\x20data-telemetria=\x22no\x22>\x27\x20+\x20esc(TELEMETRIA.no)\x20+\x20\x27</button></div>\x27;\x0a\x20\x20\x20\x20}\x20else\x20if\x20(p.tipo\x20===\x20\x27delegacion\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>Lo\x20aprobado\x20por\x20tu\x20delegación<span\x20class=\x22etiqueta\x22>proceso</span></div><div\x20class=\x22dato\x22>Sin\x20tope,\x20hasta\x20que\x20la\x20revoques;\x20llega\x20cada\x20\x27\x20+\x20esc(String(p.cada))\x20+\x20\x27\x20unidades.\x20Si\x20no\x20respondes,\x20sigue.</div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<pre>\x27\x20+\x20p.aprobados.map(function\x20(a)\x20{\x20return\x20esc(a.unidad)\x20+\x20\x27\x20·\x20gate\x20«\x27\x20+\x20esc(a.gate)\x20+\x20\x27»\x20·\x20\x27\x20+\x20esc(a.momento.slice(0,\x2016).replace(\x27T\x27,\x20\x27\x20\x27));\x20}).join(\x27\x5cn\x27)\x20+\x20\x27</pre><textarea\x20placeholder=\x22Comentario\x22></textarea>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22opciones\x22><button\x20class=\x22aprobar\x22\x20data-delegacion=\x22sigue\x22>sigue</button><button\x20class=\x22rechazar\x22\x20data-delegacion=\x22revocar\x22>revocar</button></div>\x27;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22quien\x22>\x27\x20+\x20esc(p.unidad)\x20+\x20\x27\x20·\x20confirmar\x20una\x20declaración\x20de\x20«\x27\x20+\x20esc(p.requisito)\x20+\x20\x27»</div>\x27\x20+\x20(p.desde\x20?\x20\x27<div\x20class=\x22dato\x22>Esperando\x20desde\x20\x27\x20+\x20esc(p.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27\x20:\x20\x27\x27)\x20+\x20\x27<pre>\x27\x20+\x20esc(p.quien)\x20+\x20\x27:\x20«\x27\x20+\x20esc(p.contenido)\x20+\x20\x27»</pre><textarea\x20placeholder=\x22Comentario\x22></textarea>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22opciones\x22><button\x20class=\x22aprobar\x22\x20data-confirma=\x221\x22>confirmo</button><button\x20class=\x22rechazar\x22\x20data-confirma=\x220\x22>no\x20confirmo</button></div>\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22resultado\x22></div></div>\x27;\x0a\x20\x20});\x0a\x20\x20if\x20(datos.temas\x20&&\x20datos.temas.length)\x20{\x0a\x20\x20\x20\x20h\x20+=\x20\x27<h2>Para\x20conversar\x20(\x27\x20+\x20datos.temas.length\x20+\x20\x27)</h2><p\x20class=\x22dato\x22>No\x20bloquean\x20nada.\x20Se\x20cierran\x20cuando\x20se\x20convierten\x20en\x20una\x20unidad\x20de\x20trabajo\x20(con\x20el\x20agente)\x20o\x20cuando\x20descartas\x20la\x20idea.</p>\x27;\x0a\x20\x20\x20\x20//\x20Agrupados\x20igual\x20que\x20en\x20la\x20tanda\x20(funcionalidad-temas-agrupados):\x20por\x20origen\x20y,\x20dentro,\x20por\x20intención\x20y\x20prioridad.\x0a\x20\x20\x20\x20var\x20porId\x20=\x20{};\x0a\x20\x20\x20\x20datos.temas.forEach(function\x20(t)\x20{\x20porId[t.id]\x20=\x20t;\x20});\x0a\x20\x20\x20\x20var\x20carta\x20=\x20function\x20(t,\x20intencion)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20h\x20=\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<div\x20class=\x22carta\x22\x20data-k=\x22tema:\x27\x20+\x20esc(t.id)\x20+\x20\x27\x22\x20data-tema=\x22\x27\x20+\x20esc(t.id)\x20+\x20\x27\x22><div\x20class=\x22quien\x22>\x27\x20+\x20esc(t.titulo)\x20+\x20(t.de\x20===\x20\x27agente\x27\x20?\x20\x27<span\x20class=\x22etiqueta\x22>lo\x20propone\x20el\x20agente</span>\x27\x20:\x20t.de\x20===\x20\x27arketum\x27\x20?\x20\x27<span\x20class=\x22etiqueta\x22>lo\x20calcula\x20Arketum\x27\x20+\x20(t.deDeducido\x20?\x20\x27;\x20deducido\x27\x20:\x20\x27\x27)\x20+\x20\x27</span>\x27\x20:\x20\x27\x27)\x20+\x20\x27</div><div\x20class=\x22dato\x22>Desde\x20\x27\x20+\x20esc(t.desde.slice(0,\x2010))\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20(intencion\x20||\x20[]).forEach(function\x20(x)\x20{\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>\x27\x20+\x20esc(x)\x20+\x20\x27</div>\x27;\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(t.palabras)\x20h\x20+=\x20\x27<pre>\x27\x20+\x20esc(t.palabras)\x20+\x20\x27</pre>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(t.contexto)\x20h\x20+=\x20\x27<div>\x27\x20+\x20esc(t.contexto)\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(t.preguntas\x20&&\x20t.preguntas.length)\x20h\x20+=\x20\x27<ul>\x27\x20+\x20t.preguntas.map(function\x20(q)\x20{\x20return\x20\x27<li>\x27\x20+\x20esc(q)\x20+\x20\x27</li>\x27;\x20}).join(\x27\x27)\x20+\x20\x27</ul>\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(t.propuesta)\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Propuesta:\x20una\x20unidad\x20del\x20carril\x20«\x27\x20+\x20esc(t.propuesta.carril)\x20+\x20\x27»\x20—\x20\x27\x20+\x20esc(t.propuesta.objetivo)\x20+\x20\x27</div>\x27\x20+\x20(t.propuesta.opciones\x20&&\x20t.propuesta.opciones.length\x20?\x20\x27<ol>\x27\x20+\x20t.propuesta.opciones.map(function\x20(o)\x20{\x20return\x20\x27<li>\x27\x20+\x20esc(o.camino)\x20+\x20(o.carril\x20?\x20\x27\x20→\x20«\x27\x20+\x20esc(o.carril)\x20+\x20\x27»\x27\x20:\x20\x27\x27)\x20+\x20\x27</li>\x27;\x20}).join(\x27\x27)\x20+\x20\x27</ol><div\x20class=\x22dato\x22>Elige\x20el\x20camino\x20con\x20el\x20agente:\x20abre\x20la\x20unidad\x20desde\x20este\x20tema.</div>\x27\x20:\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20(t.respuestas\x20||\x20[]).forEach(function\x20(r)\x20{\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>Respondiste\x20(\x27\x20+\x20esc(r.momento.slice(0,\x2010))\x20+\x20(r.canal\x20===\x20\x27tanda\x27\x20?\x20\x27\x27\x20:\x20\x27,\x20por\x20el\x20\x27\x20+\x20esc(r.canal))\x20+\x20\x27):</div><pre>\x27\x20+\x20esc(r.palabras)\x20+\x20\x27</pre>\x27;\x20});\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<textarea\x20class=\x22respuesta\x22\x20placeholder=\x22Tu\x20respuesta\x20(no\x20cierra\x20el\x20tema)\x22></textarea><div\x20class=\x22opciones\x22><button\x20class=\x22aprobar\x22\x20data-responder=\x221\x22>responder</button></div>\x27;\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<textarea\x20class=\x22motivo\x22\x20placeholder=\x22Por\x20qué\x20lo\x20descartas\x20(obligatorio\x20para\x20descartar)\x22></textarea><div\x20class=\x22opciones\x22><button\x20class=\x22rechazar\x22\x20data-descartar=\x221\x22>descartar\x20la\x20idea</button></div><div\x20class=\x22resultado\x22></div></div>\x27;\x0a\x20\x20\x20\x20\x20\x20return\x20h;\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20(datos.grupos\x20||\x20[{\x20titulo:\x20\x27Temas\x27,\x20resumen:\x20\x27\x27,\x20temas:\x20datos.temas.map(function\x20(t)\x20{\x20return\x20{\x20id:\x20t.id,\x20intencion:\x20[]\x20};\x20})\x20}]).forEach(function\x20(g,\x20i)\x20{\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27<details\x20data-lista\x20data-k=\x22grupo:\x27\x20+\x20esc(g.id\x20||\x20g.titulo)\x20+\x20\x27\x22\x27\x20+\x20(i\x20===\x200\x20?\x20\x27\x20open\x27\x20:\x20\x27\x27)\x20+\x20\x27><summary><b>\x27\x20+\x20esc(g.titulo)\x20+\x20\x27</b>\x20·\x20\x27\x20+\x20esc(g.resumen)\x20+\x20\x27</summary>\x27;\x0a\x20\x20\x20\x20\x20\x20g.temas.forEach(function\x20(x)\x20{\x20if\x20(porId[x.id])\x20h\x20+=\x20carta(porId[x.id],\x20x.intencion);\x20});\x0a\x20\x20\x20\x20\x20\x20h\x20+=\x20\x27</details>\x27;\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x20\x20if\x20(datos.fuera.length)\x20h\x20+=\x20\x27<h2>Se\x20deciden\x20en\x20el\x20chat</h2>\x27\x20+\x20datos.fuera.map(function\x20(f)\x20{\x20return\x20\x27<div\x20class=\x22carta\x20dato\x22>\x27\x20+\x20esc(f)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20if\x20(datos.hechos.length)\x20h\x20+=\x20\x27<h2>Decidido\x20por\x20delegación</h2>\x27\x20+\x20datos.hechos.map(function\x20(f)\x20{\x20return\x20\x27<div\x20class=\x22carta\x20dato\x22>\x27\x20+\x20esc(f)\x20+\x20\x27</div>\x27;\x20}).join(\x27\x27);\x0a\x20\x20return\x20h;\x0a}\x0afunction\x20pintarHistorial()\x20{\x0a\x20\x20if\x20(!datos.historial.length)\x20return\x20\x27<p\x20class=\x22vacio\x22>Todavía\x20no\x20hay\x20decisiones.</p>\x27;\x0a\x20\x20var\x20h\x20=\x20\x27<table><thead><tr><th>Cuándo</th><th>Unidad</th><th>Tema</th><th>Resultado</th><th>Canal</th></tr></thead><tbody>\x27;\x0a\x20\x20datos.historial.forEach(function\x20(d)\x20{\x20h\x20+=\x20\x27<tr><td>\x27\x20+\x20esc(d.at\x20?\x20d.at.slice(0,\x2016).replace(\x27T\x27,\x20\x27\x20\x27)\x20:\x20\x27—\x27)\x20+\x20\x27</td><td>\x27\x20+\x20esc(d.unidad)\x20+\x20\x27</td><td>\x27\x20+\x20esc(d.tema)\x20+\x20\x27</td><td>\x27\x20+\x20esc(d.resultado)\x20+\x20(d.nota\x20?\x20\x27<div\x20class=\x22dato\x22>\x27\x20+\x20esc(d.nota)\x20+\x20\x27</div>\x27\x20:\x20\x27\x27)\x20+\x20\x27</td><td>\x27\x20+\x20esc(d.canal)\x20+\x20(d.motivo\x20?\x20\x27\x20<span\x20class=\x22dato\x22>(\x27\x20+\x20esc(d.motivo)\x20+\x20\x27)</span>\x27\x20:\x20\x27\x27)\x20+\x20(d.quien\x20?\x20\x27<div\x20class=\x22dato\x22>\x27\x20+\x20esc(d.quien)\x20+\x20\x27</div>\x27\x20:\x20\x27\x27)\x20+\x20\x27</td></tr>\x27;\x20});\x0a\x20\x20return\x20h\x20+\x20\x27</tbody></table>\x27;\x0a}\x0afunction\x20pintarIntegraciones()\x20{\x0a\x20\x20var\x20m\x20=\x20datos.integraciones;\x0a\x20\x20if\x20(!m\x20||\x20!m.cuentas.boundaries)\x20return\x20\x27<p\x20class=\x22vacio\x22>Todavía\x20no\x20hay\x20boundaries\x20declarados:\x20se\x20declaran\x20al\x20cerrar\x20cada\x20unidad.</p>\x27;\x0a\x20\x20var\x20h\x20=\x20\x27\x27;\x0a\x20\x20m.lineas.forEach(function\x20(l)\x20{\x0a\x20\x20\x20\x20if\x20(l\x20===\x20\x27\x27)\x20return;\x0a\x20\x20\x20\x20if\x20(/^\x20/.test(l)\x20||\x20!/:$/.test(l)\x20&&\x20!/^MAPA/.test(l))\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>\x27\x20+\x20esc(l.trim())\x20+\x20\x27</div>\x27;\x0a\x20\x20\x20\x20else\x20h\x20+=\x20\x27<h2>\x27\x20+\x20esc(l)\x20+\x20\x27</h2>\x27;\x0a\x20\x20});\x0a\x20\x20return\x20h;\x0a}\x0afunction\x20pintarPrd()\x20{\x0a\x20\x20var\x20p\x20=\x20datos.prd;\x0a\x20\x20if\x20(!p\x20||\x20!p.lineas.length)\x20return\x20\x27<p\x20class=\x22vacio\x22>Todavía\x20no\x20hay\x20requisitos\x20vigentes:\x20los\x20trae\x20el\x20PRD\x20de\x20una\x20unidad.</p>\x27;\x0a\x20\x20var\x20h\x20=\x20\x27<p\x20class=\x22dato\x22>\x27\x20+\x20esc(p.cabecera)\x20+\x20\x27</p>\x27;\x0a\x20\x20p.lineas.forEach(function\x20(l)\x20{\x0a\x20\x20\x20\x20if\x20(/^«/.test(l))\x20h\x20+=\x20\x27<h2>\x27\x20+\x20esc(l)\x20+\x20\x27</h2>\x27;\x0a\x20\x20\x20\x20else\x20h\x20+=\x20\x27<div\x20class=\x22dato\x22>\x27\x20+\x20esc(l.trim())\x20+\x20\x27</div>\x27;\x0a\x20\x20});\x0a\x20\x20return\x20h;\x0a}\x0afunction\x20pintar()\x20{\x0a\x20\x20if\x20(!datos)\x20return;\x0a\x20\x20document.getElementById(\x27titulo\x27).textContent\x20=\x20\x27Arketum\x20·\x20\x27\x20+\x20datos.estado.nombre;\x0a\x20\x20document.getElementById(\x27sub\x27).textContent\x20=\x20datos.estado.lineaDeProgreso\x20+\x20\x27\x20·\x20se\x20actualiza\x20solo\x27;\x0a\x20\x20var\x20m\x20=\x20document.getElementById(\x27main\x27);\x0a\x20\x20var\x20html\x20=\x20vista\x20===\x20\x27estado\x27\x20?\x20pintarEstado()\x20:\x20vista\x20===\x20\x27pendientes\x27\x20?\x20pintarPendientes()\x20:\x20vista\x20===\x20\x27integraciones\x27\x20?\x20pintarIntegraciones()\x20:\x20vista\x20===\x20\x27prd\x27\x20?\x20pintarPrd()\x20:\x20pintarHistorial();\x0a\x20\x20//\x20Otra\x20vista:\x20se\x20pinta\x20de\x20nuevo\x20y\x20vuelven\x20sus\x20borradores.\x20La\x20misma:\x20solo\x20lo\x20que\x20cambió.\x0a\x20\x20if\x20(m.getAttribute(\x27data-vista\x27)\x20!==\x20vista)\x20{\x0a\x20\x20\x20\x20m.innerHTML\x20=\x20\x27\x27;\x0a\x20\x20\x20\x20m.setAttribute(\x27data-vista\x27,\x20vista);\x0a\x20\x20\x20\x20conciliar(m,\x20html);\x0a\x20\x20\x20\x20devolverBorradores(m,\x20borradores[vista]);\x0a\x20\x20}\x20else\x20conciliar(m,\x20html);\x0a}\x0avar\x20cargando\x20=\x20false;\x0afunction\x20cargar()\x20{\x0a\x20\x20if\x20(cargando\x20||\x20document.hidden)\x20return;\x0a\x20\x20cargando\x20=\x20true;\x0a\x20\x20fetch(\x27/api/estado\x27,\x20{\x20headers:\x20{\x20\x27x-arketum-token\x27:\x20token\x20}\x20}).then(function\x20(r)\x20{\x20return\x20r.json();\x20}).then(function\x20(d)\x20{\x0a\x20\x20\x20\x20cargando\x20=\x20false;\x0a\x20\x20\x20\x20if\x20(d.error)\x20{\x20document.getElementById(\x27sub\x27).textContent\x20=\x20d.error;\x20return;\x20}\x0a\x20\x20\x20\x20var\x20firma\x20=\x20JSON.stringify(d);\x0a\x20\x20\x20\x20//\x20Con\x20un\x20bloque\x20marcado,\x20se\x20vuelve\x20a\x20conciliar\x20aunque\x20no\x20haya\x20nada\x20nuevo:\x20quizá\x20la\x20persona\x20ya\x20vació\x20lo\x20suyo.\x0a\x20\x20\x20\x20if\x20(firma\x20!==\x20ultimo)\x20{\x20ultimo\x20=\x20firma;\x20datos\x20=\x20d;\x20pintar();\x20}\x0a\x20\x20\x20\x20else\x20if\x20(document.querySelector(\x27#main\x20[data-viejo]\x27))\x20pintar();\x0a\x20\x20}).catch(function\x20()\x20{\x20cargando\x20=\x20false;\x20document.getElementById(\x27sub\x27).textContent\x20=\x20\x27Sin\x20conexión\x20con\x20el\x20panel.\x27;\x20});\x0a}\x0afunction\x20enviar(caja,\x20cuerpo)\x20{\x0a\x20\x20var\x20res\x20=\x20caja.querySelector(\x27.resultado\x27);\x0a\x20\x20res.textContent\x20=\x20\x27Registrando…\x27;\x0a\x20\x20fetch(\x27/api/decidir\x27,\x20{\x20method:\x20\x27POST\x27,\x20headers:\x20{\x20\x27content-type\x27:\x20\x27application/json\x27,\x20\x27x-arketum-token\x27:\x20token\x20},\x20body:\x20JSON.stringify(cuerpo)\x20})\x0a\x20\x20\x20\x20.then(function\x20(r)\x20{\x20return\x20r.json();\x20})\x0a\x20\x20\x20\x20.then(function\x20(d)\x20{\x0a\x20\x20\x20\x20\x20\x20res.textContent\x20=\x20d.error\x20||\x20d.linea;\x0a\x20\x20\x20\x20\x20\x20if\x20(/DECISIÓN\x20REGISTRADA|registrada|no\x20lo\x20entendió|APROBADO/.test(d.linea\x20||\x20\x27\x27))\x20{\x20caja.querySelectorAll(\x27textarea\x27).forEach(function\x20(t)\x20{\x20t.value\x20=\x20\x27\x27;\x20});\x20caja.querySelectorAll(\x27input\x27).forEach(function\x20(x)\x20{\x20x.checked\x20=\x20false;\x20});\x20}\x0a\x20\x20\x20\x20\x20\x20setTimeout(function\x20()\x20{\x20ultimo\x20=\x20\x27\x27;\x20cargar();\x20},\x20800);\x0a\x20\x20\x20\x20})\x0a\x20\x20\x20\x20.catch(function\x20()\x20{\x20res.textContent\x20=\x20\x27No\x20se\x20pudo\x20registrar:\x20sin\x20conexión\x20con\x20el\x20panel.\x27;\x20});\x0a}\x0adocument.querySelector(\x27nav\x27).addEventListener(\x27click\x27,\x20function\x20(ev)\x20{\x0a\x20\x20var\x20b\x20=\x20ev.target.closest(\x27button\x27);\x20if\x20(!b)\x20return;\x0a\x20\x20borradores[vista]\x20=\x20guardarBorradores(document.getElementById(\x27main\x27));\x0a\x20\x20vista\x20=\x20b.dataset.vista;\x0a\x20\x20document.querySelectorAll(\x27nav\x20button\x27).forEach(function\x20(x)\x20{\x20x.classList.toggle(\x27activa\x27,\x20x\x20===\x20b);\x20});\x0a\x20\x20pintar();\x0a});\x0adocument.addEventListener(\x27visibilitychange\x27,\x20function\x20()\x20{\x20if\x20(!document.hidden)\x20cargar();\x20});\x0adocument.getElementById(\x27main\x27).addEventListener(\x27click\x27,\x20function\x20(ev)\x20{\x0a\x20\x20var\x20b\x20=\x20ev.target.closest(\x27button\x27);\x20if\x20(!b)\x20return;\x0a\x20\x20if\x20(b.id\x20===\x20\x27guardarSoy\x27)\x20{\x0a\x20\x20\x20\x20fetch(\x27/api/identidad\x27,\x20{\x20method:\x20\x27POST\x27,\x20headers:\x20{\x20\x27content-type\x27:\x20\x27application/json\x27,\x20\x27x-arketum-token\x27:\x20token\x20},\x20body:\x20JSON.stringify({\x20soy:\x20document.getElementById(\x27soy\x27).value\x20})\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20()\x20{\x20ultimo\x20=\x20\x27\x27;\x20cargar();\x20});\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20var\x20caja\x20=\x20b.closest(\x27.carta\x27);\x0a\x20\x20if\x20(b.dataset.responder)\x20{\x0a\x20\x20\x20\x20var\x20palabras\x20=\x20(caja.querySelector(\x27textarea.respuesta\x27)\x20||\x20{}).value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20var\x20resp\x20=\x20caja.querySelector(\x27.resultado\x27);\x0a\x20\x20\x20\x20if\x20(!palabras.trim())\x20{\x20resp.textContent\x20=\x20\x27Escribe\x20tu\x20respuesta.\x27;\x20return;\x20}\x0a\x20\x20\x20\x20resp.textContent\x20=\x20\x27Registrando…\x27;\x0a\x20\x20\x20\x20fetch(\x27/api/tema\x27,\x20{\x20method:\x20\x27POST\x27,\x20headers:\x20{\x20\x27content-type\x27:\x20\x27application/json\x27,\x20\x27x-arketum-token\x27:\x20token\x20},\x20body:\x20JSON.stringify({\x20id:\x20caja.dataset.tema,\x20respuesta:\x20palabras\x20})\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(r)\x20{\x20return\x20r.json();\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(d)\x20{\x20resp.textContent\x20=\x20d.error\x20||\x20d.linea;\x20if\x20(!d.error)\x20caja.querySelector(\x27textarea.respuesta\x27).value\x20=\x20\x27\x27;\x20setTimeout(function\x20()\x20{\x20ultimo\x20=\x20\x27\x27;\x20cargar();\x20},\x20800);\x20})\x0a\x20\x20\x20\x20\x20\x20.catch(function\x20()\x20{\x20resp.textContent\x20=\x20\x27No\x20se\x20pudo\x20registrar:\x20sin\x20conexión\x20con\x20el\x20panel.\x27;\x20});\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20if\x20(b.dataset.descartar)\x20{\x0a\x20\x20\x20\x20var\x20motivo\x20=\x20(caja.querySelector(\x27textarea.motivo\x27)\x20||\x20{}).value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20var\x20res\x20=\x20caja.querySelector(\x27.resultado\x27);\x0a\x20\x20\x20\x20if\x20(!motivo.trim())\x20{\x20res.textContent\x20=\x20\x27Escribe\x20por\x20qué\x20lo\x20descartas.\x27;\x20return;\x20}\x0a\x20\x20\x20\x20res.textContent\x20=\x20\x27Registrando…\x27;\x0a\x20\x20\x20\x20fetch(\x27/api/tema\x27,\x20{\x20method:\x20\x27POST\x27,\x20headers:\x20{\x20\x27content-type\x27:\x20\x27application/json\x27,\x20\x27x-arketum-token\x27:\x20token\x20},\x20body:\x20JSON.stringify({\x20id:\x20caja.dataset.tema,\x20motivo:\x20motivo\x20})\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(r)\x20{\x20return\x20r.json();\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(d)\x20{\x20res.textContent\x20=\x20d.error\x20||\x20d.linea;\x20if\x20(!d.error)\x20caja.querySelector(\x27textarea.motivo\x27).value\x20=\x20\x27\x27;\x20setTimeout(function\x20()\x20{\x20ultimo\x20=\x20\x27\x27;\x20cargar();\x20},\x20800);\x20})\x0a\x20\x20\x20\x20\x20\x20.catch(function\x20()\x20{\x20res.textContent\x20=\x20\x27No\x20se\x20pudo\x20registrar:\x20sin\x20conexión\x20con\x20el\x20panel.\x27;\x20});\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20var\x20p\x20=\x20JSON.parse(caja.dataset.p);\x0a\x20\x20var\x20comentario\x20=\x20(caja.querySelector(\x27textarea\x27)\x20||\x20{}).value\x20||\x20\x27\x27;\x0a\x20\x20if\x20(b.dataset.telemetria)\x20{\x0a\x20\x20\x20\x20var\x20rt\x20=\x20caja.querySelector(\x27.resultado\x27);\x0a\x20\x20\x20\x20rt.textContent\x20=\x20\x27Registrando…\x27;\x0a\x20\x20\x20\x20fetch(\x27/api/telemetria\x27,\x20{\x20method:\x20\x27POST\x27,\x20headers:\x20{\x20\x27content-type\x27:\x20\x27application/json\x27,\x20\x27x-arketum-token\x27:\x20token\x20},\x20body:\x20JSON.stringify({\x20acepta:\x20b.dataset.telemetria\x20===\x20\x27si\x27,\x20comentario:\x20comentario\x20})\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(r)\x20{\x20return\x20r.json();\x20})\x0a\x20\x20\x20\x20\x20\x20.then(function\x20(d)\x20{\x20rt.textContent\x20=\x20d.error\x20||\x20d.linea;\x20if\x20(!d.error)\x20caja.querySelector(\x27textarea\x27).value\x20=\x20\x27\x27;\x20setTimeout(function\x20()\x20{\x20ultimo\x20=\x20\x27\x27;\x20cargar();\x20},\x20800);\x20})\x0a\x20\x20\x20\x20\x20\x20.catch(function\x20()\x20{\x20rt.textContent\x20=\x20\x27No\x20se\x20pudo\x20registrar:\x20sin\x20conexión\x20con\x20el\x20panel.\x27;\x20});\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20if\x20(b.dataset.eleccion)\x20return\x20enviar(caja,\x20{\x20tipo:\x20\x27gate\x27,\x20unidad:\x20p.unidad,\x20gate:\x20p.gate,\x20huella:\x20p.huella,\x20eleccion:\x20b.dataset.eleccion,\x20comentario:\x20comentario\x20});\x0a\x20\x20if\x20(b.dataset.delegacion)\x20return\x20enviar(caja,\x20{\x20tipo:\x20\x27delegacion\x27,\x20unidad:\x20p.unidad,\x20huella:\x20p.huella,\x20hasta:\x20p.hasta,\x20eleccion:\x20b.dataset.delegacion,\x20comentario:\x20comentario\x20});\x0a\x20\x20if\x20(b.dataset.confirma)\x20return\x20enviar(caja,\x20{\x20tipo:\x20\x27declaracion\x27,\x20unidad:\x20p.unidad,\x20requisito:\x20p.requisito,\x20huella:\x20p.huella,\x20confirma:\x20b.dataset.confirma\x20===\x20\x271\x27,\x20comentario:\x20comentario\x20});\x0a\x20\x20if\x20(b.dataset.confirmar)\x20{\x0a\x20\x20\x20\x20var\x20v\x20=\x20{};\x20caja.querySelectorAll(\x27input:checked\x27).forEach(function\x20(x)\x20{\x20v[x.dataset.f]\x20=\x20x.value;\x20});\x0a\x20\x20\x20\x20if\x20(Object.keys(v).length\x20<\x20p.funcionales.length)\x20{\x20caja.querySelector(\x27.resultado\x27).textContent\x20=\x20\x27Responde\x20cada\x20uno.\x27;\x20return;\x20}\x0a\x20\x20\x20\x20return\x20enviar(caja,\x20{\x20tipo:\x20\x27confirmacion\x27,\x20unidad:\x20p.unidad,\x20huella:\x20p.huella,\x20veredictos:\x20v,\x20comentario:\x20comentario\x20});\x0a\x20\x20}\x0a});\x0acargar();\x0asetInterval(cargar,\x205000);\x0a</script>\x0a</body>\x0a</html>\x0a',j='uso:\x20arketum-panel\x20[raíz]\x20[--puerto\x20N]\x20|\x20arketum-panel\x20--servidor\x20|\x20arketum-panel\x20--detener\x0a';function k(){const ac=ab,p=openPersonalLog(join(carpetaPersonal(),ac(0x103),'panel.log'));spawn(process[ac(0x162)],[fileURLToPath(new URL(ac(0x119),import.meta.url)),ac(0x155)],{'detached':!![],'windowsHide':!![],'stdio':['ignore',p,p],'env':process[ac(0x13e)]})[ac(0x101)]();}async function l(){const ad=ab,p=puertoDelPanel(await leerRegistro());await claveDelPanel();try{const q=await h({'puerto':p,'raizDe':raizDelToken,'huella':await huellaDeArketum(),'detener':{'clave':async()=>(await leerRegistro()['catch'](()=>({'proyectos':[]})))['clave'],'alDetener':()=>void q[ad(0x13b)]()[ad(0x158)](()=>process['exit'](0x0))}});}catch(r){if(r['code']===ad(0x107))return process['stderr']['write'](ad(0x11e)+p+ad(0x146)),0x1;throw r;}return process[ad(0x11a)]['write'](new Date()['toISOString']()+ad(0xf8)+p+'/\x20(pid\x20'+process[ad(0x106)]+').\x20Solo\x20responde\x20en\x20esta\x20máquina.\x0a'),await new Promise(()=>void 0x0);}var m=async()=>puertoDelPanel(await leerRegistro()[ab(0x115)](()=>({'proyectos':[]})));async function n(r){const ae=ab,s=r??await m(),t=await consultarPanel(s);if(t['estado']!==ae(0xfd))return process['stdout']['write'](t['estado']==='libre'?ae(0x13d)+s+'.\x0a':ae(0x118)+s+'\x20responde\x20otro\x20programa,\x20no\x20el\x20panel:\x20no\x20se\x20toca.\x0a'),0x0;if(!await detenerPanel(s)[ae(0x115)](()=>![]))return process[ae(0xf5)]['write'](ae(0x132)+s+'\x20(pid\x20'+t['salud'][ae(0x106)]+')\x20no\x20aceptó\x20detenerse:\x20la\x20clave\x20de\x20`~/.arketum/panel.yaml`\x20no\x20es\x20la\x20suya\x20o\x20el\x20registro\x20no\x20se\x20puede\x20leer.\x20Ciérralo\x20con\x20la\x20herramienta\x20del\x20sistema.\x0a'),0x1;return process['stdout']['write'](ae(0x11f)+t['salud']['pid']+').\x0a'),0x0;}async function o(p){const af=ab;if(p[af(0x10c)]===0x1&&p[0x0]==='--servidor')return l();if(p[af(0x10c)]===0x1&&p[0x0]==='--detener')return n();let q,s;for(let v=0x0;v<p[af(0x10c)];v++){const w=p[v];if(w===af(0x161)){const x=p[++v]??'',y=/^\d+$/[af(0x160)](x)?Number(x):NaN;if(!Number[af(0x109)](y)||y<0x1||y>0xffff)return process[af(0xf5)][af(0x145)](af(0x15a)),0x2;s=y;}else{if(w[af(0xfa)]('-')||q!==void 0x0)return process[af(0xf5)]['write'](j),0x2;else q=resolve(w);}}q??=process[af(0x15b)]();if(!hasProjectManifest(q))return process['stderr']['write'](af(0x12a)+q+'\x20no\x20hay\x20un\x20proyecto\x20de\x20Arketum\x20(`.arketum/proyecto.yaml`).\x20Lánzalo\x20desde\x20la\x20carpeta\x20del\x20proyecto.\x0a'),0x2;if(s!==void 0x0){const z=await m();if(z!==s&&(await consultarPanel(z))[af(0x138)]===af(0xfd))await n(z);await fijarPuertoDelPanel(s),process['env']['ARKETUM_PANEL_PUERTO']!==void 0x0&&Number(process[af(0x13e)][af(0x12c)])!==s&&process['stderr']['write'](af(0x11e)+s+'\x20queda\x20fijado,\x20pero\x20`ARKETUM_PANEL_PUERTO`\x20('+process[af(0x13e)]['ARKETUM_PANEL_PUERTO']+af(0x143));}const t=await asegurarPanel(q,{'lanzar':k,'huella':await huellaDeArketum()});if(af(0x164)in t)return process[af(0xf5)][af(0x145)](af(0x120)+t['problema']+'\x0a'),0x1;const u=t['como']==='ya_corria'?af(0x14b):t[af(0x14c)]==='relanzado'?af(0x131):af(0x14d);return process['stdout']['write'](af(0x140)+q+'\x20('+u+af(0x104)+t['url']+'\x0aSolo\x20responde\x20en\x20esta\x20máquina.\x20Queda\x20corriendo\x20aparte;\x20`arketum-panel\x20--detener`\x20lo\x20cierra.\x0a'),0x0;}function a(){const ah=['ktOkica','ue9tva','CgLK','ruferfjjtLvtrq','zMfSDgeGzwWGDg9Rzw4GzgvSihbHBMvSlcbVig5VigvZigvSigrLig5PBMFdUM4GChjVEwvJDg8GzguGzxn0ysbTW6fXDwLUyq','AxnjBNrLz2vY','zMfSDgeGBgeGy2XHDMuGzgvSihbHBMvS','BM8GzxmGsLnptG','BgvUz3rO','Cg9YDa','Aw5JBhvKzxm','DxjS','yw50zxmSigrPihf1ACoPBIbLCMvZicHHCNjPyMePoIbKzxnJyxj0yxiGDw5HigLKzweGDMeGysb0DsbUB21ICMu','BwvZC2fNzq','mZaXntiZneLHCuXmAq','C295','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','y2f0y2G','zgvTyxnPywrVigDYyw5Kzq','z2f0zq','rw4GzwWGChvLCNrVia','lI9Wyw5LBc1JBgKUANm','C3rKB3v0','l2fWAs90zw1H','Dg9mB3DLCKnHC2u','Bwv0Ag9K','yxjRzxr1Bs1Wyw5LBdOGzwWGChvLCNrVia','ugfUzwWGzgv0zw5Pzg8GkhbPzca','yxjRzxr1Bs1Wyw5LBdOG','BwfUAwzPzxn0BW','AhvLBgXH','zgvJBgfYywnPB24','y3vLBNrHCW','y29UzMLYBwe','Cgf0Ag5HBwu','ignHCMfJDgvYzxm','ntKYmtyXvMfkBMnu','BgLZDgvU','yxjRzxr1Bs1Wyw5LBdOGzw4G','l3nHBhvK','qvjlrvrvtv9qqu5ftf9qvuvsve8','ote4ntbVq3zWAwW','BMvNyxrPDMe','mtuXmtnuvLrvAvi','Bw90AxzV','CMvSyw56ywrVignVBIbLC3rHihzLCNnPW7nUigrLiefYA2v0Dw0','yxjRzxr1Bs1Wyw5LBdOGzwWGCgfUzwWGzgvSihb1zxj0BYa','DMfSDwvZ','l2fWAs9KzwnPzgLY','DgLWBW','zw5K','ywrKCMvZCW','zxn0ywrV','C3rYAw5N','y29Tzw50yxjPBW','y2vYCMfY','zw50CMLLCW','tM8GAgf5ihvUihbHBMvSignVCNjPzw5KBYbLBIbLBcbWDwvYDg8G','zw52','z2v0','ugfUzwWGzguGqxjRzxr1BsbWyxjHia','C2XPy2u','zwXPz2uGWQS','ksbTyw5KysbTAwvUDhjHCYbLC3tdQsbKzwzPBMLKys4k','mJmXntyYogjiwuvpCq','D3jPDgu','ihLHigvZDmoHigvUihvZBZSGzwXPz2uGB3rYBYbJB24GygfYA2v0Dw0TCgfUzwWGls1WDwvYDg8Gpg4+yc4k','D3jPDgvizwfK','zgvMyxvSDc1ZCMmGj3nLBgyNoYbZDhLSzs1ZCMmGj3vUC2fMzs1PBMXPBMuNoYbZy3jPChqTC3jJicD1BNnHzMuTAw5SAw5LjW','CgfUzwWT','zgv0zw5LCG','EweGy29YCSoTysbLBIbLC3rHig3dOxf1Aw5H','y29TBW','Bgv2yw50ywrV','mteZmtjItMDdzfe','AgvHzgvYCW','DhjPBq','C2LNDwu','C3rYAw5NAwz5','BwfWyq','r0vu','ls1Zzxj2AwrVCG','CMvZChvLC3rH','WRSGBYdcQW','DgHLBG','zwXLy2nPB24','yxjRzxr1Bs1Wyw5LBdOGyc0TChvLCNrVycbUzwnLC2L0ysb1BIbUW7PTzxjVigrLihb1zxj0BY4k','y3DK','l2fWAs9LC3rHzg8','C2vHCMnOugfYyw1Z','BgLUzwfZ','odGYmJyWnuPquwPdqW','DgvZDa','ls1WDwvYDg8','zxHLy1bHDgG','Ahr0CdOVlW','ChjVyMXLBwe','Dg9ju09tDhjPBMC','BM8TC3rVCMu','B2jQzwn0','C3rKzxjY','mty5ndi5nLHIAhPsva','zxnJCMLIzsb0DsbUB21ICMuGBYb0DsbJB3jYzw8','ifbHBMvSigrLiefYA2v0Dw0Gzw4GAhr0CdOVlZeYnY4WlJaUmtO','y2XVC2vbBgXdB25Uzwn0Aw9UCW','C3rHCNrZv2L0Aa','Ec1HCMTLDhvTlxrVA2vU','CgfYC2u','yxjRzxr1Bq','yM9VBgvHBG','CgfYysbKzxnJyxj0yxiGDw4GDgvTysWGzxnJCMLIzsbWB3iGCxxdQq','ChvLCNrV','Dw5Yzwy','CgfUzwW','lMfYA2v0Dw0'];a=function(){return ah;};return a();}o(process['argv']['slice'](0x2))['then'](p=>{process['exitCode']=p;},p=>{const ag=ab;process[ag(0xf5)][ag(0x145)](ag(0x120)+(p instanceof Error?p['message']:String(p))+'\x0a'),process['exitCode']=0x1;});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const w=b;function b(c,d){c=c-0xa5;const e=a();let f=e[c];if(b['oiwhFV']===undefined){var g=function(l){const m='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let n='',o='';for(let p=0x0,q,r,s=0x0;r=l['charAt'](s++);~r&&(q=p%0x4?q*0x40+r:r,p++%0x4)?n+=String['fromCharCode'](0xff&q>>(-0x2*p&0x6)):0x0){r=m['indexOf'](r);}for(let t=0x0,u=n['length'];t<u;t++){o+='%'+('00'+n['charCodeAt'](t)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(o);};b['VhdltZ']=g,b['ktbyVV']={},b['oiwhFV']=!![];}const h=e[0x0],i=c+h,j=b['ktbyVV'][i];return!j?(f=b['VhdltZ'](f),b['ktbyVV'][i]=f):f=j,f;}(function(e,f){const v=b,g=e();while(!![]){try{const h=-parseInt(v(0xaf))/0x1*(-parseInt(v(0xb6))/0x2)+parseInt(v(0xb5))/0x3*(parseInt(v(0xb1))/0x4)+parseInt(v(0xaa))/0x5*(-parseInt(v(0xa6))/0x6)+parseInt(v(0xb3))/0x7+-parseInt(v(0xa8))/0x8*(-parseInt(v(0xb4))/0x9)+parseInt(v(0xb9))/0xa+-parseInt(v(0xae))/0xb*(parseInt(v(0xb0))/0xc);if(h===f)break;else g['push'](g['shift']());}catch(i){g['push'](g['shift']());}}}(a,0xaddfe));import{apagada,cuerpoDelSobre,destino,diaDe,enviador,leerIdentidad,leerTelemetria,razonDeNoEnviar,razonParaNoProbar,registrarDecision,resultadoDePrueba,resumenDeHoy,sobreDePrueba,textoDeIdentidad,textoDeRazon}from'./comun-ZEXDDERM.js';var c=w(0xab);async function d(e,f=new Date()){const x=w,[g,...h]=e;if(h['length']>0x0||g!==void 0x0&&![x(0xac),x(0xb2),'--probar']['includes'](g))return{'salida':x(0xa7)+e[x(0xa5)]('\x20')+x(0xa9)+c,'codigo':0x2};if(g==='--acepto'||g==='--no'){const p=g==='--acepto';return await registrarDecision(p,'arketum\x20telemetria\x20'+g,textoDeIdentidad(await leerIdentidad()),x(0xb7)),{'salida':p?'Telemetría\x20aceptada\x20para\x20esta\x20instalación.'+(apagada()?'\x20Ahora\x20está\x20apagada\x20en\x20esta\x20máquina\x20(`ARKETUM_TELEMETRIA=0`):\x20no\x20se\x20cuenta\x20ni\x20se\x20envía\x20nada\x20mientras\x20siga\x20así.':'')+'\x0a':'Telemetría\x20no\x20aceptada:\x20se\x20borró\x20lo\x20contado,\x20el\x20id\x20de\x20la\x20instalación\x20y\x20la\x20sal;\x20no\x20se\x20cuenta\x20ni\x20se\x20envía\x20nada.\x0a','codigo':0x0};}const i=await leerTelemetria(),j=destino(),k=diaDe(f),l=resumenDeHoy(i,k);if(g===x(0xad)){const q=razonParaNoProbar(i,{'apagada':apagada(),'destino':j});if(q!==void 0x0)return{'salida':resultadoDePrueba({'razon':q})+'\x0a','codigo':0x1};const s=JSON['stringify'](sobreDePrueba(l,j,{'instalacion':i['instalacion'],'momento':f['toISOString']()})),t=await enviador()(j['url'],s)['catch'](u=>({'ok':![],'error':u[x(0xba)]}));return{'salida':resultadoDePrueba(t)+'\x0a','codigo':t['ok']?0x0:0x1};}const m=razonDeNoEnviar(i,{'apagada':apagada(),'destino':j,'hoy':k}),n=m===void 0x0?'Se\x20enviaría\x20ahora\x20(la\x20primera\x20llamada\x20de\x20hoy\x20lo\x20envía):':x(0xb8)+textoDeRazon(m)+x(0xbb),o=j===void 0x0?JSON['stringify'](l):cuerpoDelSobre(l,j,i,f['toISOString']());return{'salida':n+'\x0a'+o+'\x0a','codigo':0x0};}export{c as USO_DE_TELEMETRIA,d as ordenTelemetria};function a(){const y=['nuvozwnXCa','DxnVoIbHCMTLDhvTihrLBgvTzxrYAweGwY0TywnLChrVihWGls1UBYb8ic0TChjVyMfYxqO','ls1Hy2vWDg8','ls1WCM9Iyxi','mteZnJn3zxHvvw8','mti0mJK5nNn6zg14qq','mZe3mdrgteXtsuC','ndq1otK2DgHjELjw','ls1UBW','nZeXotmWogrNuwrIuG','mtHcvxriAKS','mJDHrwjMqvK','mK1yCLD5uG','DgvYBwLUywW','tM8GC2uGzw52AwfYW61HigfOB3jHoIa','ndq2ndm4mfvSAvvTEa','BwvZC2fNzq','lIbfC3rVigvZigXVihf1zsbZzsbLBNzPyxldRwe6','AM9PBG','nZG3nduYnKHZDxbgDG','yxjRzxr1Bsb0zwXLBwv0CMLHoIbUBYbJB25VEMnVimkR','nde3ntmXmM53BwvIBa','WRSUcG'];a=function(){return y;};return a();}
|
package/package.json
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rlabs-cl/arketum",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Verified lifecycle for building software with AI agents: work units, human gates, requirements and evidence.",
|
|
5
|
+
"mcpName": "cl.rlabs/arketum",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=20"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"arketum": "dist/mcp/arketum.js",
|
|
13
|
+
"arketum-mcp": "dist/mcp/cli.js",
|
|
14
|
+
"arketum-ci": "dist/mcp/ci-cli.js",
|
|
15
|
+
"arketum-panel": "dist/mcp/panel-cli.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"catalogo-de-ejemplo",
|
|
20
|
+
"!catalogo-de-ejemplo/pruebas",
|
|
21
|
+
"LICENSE",
|
|
22
|
+
"THIRD-PARTY-NOTICES",
|
|
23
|
+
"CHANGELOG.md",
|
|
24
|
+
"server.json",
|
|
25
|
+
"telemetria.json"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
29
|
+
"yaml": "^2.5.0",
|
|
30
|
+
"zod": "^4.4.3"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "cl.rlabs/arketum",
|
|
4
|
+
"title": "Arketum",
|
|
5
|
+
"description": "Verified lifecycle for building software with an agent: units, human gates, requirements.",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"packages": [
|
|
8
|
+
{
|
|
9
|
+
"registryType": "npm",
|
|
10
|
+
"identifier": "@rlabs-cl/arketum",
|
|
11
|
+
"version": "1.0.0",
|
|
12
|
+
"transport": { "type": "stdio" }
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
package/telemetria.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comentario": "El destino de la telemetría (tl-t03): adónde va el resumen anónimo de uso, con qué clave, con qué nombre de evento y con qué forma de sobre, y las marcas de cada canal de instalación (tl-t06). src/ no lo nombra: el empaquetado copia este fichero junto al código del paquete npm y del plugin, y el código lo lee de ahí. La clave del proyecto que recibe es pública y solo sirve para escribir; vacía, no se envía nada. Cambiar de destino, o autoalojarlo, es cambiar este fichero.",
|
|
3
|
+
"url": "https://eu.i.posthog.com/i/v0/e/",
|
|
4
|
+
"clave": "phc_snA2a4zN5Qku7qrZp6JQ2QdrYRX8phZvJa6AptDyiRwr",
|
|
5
|
+
"evento": "arketum_resumen",
|
|
6
|
+
"sobre": {
|
|
7
|
+
"clave": "api_key",
|
|
8
|
+
"evento": "event",
|
|
9
|
+
"id": "distinct_id",
|
|
10
|
+
"momento": "timestamp",
|
|
11
|
+
"propiedades": "properties"
|
|
12
|
+
},
|
|
13
|
+
"fijas": {
|
|
14
|
+
"$process_person_profile": false,
|
|
15
|
+
"$geoip_disable": true
|
|
16
|
+
},
|
|
17
|
+
"garantias": {
|
|
18
|
+
"$comentario": "Lo que garantiza cada propiedad fija, con el valor que la cumple: que el destino no cree un perfil de persona y que no derive la ubicación de la conexión. Las pruebas comprueban estas garantías por su nombre, sin nombrar las propiedades del proveedor.",
|
|
19
|
+
"sin_perfil": ["$process_person_profile", false],
|
|
20
|
+
"sin_ubicacion": ["$geoip_disable", true]
|
|
21
|
+
},
|
|
22
|
+
"canales": {
|
|
23
|
+
"plugin": { "variable": "plugin" },
|
|
24
|
+
"npx": { "ruta": ["_npx"] },
|
|
25
|
+
"npm-global": { "ruta": ["lib/node_modules", "npm/node_modules"] }
|
|
26
|
+
}
|
|
27
|
+
}
|