zam-core 0.14.0 → 0.15.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/dist/cli/app.js +25 -2
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/commands/mcp.js +149 -12
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/copilot-extension/extension.mjs +1 -0
- package/dist/copilot-extension/host.bundle.js +1 -1
- package/dist/copilot-extension/manifest.json +1 -1
- package/dist/copilot-extension/mcp-client.bundle.mjs +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/ui/graph-panel.html +80 -40
- package/dist/ui/okf-panel.html +26 -1
- package/dist/vscode-extension/ZAM_Companion_0.15.0.vsix +0 -0
- package/dist/vscode-extension/extension.cjs +15 -14
- package/dist/vscode-extension/host.bundle.js +3 -2
- package/dist/vscode-extension/manifest.json +2 -2
- package/package.json +1 -1
- package/dist/vscode-extension/ZAM_Companion_0.14.0.vsix +0 -0
package/dist/ui/okf-panel.html
CHANGED
|
@@ -571,6 +571,31 @@
|
|
|
571
571
|
font-size: 11px;
|
|
572
572
|
resize: vertical;
|
|
573
573
|
}
|
|
574
|
+
.okf-import-fallback-row {
|
|
575
|
+
display: flex;
|
|
576
|
+
align-items: center;
|
|
577
|
+
justify-content: space-between;
|
|
578
|
+
gap: 8px;
|
|
579
|
+
flex-wrap: wrap;
|
|
580
|
+
}
|
|
581
|
+
.okf-import-copy-btn {
|
|
582
|
+
border: 1px solid var(--border);
|
|
583
|
+
background: var(--card);
|
|
584
|
+
color: var(--fg);
|
|
585
|
+
border-radius: 6px;
|
|
586
|
+
padding: 3px 10px;
|
|
587
|
+
font: inherit;
|
|
588
|
+
font-size: 12px;
|
|
589
|
+
cursor: pointer;
|
|
590
|
+
white-space: nowrap;
|
|
591
|
+
}
|
|
592
|
+
.okf-import-copy-btn:hover:not(:disabled) {
|
|
593
|
+
background: var(--hover, rgba(130, 125, 189, 0.1));
|
|
594
|
+
}
|
|
595
|
+
.okf-import-copy-btn:disabled {
|
|
596
|
+
cursor: default;
|
|
597
|
+
opacity: 0.85;
|
|
598
|
+
}
|
|
574
599
|
.okf-empty-emoji {
|
|
575
600
|
font-size: 2rem;
|
|
576
601
|
}
|
|
@@ -849,7 +874,7 @@ container holding the app. Specify either width or maxWidth, and either height o
|
|
|
849
874
|
`)}</code></pre>`);continue}let a=/^(#{1,6})\s+(.*)$/.exec(e);if(a){let e=a[1].length;n.push(`<h${e}>${Ty(a[2])}</h${e}>`),r++;continue}if(ky.test(e)){let e=[];for(;r<t.length&&ky.test(t[r]);)e.push(t[r].replace(ky,``)),r++;n.push(`<blockquote>${Ty(e.join(` `))}</blockquote>`);continue}if(/^([-_*])\1{2,}$/.test(e.trim())){n.push(`<hr>`),r++;continue}if(e.includes(`|`)&&r+1<t.length&&Dy(t[r+1])){let i=Ey(e);r+=2;let a=[];for(;r<t.length&&t[r].trim()!==``&&t[r].includes(`|`);)a.push(Ey(t[r])),r++;n.push(Oy(i,a));continue}if(/^[-*]\s+/.test(e)){let e=wy(t,r,/^[-*]\s+/);r=e.nextIndex,n.push(`<ul>${e.texts.map(e=>`<li>${Ty(e)}</li>`).join(``)}</ul>`);continue}if(/^\d+\.\s+/.test(e)){let e=wy(t,r,/^\d+\.\s+/);r=e.nextIndex,n.push(`<ol>${e.texts.map(e=>`<li>${Ty(e)}</li>`).join(``)}</ol>`);continue}let o=[e];for(r++;r<t.length&&t[r].trim()!==``&&!Ay(t[r]);)o.push(t[r]),r++;n.push(`<p>${Ty(o.join(` `))}</p>`)}return n.join(`
|
|
850
875
|
`)}function My(e){let t=new Map;for(let n of e){let e=t.get(n.type);e?e.push(n):t.set(n.type,[n])}return t}function Ny(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.title.toLowerCase().includes(n)||e.description.toLowerCase().includes(n)||e.file.toLowerCase().includes(n)||e.tags.some(e=>e.toLowerCase().includes(n))):e}function Py(e){let t=[],n=!1;for(let r of e.split(`
|
|
851
876
|
`)){if(/^```/.test(r.trim())){n=!n;continue}n||t.push(r)}return t.join(`
|
|
852
|
-
`)}function Fy(e){let t=Py(e),n=[],r=[],i=new Set,a=new Set;for(let e of t.matchAll(/\[[^\]]*\]\(([^)]+)\)/g)){let t=e[1].trim(),o=hy(t);o===`article`&&!i.has(t)?(i.add(t),n.push(t)):o===`citation`&&!a.has(t)&&(a.add(t),r.push(t))}return{articles:n,citations:r}}var Iy=.55,Ly=.13,Ry=.09,zy=.34;function By(e){return e.file??e.id}function Vy(e){return[...e].sort((e,t)=>{let n=(e.type??``).localeCompare(t.type??``);return n===0?By(e).localeCompare(By(t)):n})}function Hy(e,t,n,r){let i=n/2,a=r/2,o=n/2-n*Ly,s=r/2-r*Ry,c=o*Iy,l=s*Iy,u=Vy(e.filter(e=>e.kind===`article`)),d=[...e.filter(e=>e.kind===`citation`)],f=new Map,ee=u.map((e,t)=>{let n=2*Math.PI*t/u.length-Math.PI/2;return f.set(e.id,n),{...e,x:i+c*Math.cos(n),y:a+l*Math.sin(n)}}),p=d.map((e,n)=>{let r=t.filter(t=>t.to===e.id).map(e=>f.get(e.from)).filter(e=>e!==void 0);if(r.length===0)return{node:e,angle:2*Math.PI*n/d.length-Math.PI/2};let i=r.reduce((e,t)=>e+Math.sin(t),0),a=r.reduce((e,t)=>e+Math.cos(t),0);return{node:e,angle:Math.atan2(i,a)}});p.sort((e,t)=>e.angle-t.angle||By(e.node).localeCompare(By(t.node)));for(let e=1;e<p.length;e++){let t=p[e-1].angle+zy;p[e].angle<t&&(p[e].angle=t)}if(p.length>1&&p[p.length-1].angle-p[0].angle>2*Math.PI-zy)for(let e=0;e<p.length;e++)p[e].angle=2*Math.PI*e/p.length-Math.PI/2;let te=p.map(({node:e,angle:t})=>({...e,x:i+o*Math.cos(t),y:a+s*Math.sin(t)}));return[...ee,...te]}var Uy=`http://www.w3.org/2000/svg`,Wy=960,Gy=620,Ky=22,qy=`okf`,Jy=document.getElementById(`zam-contextbar-root`),Yy=document.getElementById(`zam-connection-notice`),Xy=document.getElementById(`okf-article-count`),Zy=document.getElementById(`okf-version`),Qy=document.getElementById(`okf-view-toggle`),$y=document.getElementById(`okf-search`),eb=document.getElementById(`okf-catalog-groups`),Q=document.getElementById(`okf-content`),tb=e=>iy(Yy,e),nb=()=>ay(Yy);function rb(e){return e instanceof Error?e.message:String(e)}var ib,ab,ob=null,sb=!1,cb=!1,lb=!1,$=null,ub=null,db=[],fb=[],pb=``,mb=`reader`,hb=null,gb=null,_b=``,vb=new Map,yb=new Map,bb=new Map,xb=new Vv({name:`ZAM OKF`,version:`0.1.0`}),Sb=ty(xb),Cb=ny(Sb,qy),wb=ry(Sb,qy);function Tb(e){ob=e.user.currentId??null}function Eb(e){db=e,fb=[...My(db).keys()]}function Db(e){let t=fb.indexOf(e);return t>=0&&t<4?t+1:0}function Ob(e,t=``){let n=Db(e);return n===0?`var(--okf-type-other${t})`:`var(--okf-type-${n}${t})`}function kb(e){let t=e.trim();return/^https?:\/\//i.test(t)?t:null}async function Ab(){try{let e=await Sb(`zam_okf_catalog`,{bundle_dir:$??void 0,include_log:!0});$=e.dir,Eb(e.articles),pb=e.log??``,lb=!0,Mb()}catch(e){Lb(rb(e))}}function jb(){cb||!sb||(cb=!0,lb?Mb():Ab())}function Mb(){Nb(),Pb(),Rb(),zb()}function Nb(){Xy&&(Xy.textContent=`${db.length} Artikel`),Zy&&(ub?(Zy.hidden=!1,Zy.textContent=`OKF v${ub}`):(Zy.hidden=!0,Zy.textContent=``))}function Pb(){for(let e of Fb())e.classList.toggle(`active`,e.dataset.view===mb)}function Fb(){return Qy?Array.from(Qy.querySelectorAll(`.okf-view-btn`)):[]}function Ib(e,t,n,r){e.replaceChildren();let i=document.createElement(`div`);i.className=`zam-card okf-empty`;let a=document.createElement(`div`);a.className=`okf-empty-emoji`,a.textContent=t;let o=document.createElement(`div`);o.className=`okf-empty-title`,o.textContent=n;let s=document.createElement(`div`);s.className=`okf-empty-sub`,s.textContent=r,i.append(a,o,s),e.appendChild(i)}function Lb(e){eb?.replaceChildren(),Q&&Ib(Q,`⚠️`,`Wissensbasis konnte nicht geladen werden`,e)}function Rb(){if(!eb)return;eb.replaceChildren();let e=Ny(db,_b);if(e.length===0){let e=document.createElement(`div`);e.className=`okf-catalog-empty`,e.textContent=_b?`Keine Treffer.`:`Keine Artikel.`,eb.appendChild(e);return}for(let[t,n]of My(e)){let e=document.createElement(`div`),r=document.createElement(`div`);r.className=`okf-catalog-group-title`;let i=document.createElement(`span`);i.className=`okf-type-dot`,i.style.background=Ob(t);let a=document.createElement(`span`);a.textContent=t||`(ohne Typ)`,r.append(i,a),e.appendChild(r);for(let t of n){let n=document.createElement(`button`);n.type=`button`,n.className=`okf-catalog-item`,mb===`reader`&&!gb&&hb===t.file&&n.classList.add(`active`),n.textContent=t.title,n.title=t.description,n.addEventListener(`click`,()=>{mb=`reader`,Hb(t.file)}),e.appendChild(n)}eb.appendChild(e)}}function zb(){if(Q){if(lb&&db.length===0){Vb(Q);return}if(mb===`graph`){rx();return}if(mb===`log`){ix(Q);return}Kb(Q)}}async function Bb(e){try{let t=await Sb(`zam_okf_catalog`,{bundle_dir:e,include_log:!0});return $=t.dir,ub=null,Eb(t.articles),pb=t.log??``,lb=!0,vb.clear(),yb.clear(),bb.clear(),hb=null,gb=null,null}catch(e){return rb(e)}}function Vb(e){e.replaceChildren();let t=document.createElement(`div`);t.className=`zam-card okf-empty`;let n=document.createElement(`div`);n.className=`okf-empty-emoji`,n.textContent=`📂`;let r=document.createElement(`div`);r.className=`okf-empty-title`,r.textContent=`Wissensbasis nicht gefunden`;let i=document.createElement(`div`);i.className=`okf-empty-sub`,i.textContent=$?`Unter "${$}" liegen keine Artikel. Gib den Pfad zum docs/okf-Ordner eines Repos an:`:`Gib den Pfad zum docs/okf-Ordner eines Repos an:`;let a=document.createElement(`div`);a.className=`okf-bundle-selector`;let o=document.createElement(`input`);o.type=`text`,o.className=`okf-bundle-input`,o.placeholder=`C:\\pfad\\zum\\repo\\docs\\okf`,o.value=$??``;let s=document.createElement(`button`);s.type=`button`,s.className=`okf-bundle-open`,s.textContent=`Öffnen`;let c=document.createElement(`div`);c.className=`okf-bundle-error`;let l=async()=>{let e=o.value.trim();if(!e)return;s.disabled=!0,c.textContent=``;let t=await Bb(e);if(s.disabled=!1,t){c.textContent=t;return}if(db.length===0){c.textContent=`Der Ordner ist ein gültiges Bundle, enthält aber keine Artikel.`;return}Mb()};s.addEventListener(`click`,()=>void l()),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l()}),a.append(o,s),t.append(n,r,i,a,c),e.appendChild(t)}async function Hb(e){if(hb=e,gb=null,yb.delete(e),Mb(),!vb.has(e))try{let t=await Sb(`zam_okf_read`,{bundle_dir:$??void 0,file:e});vb.set(e,t.markdown)}catch(t){yb.set(e,rb(t))}Mb()}function Ub(e){let t=document.createElement(`div`);t.className=`okf-meta-strip`;let n=e?.type??``;if(n){let e=document.createElement(`span`);e.className=`okf-type-badge`,e.style.background=Ob(n,`-bg`),e.style.color=Ob(n),e.textContent=n,t.appendChild(e)}for(let n of e?.tags??[]){let e=document.createElement(`span`);e.className=`okf-tag`,e.textContent=n,t.appendChild(e)}if(e?.timestamp){let n=document.createElement(`span`);n.textContent=e.timestamp.slice(0,10),t.appendChild(n)}if(e?.resource){let n=kb(e.resource);if(n){let e=document.createElement(`a`);e.className=`okf-resource-link`,e.href=n,e.target=`_blank`,e.rel=`noopener noreferrer`,e.textContent=`Quelle ↗`,t.appendChild(e)}}return t}function Wb(e){return`Import the OKF article "${e}"${$?` (bundle: ${$})`:``} as learning content: read the full article with zam_okf_read, extract the concepts I must be able to produce from memory (look-up facts stay in the article), judge a Bloom level and a domain per concept, arrange them in prerequisite order, check for existing tokens with zam_find_tokens, then record your decomposition with zam_okf_import.`}function Gb(e){let t=document.createElement(`div`);t.className=`okf-import-action`;let n=document.createElement(`button`);n.type=`button`,n.className=`okf-import-btn`,n.textContent=`Als Lerninhalt importieren`;let r=document.createElement(`div`);return r.className=`okf-import-hint`,n.addEventListener(`click`,()=>{(async()=>{n.disabled=!0,r.replaceChildren();try{if((await xb.sendMessage({role:`user`,content:[{type:`text`,text:Wb(e)}]})).isError)throw Error(`host rejected the message`);r.textContent=`An den Agenten übergeben — die Zerlegung läuft im Chat.`}catch{let t=document.createElement(`div`);t.textContent=`Dieser Host hat keinen Chat — gib deinem Agenten diese Anweisung:`;let n=document.createElement(`textarea`);n.readOnly=!0,n.className=`okf-import-fallback`,n.value=Wb(e),n.addEventListener(`focus`,()=>n.select()),r.append(t,n)}finally{n.disabled=!1}})()}),t.append(n,r),t}function Kb(e){if(gb){qb(e,gb);return}if(!hb){Ib(e,`📚`,`Kein Artikel ausgewählt`,`Wähle links einen Artikel aus der Wissensbasis.`);return}let t=yb.get(hb);if(t){Ib(e,`⚠️`,`Artikel konnte nicht geladen werden`,t);return}let n=vb.get(hb);if(n===void 0){Ib(e,`⏳`,`Lädt...`,hb);return}e.replaceChildren(),e.appendChild(Ub(db.find(e=>e.file===hb))),e.appendChild(Gb(hb));let r=document.createElement(`div`);r.className=`okf-article-body zam-card`,r.innerHTML=jy(xy(n)),Jb(r),Xb(r,new Set),e.appendChild(r)}function qb(e,t){e.replaceChildren();let n=document.createElement(`button`);n.type=`button`,n.className=`okf-citation-view-back`,n.textContent=`← Zurück zum Artikel`,n.addEventListener(`click`,()=>{gb=null,Mb()}),e.appendChild(n);let r=document.createElement(`div`);r.className=`okf-meta-strip`;let i=document.createElement(`span`);i.className=`okf-type-badge`,i.style.background=`var(--accent)`,i.style.color=`#ffffff`,i.textContent=`ADR`;let a=document.createElement(`span`);a.textContent=t.path,r.append(i,a),e.appendChild(r);let o=document.createElement(`div`);o.className=`okf-article-body zam-card`,o.innerHTML=jy(xy(t.content)),Jb(o),Xb(o,new Set),e.appendChild(o)}function Jb(e){e.addEventListener(`click`,e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-okf-article]`);if(n){e.preventDefault();let t=n.getAttribute(`data-okf-article`);t&&(mb=`reader`,Hb(t));return}let r=t.closest(`[data-okf-citation]`);if(r){e.preventDefault();let t=r.getAttribute(`data-okf-citation`);t&&Yb(t)}})}async function Yb(e){if(bb.has(e)){bb.delete(e),Mb();return}bb.set(e,{status:`loading`}),Mb();try{let t=await Sb(`zam_okf_read_citation`,{bundle_dir:$??void 0,target:e});bb.set(e,{status:`ok`,path:t.path,content:t.content})}catch(t){bb.set(e,{status:`error`,error:rb(t)})}Mb()}function Xb(e,t){for(let n of e.querySelectorAll(`[data-okf-citation]`)){let e=n.getAttribute(`data-okf-citation`);if(!e||t.has(e))continue;let r=bb.get(e);r&&n.insertAdjacentElement(`afterend`,Zb(e,r,t))}}function Zb(e,t,n){let r=document.createElement(`div`);if(t.status===`loading`)return r.className=`okf-citation-inline`,r.textContent=`Lädt Zitat...`,r;if(t.status===`error`)return r.className=`okf-citation-error`,r.textContent=`Zitat nicht erreichbar: ${t.error??e}`,r;r.className=`okf-citation-inline`;let i=document.createElement(`span`);i.className=`okf-citation-badge`,i.textContent=`ADR`;let a=document.createElement(`span`);a.textContent=t.path??e;let o=document.createElement(`button`);o.type=`button`,o.className=`okf-citation-open`,o.textContent=`Vollständig öffnen ↗`,o.addEventListener(`click`,n=>{n.preventDefault(),gb={target:e,path:t.path??e,content:t.content??``},Mb()});let s=document.createElement(`div`);return s.className=`okf-article-body`,s.innerHTML=jy(xy(t.content??``)),Jb(s),Xb(s,new Set([...n,e])),r.append(i,a,o,s),r}async function Qb(){let e=db.filter(e=>!vb.has(e.file)&&!yb.has(e.file));await Promise.all(e.map(async e=>{try{let t=await Sb(`zam_okf_read`,{bundle_dir:$??void 0,file:e.file});vb.set(e.file,t.markdown)}catch(t){yb.set(e.file,rb(t))}}))}function $b(){let e=new Map(db.map(e=>[e.file,e])),t=[],n=[],r=new Set,i=e=>{r.has(e.id)||(r.add(e.id),t.push(e))};for(let e of db)i({id:e.file,kind:`article`,type:e.type,file:e.file,label:e.title});for(let t of db){let r=vb.get(t.file);if(r===void 0)continue;let{articles:a,citations:o}=Fy(r);for(let r of a)i({id:r,kind:`article`,type:e.get(r)?.type,file:r,label:e.get(r)?.title}),n.push({from:t.file,to:r});for(let e of o)i({id:e,kind:`citation`,file:e,label:ex(e)}),n.push({from:t.file,to:e})}return{nodes:t,edges:n}}function ex(e){return e.split(`/`).pop()?.replace(/\.md$/,``)??e}function tx(e,t,n=26){let r=e.replace(/\.md$/,``);return r.length<=n?r:t===`head`?`${r.slice(0,n-1)}…`:`…${r.slice(-(n-1))}`}function nx(e){let t=document.createElementNS(Uy,`g`);t.setAttribute(`transform`,`translate(${e.x}, ${e.y})`),t.setAttribute(`class`,`okf-graph-node-${e.kind}`),t.setAttribute(`data-node-id`,e.id);let n=document.createElementNS(Uy,`title`);n.textContent=e.file??e.id,t.appendChild(n);let r=e.kind===`article`?tx(e.label??e.file??e.id,`head`):tx(e.label??e.file??e.id,`tail`);if(e.kind===`article`){let n=Math.min(Math.max(r.length*6.2+20,64),200),i=document.createElementNS(Uy,`rect`);i.setAttribute(`x`,String(-n/2)),i.setAttribute(`y`,`-13`),i.setAttribute(`width`,String(n)),i.setAttribute(`height`,`26`),i.setAttribute(`rx`,`13`),i.style.fill=Ob(e.type??``,`-bg`),i.style.stroke=Ob(e.type??``),t.appendChild(i),t.style.cursor=`pointer`,t.addEventListener(`click`,()=>{mb=`reader`,Hb(e.file??e.id)})}else{let e=document.createElementNS(Uy,`circle`);e.setAttribute(`r`,String(Ky*.45)),t.appendChild(e)}let i=document.createElementNS(Uy,`text`);if(i.setAttribute(`class`,`okf-graph-node-label`),i.setAttribute(`dominant-baseline`,`central`),e.kind===`article`)i.setAttribute(`text-anchor`,`middle`),i.setAttribute(`y`,`0`);else{let t=e.x>Wy/2;i.setAttribute(`text-anchor`,t?`end`:`start`),i.setAttribute(`x`,t?`-14`:`14`),i.setAttribute(`y`,`0`)}return i.textContent=r,t.appendChild(i),t}async function rx(){if(!Q)return;Q.replaceChildren();let e=document.createElement(`div`);if(e.className=`okf-empty`,e.textContent=`Lädt Graph...`,Q.appendChild(e),await Qb(),mb!==`graph`||!Q)return;let{nodes:t,edges:n}=$b();if(Q.replaceChildren(),t.length===0){Ib(Q,`🕸️`,`Kein Graph verfügbar`,`Diese Wissensbasis enthält noch keine Artikel.`);return}let r=document.createElement(`div`);r.className=`okf-graph-legend`;let i=document.createElement(`span`);i.className=`okf-graph-legend-item`,i.innerHTML=`<span class="okf-graph-legend-mark article"></span>Artikel`;let a=document.createElement(`span`);a.className=`okf-graph-legend-item`,a.innerHTML=`<span class="okf-graph-legend-mark citation"></span>Zitat (ADR)`,r.append(i,a),Q.appendChild(r);let o=Hy(t,n,Wy,Gy),s=new Map(o.map(e=>[e.id,e])),c=document.createElement(`div`);c.className=`graph-canvas-wrap`;let l=document.createElementNS(Uy,`svg`);l.setAttribute(`viewBox`,`0 0 ${Wy} ${Gy}`),l.setAttribute(`class`,`okf-graph-svg`),l.setAttribute(`role`,`img`),l.setAttribute(`aria-label`,`OKF Wissensgraph`),c.appendChild(l);let u=document.createElementNS(Uy,`g`);l.appendChild(u);for(let e of n){let t=s.get(e.from),n=s.get(e.to);if(!t||!n)continue;let r=(t.x+n.x)/2,i=(t.y+n.y)/2,a=r+(Wy/2-r)*.22,o=i+(Gy/2-i)*.22,c=document.createElementNS(Uy,`path`);c.setAttribute(`d`,`M ${t.x} ${t.y} Q ${a} ${o} ${n.x} ${n.y}`),c.setAttribute(`class`,`okf-graph-edge`),c.setAttribute(`data-from`,e.from),c.setAttribute(`data-to`,e.to),c.setAttribute(`aria-hidden`,`true`),u.appendChild(c)}let d=document.createElementNS(Uy,`g`);l.appendChild(d);let f=e=>{let t=new Set;for(let n of Array.from(u.children)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`),a=e!==null&&(r===e||i===e);n.setAttribute(`class`,`okf-graph-edge${a?` okf-edge-hot`:e===null?``:` okf-edge-dim`}`),a&&(r&&t.add(r),i&&t.add(i))}for(let n of Array.from(d.children)){let r=n.getAttribute(`data-node-id`),i=e!==null&&r!==e&&!t.has(r??``);n.classList.toggle(`okf-node-dim`,i)}};for(let e of o){let t=nx(e);t.addEventListener(`mouseenter`,()=>f(e.id)),t.addEventListener(`mouseleave`,()=>f(null)),d.appendChild(t)}Q.appendChild(c)}function ix(e){if(e.replaceChildren(),!pb.trim()){Ib(e,`📜`,`Kein Log vorhanden`,`Für diese Wissensbasis wurde noch kein log.md geschrieben.`);return}let t=document.createElement(`div`);t.className=`okf-log-body zam-card`,t.innerHTML=jy(pb),Jb(t),Xb(t,new Set),e.appendChild(t)}for(let e of Fb())e.addEventListener(`click`,()=>{let t=e.dataset.view;!t||t===mb||(mb=t,Mb())});Pb(),$y?.addEventListener(`input`,()=>{_b=$y.value,Rb()}),xb.ontoolresult=e=>{let t=e.structuredContent??{};ab=t.version;let n=ob,r=$;ob=t.user??null,t.bundleDir!==void 0&&($=t.bundleDir),t.okfVersion!==void 0&&(ub=t.okfVersion),t.catalog&&(Eb(t.catalog),lb=!0),t.log!==void 0&&(pb=t.log),cb&&(n!==ob||r!==$)&&(cb=!1,vb.clear(),yb.clear(),bb.clear(),hb=null,gb=null),nb();let i=t.companionContext??ey(qy,ob);ib=fy(ib,Jy,`ZAM OKF`,ab,i,{write:Cb,read:wb,onReload:Tb,onError:tb}),jb()},ib=fy(ib,Jy,`ZAM OKF`,ab,ey(qy,ob),{write:Cb,read:wb,onReload:Tb,onError:tb});var ax=`Kein MCP-Apps-Host — diese Karte braucht einen Host mit ui/initialize (z. B. basic-host oder Copilot-Panel).`,ox=setTimeout(()=>tb(ax),4e3);xb.connect().then(()=>{clearTimeout(ox),sb=!0,navigator.language.startsWith(`de`)&&Wv(`de`),window.setTimeout(jb,800)}).catch(e=>{clearTimeout(ox),tb(`ZAM OKF failed to start: ${rb(e)}`)});</script>
|
|
877
|
+
`)}function Fy(e){let t=Py(e),n=[],r=[],i=new Set,a=new Set;for(let e of t.matchAll(/\[[^\]]*\]\(([^)]+)\)/g)){let t=e[1].trim(),o=hy(t);o===`article`&&!i.has(t)?(i.add(t),n.push(t)):o===`citation`&&!a.has(t)&&(a.add(t),r.push(t))}return{articles:n,citations:r}}var Iy=.55,Ly=.13,Ry=.09,zy=.34;function By(e){return e.file??e.id}function Vy(e){return[...e].sort((e,t)=>{let n=(e.type??``).localeCompare(t.type??``);return n===0?By(e).localeCompare(By(t)):n})}function Hy(e,t,n,r){let i=n/2,a=r/2,o=n/2-n*Ly,s=r/2-r*Ry,c=o*Iy,l=s*Iy,u=Vy(e.filter(e=>e.kind===`article`)),d=[...e.filter(e=>e.kind===`citation`)],f=new Map,ee=u.map((e,t)=>{let n=2*Math.PI*t/u.length-Math.PI/2;return f.set(e.id,n),{...e,x:i+c*Math.cos(n),y:a+l*Math.sin(n)}}),p=d.map((e,n)=>{let r=t.filter(t=>t.to===e.id).map(e=>f.get(e.from)).filter(e=>e!==void 0);if(r.length===0)return{node:e,angle:2*Math.PI*n/d.length-Math.PI/2};let i=r.reduce((e,t)=>e+Math.sin(t),0),a=r.reduce((e,t)=>e+Math.cos(t),0);return{node:e,angle:Math.atan2(i,a)}});p.sort((e,t)=>e.angle-t.angle||By(e.node).localeCompare(By(t.node)));for(let e=1;e<p.length;e++){let t=p[e-1].angle+zy;p[e].angle<t&&(p[e].angle=t)}if(p.length>1&&p[p.length-1].angle-p[0].angle>2*Math.PI-zy)for(let e=0;e<p.length;e++)p[e].angle=2*Math.PI*e/p.length-Math.PI/2;let te=p.map(({node:e,angle:t})=>({...e,x:i+o*Math.cos(t),y:a+s*Math.sin(t)}));return[...ee,...te]}var Uy=`http://www.w3.org/2000/svg`,Wy=960,Gy=620,Ky=22,qy=`okf`,Jy=document.getElementById(`zam-contextbar-root`),Yy=document.getElementById(`zam-connection-notice`),Xy=document.getElementById(`okf-article-count`),Zy=document.getElementById(`okf-version`),Qy=document.getElementById(`okf-view-toggle`),$y=document.getElementById(`okf-search`),eb=document.getElementById(`okf-catalog-groups`),Q=document.getElementById(`okf-content`),tb=e=>iy(Yy,e),nb=()=>ay(Yy);function rb(e){return e instanceof Error?e.message:String(e)}var ib,ab,ob=null,sb=!1,cb=!1,lb=!1,$=null,ub=null,db=[],fb=[],pb=``,mb=`reader`,hb=null,gb=null,_b=``,vb=new Map,yb=new Map,bb=new Map,xb=new Vv({name:`ZAM OKF`,version:`0.1.0`}),Sb=ty(xb),Cb=ny(Sb,qy),wb=ry(Sb,qy);function Tb(e){ob=e.user.currentId??null}function Eb(e){db=e,fb=[...My(db).keys()]}function Db(e){let t=fb.indexOf(e);return t>=0&&t<4?t+1:0}function Ob(e,t=``){let n=Db(e);return n===0?`var(--okf-type-other${t})`:`var(--okf-type-${n}${t})`}function kb(e){let t=e.trim();return/^https?:\/\//i.test(t)?t:null}async function Ab(){try{let e=await Sb(`zam_okf_catalog`,{bundle_dir:$??void 0,include_log:!0});$=e.dir,Eb(e.articles),pb=e.log??``,lb=!0,Mb()}catch(e){Lb(rb(e))}}function jb(){cb||!sb||(cb=!0,lb?Mb():Ab())}function Mb(){Nb(),Pb(),Rb(),zb()}function Nb(){Xy&&(Xy.textContent=`${db.length} Artikel`),Zy&&(ub?(Zy.hidden=!1,Zy.textContent=`OKF v${ub}`):(Zy.hidden=!0,Zy.textContent=``))}function Pb(){for(let e of Fb())e.classList.toggle(`active`,e.dataset.view===mb)}function Fb(){return Qy?Array.from(Qy.querySelectorAll(`.okf-view-btn`)):[]}function Ib(e,t,n,r){e.replaceChildren();let i=document.createElement(`div`);i.className=`zam-card okf-empty`;let a=document.createElement(`div`);a.className=`okf-empty-emoji`,a.textContent=t;let o=document.createElement(`div`);o.className=`okf-empty-title`,o.textContent=n;let s=document.createElement(`div`);s.className=`okf-empty-sub`,s.textContent=r,i.append(a,o,s),e.appendChild(i)}function Lb(e){eb?.replaceChildren(),Q&&Ib(Q,`⚠️`,`Wissensbasis konnte nicht geladen werden`,e)}function Rb(){if(!eb)return;eb.replaceChildren();let e=Ny(db,_b);if(e.length===0){let e=document.createElement(`div`);e.className=`okf-catalog-empty`,e.textContent=_b?`Keine Treffer.`:`Keine Artikel.`,eb.appendChild(e);return}for(let[t,n]of My(e)){let e=document.createElement(`div`),r=document.createElement(`div`);r.className=`okf-catalog-group-title`;let i=document.createElement(`span`);i.className=`okf-type-dot`,i.style.background=Ob(t);let a=document.createElement(`span`);a.textContent=t||`(ohne Typ)`,r.append(i,a),e.appendChild(r);for(let t of n){let n=document.createElement(`button`);n.type=`button`,n.className=`okf-catalog-item`,mb===`reader`&&!gb&&hb===t.file&&n.classList.add(`active`),n.textContent=t.title,n.title=t.description,n.addEventListener(`click`,()=>{mb=`reader`,Hb(t.file)}),e.appendChild(n)}eb.appendChild(e)}}function zb(){if(Q){if(lb&&db.length===0){Vb(Q);return}if(mb===`graph`){ix();return}if(mb===`log`){ax(Q);return}qb(Q)}}async function Bb(e){try{let t=await Sb(`zam_okf_catalog`,{bundle_dir:e,include_log:!0});return $=t.dir,ub=null,Eb(t.articles),pb=t.log??``,lb=!0,vb.clear(),yb.clear(),bb.clear(),hb=null,gb=null,null}catch(e){return rb(e)}}function Vb(e){e.replaceChildren();let t=document.createElement(`div`);t.className=`zam-card okf-empty`;let n=document.createElement(`div`);n.className=`okf-empty-emoji`,n.textContent=`📂`;let r=document.createElement(`div`);r.className=`okf-empty-title`,r.textContent=`Wissensbasis nicht gefunden`;let i=document.createElement(`div`);i.className=`okf-empty-sub`,i.textContent=$?`Unter "${$}" liegen keine Artikel. Gib den Pfad zum docs/okf-Ordner eines Repos an:`:`Gib den Pfad zum docs/okf-Ordner eines Repos an:`;let a=document.createElement(`div`);a.className=`okf-bundle-selector`;let o=document.createElement(`input`);o.type=`text`,o.className=`okf-bundle-input`,o.placeholder=`C:\\pfad\\zum\\repo\\docs\\okf`,o.value=$??``;let s=document.createElement(`button`);s.type=`button`,s.className=`okf-bundle-open`,s.textContent=`Öffnen`;let c=document.createElement(`div`);c.className=`okf-bundle-error`;let l=async()=>{let e=o.value.trim();if(!e)return;s.disabled=!0,c.textContent=``;let t=await Bb(e);if(s.disabled=!1,t){c.textContent=t;return}if(db.length===0){c.textContent=`Der Ordner ist ein gültiges Bundle, enthält aber keine Artikel.`;return}Mb()};s.addEventListener(`click`,()=>void l()),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l()}),a.append(o,s),t.append(n,r,i,a,c),e.appendChild(t)}async function Hb(e){if(hb=e,gb=null,yb.delete(e),Mb(),Sb(`zam_okf_focus`,{file:e,...$?{bundle_dir:$}:{}}).catch(()=>{}),!vb.has(e))try{let t=await Sb(`zam_okf_read`,{bundle_dir:$??void 0,file:e});vb.set(e,t.markdown)}catch(t){yb.set(e,rb(t))}Mb()}function Ub(e){let t=document.createElement(`div`);t.className=`okf-meta-strip`;let n=e?.type??``;if(n){let e=document.createElement(`span`);e.className=`okf-type-badge`,e.style.background=Ob(n,`-bg`),e.style.color=Ob(n),e.textContent=n,t.appendChild(e)}for(let n of e?.tags??[]){let e=document.createElement(`span`);e.className=`okf-tag`,e.textContent=n,t.appendChild(e)}if(e?.timestamp){let n=document.createElement(`span`);n.textContent=e.timestamp.slice(0,10),t.appendChild(n)}if(e?.resource){let n=kb(e.resource);if(n){let e=document.createElement(`a`);e.className=`okf-resource-link`,e.href=n,e.target=`_blank`,e.rel=`noopener noreferrer`,e.textContent=`Quelle ↗`,t.appendChild(e)}}return t}function Wb(e){return`Import the OKF article "${e}"${$?` (bundle: ${$})`:``} as learning content: read the full article with zam_okf_read, extract the concepts I must be able to produce from memory (look-up facts stay in the article), judge a Bloom level and a domain per concept, arrange them in prerequisite order, check for existing tokens with zam_find_tokens, then record your decomposition with zam_okf_import.`}async function Gb(e,t){let n=!1;try{await navigator.clipboard.writeText(e.value),n=!0}catch{e.focus(),e.select();try{n=document.execCommand(`copy`)}catch{n=!1}}t.textContent=n?`✓ Kopiert`:`⚠️ Kopieren fehlgeschlagen`,t.disabled=!0,window.setTimeout(()=>{t.textContent=`📋 Kopieren`,t.disabled=!1},2e3)}function Kb(e){let t=document.createElement(`div`);t.className=`okf-import-action`;let n=document.createElement(`button`);n.type=`button`,n.className=`okf-import-btn`,n.textContent=`Als Lerninhalt importieren`;let r=document.createElement(`div`);return r.className=`okf-import-hint`,n.addEventListener(`click`,()=>{(async()=>{n.disabled=!0,r.replaceChildren();try{if((await xb.sendMessage({role:`user`,content:[{type:`text`,text:Wb(e)}]})).isError)throw Error(`host rejected the message`);r.textContent=`An den Agenten übergeben — die Zerlegung läuft im Chat.`}catch{let t=document.createElement(`div`);t.textContent=`Dieser Host hat keinen Chat — gib deinem Agenten diese Anweisung:`;let n=document.createElement(`textarea`);n.readOnly=!0,n.className=`okf-import-fallback`,n.value=Wb(e),n.addEventListener(`focus`,()=>n.select());let i=document.createElement(`button`);i.type=`button`,i.className=`okf-import-copy-btn`,i.textContent=`📋 Kopieren`,i.addEventListener(`click`,()=>{Gb(n,i)});let a=document.createElement(`div`);a.className=`okf-import-fallback-row`,a.append(t,i),r.append(a,n)}finally{n.disabled=!1}})()}),t.append(n,r),t}function qb(e){if(gb){Jb(e,gb);return}if(!hb){Ib(e,`📚`,`Kein Artikel ausgewählt`,`Wähle links einen Artikel aus der Wissensbasis.`);return}let t=yb.get(hb);if(t){Ib(e,`⚠️`,`Artikel konnte nicht geladen werden`,t);return}let n=vb.get(hb);if(n===void 0){Ib(e,`⏳`,`Lädt...`,hb);return}e.replaceChildren(),e.appendChild(Ub(db.find(e=>e.file===hb))),e.appendChild(Kb(hb));let r=document.createElement(`div`);r.className=`okf-article-body zam-card`,r.innerHTML=jy(xy(n)),Yb(r),Zb(r,new Set),e.appendChild(r)}function Jb(e,t){e.replaceChildren();let n=document.createElement(`button`);n.type=`button`,n.className=`okf-citation-view-back`,n.textContent=`← Zurück zum Artikel`,n.addEventListener(`click`,()=>{gb=null,Mb()}),e.appendChild(n);let r=document.createElement(`div`);r.className=`okf-meta-strip`;let i=document.createElement(`span`);i.className=`okf-type-badge`,i.style.background=`var(--accent)`,i.style.color=`#ffffff`,i.textContent=`ADR`;let a=document.createElement(`span`);a.textContent=t.path,r.append(i,a),e.appendChild(r);let o=document.createElement(`div`);o.className=`okf-article-body zam-card`,o.innerHTML=jy(xy(t.content)),Yb(o),Zb(o,new Set),e.appendChild(o)}function Yb(e){e.addEventListener(`click`,e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-okf-article]`);if(n){e.preventDefault();let t=n.getAttribute(`data-okf-article`);t&&(mb=`reader`,Hb(t));return}let r=t.closest(`[data-okf-citation]`);if(r){e.preventDefault();let t=r.getAttribute(`data-okf-citation`);t&&Xb(t)}})}async function Xb(e){if(bb.has(e)){bb.delete(e),Mb();return}bb.set(e,{status:`loading`}),Mb();try{let t=await Sb(`zam_okf_read_citation`,{bundle_dir:$??void 0,target:e});bb.set(e,{status:`ok`,path:t.path,content:t.content})}catch(t){bb.set(e,{status:`error`,error:rb(t)})}Mb()}function Zb(e,t){for(let n of e.querySelectorAll(`[data-okf-citation]`)){let e=n.getAttribute(`data-okf-citation`);if(!e||t.has(e))continue;let r=bb.get(e);r&&n.insertAdjacentElement(`afterend`,Qb(e,r,t))}}function Qb(e,t,n){let r=document.createElement(`div`);if(t.status===`loading`)return r.className=`okf-citation-inline`,r.textContent=`Lädt Zitat...`,r;if(t.status===`error`)return r.className=`okf-citation-error`,r.textContent=`Zitat nicht erreichbar: ${t.error??e}`,r;r.className=`okf-citation-inline`;let i=document.createElement(`span`);i.className=`okf-citation-badge`,i.textContent=`ADR`;let a=document.createElement(`span`);a.textContent=t.path??e;let o=document.createElement(`button`);o.type=`button`,o.className=`okf-citation-open`,o.textContent=`Vollständig öffnen ↗`,o.addEventListener(`click`,n=>{n.preventDefault(),gb={target:e,path:t.path??e,content:t.content??``},Mb()});let s=document.createElement(`div`);return s.className=`okf-article-body`,s.innerHTML=jy(xy(t.content??``)),Yb(s),Zb(s,new Set([...n,e])),r.append(i,a,o,s),r}async function $b(){let e=db.filter(e=>!vb.has(e.file)&&!yb.has(e.file));await Promise.all(e.map(async e=>{try{let t=await Sb(`zam_okf_read`,{bundle_dir:$??void 0,file:e.file});vb.set(e.file,t.markdown)}catch(t){yb.set(e.file,rb(t))}}))}function ex(){let e=new Map(db.map(e=>[e.file,e])),t=[],n=[],r=new Set,i=e=>{r.has(e.id)||(r.add(e.id),t.push(e))};for(let e of db)i({id:e.file,kind:`article`,type:e.type,file:e.file,label:e.title});for(let t of db){let r=vb.get(t.file);if(r===void 0)continue;let{articles:a,citations:o}=Fy(r);for(let r of a)i({id:r,kind:`article`,type:e.get(r)?.type,file:r,label:e.get(r)?.title}),n.push({from:t.file,to:r});for(let e of o)i({id:e,kind:`citation`,file:e,label:tx(e)}),n.push({from:t.file,to:e})}return{nodes:t,edges:n}}function tx(e){return e.split(`/`).pop()?.replace(/\.md$/,``)??e}function nx(e,t,n=26){let r=e.replace(/\.md$/,``);return r.length<=n?r:t===`head`?`${r.slice(0,n-1)}…`:`…${r.slice(-(n-1))}`}function rx(e){let t=document.createElementNS(Uy,`g`);t.setAttribute(`transform`,`translate(${e.x}, ${e.y})`),t.setAttribute(`class`,`okf-graph-node-${e.kind}`),t.setAttribute(`data-node-id`,e.id);let n=document.createElementNS(Uy,`title`);n.textContent=e.file??e.id,t.appendChild(n);let r=e.kind===`article`?nx(e.label??e.file??e.id,`head`):nx(e.label??e.file??e.id,`tail`);if(e.kind===`article`){let n=Math.min(Math.max(r.length*6.2+20,64),200),i=document.createElementNS(Uy,`rect`);i.setAttribute(`x`,String(-n/2)),i.setAttribute(`y`,`-13`),i.setAttribute(`width`,String(n)),i.setAttribute(`height`,`26`),i.setAttribute(`rx`,`13`),i.style.fill=Ob(e.type??``,`-bg`),i.style.stroke=Ob(e.type??``),t.appendChild(i),t.style.cursor=`pointer`,t.addEventListener(`click`,()=>{mb=`reader`,Hb(e.file??e.id)})}else{let e=document.createElementNS(Uy,`circle`);e.setAttribute(`r`,String(Ky*.45)),t.appendChild(e)}let i=document.createElementNS(Uy,`text`);if(i.setAttribute(`class`,`okf-graph-node-label`),i.setAttribute(`dominant-baseline`,`central`),e.kind===`article`)i.setAttribute(`text-anchor`,`middle`),i.setAttribute(`y`,`0`);else{let t=e.x>Wy/2;i.setAttribute(`text-anchor`,t?`end`:`start`),i.setAttribute(`x`,t?`-14`:`14`),i.setAttribute(`y`,`0`)}return i.textContent=r,t.appendChild(i),t}async function ix(){if(!Q)return;Q.replaceChildren();let e=document.createElement(`div`);if(e.className=`okf-empty`,e.textContent=`Lädt Graph...`,Q.appendChild(e),await $b(),mb!==`graph`||!Q)return;let{nodes:t,edges:n}=ex();if(Q.replaceChildren(),t.length===0){Ib(Q,`🕸️`,`Kein Graph verfügbar`,`Diese Wissensbasis enthält noch keine Artikel.`);return}let r=document.createElement(`div`);r.className=`okf-graph-legend`;let i=document.createElement(`span`);i.className=`okf-graph-legend-item`,i.innerHTML=`<span class="okf-graph-legend-mark article"></span>Artikel`;let a=document.createElement(`span`);a.className=`okf-graph-legend-item`,a.innerHTML=`<span class="okf-graph-legend-mark citation"></span>Zitat (ADR)`,r.append(i,a),Q.appendChild(r);let o=Hy(t,n,Wy,Gy),s=new Map(o.map(e=>[e.id,e])),c=document.createElement(`div`);c.className=`graph-canvas-wrap`;let l=document.createElementNS(Uy,`svg`);l.setAttribute(`viewBox`,`0 0 ${Wy} ${Gy}`),l.setAttribute(`class`,`okf-graph-svg`),l.setAttribute(`role`,`img`),l.setAttribute(`aria-label`,`OKF Wissensgraph`),c.appendChild(l);let u=document.createElementNS(Uy,`g`);l.appendChild(u);for(let e of n){let t=s.get(e.from),n=s.get(e.to);if(!t||!n)continue;let r=(t.x+n.x)/2,i=(t.y+n.y)/2,a=r+(Wy/2-r)*.22,o=i+(Gy/2-i)*.22,c=document.createElementNS(Uy,`path`);c.setAttribute(`d`,`M ${t.x} ${t.y} Q ${a} ${o} ${n.x} ${n.y}`),c.setAttribute(`class`,`okf-graph-edge`),c.setAttribute(`data-from`,e.from),c.setAttribute(`data-to`,e.to),c.setAttribute(`aria-hidden`,`true`),u.appendChild(c)}let d=document.createElementNS(Uy,`g`);l.appendChild(d);let f=e=>{let t=new Set;for(let n of Array.from(u.children)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`),a=e!==null&&(r===e||i===e);n.setAttribute(`class`,`okf-graph-edge${a?` okf-edge-hot`:e===null?``:` okf-edge-dim`}`),a&&(r&&t.add(r),i&&t.add(i))}for(let n of Array.from(d.children)){let r=n.getAttribute(`data-node-id`),i=e!==null&&r!==e&&!t.has(r??``);n.classList.toggle(`okf-node-dim`,i)}};for(let e of o){let t=rx(e);t.addEventListener(`mouseenter`,()=>f(e.id)),t.addEventListener(`mouseleave`,()=>f(null)),d.appendChild(t)}Q.appendChild(c)}function ax(e){if(e.replaceChildren(),!pb.trim()){Ib(e,`📜`,`Kein Log vorhanden`,`Für diese Wissensbasis wurde noch kein log.md geschrieben.`);return}let t=document.createElement(`div`);t.className=`okf-log-body zam-card`,t.innerHTML=jy(pb),Yb(t),Zb(t,new Set),e.appendChild(t)}for(let e of Fb())e.addEventListener(`click`,()=>{let t=e.dataset.view;!t||t===mb||(mb=t,Mb())});Pb(),$y?.addEventListener(`input`,()=>{_b=$y.value,Rb()}),xb.ontoolresult=e=>{let t=e.structuredContent??{};ab=t.version;let n=ob,r=$;ob=t.user??null,t.bundleDir!==void 0&&($=t.bundleDir),t.okfVersion!==void 0&&(ub=t.okfVersion),t.catalog&&(Eb(t.catalog),lb=!0),t.log!==void 0&&(pb=t.log),cb&&(n!==ob||r!==$)&&(cb=!1,vb.clear(),yb.clear(),bb.clear(),hb=null,gb=null),nb();let i=t.companionContext??ey(qy,ob);ib=fy(ib,Jy,`ZAM OKF`,ab,i,{write:Cb,read:wb,onReload:Tb,onError:tb}),jb()},ib=fy(ib,Jy,`ZAM OKF`,ab,ey(qy,ob),{write:Cb,read:wb,onReload:Tb,onError:tb});var ox=`Kein MCP-Apps-Host — diese Karte braucht einen Host mit ui/initialize (z. B. basic-host oder Copilot-Panel).`,sx=setTimeout(()=>tb(ox),4e3);xb.connect().then(()=>{clearTimeout(sx),sb=!0,navigator.language.startsWith(`de`)&&Wv(`de`),window.setTimeout(jb,800)}).catch(e=>{clearTimeout(sx),tb(`ZAM OKF failed to start: ${rb(e)}`)});</script>
|
|
853
878
|
</head>
|
|
854
879
|
<body>
|
|
855
880
|
<div id="zam-okf-panel">
|
|
Binary file
|