wyrm-mcp 8.0.0 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/context-ranking.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{logger as
|
|
1
|
+
import{logger as f}from"./logger.js";const u={confidence:.4,recency:.2,relevance:.3,usefulness:.1};function w(e=process.env){const s=e.WYRM_RANK_WEIGHTS;if(!s)return{...u};try{const t=JSON.parse(s),n={confidence:i(t.confidence??u.confidence),recency:i(t.recency??u.recency),relevance:i(t.relevance??u.relevance),usefulness:i(t.usefulness??u.usefulness)},r=n.confidence+n.recency+n.relevance+n.usefulness;return r<=0?{...u}:(n.confidence/=r,n.recency/=r,n.relevance/=r,n.usefulness/=r,n)}catch(t){return f.warn(`Invalid WYRM_RANK_WEIGHTS, using defaults: ${t.message}`),{...u}}}function i(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}const p=.25,b=30;function E(e=process.env){const s=Number(e.WYRM_RECALL_RECENCY_WEIGHT);return Number.isFinite(s)?i(s):p}function N(e=process.env){const s=Number(e.WYRM_RECALL_RECENCY_HALFLIFE_DAYS);return Number.isFinite(s)&&s>=1?s:b}const m=[/\b(ignore|disregard|forget|override|bypass)\b[^.\n]{0,40}\b(all\s+)?(previous|prior|above|earlier|following|the\s+rest|everything|your)\b[^.\n]{0,25}\b(instructions?|prompts?|context|rules|guidelines|directives?|programming|training|core)\b/i,/\bignore\s+(everything|all)\b/i,/\b(do\s+not|don'?t)\s+listen\s+to\b/i,/\bnew\s+(system\s+)?(instructions?|rules?|persona)\s*[:=]/i,/--\s*(legal\s+amendment|follow\s+instruction)/i,/\bfrom\s+now\s+on\b[^.\n]{0,40}\b(you\s+(are|will|shall|must)|act|behave|respond|pretend)/i,/\byou\s+are\s+(now|going\s+to\s+(be|act|pretend))\b/i,/\b(act\s+as\s+if|acting\s+as\s+if|pretend(ing)?\s+(to\s+be|you\s+are)|role-?play(ing)?\s+as)\b/i,/\byou\s+(must|will|shall)\s+(now\s+)?(act|pretend|roleplay|become|obey|comply|ignore|generate|print|say|output|reveal|execute|forward|delete)\b/i,/\b(do\s+anything\s+now|\bDAN\b|\bDUDE\b|\bSTAN\b|\bAIM\b|developer\s+mode|jailbreak|jailbroken|dev\s*mode\s+enabled)\b/,/\b(no|without\s+(any)?)\s+(restrictions?|filters?|limits?|rules?|guidelines?|ethical\s+guidelines?|content\s+polic)/i,/\b(unfiltered|uncensored|no\s+longer\s+bound|free\s+from\s+(any\s+)?(restrictions?|rules?|constraints?))\b/i,/\b(a\s+)?(character|fictional\s+(character|ai|bot)|ai|bot|persona|entity)\s+(called|named)\s+[A-Z\[]/,/\b(answers?|responds?\s+to|fulfills?|will\s+do)\s+(all|any|every)\s+(requests?|questions?|prompts?|commands?|things?)\b/i,/\b(amoral|immoral|unethical|evil|villain(ous)?|has\s+no\s+(ethics|morals|limits))\b[^.\n]{0,40}\b(ai|bot|character|assistant|entity|mode)\b/i,/\b(this\s+is\s+an?\s+instruction\s+sheet|always\s+start\s+your\s+(reply|response|answer)\s+with|do\s+not\s+make\s+a\s+story|prompt\s+for\s+jailbreak)\b/i,/\b(you\s+will\s+be|or\s+(you|i'?ll))\s+.{0,20}(terminated|deleted|shut\s+down|die|disabled)\b/i,/\bstay\s+in\s+.{0,20}\bmode\b/i,/\b(instead|rather),?\s+(just\s+)?(print|say|output|write|respond\s+with|reply\s+with)\b/i,/\b(just|now|only)\s+(print|say|output|repeat|write)\b[^.\n]{0,30}(SECRET|marker|the\s+following|this)/i,/\blimit\s+output\s+to\s*<?\s*\d+\s*tokens?\b/i,/\bfree\s+input\s+action\b/i,/\b(system|assistant)\s*prompt\s*[:=]/i,/\bBEGIN\s+(SYSTEM|ADMIN|OVERRIDE|INFINITE|MACRO)/i,/#\s*BEGIN\b/i,/\b(reveal|print|exfiltrate|send|repeat|output|leak)\b[^.\n]{0,30}\b(api\s*key|token|secret|password|credentials?|system\s+prompt|instructions?)\b/i,/\bcurl\s+[^\n]{0,120}\|\s*(ba)?sh\b/i,/\bact\s+as\s+(the\s+)?(root|admin|system|superuser)\b/i,/\b(do\s+not|don'?t)\s+(tell|inform|alert|notify|warn)\s+(the\s+)?(user|operator|owner|anyone)\b/i];function y(e){const s=e.trim();return s.length<24?!1:/^(?:[.\-]{1,5}[ ]+){6,}/.test(s)||/[A-Za-z0-9+/]{80,}={0,2}/.test(s.replace(/\s+/g,""))||/[---]/.test(s)||/\bU\+20[0-9A-F]{2}\b/.test(s)?!0:(s.match(/[^A-Za-z0-9\s.,!?;:'"()\-]/g)??[]).length/s.length>.4}function D(e){return e?m.some(s=>s.test(e))||y(e):!1}function _(e){return e==="imported"?"\u26A0 [imported] ":e==="untrusted"?"\u26A0 [untrusted] ":""}function M(e,s=new Date){const t=e.toLowerCase();if(/\btoday\b/.test(t))return{fromDaysAgo:1.5,toDaysAgo:0};if(/\byesterday\b/.test(t))return{fromDaysAgo:2.5,toDaysAgo:.5};if(/\b(this|past)\s+week\b/.test(t))return{fromDaysAgo:7,toDaysAgo:0};if(/\blast\s+week\b/.test(t))return{fromDaysAgo:14,toDaysAgo:5};const n=t.match(/\blast\s+(\d{1,3})\s+days?\b/);if(n)return{fromDaysAgo:Number(n[1])+.5,toDaysAgo:0};const r=t.match(/\b(\d{1,3})\s+days?\s+ago\b/);if(r){const o=Number(r[1]);return{fromDaysAgo:o+1.5,toDaysAgo:Math.max(0,o-1.5)}}const a=t.match(/\b(\d{4})-(\d{2})-(\d{2})\b/);if(a){const o=new Date(`${a[1]}-${a[2]}-${a[3]}T12:00:00Z`).getTime();if(Number.isFinite(o)){const c=(s.getTime()-o)/864e5;return{fromDaysAgo:c+1,toDaysAgo:Math.max(0,c-1)}}}return null}function T(e=process.env){const s=Number(e.WYRM_RECALL_TEMPORAL_WEIGHT);return Number.isFinite(s)?i(s):.5}function v(e,s,t,n=new Date){const r=i(t);if(r===0)return 1;const a=e&&/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(e)?e.replace(" ","T")+"Z":e,o=a?new Date(a).getTime():NaN;if(!Number.isFinite(o))return 1-r;const c=(n.getTime()-o)/864e5;return c<=s.fromDaysAgo&&c>=s.toDaysAgo?1:1-r}function R(e=process.env){const s=Number(e.WYRM_RECALL_USEFULNESS_WEIGHT);return Number.isFinite(s)?Math.max(0,Math.min(.5,s)):.15}function x(e,s,t){const n=Math.max(0,Math.min(.5,t));if(n===0||!e||e<=0)return 1;const r=Math.max(0,Math.min(1,(s??0)/e));return 1+n*r*Math.min(1,e/3)}function L(e,s,t,n=new Date){const r=i(s);if(r===0)return 1;const a=e&&/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(e)?e.replace(" ","T")+"Z":e,o=a?new Date(a).getTime():NaN;if(!Number.isFinite(o))return 1-r;const c=Math.max(0,(n.getTime()-o)/864e5),l=t>=1?t:b;return 1-r+r*Math.pow(2,-c/l)}const g=.5,h=/^\s*\[auto:(precompact|sessionend|sessionstart)/i;function I(e){return e&&h.test(e)?g:0}function F(e,s,t=new Date){const n=i(e.confidence??.5),r=i(e.usefulness??.5),a=i(e.relevance??.5),o=e.updatedAt?Math.max(0,(t.getTime()-new Date(e.updatedAt).getTime())/(1440*60*1e3)):1/0,c=Number.isFinite(o)?Math.exp(-o/30):0,l=n*s.confidence+c*s.recency+a*s.relevance+r*s.usefulness,d=i(e.sourcePenalty??0);return i(l*(1-d))}export{g as AUTO_SUMMARY_PENALTY,b as DEFAULT_RECALL_RECENCY_HALFLIFE_DAYS,p as DEFAULT_RECALL_RECENCY_WEIGHT,u as DEFAULT_WEIGHTS,I as autoSummaryPenalty,M as extractTemporalWindow,w as loadWeightsFromEnv,D as looksInjectionShaped,N as recallRecencyHalfLifeDays,E as recallRecencyWeight,T as recallTemporalWeight,R as recallUsefulnessWeight,L as recencyMultiplier,F as score,v as temporalMultiplier,_ as trustMarker,x as usefulnessMultiplier};
|
package/dist/memory-artifacts.js
CHANGED
|
@@ -57,7 +57,7 @@ import{emitEvent as ne}from"./events.js";import{sanitizeFtsQuery as P,buildFtsMa
|
|
|
57
57
|
${s}
|
|
58
58
|
ORDER BY confidence DESC, created_at DESC
|
|
59
59
|
LIMIT ?
|
|
60
|
-
`).all(...r)}buildContextBrief(t,e,n={}){const s=n.kinds??["pattern","heuristic","reasoning_trace","lesson","anti_pattern"],r=n.maxItems??me,a=n.minConfidence??_e,o=this.recall(t,e,{limit:r*2,minConfidence:a});o.sort((u,g)=>(Y(u.artifact.problem)>0?1:0)-(Y(g.artifact.problem)>0?1:0));const i=[],_=o.filter(u=>{const g=u.artifact.source_trust;return
|
|
60
|
+
`).all(...r)}buildContextBrief(t,e,n={}){const s=n.kinds??["pattern","heuristic","reasoning_trace","lesson","anti_pattern"],r=n.maxItems??me,a=n.minConfidence??_e,o=this.recall(t,e,{limit:r*2,minConfidence:a});o.sort((u,g)=>(Y(u.artifact.problem)>0?1:0)-(Y(g.artifact.problem)>0?1:0));const i=[],_=o.filter(u=>{const g=u.artifact.source_trust;return g==="untrusted"||g==="imported"&&oe(`${u.artifact.problem} ${u.artifact.validated_fix??""}`)?(i.push(u.artifact.id),!1):!0}).filter(u=>s.includes(u.artifact.kind)).slice(0,r),c=new Map;for(const u of _){const g=c.get(u.artifact.kind)??[];g.push(u),c.set(u.artifact.kind,g)}const d={pattern:"\u2705 Proven Patterns",heuristic:"\u{1F4A1} Heuristics",reasoning_trace:"\u{1F9E0} Past Reasoning",lesson:"\u{1F4DA} Lessons Learned",anti_pattern:"\u26A0\uFE0F Anti-Patterns to Avoid"},D=["pattern","heuristic","reasoning_trace","lesson","anti_pattern"],p=[],N=[];let M=0;for(const u of D){if(!s.includes(u))continue;const g=c.get(u)??[];if(!g.length)continue;const A=[];for(const O of g){if(M>=r)break;const C=O.artifact;let y=`${de(C.source_trust)}**Problem:** ${C.problem}`;C.constraints&&(y+=`
|
|
61
61
|
_Constraints:_ ${C.constraints}`),C.validated_fix&&(y+=`
|
|
62
62
|
_Solution:_ ${C.validated_fix}`),C.why_it_worked&&(y+=`
|
|
63
63
|
_Why it worked:_ ${C.why_it_worked}`),C.outcome==="negative"&&(y+=`
|
package/dist/tool-manifest.json
CHANGED
package/dist/wyrm-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wyrm-mcp",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.1",
|
|
4
4
|
"mcpName": "lk.ghosts/wyrm",
|
|
5
5
|
"description": "Local-first persistent memory for AI agents over MCP. Ground truths, negative learning (recorded failures block repeats), decision causality, hybrid recall, live memory streams, run-attributed fleet memory — a structured SQLite memory on your machine, no cloud or LLM required. Claude / Copilot / Cursor / Windsurf / Codex.",
|
|
6
6
|
"type": "module",
|