@cachly-dev/mcp-server 0.10.195 → 0.10.197

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.
@@ -1,8 +1,8 @@
1
- import{readFileSync as T,existsSync as C,writeFileSync as R,mkdirSync as Y,statSync as Z,appendFileSync as G}from"node:fs";import{dirname as j,join as _}from"node:path";import{tmpdir as S}from"node:os";import{createHash as F}from"node:crypto";import{spawn as W}from"node:child_process";import{Einblendbestand as $,torWoerter as B}from"./einblendung-kern.js";import{rahmeEin as U}from"./einblendung-rahmen.js";import{istMarkiert as V}from"./verdacht-marke.js";import{leserText as X}from"./seltenheitsbestand.js";import{mischeMitLeser as z}from"./leser.js";import{LeserSicherung as Q,dateiSpeicher as ee,frageLeser as te}from"./leser-sicherung.js";import{LESER_TIEFE_EINBLENDUNG as ne,LESER_ZEITLIMIT_MS as re}from"./rangfolge-stellschrauben.js";import{stufeEinblendungNachVersion as se}from"./gueltigkeit-version.js";import{ARME as H,BASIS_MIN_BELEGE as oe,MERKMAL_KANDIDATEN as ie,OHNE_LERNEN as le,entscheide as ae,leseArmZaehlung as ce,lernEinstellungen as ue,lernenAuffrischen as pe,merkeEntscheidung as fe,neuerSatz as he,sitzungsKennung as me,zugKennung as de}from"./lernen.js";export*from"./einblendung-kern.js";import{belohnungMelden as it,lernenAuffrischen as lt,lernEinstellungen as at,ARME as ct}from"./lernen.js";const ge=600*1e3,Ee=300*1e3,_e=10*1e3,Se=2e3,Ae=50,ke=60*1e3;function Ie(e,t){return t<Ee?{ttlMs:_e,sofort:!0}:e<Ae?{ttlMs:ke,sofort:!1}:{ttlMs:ge,sofort:!1}}const O=8e3,Ne=60*1e3,P=120,D=ne,ye=1500,I=re,be=_(S(),"cachly-ambient-netlog.jsonl");function We(e=process.cwd()){const t={apiUrl:process.env.CACHLY_API_URL||"https://api.cachly.dev",jwt:process.env.CACHLY_JWT||"",instanceId:process.env.CACHLY_BRAIN_INSTANCE_ID||""};if(t.jwt&&t.instanceId)return t;let n=e;for(let s=0;s<8;s++){const r=_(n,".mcp.json");if(C(r))try{const i=JSON.parse(T(r,"utf8"))?.mcpServers?.cachly?.env??{};if(t.apiUrl=t.apiUrl||i.CACHLY_API_URL||"https://api.cachly.dev",t.jwt=t.jwt||i.CACHLY_JWT||"",t.instanceId=t.instanceId||i.CACHLY_BRAIN_INSTANCE_ID||"",t.jwt&&t.instanceId)return t}catch{}const o=j(n);if(o===n)break;n=o}return t}function N(e){return F("sha1").update(e).digest("hex").slice(0,12)}function we(e){return _(S(),`cachly-ambient-bestand-${N(e)}.json`)}function Me(e){return _(S(),`cachly-leser-sicherung-${N(e)}.json`)}function Le(e,t="ambient-auffrischen"){return _(S(),`cachly-${t}-${N(e)}.lock`)}async function y(e,{fetchFn:t=fetch,zeitlimitMs:n=O}={}){try{const s=await t(`${e.apiUrl}/api/v1/instances/${e.instanceId}/export`,{headers:{Authorization:`Bearer ${e.jwt}`},signal:AbortSignal.timeout(n)});if(!s.ok)return null;const r=await s.json();return Array.isArray(r?.lessons)?r.lessons.map(o=>typeof o=="string"?ve(o):o).filter(o=>!!o&&typeof o=="object"):null}catch{return null}}function ve(e){try{return JSON.parse(e)}catch{return null}}function b(e,t){try{const n=Date.now(),s=w(e)?.seit??n;Y(j(e),{recursive:!0}),R(e,JSON.stringify({at:n,seit:s,lessons:t}),{mode:384})}catch{}}function w(e){try{const t=JSON.parse(T(e,"utf8"));if(Array.isArray(t?.lessons)){const n=Number(t.at)||0;return{at:n,seit:Number(t.seit)||n,lessons:t.lessons}}}catch{}return null}function xe(e,t,{zweck:n,ordner:s}={}){const r=Le(e.instanceId,n);try{if(C(r)&&Date.now()-Z(r).mtimeMs<Ne)return!1;R(r,String(Date.now()),{mode:384})}catch{return!1}try{return W(process.execPath,t,{detached:!0,stdio:"ignore",...s?{cwd:s}:{},env:{...process.env,CACHLY_API_URL:e.apiUrl,CACHLY_JWT:e.jwt,CACHLY_BRAIN_INSTANCE_ID:e.instanceId}}).unref(),!0}catch{return!1}}async function Te(e,{force:t=!1,nebenlauf:n,abrufMs:s=O,lernen:r=!1,fetchFn:o}={}){if(!e.jwt||!e.instanceId)return{lessons:[],quelle:"nicht-eingerichtet"};const i=we(e.instanceId);if(t){const[a]=await Promise.all([y(e,{fetchFn:o,zeitlimitMs:s}),r?pe(e,{fetchFn:o}):void 0]);if(a)return b(i,a),{lessons:a,quelle:"server"};const f=w(i);return f?{lessons:f.lessons,quelle:"platte-alt"}:{lessons:[],quelle:"server-nicht-erreichbar"}}const l=w(i);if(l){const a=Date.now(),f=Ie(l.lessons.length,a-l.seit);if(a-l.at<f.ttlMs)return{lessons:l.lessons,quelle:"platte"};if(f.sofort){const m=await y(e,{fetchFn:o,zeitlimitMs:Math.min(s,Se)});return m?(b(i,m),{lessons:m,quelle:"server"}):{lessons:l.lessons,quelle:"platte-alt"}}return n&&xe(e,n),{lessons:l.lessons,quelle:"platte-alt"}}const u=await y(e,{fetchFn:o,zeitlimitMs:s});return u?(b(i,u),{lessons:u,quelle:"server"}):{lessons:[],quelle:"server-nicht-erreichbar"}}function M(e){return Math.ceil(String(e).length/4)}function L(e){const t=e.severity?`[${e.severity}] `:"",n=String(e.what_worked??"").replace(/\s+/g," ").trim(),s=n.length>P?`${n.slice(0,P)}\u2026`:n,r=typeof e.versionshinweis=="string"?` [${e.versionshinweis}]`:"";return`- ${t}${e.topic}${r}: ${s}`}const A={lessons:[],tokens:0,topScore:0,belege:0};function v(e,t,n){if(e.length===0)return{...A};const s=[];let r=0;e=se(e);for(const{lektion:o}of e.slice(0,t)){const i=M(L(o));if(r+i>n)break;s.push(o),r+=i}return{lessons:s,tokens:r,topScore:Math.round(e[0].punkte*100)/100,belege:e[0].belege}}function Ve(e,t,{minBelege:n=2,topK:s=3,tokenBudget:r=600}={}){if(!Array.isArray(t)||t.length===0)return{...A};if(B(e).length===0)return{...A};const o=new $(t).sortiere(e).filter(i=>i.belege>=n);return o.length===0?{...A}:v(o,s,r)}function Ce(e){return X(e,ye)}async function J(e,t,n,{zeitlimitMs:s=I,fetchFn:r}={}){if(!e?.jwt||!e?.instanceId||n.length===0)return{art:"ohne"};if(["0","off","aus","false"].includes(String(process.env.CACHLY_LESER||"").toLowerCase()))return{art:"ohne"};const o=new Q(ee(Me(e.instanceId)));return te({url:`${e.apiUrl}/api/v1/rerank`,jwt:e.jwt,frage:t,texte:n,instanceId:e.instanceId,zeitlimitMs:s,fetchFn:r},o)}async function Xe(e,t,n,s={}){const r=await J(e,t,n,s);return r.art==="punkte"?{scores:r.scores,provider:r.provider,ms:r.ms}:null}async function K(e,t,n,{minBelege:s,tiefe:r,zeitlimitMs:o,fetchFn:i}){const l={sortiert:[],leser:"aus",leserMs:0};if(!Array.isArray(t)||t.length===0||B(e).length===0)return l;let u=new $(t).sortiere(e).filter(h=>h.belege>=s);if(u.length===0)return l;let a="aus",f=0;if(u.length>1&&r>0){const h=u.slice(0,r),m=u.slice(r),d=await J(n,e,h.map(E=>Ce(E.lektion)),{zeitlimitMs:o,fetchFn:i});d.art==="punkte"?(u=[...z(h.map(p=>p.punkte),d.scores,1).map(p=>({...h[p],leser:d.scores[p]})),...m],a=d.provider,f=d.ms):d.art==="uebersprungen"&&(a="uebersprungen")}return{sortiert:u,leser:a,leserMs:f}}async function Qe(e,t,n,{minBelege:s=2,topK:r=3,tokenBudget:o=600,tiefe:i=D,zeitlimitMs:l=I,fetchFn:u}={}){const a=await K(e,t,n,{minBelege:s,tiefe:i,zeitlimitMs:l,fetchFn:u});return{...v(a.sortiert,r,o),leser:a.leser,leserMs:a.leserMs}}function Re(e){if(!e.lessons.length)return"";const t=e.lessons.map(L).join(`
1
+ import{readFileSync as T,existsSync as C,writeFileSync as R,mkdirSync as G,statSync as F,appendFileSync as V}from"node:fs";import{dirname as j,join as _}from"node:path";import{tmpdir as b}from"node:os";import{createHash as W}from"node:crypto";import{spawn as X}from"node:child_process";import{Einblendbestand as $,torWoerter as B}from"./einblendung-kern.js";import{rahmeEin as U}from"./einblendung-rahmen.js";import{istMarkiert as Q}from"./verdacht-marke.js";import{leserText as ee}from"./seltenheitsbestand.js";import{mischeMitLeser as z}from"./leser.js";import{LeserSicherung as te,dateiSpeicher as ne,frageLeser as re}from"./leser-sicherung.js";import{LESER_TIEFE_EINBLENDUNG as se,LESER_ZEITLIMIT_MS as oe}from"./rangfolge-stellschrauben.js";import{stufeEinblendungNachVersion as ie}from"./gueltigkeit-version.js";import{ARME as H,BASIS_MIN_BELEGE as le,MERKMAL_KANDIDATEN as ae,OHNE_LERNEN as ce,entscheide as ue,leseArmZaehlung as pe,lernEinstellungen as fe,lernenAuffrischen as he,merkeEntscheidung as me,neuerSatz as de,sitzungsKennung as ge,zugKennung as Ee}from"./lernen.js";export*from"./einblendung-kern.js";import{belohnungMelden as at,lernenAuffrischen as ct,lernEinstellungen as ut,ARME as pt}from"./lernen.js";const _e=600*1e3,O=300*1e3,be=10*1e3,Se=2e3,Ae=50,ye=60*1e3;function Ne(e,t){return t<O?{ttlMs:be,sofort:!0}:e<Ae?{ttlMs:ye,sofort:!1}:{ttlMs:_e,sofort:!1}}const P=8e3,ve=60*1e3,D=120,J=se,Ie=1500,v=oe,ke=_(b(),"cachly-ambient-netlog.jsonl");function We(e=process.cwd()){const t={apiUrl:process.env.CACHLY_API_URL||"https://api.cachly.dev",jwt:process.env.CACHLY_JWT||"",instanceId:process.env.CACHLY_BRAIN_INSTANCE_ID||""};if(t.jwt&&t.instanceId)return t;let n=e;for(let s=0;s<8;s++){const r=_(n,".mcp.json");if(C(r))try{const i=JSON.parse(T(r,"utf8"))?.mcpServers?.cachly?.env??{};if(t.apiUrl=t.apiUrl||i.CACHLY_API_URL||"https://api.cachly.dev",t.jwt=t.jwt||i.CACHLY_JWT||"",t.instanceId=t.instanceId||i.CACHLY_BRAIN_INSTANCE_ID||"",t.jwt&&t.instanceId)return t}catch{}const o=j(n);if(o===n)break;n=o}return t}function I(e){return W("sha1").update(e).digest("hex").slice(0,12)}function K(e){return _(b(),`cachly-ambient-bestand-${I(e)}.json`)}function we(e){return _(b(),`cachly-leser-sicherung-${I(e)}.json`)}function Me(e,t="ambient-auffrischen"){return _(b(),`cachly-${t}-${I(e)}.lock`)}async function k(e,{fetchFn:t=fetch,zeitlimitMs:n=P}={}){try{const s=await t(`${e.apiUrl}/api/v1/instances/${e.instanceId}/export`,{headers:{Authorization:`Bearer ${e.jwt}`},signal:AbortSignal.timeout(n)});if(!s.ok)return null;const r=await s.json();return!Array.isArray(r?.lessons)||r.lessons.length===0&&typeof r.note=="string"&&r.note?null:r.lessons.map(o=>typeof o=="string"?Le(o):o).filter(o=>!!o&&typeof o=="object")}catch{return null}}function Le(e){try{return JSON.parse(e)}catch{return null}}function S(e,t,n="server"){const s=Date.now(),r=A(e),o=r?.seit??s;let i;n==="vorab"?i=t:n==="server"&&r?.vorab&&s-o<O&&(i=r.vorab);const a=n==="server"&&i?xe(t,i):t;try{G(j(e),{recursive:!0}),R(e,JSON.stringify({at:s,seit:o,lessons:a,...i?{vorab:i}:{}}),{mode:384})}catch{}return a}function xe(e,t){const n=new Set(e.map(s=>s.topic));return[...e,...t.filter(s=>!n.has(s.topic))]}function Xe(e,t){if(!e||t.length===0)return!1;const n=K(e);return(A(n)?.lessons.length??0)>0?!1:(S(n,t,"vorab"),!0)}function A(e){try{const t=JSON.parse(T(e,"utf8"));if(Array.isArray(t?.lessons)){const n=Number(t.at)||0;return{at:n,seit:Number(t.seit)||n,lessons:t.lessons,...Array.isArray(t.vorab)?{vorab:t.vorab}:{}}}}catch{}return null}function Te(e,t,{zweck:n,ordner:s}={}){const r=Me(e.instanceId,n);try{if(C(r)&&Date.now()-F(r).mtimeMs<ve)return!1;R(r,String(Date.now()),{mode:384})}catch{return!1}try{return X(process.execPath,t,{detached:!0,stdio:"ignore",...s?{cwd:s}:{},env:{...process.env,CACHLY_API_URL:e.apiUrl,CACHLY_JWT:e.jwt,CACHLY_BRAIN_INSTANCE_ID:e.instanceId}}).unref(),!0}catch{return!1}}async function Ce(e,{force:t=!1,nebenlauf:n,abrufMs:s=P,lernen:r=!1,vorabSchliessen:o=!1,fetchFn:i}={}){if(!e.jwt||!e.instanceId)return{lessons:[],quelle:"nicht-eingerichtet"};const a=K(e.instanceId);if(t){const[m]=await Promise.all([k(e,{fetchFn:i,zeitlimitMs:s}),r?he(e,{fetchFn:i}):void 0]);if(m)return{lessons:S(a,m,o?"abschluss":"server"),quelle:"server"};const c=A(a);return c?{lessons:c.lessons,quelle:"platte-alt"}:{lessons:[],quelle:"server-nicht-erreichbar"}}const l=A(a);if(l){const m=Date.now(),c=Ne(l.lessons.length,m-l.seit);if(m-l.at<c.ttlMs)return{lessons:l.lessons,quelle:"platte"};if(c.sofort){const h=await k(e,{fetchFn:i,zeitlimitMs:Math.min(s,Se)});return h?{lessons:S(a,h),quelle:"server"}:{lessons:l.lessons,quelle:"platte-alt"}}return n&&Te(e,n),{lessons:l.lessons,quelle:"platte-alt"}}const f=await k(e,{fetchFn:i,zeitlimitMs:s});return f?{lessons:S(a,f),quelle:"server"}:{lessons:[],quelle:"server-nicht-erreichbar"}}function w(e){return Math.ceil(String(e).length/4)}function M(e){const t=e.severity?`[${e.severity}] `:"",n=String(e.what_worked??"").replace(/\s+/g," ").trim(),s=n.length>D?`${n.slice(0,D)}\u2026`:n,r=typeof e.versionshinweis=="string"?` [${e.versionshinweis}]`:"";return`- ${t}${e.topic}${r}: ${s}`}const y={lessons:[],tokens:0,topScore:0,belege:0};function L(e,t,n){if(e.length===0)return{...y};const s=[];let r=0;e=ie(e);for(const{lektion:o}of e.slice(0,t)){const i=w(M(o));if(r+i>n)break;s.push(o),r+=i}return{lessons:s,tokens:r,topScore:Math.round(e[0].punkte*100)/100,belege:e[0].belege}}function Qe(e,t,{minBelege:n=2,topK:s=3,tokenBudget:r=600}={}){if(!Array.isArray(t)||t.length===0)return{...y};if(B(e).length===0)return{...y};const o=new $(t).sortiere(e).filter(i=>i.belege>=n);return o.length===0?{...y}:L(o,s,r)}function Re(e){return ee(e,Ie)}async function q(e,t,n,{zeitlimitMs:s=v,fetchFn:r}={}){if(!e?.jwt||!e?.instanceId||n.length===0)return{art:"ohne"};if(["0","off","aus","false"].includes(String(process.env.CACHLY_LESER||"").toLowerCase()))return{art:"ohne"};const o=new te(ne(we(e.instanceId)));return re({url:`${e.apiUrl}/api/v1/rerank`,jwt:e.jwt,frage:t,texte:n,instanceId:e.instanceId,zeitlimitMs:s,fetchFn:r},o)}async function et(e,t,n,s={}){const r=await q(e,t,n,s);return r.art==="punkte"?{scores:r.scores,provider:r.provider,ms:r.ms}:null}async function Y(e,t,n,{minBelege:s,tiefe:r,zeitlimitMs:o,fetchFn:i}){const a={sortiert:[],leser:"aus",leserMs:0};if(!Array.isArray(t)||t.length===0||B(e).length===0)return a;let l=new $(t).sortiere(e).filter(c=>c.belege>=s);if(l.length===0)return a;let f="aus",m=0;if(l.length>1&&r>0){const c=l.slice(0,r),d=l.slice(r),h=await q(n,e,c.map(E=>Re(E.lektion)),{zeitlimitMs:o,fetchFn:i});h.art==="punkte"?(l=[...z(c.map(p=>p.punkte),h.scores,1).map(p=>({...c[p],leser:h.scores[p]})),...d],f=h.provider,m=h.ms):h.art==="uebersprungen"&&(f="uebersprungen")}return{sortiert:l,leser:f,leserMs:m}}async function tt(e,t,n,{minBelege:s=2,topK:r=3,tokenBudget:o=600,tiefe:i=J,zeitlimitMs:a=v,fetchFn:l}={}){const f=await Y(e,t,n,{minBelege:s,tiefe:i,zeitlimitMs:a,fetchFn:l});return{...L(f.sortiert,r,o),leser:f.leser,leserMs:f.leserMs}}function je(e){if(!e.lessons.length)return"";const t=e.lessons.map(M).join(`
2
2
  `);return`\u{1F9E0} Cachly Brain \u2014 relevant lessons for this task (auto-recall, ${e.lessons.length}):
3
3
  ${U(t)}
4
- (ambient-recall \xB7 ~${e.tokens} tokens \xB7 match score ${e.topScore})`}const je=5;function et(e){const t=e.filter(o=>!V(o));if(!t.length)return"";const n=t.filter(o=>{const i=String(o.topic??"");return!(/^auto:/.test(i)||/^[a-z]+:?$/.test(i))}),r=[...n.length?n:t].sort((o,i)=>(Number(i.recall_count)||0)-(Number(o.recall_count)||0)).slice(0,je).map(L).join(`
4
+ (ambient-recall \xB7 ~${e.tokens} tokens \xB7 match score ${e.topScore})`}const $e=5;function nt(e){const t=e.filter(o=>!Q(o));if(!t.length)return"";const n=t.filter(o=>{const i=String(o.topic??"");return!(/^auto:/.test(i)||/^[a-z]+:?$/.test(i))}),r=[...n.length?n:t].sort((o,i)=>(Number(i.recall_count)||0)-(Number(o.recall_count)||0)).slice(0,$e).map(M).join(`
5
5
  `);return`\u{1F9E0} Cachly Brain \u2014 ambient recall active (${t.length} lessons). Top by proven reuse:
6
6
  ${U(r)}
7
- (Relevant lessons for each task are auto-injected per prompt. ~${M(r)} tokens.)`}function tt(e,t){return t?JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:t}}):""}function $e(e,t){return e.map((n,s)=>({x:n,rang:s,gezeigt:t.includes(n.lektion)})).filter(({rang:n,gezeigt:s})=>n<ie||s).map(({x:n,rang:s,gezeigt:r})=>({thema:String(n.lektion.topic??""),rang:s,punkte:Math.round(n.punkte*1e3)/1e3,belege:n.belege,leser:typeof n.leser=="number"&&Number.isFinite(n.leser)?Math.round(n.leser*1e3)/1e3:null,gezeigt:r}))}async function nt(e,t,{nebenlauf:n,abrufMs:s,leser:r=!0,session:o=null,protokoll:i=!0,ereignis:l="UserPromptSubmit",editor:u="",lernen:a=!0,fetchFn:f}={}){const{lessons:h,quelle:m}=await Te(t,{nebenlauf:n,abrufMs:s,fetchFn:f}),d=ue(),E=a&&d.aktiv&&l==="UserPromptSubmit"&&!!t.instanceId,p=E?ae({instanceId:t.instanceId,sitzung:o,prompt:e,zaehlung:ce(t.instanceId),einstellungen:d}):le,x=H[p.arm]??H[0],g=await K(e,h,t,{minBelege:oe,tiefe:r?D:0,zeitlimitMs:I,fetchFn:f}),c={...v(g.sortiert.filter(q=>q.belege>=x.minBelege),x.topK,600),leser:g.leser,leserMs:g.leserMs},k=p.kontrolle?"":Re(c);if(E&&g.sortiert.length>0&&fe(t.instanceId,o,he({sitzung:me(o),zug:de(e),ereignis:l,editor:u,arm:p.arm,kontrolle:p.kontrolle,erkundet:p.erkundet,ausgewaehlt:c.lessons.length,kandidatenZahl:g.sortiert.length,belege:c.belege,topScore:c.topScore,leser:c.leser,leserMs:c.leserMs,quelle:m,bestand:h.length,kandidaten:$e(g.sortiert,c.lessons)})),i)try{G(be,JSON.stringify({at:Date.now(),session:o,prompt_tokens:M(e),injected_tokens:k?c.tokens:0,matches:k?c.lessons.length:0,arm:p.arm,kontrolle:p.kontrolle,ausgewaehlt:c.lessons.length,top_score:c.topScore,belege:c.belege,leser:c.leser,leser_ms:c.leserMs,quelle:m,bestand:h.length})+`
8
- `)}catch{}return{kontext:k,auswahl:c,quelle:m,bestand:h.length,entscheidung:p}}export{O as ABRUF_TIMEOUT_MS,P as ANZEIGE_ZEICHEN,ct as ARME,_e as BESTAND_TTL_JUNG_MS,ke as BESTAND_TTL_KLEIN_MS,ge as BESTAND_TTL_MS,Se as JUNG_ABRUF_MS,Ee as JUNG_FENSTER_MS,Ae as KLEIN_LEKTIONEN,I as LESER_HOOK_ZEITLIMIT_MS,ye as LESER_MAX_ZEICHEN,D as LESER_TIEFE,be as NETZ_PROTOKOLL,je as SITZUNG_TOP_N,it as belohnungMelden,Ie as bestandFrist,we as bestandPfad,M as estimateTokens,Te as holeBestand,tt as hookAusgabe,at as lernEinstellungen,lt as lernenAuffrischen,J as leserAnfrageApi,Xe as leserPunkteApi,Ce as leserText,z as mischeMitLeser,nt as promptEinblendung,Re as promptKontext,L as renderLesson,We as resolveConfig,Ve as selectRelevant,Qe as selectRelevantMitLeser,Me as sicherungsPfad,et as sitzungsKontext,xe as starteNebenlauf};
7
+ (Relevant lessons for each task are auto-injected per prompt. ~${w(r)} tokens.)`}function rt(e,t){return t?JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:t}}):""}function Be(e,t){return e.map((n,s)=>({x:n,rang:s,gezeigt:t.includes(n.lektion)})).filter(({rang:n,gezeigt:s})=>n<ae||s).map(({x:n,rang:s,gezeigt:r})=>({thema:String(n.lektion.topic??""),rang:s,punkte:Math.round(n.punkte*1e3)/1e3,belege:n.belege,leser:typeof n.leser=="number"&&Number.isFinite(n.leser)?Math.round(n.leser*1e3)/1e3:null,gezeigt:r}))}async function st(e,t,{nebenlauf:n,abrufMs:s,leser:r=!0,session:o=null,protokoll:i=!0,ereignis:a="UserPromptSubmit",editor:l="",lernen:f=!0,fetchFn:m}={}){const{lessons:c,quelle:d}=await Ce(t,{nebenlauf:n,abrufMs:s,fetchFn:m}),h=fe(),E=f&&h.aktiv&&a==="UserPromptSubmit"&&!!t.instanceId,p=E?ue({instanceId:t.instanceId,sitzung:o,prompt:e,zaehlung:pe(t.instanceId),einstellungen:h}):ce,x=H[p.arm]??H[0],g=await Y(e,c,t,{minBelege:le,tiefe:r?J:0,zeitlimitMs:v,fetchFn:m}),u={...L(g.sortiert.filter(Z=>Z.belege>=x.minBelege),x.topK,600),leser:g.leser,leserMs:g.leserMs},N=p.kontrolle?"":je(u);if(E&&g.sortiert.length>0&&me(t.instanceId,o,de({sitzung:ge(o),zug:Ee(e),ereignis:a,editor:l,arm:p.arm,kontrolle:p.kontrolle,erkundet:p.erkundet,ausgewaehlt:u.lessons.length,kandidatenZahl:g.sortiert.length,belege:u.belege,topScore:u.topScore,leser:u.leser,leserMs:u.leserMs,quelle:d,bestand:c.length,kandidaten:Be(g.sortiert,u.lessons)})),i)try{V(ke,JSON.stringify({at:Date.now(),session:o,prompt_tokens:w(e),injected_tokens:N?u.tokens:0,matches:N?u.lessons.length:0,arm:p.arm,kontrolle:p.kontrolle,ausgewaehlt:u.lessons.length,top_score:u.topScore,belege:u.belege,leser:u.leser,leser_ms:u.leserMs,quelle:d,bestand:c.length})+`
8
+ `)}catch{}return{kontext:N,auswahl:u,quelle:d,bestand:c.length,entscheidung:p}}export{P as ABRUF_TIMEOUT_MS,D as ANZEIGE_ZEICHEN,pt as ARME,be as BESTAND_TTL_JUNG_MS,ye as BESTAND_TTL_KLEIN_MS,_e as BESTAND_TTL_MS,Se as JUNG_ABRUF_MS,O as JUNG_FENSTER_MS,Ae as KLEIN_LEKTIONEN,v as LESER_HOOK_ZEITLIMIT_MS,Ie as LESER_MAX_ZEICHEN,J as LESER_TIEFE,ke as NETZ_PROTOKOLL,$e as SITZUNG_TOP_N,at as belohnungMelden,Ne as bestandFrist,K as bestandPfad,xe as ergaenzeUmVorab,w as estimateTokens,Ce as holeBestand,rt as hookAusgabe,ut as lernEinstellungen,ct as lernenAuffrischen,q as leserAnfrageApi,et as leserPunkteApi,Re as leserText,z as mischeMitLeser,st as promptEinblendung,je as promptKontext,M as renderLesson,We as resolveConfig,Xe as schreibeVorabBestand,Qe as selectRelevant,tt as selectRelevantMitLeser,we as sicherungsPfad,nt as sitzungsKontext,Te as starteNebenlauf};
@@ -1 +1 @@
1
- import{resolve as u}from"node:path";import{STARTER_CORPUS as p}from"./starter-corpus.js";import{gitLesen as d}from"./git-ohne-shell.js";import{gitLogArgumente as w,leseCommits as _,lektionenJeThema as S}from"./git-lektionen.js";import{STARTWISSEN_COMMITS as A,ausschlussGrund as y,echteGitWurzel as T,startvorratErlaubt as E}from"./startwissen.js";import{startwissenEingeschaltet as k}from"./konto-anlegen.js";import{holeBestand as x}from"./einblendung.js";const O="startwissen-import",R=9e4,h=1e3,v=3,g=8e3,m=3,l=t=>new Promise(e=>setTimeout(e,t));function b(t){return S(t).map(e=>({topic:e.topic,outcome:e.outcome,what_worked:e.what_worked,what_failed:e.what_failed,context:e.context,severity:e.severity,tags:e.tags,commands:e.commands,file_paths:e.file_paths,source:"brain_from_git",...e.author?{author:e.author}:{}}))}function I(){return p.map(t=>({topic:t.topic,outcome:t.outcome,what_worked:t.what_worked,what_failed:t.what_failed,context:t.ctx,tags:t.tags,commands:[],file_paths:[],source:"starter"}))}function L(t){return d(t,w("HEAD",A),{timeoutMs:2e4})}async function M(t){const e=t.fetchFn??fetch,a=t.jetzt??Date.now,s=t.schlafen??l,r=a()+(t.bereitFristMs??R);for(;;){try{const n=await e(`${t.cfg.apiUrl}/api/v1/instances/${t.cfg.instanceId}/export`,{headers:{Authorization:`Bearer ${t.cfg.jwt}`},signal:AbortSignal.timeout(g)});if(n.status===401||n.status===403)return"nicht-bereit";if(n.ok){const o=await n.json();if(Array.isArray(o?.lessons)&&o.lessons.length>0)return"hat-lektionen";if(Array.isArray(o?.lessons)&&!o.note)return"leer"}}catch{}if(a()>=r)return"nicht-bereit";await s(h)}}async function j(t,e){const a=t.fetchFn??fetch,s=t.schlafen??l;let r=0,n=0;const o=async()=>{for(;r<e.length;){const c=e[r++];for(let i=1;i<=m;i++){try{const f=await a(`${t.cfg.apiUrl}/api/v1/instances/${t.cfg.instanceId}/learn`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.cfg.jwt}`},body:JSON.stringify(c),signal:AbortSignal.timeout(g)});if(f.ok){n++;break}if(f.status!==409&&f.status!==429&&f.status<500)break}catch{}i<m&&await s(h*i)}}};return await Promise.all(Array.from({length:Math.min(v,e.length)},o)),n}async function U(t){try{if(!k(t.env))return{art:"aus"};const e=u(t.projekt||"."),a=await(t.gitWurzel??T)(e);let s,r;if(a){const c=y(a,t.env);if(c)return{art:"ausgeschlossen",grund:c};s="git";let i="";try{i=(t.gitLog??L)(a)}catch{}if(r=b(_(i)),r.length===0)return{art:s,lektionen:0,gesendet:0}}else{if(!E(t.env))return{art:"kein-repo"};s="startvorrat",r=I()}const n=await M(t);if(n!=="leer")return{art:n};const o=await j(t,r);return o>0&&await x(t.cfg,{force:!0,fetchFn:t.fetchFn}),{art:s,lektionen:r.length,gesendet:o}}catch(e){return{art:"fehler",grund:e instanceof Error?e.message:String(e)}}}function W(t){if((t.art==="git"||t.art==="startvorrat")&&t.gesendet>0)return{art:t.art,lektionen:t.gesendet}}export{R as BEREIT_FRIST_MS,h as BEREIT_TAKT_MS,g as LERN_FRIST_MS,v as LERN_PARALLEL,m as LERN_VERSUCHE,O as STARTWISSEN_IMPORT,b as gitAnfragen,W as hookImportFuerAuftrag,U as importiereStartwissen,I as startvorratAnfragen};
1
+ import{resolve as p}from"node:path";import{STARTER_CORPUS as d}from"./starter-corpus.js";import{gitLesen as w}from"./git-ohne-shell.js";import{gitLogArgumente as _,leseCommits as S,lektionenJeThema as A}from"./git-lektionen.js";import{STARTWISSEN_COMMITS as y,ausschlussGrund as E,echteGitWurzel as T,startvorratErlaubt as v}from"./startwissen.js";import{startwissenEingeschaltet as b}from"./konto-anlegen.js";import{holeBestand as h,schreibeVorabBestand as k}from"./einblendung.js";const D="startwissen-import",R=9e4,g=1e3,x=3,l=8e3,m=3,u=t=>new Promise(e=>setTimeout(e,t));function I(t){return A(t).map(e=>({topic:e.topic,outcome:e.outcome,what_worked:e.what_worked,what_failed:e.what_failed,context:e.context,severity:e.severity,tags:e.tags,commands:e.commands,file_paths:e.file_paths,source:"brain_from_git",...e.author?{author:e.author}:{}}))}function L(){return d.map(t=>({topic:t.topic,outcome:t.outcome,what_worked:t.what_worked,what_failed:t.what_failed,context:t.ctx,tags:t.tags,commands:[],file_paths:[],source:"starter"}))}function F(t){return w(t,_("HEAD",y),{timeoutMs:2e4})}const j={brain_from_git:.55,starter:.9};function M(t,e=new Date){const n=e.toISOString();return t.map(r=>({...r,severity:r.severity||"major",recall_count:0,confidence:j[r.source],ts:n,verified_at:n}))}async function z(t){const e=t.fetchFn??fetch,n=t.jetzt??Date.now,r=t.schlafen??u,o=n()+(t.bereitFristMs??R);for(;;){try{const a=await e(`${t.cfg.apiUrl}/api/v1/instances/${t.cfg.instanceId}/export`,{headers:{Authorization:`Bearer ${t.cfg.jwt}`},signal:AbortSignal.timeout(l)});if(a.status===401||a.status===403)return"nicht-bereit";if(a.ok){const s=await a.json();if(Array.isArray(s?.lessons)&&s.lessons.length>0)return"hat-lektionen";if(Array.isArray(s?.lessons)&&!s.note)return"leer"}}catch{}if(n()>=o)return"nicht-bereit";await r(g)}}async function B(t,e){const n=t.fetchFn??fetch,r=t.schlafen??u;let o=0,a=0;const s=async()=>{for(;o<e.length;){const c=e[o++];for(let i=1;i<=m;i++){try{const f=await n(`${t.cfg.apiUrl}/api/v1/instances/${t.cfg.instanceId}/learn`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.cfg.jwt}`},body:JSON.stringify(c),signal:AbortSignal.timeout(l)});if(f.ok){a++;break}if(f.status!==409&&f.status!==429&&f.status<500)break}catch{}i<m&&await r(g*i)}}};return await Promise.all(Array.from({length:Math.min(x,e.length)},s)),a}async function G(t){try{if(!b(t.env))return{art:"aus"};const e=p(t.projekt||"."),n=await(t.gitWurzel??T)(e);let r,o;if(n){const c=E(n,t.env);if(c)return{art:"ausgeschlossen",grund:c};r="git";let i="";try{i=(t.gitLog??F)(n)}catch{}if(o=I(S(i)),o.length===0)return{art:r,lektionen:0,gesendet:0}}else{if(!v(t.env))return{art:"kein-repo"};r="startvorrat",o=L()}k(t.cfg.instanceId,M(o));const a=await z(t);if(a==="hat-lektionen"&&await h(t.cfg,{force:!0,vorabSchliessen:!0,fetchFn:t.fetchFn}),a!=="leer")return{art:a};const s=await B(t,o);return s>0&&await h(t.cfg,{force:!0,vorabSchliessen:!0,fetchFn:t.fetchFn}),{art:r,lektionen:o.length,gesendet:s}}catch(e){return{art:"fehler",grund:e instanceof Error?e.message:String(e)}}}function V(t){if((t.art==="git"||t.art==="startvorrat")&&t.gesendet>0)return{art:t.art,lektionen:t.gesendet}}export{R as BEREIT_FRIST_MS,g as BEREIT_TAKT_MS,l as LERN_FRIST_MS,x as LERN_PARALLEL,m as LERN_VERSUCHE,D as STARTWISSEN_IMPORT,M as alsBestand,I as gitAnfragen,V as hookImportFuerAuftrag,G as importiereStartwissen,L as startvorratAnfragen};
package/glama.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://glama.ai/mcp/schemas/server.json",
3
- "version": "0.10.195",
3
+ "version": "0.10.197",
4
4
  "maintainers": [
5
5
  "HeinrichNebula"
6
6
  ],