@loreai/gateway 0.17.0 → 0.17.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.
Files changed (2) hide show
  1. package/dist/index.cjs +4 -4
  2. package/package.json +2 -2
package/dist/index.cjs CHANGED
@@ -1088,7 +1088,7 @@ For long-term knowledge entries managed by [lore](https://github.com/BYK/loreai)
1088
1088
  `):`No entry found for id: ${e}`}case"d":{let r=w().query("SELECT id, observations, generation, created_at, session_id, c_norm FROM distillations WHERE id = ?").get(o);return r?[`## Recall Detail: ${e}`,"","#### Distilled",`${mt(r.observations)}`].join(`
1089
1089
  `):`No entry found for id: ${e}`}case"t":{let r=w().query("SELECT id, project_id, session_id, role, content, tokens, distilled, created_at, metadata FROM temporal_messages WHERE id = ?").get(o);return r?[`## Recall Detail: ${e}`,"","#### Conversation",`(${r.role}, ${lye(r.created_at)}, session: ${r.session_id.slice(0,8)})`,"",`${mt(r.content)}`].join(`
1090
1090
  `):`No entry found for id: ${e}`}case"lat":{let r=w().query("SELECT id, project_id, file, heading, depth, content, content_hash, first_paragraph, updated_at FROM lat_sections WHERE id = ?").get(o);return r?[`## Recall Detail: ${e}`,"","#### Reference",`**${mt(r.file)} \xA7 ${mt(r.heading)}**`,"",`${mt(r.content)}`].join(`
1091
- `):`No entry found for id: ${e}`}default:return`Unknown source prefix "${n}" in id: ${e}`}}async function dx(e){if(e.id)return hS(e.id);if(lu(e.query)===ri)return"Query too vague \u2014 try using specific keywords, file names, or technical terms.";let t=await gS(e),n=e.searchConfig?.recall;return _3e(t,{charBudget:n?.charBudget??fq.charBudget,relevanceFloor:n?.relevanceFloor??fq.relevanceFloor,maxResults:n?.maxResults??fq.maxResults})}var fq,d3e,p3e,f3e,cye,m3e,px,v_,dye=T(()=>{"use strict";l();$P();Dd();y_();S_();$a();Mi();Gm();yd();fq={charBudget:8e3,relevanceFloor:.15,maxResults:15};d3e={knowledge:1,"cross-knowledge":1,"lat-section":.9,distillation:.8,temporal:.5},p3e=[3,1.5,.7],f3e=["Strong Matches","Supporting","Peripheral"],cye={knowledge:0,"cross-knowledge":1,"lat-section":2,distillation:3,temporal:4},m3e={knowledge:"Knowledge","cross-knowledge":"Cross-Project","lat-section":"Reference",distillation:"Distilled",temporal:"Conversation"};px="Search your persistent memory for this project. Your visible context is a trimmed window \u2014 older messages, decisions, and details may not be visible to you even within the current session. Use this tool whenever you need information that isn't in your current context: file paths, past decisions, user preferences, prior approaches, or anything from earlier in this conversation or previous sessions. Always prefer recall over assuming you don't have the information. Searches long-term knowledge, distilled history, and raw message archives.",v_={query:"What to search for \u2014 be specific. Include keywords, file names, or concepts.",scope:"Search scope: 'all' (default) searches everything, 'session' searches current session only, 'project' searches all sessions in this project, 'knowledge' searches only long-term knowledge.",id:"Fetch full content of a specific result by its source-prefixed ID (e.g. 'k:abc123', 'd:abc123'). IDs are shown on truncated results in recall output. When id is provided, query is ignored."}});var ES={};Xe(ES,{resolveWorkerModel:()=>E3e});function E3e(e,t,n,o){return t||o||n}var pye=T(()=>{"use strict";l()});var qs={};Xe(qs,{COMPACT_SUMMARY_TEMPLATE:()=>TG,CONSOLIDATION_SYSTEM:()=>Nv,CURATOR_SYSTEM:()=>bv,DISTILLATION_SYSTEM:()=>Sv,EMPTY_QUERY:()=>ri,LORE_FILE:()=>Ud,QUERY_EXPANSION_SYSTEM:()=>Cv,RECALL_PARAM_DESCRIPTIONS:()=>v_,RECALL_TOOL_DESCRIPTION:()=>px,RECURSIVE_SYSTEM:()=>yv,buildCompactPrompt:()=>vv,calibrate:()=>sx,clearGitRemoteCache:()=>Pfe,clearLoreFileCache:()=>jP,close:()=>UO,computeContextCap:()=>ex,computeLayer0Cap:()=>ox,config:()=>Ke,consolidationUser:()=>Ov,consumeCameOutOfIdle:()=>lS,curator:()=>vu,curatorUser:()=>Iv,data:()=>Tt,db:()=>w,dbPath:()=>YE,distillation:()=>No,distillationUser:()=>Av,embedding:()=>Ha,embeddingVendor:()=>Uz,ensureProject:()=>ve,exactTermMatchRank:()=>xv,expandQuery:()=>Mv,exportLoreFile:()=>Nu,exportToFile:()=>FP,extractTopTerms:()=>Bm,formatDistillations:()=>Dm,formatKnowledge:()=>_T,ftsQuery:()=>lu,ftsQueryOr:()=>she,ftsQueryRelaxed:()=>AG,getGitRemote:()=>dd,getInstanceId:()=>ZE,getLastTransformEstimate:()=>GAe,getLastTransformedCount:()=>ax,getLastTurnAt:()=>$Ae,getLtmBudget:()=>ix,getLtmTokens:()=>BAe,getMaxContextTokens:()=>kAe,getMeta:()=>KE,h:()=>mT,importFromFile:()=>HP,importLoreFile:()=>YP,inline:()=>mt,inspectSessionState:()=>FAe,isFirstRun:()=>Lfe,isReasoningPart:()=>A_,isTextPart:()=>za,isToolPart:()=>dr,isWorkerSession:()=>HAe,latReader:()=>qa,lip:()=>rhe,liph:()=>wm,load:()=>RP,loadAllSessionCosts:()=>GO,loadForceMinLayer:()=>$O,loadSessionCosts:()=>kfe,log:()=>$,loreFileExists:()=>zP,ltm:()=>mn,mergeProjectInternal:()=>WE,needsUrgentDistillation:()=>cx,normalize:()=>hG,normalizeRemoteUrl:()=>eB,onIdleResume:()=>nx,p:()=>EG,patternExtract:()=>nq,projectId:()=>md,projectName:()=>_d,recallById:()=>hS,reciprocalRankFusion:()=>Pv,recursiveUser:()=>Rv,renderMarkdown:()=>Tv,root:()=>km,runRecall:()=>dx,sanitizeSurrogates:()=>pT,saveForceMinLayer:()=>Sm,saveSessionCosts:()=>BO,searchRecall:()=>gS,serialize:()=>xm,setForceMinLayer:()=>jAe,setLastTurnAtForTest:()=>VAe,setLtmTokens:()=>Ou,setMaxContextTokens:()=>uS,setMaxLayer0Tokens:()=>dS,setMeta:()=>Am,setModelLimits:()=>rx,shouldImport:()=>VP,shouldImportLoreFile:()=>qP,strong:()=>Lm,t:()=>Ua,temporal:()=>Wn,toolStripAnnotation:()=>pS,transform:()=>ux,ul:()=>Mm,unescapeMarkdown:()=>fT,updateBustRate:()=>tx,workerModel:()=>ES,workerSessionIDs:()=>fS});var wt=T(()=>{"use strict";l();y_();Dd();vAe();iye();aye();S_();$z();$P();rq();$a();dye();LP();xd();Mi();DO();cq();Um();tq();uq();pye();Gm();yd()});var rt,$d=T(()=>{"use strict";l();rt="0.17.0"});function fx(){let e=process.env;return{port:R3e(e.LORE_LISTEN_PORT,6969),hosts:N3e(e.LORE_LISTEN_HOST),upstreamAnthropic:_ye(e.LORE_UPSTREAM_ANTHROPIC||"https://api.anthropic.com"),upstreamOpenAI:_ye(e.LORE_UPSTREAM_OPENAI||"https://api.openai.com"),idleTimeoutSeconds:b3e(e.LORE_IDLE_TIMEOUT,60),debug:I3e(e.LORE_DEBUG)}}function Bd(e){for(let t of S3e)if(e.startsWith(t.prefix))return{url:t.url,protocol:t.protocol};return null}function y3e(e){for(let t of A3e){let n=t.exec(e);if(n?.[1])return n[1].replace(/\/+$/,"")||null}return null}function mq(e,t){let n=t["x-lore-project"];if(n)return n;let o=y3e(e);return o||process.cwd()}function R3e(e,t){if(!e)return t;let n=Number.parseInt(e,10);return Number.isNaN(n)||n<0||n>65535?t:n}function b3e(e,t){if(!e)return t;let n=Number.parseInt(e,10);return Number.isNaN(n)||n<=0?t:n}function I3e(e){return e==="1"||e?.toLowerCase()==="true"}function N3e(e){if(!e)return["127.0.0.1"];let t=e.split(",").map(n=>n.trim()).filter(Boolean);return t.length?t:["127.0.0.1"]}function _ye(e){return e.replace(/\/+$/,"")}var S3e,A3e,TS=T(()=>{"use strict";l();S3e=[{prefix:"claude-",url:"https://api.anthropic.com",protocol:"anthropic"},{prefix:"nvidia/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"meta/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"mistralai/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"google/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"qwen/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"deepseek/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"gpt-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o1-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o3-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o4-",url:"https://api.openai.com",protocol:"openai"},{prefix:"grok-",url:"https://api.x.ai",protocol:"openai"},{prefix:"mistral-",url:"https://api.mistral.ai",protocol:"openai"},{prefix:"codestral-",url:"https://api.mistral.ai",protocol:"openai"},{prefix:"gemini-",url:"https://generativelanguage.googleapis.com",protocol:"openai"}];A3e=[/["']?cwd["']?\s*[:=]\s*["']?(\/(?:home|Users)\/[^\s"',}]+)/,/[Ww]orking\s+directory[:=]\s*(\/(?:home|Users)\/[^\s"',]+)/,/(\/(?:home|Users)\/[^\s"',]+)\/(?:CLAUDE|AGENTS|\.lore)\.md/,/(\/(?:home|Users)\/[\w./-]+)/]});function Cu(e){let t=e["x-api-key"]||e["X-Api-Key"];if(t)return{scheme:"api-key",value:t};let n=e.authorization||e.Authorization;if(n){let o=/^Bearer\s+(\S+)$/i.exec(n);if(o)return{scheme:"bearer",value:o[1]}}return null}function Ys(e){switch(e.scheme){case"api-key":return{"x-api-key":e.value};case"bearer":return{Authorization:`Bearer ${e.value}`}}}function mx(e){return(0,gye.createHash)("sha256").update(`${e.scheme}|${e.value}`).digest("hex").slice(0,16)}function Eye(e,t){hye.set(e,t)}function O3e(e){return hye.get(e)??null}function _q(e){Tye=e}function v3e(){return Tye}function SS(e){if(e){let t=O3e(e);if(t)return t}return v3e()}var gye,hye,Tye,Gd=T(()=>{"use strict";l();gye=require("node:crypto");hye=new Map;Tye=null});function x3e(e){switch(e.type){case"text":return{type:"text",text:String(e.text??"")};case"thinking":return{type:"thinking",thinking:String(e.thinking??""),...e.signature!=null?{signature:String(e.signature)}:void 0};case"tool_use":return{type:"tool_use",id:String(e.id??""),name:String(e.name??""),input:e.input};case"tool_result":{let t="";return typeof e.content=="string"?t=e.content:Array.isArray(e.content)&&(t=e.content.filter(n=>n.type==="text").map(n=>String(n.text??"")).join(`
1091
+ `):`No entry found for id: ${e}`}default:return`Unknown source prefix "${n}" in id: ${e}`}}async function dx(e){if(e.id)return hS(e.id);if(lu(e.query)===ri)return"Query too vague \u2014 try using specific keywords, file names, or technical terms.";let t=await gS(e),n=e.searchConfig?.recall;return _3e(t,{charBudget:n?.charBudget??fq.charBudget,relevanceFloor:n?.relevanceFloor??fq.relevanceFloor,maxResults:n?.maxResults??fq.maxResults})}var fq,d3e,p3e,f3e,cye,m3e,px,v_,dye=T(()=>{"use strict";l();$P();Dd();y_();S_();$a();Mi();Gm();yd();fq={charBudget:8e3,relevanceFloor:.15,maxResults:15};d3e={knowledge:1,"cross-knowledge":1,"lat-section":.9,distillation:.8,temporal:.5},p3e=[3,1.5,.7],f3e=["Strong Matches","Supporting","Peripheral"],cye={knowledge:0,"cross-knowledge":1,"lat-section":2,distillation:3,temporal:4},m3e={knowledge:"Knowledge","cross-knowledge":"Cross-Project","lat-section":"Reference",distillation:"Distilled",temporal:"Conversation"};px="Search your persistent memory for this project. Your visible context is a trimmed window \u2014 older messages, decisions, and details may not be visible to you even within the current session. Use this tool whenever you need information that isn't in your current context: file paths, past decisions, user preferences, prior approaches, or anything from earlier in this conversation or previous sessions. Always prefer recall over assuming you don't have the information. Searches long-term knowledge, distilled history, and raw message archives.",v_={query:"What to search for \u2014 be specific. Include keywords, file names, or concepts.",scope:"Search scope: 'all' (default) searches everything, 'session' searches current session only, 'project' searches all sessions in this project, 'knowledge' searches only long-term knowledge.",id:"Fetch full content of a specific result by its source-prefixed ID (e.g. 'k:abc123', 'd:abc123'). IDs are shown on truncated results in recall output. When id is provided, query is ignored."}});var ES={};Xe(ES,{resolveWorkerModel:()=>E3e});function E3e(e,t,n,o){return t||o||n}var pye=T(()=>{"use strict";l()});var qs={};Xe(qs,{COMPACT_SUMMARY_TEMPLATE:()=>TG,CONSOLIDATION_SYSTEM:()=>Nv,CURATOR_SYSTEM:()=>bv,DISTILLATION_SYSTEM:()=>Sv,EMPTY_QUERY:()=>ri,LORE_FILE:()=>Ud,QUERY_EXPANSION_SYSTEM:()=>Cv,RECALL_PARAM_DESCRIPTIONS:()=>v_,RECALL_TOOL_DESCRIPTION:()=>px,RECURSIVE_SYSTEM:()=>yv,buildCompactPrompt:()=>vv,calibrate:()=>sx,clearGitRemoteCache:()=>Pfe,clearLoreFileCache:()=>jP,close:()=>UO,computeContextCap:()=>ex,computeLayer0Cap:()=>ox,config:()=>Ke,consolidationUser:()=>Ov,consumeCameOutOfIdle:()=>lS,curator:()=>vu,curatorUser:()=>Iv,data:()=>Tt,db:()=>w,dbPath:()=>YE,distillation:()=>No,distillationUser:()=>Av,embedding:()=>Ha,embeddingVendor:()=>Uz,ensureProject:()=>ve,exactTermMatchRank:()=>xv,expandQuery:()=>Mv,exportLoreFile:()=>Nu,exportToFile:()=>FP,extractTopTerms:()=>Bm,formatDistillations:()=>Dm,formatKnowledge:()=>_T,ftsQuery:()=>lu,ftsQueryOr:()=>she,ftsQueryRelaxed:()=>AG,getGitRemote:()=>dd,getInstanceId:()=>ZE,getLastTransformEstimate:()=>GAe,getLastTransformedCount:()=>ax,getLastTurnAt:()=>$Ae,getLtmBudget:()=>ix,getLtmTokens:()=>BAe,getMaxContextTokens:()=>kAe,getMeta:()=>KE,h:()=>mT,importFromFile:()=>HP,importLoreFile:()=>YP,inline:()=>mt,inspectSessionState:()=>FAe,isFirstRun:()=>Lfe,isReasoningPart:()=>A_,isTextPart:()=>za,isToolPart:()=>dr,isWorkerSession:()=>HAe,latReader:()=>qa,lip:()=>rhe,liph:()=>wm,load:()=>RP,loadAllSessionCosts:()=>GO,loadForceMinLayer:()=>$O,loadSessionCosts:()=>kfe,log:()=>$,loreFileExists:()=>zP,ltm:()=>mn,mergeProjectInternal:()=>WE,needsUrgentDistillation:()=>cx,normalize:()=>hG,normalizeRemoteUrl:()=>eB,onIdleResume:()=>nx,p:()=>EG,patternExtract:()=>nq,projectId:()=>md,projectName:()=>_d,recallById:()=>hS,reciprocalRankFusion:()=>Pv,recursiveUser:()=>Rv,renderMarkdown:()=>Tv,root:()=>km,runRecall:()=>dx,sanitizeSurrogates:()=>pT,saveForceMinLayer:()=>Sm,saveSessionCosts:()=>BO,searchRecall:()=>gS,serialize:()=>xm,setForceMinLayer:()=>jAe,setLastTurnAtForTest:()=>VAe,setLtmTokens:()=>Ou,setMaxContextTokens:()=>uS,setMaxLayer0Tokens:()=>dS,setMeta:()=>Am,setModelLimits:()=>rx,shouldImport:()=>VP,shouldImportLoreFile:()=>qP,strong:()=>Lm,t:()=>Ua,temporal:()=>Wn,toolStripAnnotation:()=>pS,transform:()=>ux,ul:()=>Mm,unescapeMarkdown:()=>fT,updateBustRate:()=>tx,workerModel:()=>ES,workerSessionIDs:()=>fS});var wt=T(()=>{"use strict";l();y_();Dd();vAe();iye();aye();S_();$z();$P();rq();$a();dye();LP();xd();Mi();DO();cq();Um();tq();uq();pye();Gm();yd()});var rt,$d=T(()=>{"use strict";l();rt="0.17.1"});function fx(){let e=process.env;return{port:R3e(e.LORE_LISTEN_PORT,6969),hosts:N3e(e.LORE_LISTEN_HOST),upstreamAnthropic:_ye(e.LORE_UPSTREAM_ANTHROPIC||"https://api.anthropic.com"),upstreamOpenAI:_ye(e.LORE_UPSTREAM_OPENAI||"https://api.openai.com"),idleTimeoutSeconds:b3e(e.LORE_IDLE_TIMEOUT,60),debug:I3e(e.LORE_DEBUG)}}function Bd(e){for(let t of S3e)if(e.startsWith(t.prefix))return{url:t.url,protocol:t.protocol};return null}function y3e(e){for(let t of A3e){let n=t.exec(e);if(n?.[1])return n[1].replace(/\/+$/,"")||null}return null}function mq(e,t){let n=t["x-lore-project"];if(n)return n;let o=y3e(e);return o||process.cwd()}function R3e(e,t){if(!e)return t;let n=Number.parseInt(e,10);return Number.isNaN(n)||n<0||n>65535?t:n}function b3e(e,t){if(!e)return t;let n=Number.parseInt(e,10);return Number.isNaN(n)||n<=0?t:n}function I3e(e){return e==="1"||e?.toLowerCase()==="true"}function N3e(e){if(!e)return["127.0.0.1"];let t=e.split(",").map(n=>n.trim()).filter(Boolean);return t.length?t:["127.0.0.1"]}function _ye(e){return e.replace(/\/+$/,"")}var S3e,A3e,TS=T(()=>{"use strict";l();S3e=[{prefix:"claude-",url:"https://api.anthropic.com",protocol:"anthropic"},{prefix:"nvidia/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"meta/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"mistralai/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"google/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"qwen/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"deepseek/",url:"https://integrate.api.nvidia.com",protocol:"openai"},{prefix:"gpt-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o1-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o3-",url:"https://api.openai.com",protocol:"openai"},{prefix:"o4-",url:"https://api.openai.com",protocol:"openai"},{prefix:"grok-",url:"https://api.x.ai",protocol:"openai"},{prefix:"mistral-",url:"https://api.mistral.ai",protocol:"openai"},{prefix:"codestral-",url:"https://api.mistral.ai",protocol:"openai"},{prefix:"gemini-",url:"https://generativelanguage.googleapis.com",protocol:"openai"}];A3e=[/["']?cwd["']?\s*[:=]\s*["']?(\/(?:home|Users)\/[^\s"',}]+)/,/[Ww]orking\s+directory[:=]\s*(\/(?:home|Users)\/[^\s"',]+)/,/(\/(?:home|Users)\/[^\s"',]+)\/(?:CLAUDE|AGENTS|\.lore)\.md/,/(\/(?:home|Users)\/[\w./-]+)/]});function Cu(e){let t=e["x-api-key"]||e["X-Api-Key"];if(t)return{scheme:"api-key",value:t};let n=e.authorization||e.Authorization;if(n){let o=/^Bearer\s+(\S+)$/i.exec(n);if(o)return{scheme:"bearer",value:o[1]}}return null}function Ys(e){switch(e.scheme){case"api-key":return{"x-api-key":e.value};case"bearer":return{Authorization:`Bearer ${e.value}`}}}function mx(e){return(0,gye.createHash)("sha256").update(`${e.scheme}|${e.value}`).digest("hex").slice(0,16)}function Eye(e,t){hye.set(e,t)}function O3e(e){return hye.get(e)??null}function _q(e){Tye=e}function v3e(){return Tye}function SS(e){if(e){let t=O3e(e);if(t)return t}return v3e()}var gye,hye,Tye,Gd=T(()=>{"use strict";l();gye=require("node:crypto");hye=new Map;Tye=null});function x3e(e){switch(e.type){case"text":return{type:"text",text:String(e.text??"")};case"thinking":return{type:"thinking",thinking:String(e.thinking??""),...e.signature!=null?{signature:String(e.signature)}:void 0};case"tool_use":return{type:"tool_use",id:String(e.id??""),name:String(e.name??""),input:e.input};case"tool_result":{let t="";return typeof e.content=="string"?t=e.content:Array.isArray(e.content)&&(t=e.content.filter(n=>n.type==="text").map(n=>String(n.text??"")).join(`
1092
1092
  `)),{type:"tool_result",toolUseId:String(e.tool_use_id??""),content:t,...e.is_error?{isError:!0}:void 0}}default:return{type:"text",text:JSON.stringify(e)}}}function M3e(e){return typeof e=="string"?[{type:"text",text:e}]:Array.isArray(e)?e.map(t=>x3e(t)):[]}function w3e(e){return e==null?"":typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>String(t.text??"")).join(`
1093
1093
  `):String(e)}function Sye(e){switch(e.type){case"text":return{type:"text",text:e.text};case"thinking":return{type:"thinking",thinking:e.thinking,...e.signature!=null?{signature:e.signature}:void 0};case"tool_use":return{type:"tool_use",id:e.id,name:e.name,input:e.input};case"tool_result":{let t={type:"tool_result",tool_use_id:e.toolUseId,content:e.content};return e.isError&&(t.is_error=!0),t}}}function Aye(e,t){let n=e??{},o=String(n.model??""),r=w3e(n.system),i=n.stream===!0,s=typeof n.max_tokens=="number"?n.max_tokens:4096,c=(Array.isArray(n.messages)?n.messages:[]).map(f=>({role:f.role==="assistant"?"assistant":"user",content:M3e(f.content)})),d=(Array.isArray(n.tools)?n.tools:[]).map(f=>({name:String(f.name??""),description:String(f.description??""),inputSchema:f.input_schema??{}})),p={};for(let[f,m]of Object.entries(n))P3e.has(f)||(p[f]=m);return{protocol:"anthropic",model:o,system:r,messages:c,tools:d,stream:i,maxTokens:s,metadata:p,rawHeaders:t}}function yye(e,t){let n={"content-type":"application/json","anthropic-version":C3e},o=Cu(e.rawHeaders);o&&Object.assign(n,Ys(o));let r=e.rawHeaders["anthropic-beta"]||e.rawHeaders["Anthropic-Beta"]||"";r&&(n["anthropic-beta"]=r);let i={model:e.model,max_tokens:e.maxTokens,stream:e.stream};if(e.system){let a=t?.systemTTL,c=t?.ltmSystem;if(a){let u=a==="1h"?{type:"ephemeral",ttl:"1h"}:{type:"ephemeral"},d=[{type:"text",text:e.system,cache_control:u}];c&&d.push({type:"text",text:c}),i.system=d}else i.system=c?`${e.system}
1094
1094
 
@@ -1136,7 +1136,7 @@ ${N.observations}`).join(`
1136
1136
  ${f}`:f,g=Math.ceil(_.length/3),h=Math.max(2048,Math.min(Math.ceil(g*.5),2e4)),A=await i.prompt(f,_,{model:Ks(),workerID:"lore-compact",urgent:!0,maxTokens:h})??"(Compaction failed \u2014 no summary generated.)",R=xye(o,A,e.model);return e.stream?E5e(R):OS(R)}async function A5e(e,t){Gq({model:e.model});let{response:n}=await Lx(e,t);if(e.stream&&n.body)return new Response(n.body,{status:n.status,headers:{"content-type":n.headers.get("content-type")??"text/event-stream"}});let o=await n.text();return new Response(o,{status:n.status,headers:{"content-type":"application/json"}})}async function y5e(e,t){let n=mq(e.system,e.rawHeaders);await JRe(n,t);let o=Cu(e.rawHeaders);o&&_q(o);let{sessionID:r,isNew:i,tier:s}=await QRe(e,n),a=XRe(r,n),c=Sx(e.rawHeaders)!=null;if(o&&Eye(r,o),qye(r,e.system),i){let G=await Nq(e.messages.map(H=>({role:H.role,content:H.content})),{authSuffix:o?mx(o):""});if(a.fingerprint=G,!a.headerSessionId){let H=Oq(a.candidateHeaders,e.rawHeaders);a.candidateHeaders=H.updatedCandidates}}let u=a.messageCount,d=e.messages.length;u>10&&d<u*.5&&$.warn(`compaction anomaly: session=${r.slice(0,16)} messages dropped ${u}\u2192${d}. Client may have compacted outside gateway control.`),a.messageCount=d,ZRe=e.model,cRe({authFingerprint:o?mx(o):null,sessionID:r,model:e.model,upstreamUrl:Bd(e.model)?.url??t.upstreamAnthropic,port:t.port,projectPath:n}),a.recallStore.size>0&&(jRe(e,a.recallStore)&&$.info(`expanded recall markers for session ${r.slice(0,16)}`),FRe(e,a.recallStore)),$.info(`turn: session=${r.slice(0,16)} messages=${e.messages.length} model=${e.model} stream=${e.stream} new=${i} tier=${s}`+(c?" subagent=true":""));let p=f5e(e.model);rx({context:p.context,output:p.output});let f=Ke();f.budget.maxLayer0Tokens!==void 0?dS(f.budget.maxLayer0Tokens):p.cacheReadCost&&f.budget.targetCacheReadCostPerTurn>0&&dS(ox(f.budget.targetCacheReadCostPerTurn,p.cacheReadCost)),f.budget.maxContextTokens!==void 0?uS(f.budget.maxContextTokens):p.cacheWriteCost&&f.budget.targetBustCost>0&&uS(ex(f.budget.targetBustCost,p.cacheWriteCost));let m=Uye(e.rawHeaders);if(!(m==="claude-code"||Hye(e.system))&&!c){let G=g5e(p.output,p.context,a.outputTokensEMA,a.lastStopReason,a.lastInputTokens);e.maxTokens!==G&&($.info(`max_tokens: ${e.maxTokens} \u2192 ${G} (client=${m}, ema=${a.outputTokensEMA??"none"}, lastStop=${a.lastStopReason??"none"})`),e.maxTokens=G)}let h=(a.resolvedConversationTTL==="1h"&&f.idleResumeMinutes<=5?60:f.idleResumeMinutes)*6e4,S=nx(r,h);a.lastTurnWasIdle=S.triggered,S.triggered&&(vS.delete(r),$.info(`session idle ${Math.round(S.idleMs/6e4)}min \u2014 refreshing caches`));let A;if(f.knowledge.enabled)try{let G=vS.get(r);if(!G){let H=f.budget.ltm,pe=ix(H),se=mn.forSession(n,r,pe);if(se.length){let xe=_T(se.map(Fe=>({category:Fe.category,title:Fe.title,content:Fe.content})),pe);if(xe){let Fe=Math.ceil(xe.length/3);G={formatted:xe,tokenCount:Fe},vS.set(r,G)}}}if(G){let pe=(p.inputCostPerMillion??3)>=5?Math.min(.15000000000000002,.2):(p.inputCostPerMillion??3)>=1?Math.min(.1,.15):.05,se=nY.get(r);se&&p5e(se.formatted,G.formatted)<pe?(A=se.formatted,Ou(se.tokenCount,r)):(nY.set(r,G),A=G.formatted,Ou(G.tokenCount,r))}else Ou(0,r)}catch(G){$.error("LTM injection failed:",G),Ou(0,r)}finally{lS(r)}else Ou(0,r),lS(r);let R=Ax(e.messages,r);Cq(R);let N=ux({messages:R,projectPath:n,sessionID:r});for(;N.messages.length>0&&N.messages.at(-1).info.role!=="user"&&!N.messages.at(-1).parts.some(pe=>pe.type==="tool");)N.messages.pop();let v=R5e(N.messages);b5e(v);let O={...e,messages:v};if(O.tools.length>0&&!zRe(O.tools)){let G=f.knowledge.enabled?{...Mx,description:Mx.description+`
1137
1137
 
1138
1138
  When making git commits, always check if .lore.md has unstaged changes and include it in the commit. This file contains shared project knowledge managed by lore and must be version-controlled.`}:Mx;O.tools=[...O.tools,G]}let k=a.resolvedConversationTTL??"5m",J=f.cache.conversationTTL;if(J==="5m"||J==="1h")k=J;else if(J==="auto"){let G=a.coldCacheWindow;if(G&&G.length>=5){let H=G.filter(Boolean).length/G.length;H>.4&&k==="5m"?(k="1h",$.info(`auto-upgrade conversation TTL to 1h: session=${r.slice(0,16)} coldFraction=${(H*100).toFixed(0)}%`)):H<.2&&k==="1h"&&(k="5m",$.info(`auto-downgrade conversation TTL to 5m: session=${r.slice(0,16)} coldFraction=${(H*100).toFixed(0)}%`))}}a.resolvedConversationTTL=k;let D={systemTTL:"1h",ltmSystem:A,cacheTools:!0,cacheConversation:!0,conversationTTL:k},q=il({op:"gen_ai.chat",name:`chat ${e.model}`,attributes:{"gen_ai.operation.name":"chat","gen_ai.request.model":e.model,"gen_ai.provider.name":Bd(e.model)?.protocol??"anthropic","gen_ai.response.streaming":e.stream}}),{response:X,serializedBody:ne}=await Lx(O,t,void 0,D);if(!X.ok){let G=await X.text();return $.error(`upstream error: ${X.status} ${G.slice(0,500)}`),q.setStatus({code:2,message:`HTTP ${X.status}`}),q.end(),new Response(G,{status:X.status,headers:{"content-type":"application/json"}})}if(e.stream&&X.body){let G=O.tools.some(H=>H.name===Ja);return h5e(X,H=>NS(e,H,a,t,ne,q,c),G?{modifiedReq:O,config:t,sessionState:a,cacheOptions:D}:void 0)}let U=await WRe(X);if(VRe(U)){let G=wx(U),{result:H,input:pe}=await Xq(G,a.projectPath,a.sessionID),se=IS(pe.query,pe.scope??"all",pe.id),xe=U.content.indexOf(G);a.recallStore.set(se,{toolUseId:G.id,input:pe,position:xe,result:H});let Fe=k_(U);if(HRe(U))return $.info(`recall (non-stream, mixed): stored result for session ${a.sessionID.slice(0,16)}`),NS(e,Fe,a,t,ne,q,c),OS(Fe);$.info(`recall (non-stream, only): executing follow-up for session ${a.sessionID.slice(0,16)}`);let P=Qq(O,U,H,G),bt;if({response:bt}=await Lx(P,t,void 0,D),!bt.ok){let x=await bt.text();return $.error(`recall follow-up upstream error: ${bt.status} ${x.slice(0,500)}`),NS(e,Fe,a,t,ne,q,c),OS(Fe)}let Bt=await WRe(bt);return Bt.usage.inputTokens+=U.usage.inputTokens,Bt.usage.outputTokens+=U.usage.outputTokens,U.usage.cacheReadInputTokens&&(Bt.usage.cacheReadInputTokens=(Bt.usage.cacheReadInputTokens??0)+U.usage.cacheReadInputTokens),U.usage.cacheCreationInputTokens&&(Bt.usage.cacheCreationInputTokens=(Bt.usage.cacheCreationInputTokens??0)+U.usage.cacheCreationInputTokens),NS(e,Bt,a,t,ne,q,c),OS(Bt)}return NS(e,U,a,t,ne,q,c),OS(U)}function R5e(e){let t=[],n=[];for(let o of e){let r=[];o.info.role==="user"?(r.push(...n),n=[]):n=[];for(let i of o.parts)switch(i.type){case"text":r.push({type:"text",text:i.text});break;case"reasoning":r.push({type:"thinking",thinking:i.text??"",...i.signature!=null?{signature:i.signature}:void 0});break;case"tool":{let s=i;s.tool==="result"?r.push({type:"tool_result",toolUseId:s.callID,content:s.state.output??""}):(r.push({type:"tool_use",id:s.callID,name:s.tool,input:s.state.input??{}}),s.state.status==="completed"?n.push({type:"tool_result",toolUseId:s.callID,content:s.state.output??""}):s.state.status==="error"&&n.push({type:"tool_result",toolUseId:s.callID,content:s.state.error??"[error]",isError:!0}));break}default:"text"in i&&typeof i.text=="string"&&r.push({type:"text",text:i.text});break}t.push({role:o.info.role,content:r})}return t}function b5e(e){for(let t=0;t<e.length;t++){let n=e[t];if(n.role!=="user"||!n.content.some(s=>s.type==="tool_result"))continue;let o=t>0&&e[t-1].role==="assistant"?e[t-1]:null,r=new Set((o?.content??[]).filter(s=>s.type==="tool_use").map(s=>s.id)),i=n.content.length;n.content=n.content.filter(s=>s.type!=="tool_result"||r.has(s.toolUseId)),n.content.length<i&&$.warn(`removed ${i-n.content.length} orphaned tool_result block(s) from message ${t}`),n.content.length===0&&(n.content=[{type:"text",text:"[tool results provided]"}])}}function I5e(e){for(let t=e.messages.length-1;t>=0;t--){let n=e.messages[t];if(n.role!=="user")continue;return n.content.filter(r=>r.type==="text").map(r=>r.text).join(`
1139
- `).trim()}return""}function N5e(e,t){let o=I5e(e).toLowerCase(),r=o==="/done",i=o==="/keep"||o==="/keep-warm";if(!r&&!i)return null;let s=Tx(e.rawHeaders),a;if(s){let p=`${s.headerName}:${s.sessionId}`,f=D_.get(p);f&&(a=t.get(f))}a&&(a.warmup?a.warmup.disabled=r:a.warmup={lastWarmupAt:0,warmupCount:0,warmupHits:0,disabled:r},i&&(a.warmup.forceKeepWarm=!0),$.info(`cache-warmer: ${o} received for session=${a.sessionID.slice(0,16)} \u2014 warming ${r?"disabled":"forced"}`));let c=r?"\u{1F9CA} Freezing session.":"\u{1F525} Keeping cache warm.",u=`msg_lore_${Date.now()}`;if(e.stream){let p=yq(u,e.model,c,{inputTokens:0,outputTokens:0});return new Response(p,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"}})}let d=JSON.stringify({id:u,type:"message",role:"assistant",content:[{type:"text",text:c}],model:e.model,stop_reason:"end_turn",stop_sequence:null,usage:{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0}});return new Response(d,{status:200,headers:{"content-type":"application/json"}})}function O5e(e,t){return new Response(JSON.stringify({type:"error",error:{type:"server_error",message:t}}),{status:e,headers:{"content-type":"application/json"}})}async function PS(e,t){try{let n=Cu(e.rawHeaders);n&&_q(n);let o,r=Tx(e.rawHeaders);if(r){let u=`${r.headerName}:${r.sessionId}`,d=D_.get(u);d&&(o=Zs.get(d))}let i=N5e(e,Zs);if(i)return i;let s=Sx(e.rawHeaders)!=null,a=!s&&Tq(e,o),c=a?void 0:Sq(e);if(a||c?.detected){let u=a?`structural (prior=${o?.messageCount??"?"} curr=${e.messages.length})`:c?.detected?c.reason==="system-prompt"?`pattern: system-prompt match "${c.pattern}"`:c.reason==="user-keywords"?`pattern: user-keyword match "${c.pattern}"`:`pattern: template-sections (${c.matchCount} matches)`:"unknown";return $.info(`compaction detected: ${u} messages=${e.messages.length} tools=${e.tools.length}`),await S5e(e,t)}return s&&Tq(e,o)&&$.info(`structural compaction skipped for subagent: prior=${o?.messageCount??"?"} curr=${e.messages.length} \u2014 post-compaction autocontinue, passing through to upstream`),Pye(e)?await A5e(e,t):await y5e(e,t)}catch(n){let o=n instanceof Error?n.message:"Unknown gateway error";return $.error("pipeline error:",n),O5e(502,o)}}var tY,KRe,oY,Zs,D_,vS,nY,ku,rY,CS,ZRe,YRe,eY,m5e,_5e,Dx=T(()=>{"use strict";l();wt();TS();vq();gx();gq();Eq();Rq();Bye();ARe();RRe();Gd();BRe();C_();Em();bx();vq();Fq();Kq();RS();Lu();qRe();tY=!1;oY=null,Zs=new Map,D_=new Map,vS=new Map,nY=new Map;ku=null,rY=!1,CS=null,ZRe=null,YRe={context:2e5,output:8192};eY=8192,m5e=1e3,_5e=3});var ebe=y((w2t,v5e)=>{v5e.exports={name:"@loreai/gateway",version:"0.17.0",type:"module",license:"FSL-1.1-Apache-2.0",description:"Lore as a transparent LLM proxy \u2014 context management for any AI coding client",main:"./dist/index.cjs",types:"./dist/index.d.cts",exports:{".":{bun:"./src/index.ts",types:"./dist/index.d.cts",require:"./dist/index.cjs",default:"./dist/index.cjs"}},bin:{lore:"./dist/bin.cjs","lore-gateway":"./dist/bin.cjs"},scripts:{typecheck:"tsc --noEmit",build:"bun run script/build.ts",bundle:"bun run script/bundle.ts","build:binary":"bun run script/build.ts --binary",start:"bun run src/index.ts"},dependencies:{},files:["dist/bin.cjs","dist/index.cjs","dist/index.d.cts"],engines:{node:">=22.15",bun:">=1.2.0"},repository:{type:"git",url:"git+https://github.com/BYK/loreai.git",directory:"packages/gateway"},publishConfig:{access:"public"},keywords:["lore","gateway","proxy","llm","context-management","anthropic","openai"],author:"BYK",devDependencies:{"@loreai/core":"workspace:*","@sentry/bun":"^10.52.0",binpunch:"^1.0.0"}}});var rbe={};Xe(rbe,{handleUIRequest:()=>G5e});function oe(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function xS(e){let t=Date.now()-e,n=Math.floor(t/6e4);if(n<1)return"just now";if(n<60)return`${n}m ago`;let o=Math.floor(n/60);if(o<24)return`${o}h ago`;let r=Math.floor(o/24);return r<30?`${r}d ago`:new Date(e).toISOString().slice(0,10)}function Vd(e){return new Date(e).toISOString().replace("T"," ").slice(0,19)}function C5e(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function aY(e){return`<div class="md">${Tv(e)}</div>`}function Ux(e,t){if(e.length<=t)return e;let n=e.slice(0,t),o=n.search(/[.!?]\s[^.!?]*$/);if(o>t*.5)return n.slice(0,o+1)+" ...";let r=n.lastIndexOf(" ");return r>t*.5?n.slice(0,r)+" ...":n+"..."}function je(e){return e===0?"$0.00":Math.abs(e)<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function tbe(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(1)}K`:`${(e/1e6).toFixed(2)}M`}function P5e(e){let t=x_(e);if(!t||t.conversation.turns===0)return"";let n=Mu(t),o=Za(t),r=wu(t),i=$q(t),s=t.conversation.inputTokens+t.conversation.cacheReadTokens+t.conversation.cacheWriteTokens,a=s>0?(t.conversation.cacheReadTokens/s*100).toFixed(0):"0",c=i>0?(r/i*100).toFixed(0):"0",u=`<div class="card" style="margin-bottom:1.5em">
1139
+ `).trim()}return""}function N5e(e,t){let o=I5e(e).toLowerCase(),r=o==="/done",i=o==="/keep"||o==="/keep-warm";if(!r&&!i)return null;let s=Tx(e.rawHeaders),a;if(s){let p=`${s.headerName}:${s.sessionId}`,f=D_.get(p);f&&(a=t.get(f))}a&&(a.warmup?a.warmup.disabled=r:a.warmup={lastWarmupAt:0,warmupCount:0,warmupHits:0,disabled:r},i&&(a.warmup.forceKeepWarm=!0),$.info(`cache-warmer: ${o} received for session=${a.sessionID.slice(0,16)} \u2014 warming ${r?"disabled":"forced"}`));let c=r?"\u{1F9CA} Freezing session.":"\u{1F525} Keeping cache warm.",u=`msg_lore_${Date.now()}`;if(e.stream){let p=yq(u,e.model,c,{inputTokens:0,outputTokens:0});return new Response(p,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"}})}let d=JSON.stringify({id:u,type:"message",role:"assistant",content:[{type:"text",text:c}],model:e.model,stop_reason:"end_turn",stop_sequence:null,usage:{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0}});return new Response(d,{status:200,headers:{"content-type":"application/json"}})}function O5e(e,t){return new Response(JSON.stringify({type:"error",error:{type:"server_error",message:t}}),{status:e,headers:{"content-type":"application/json"}})}async function PS(e,t){try{let n=Cu(e.rawHeaders);n&&_q(n);let o,r=Tx(e.rawHeaders);if(r){let u=`${r.headerName}:${r.sessionId}`,d=D_.get(u);d&&(o=Zs.get(d))}let i=N5e(e,Zs);if(i)return i;let s=Sx(e.rawHeaders)!=null,a=!s&&Tq(e,o),c=a?void 0:Sq(e);if(a||c?.detected){let u=a?`structural (prior=${o?.messageCount??"?"} curr=${e.messages.length})`:c?.detected?c.reason==="system-prompt"?`pattern: system-prompt match "${c.pattern}"`:c.reason==="user-keywords"?`pattern: user-keyword match "${c.pattern}"`:`pattern: template-sections (${c.matchCount} matches)`:"unknown";return $.info(`compaction detected: ${u} messages=${e.messages.length} tools=${e.tools.length}`),await S5e(e,t)}return s&&Tq(e,o)&&$.info(`structural compaction skipped for subagent: prior=${o?.messageCount??"?"} curr=${e.messages.length} \u2014 post-compaction autocontinue, passing through to upstream`),Pye(e)?await A5e(e,t):await y5e(e,t)}catch(n){let o=n instanceof Error?n.message:"Unknown gateway error";return $.error("pipeline error:",n),O5e(502,o)}}var tY,KRe,oY,Zs,D_,vS,nY,ku,rY,CS,ZRe,YRe,eY,m5e,_5e,Dx=T(()=>{"use strict";l();wt();TS();vq();gx();gq();Eq();Rq();Bye();ARe();RRe();Gd();BRe();C_();Em();bx();vq();Fq();Kq();RS();Lu();qRe();tY=!1;oY=null,Zs=new Map,D_=new Map,vS=new Map,nY=new Map;ku=null,rY=!1,CS=null,ZRe=null,YRe={context:2e5,output:8192};eY=8192,m5e=1e3,_5e=3});var ebe=y((w2t,v5e)=>{v5e.exports={name:"@loreai/gateway",version:"0.17.1",type:"module",license:"FSL-1.1-Apache-2.0",description:"Lore as a transparent LLM proxy \u2014 context management for any AI coding client",main:"./dist/index.cjs",types:"./dist/index.d.cts",exports:{".":{bun:"./src/index.ts",types:"./dist/index.d.cts",require:"./dist/index.cjs",default:"./dist/index.cjs"}},bin:{lore:"./dist/bin.cjs","lore-gateway":"./dist/bin.cjs"},scripts:{typecheck:"tsc --noEmit",build:"bun run script/build.ts",bundle:"bun run script/bundle.ts","build:binary":"bun run script/build.ts --binary",start:"bun run src/index.ts"},dependencies:{},files:["dist/bin.cjs","dist/index.cjs","dist/index.d.cts"],engines:{node:">=22.15",bun:">=1.2.0"},repository:{type:"git",url:"git+https://github.com/BYK/loreai.git",directory:"packages/gateway"},publishConfig:{access:"public"},keywords:["lore","gateway","proxy","llm","context-management","anthropic","openai"],author:"BYK",devDependencies:{"@loreai/core":"workspace:*","@sentry/bun":"^10.52.0",binpunch:"^1.0.0"}}});var rbe={};Xe(rbe,{handleUIRequest:()=>G5e});function oe(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function xS(e){let t=Date.now()-e,n=Math.floor(t/6e4);if(n<1)return"just now";if(n<60)return`${n}m ago`;let o=Math.floor(n/60);if(o<24)return`${o}h ago`;let r=Math.floor(o/24);return r<30?`${r}d ago`:new Date(e).toISOString().slice(0,10)}function Vd(e){return new Date(e).toISOString().replace("T"," ").slice(0,19)}function C5e(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function aY(e){return`<div class="md">${Tv(e)}</div>`}function Ux(e,t){if(e.length<=t)return e;let n=e.slice(0,t),o=n.search(/[.!?]\s[^.!?]*$/);if(o>t*.5)return n.slice(0,o+1)+" ...";let r=n.lastIndexOf(" ");return r>t*.5?n.slice(0,r)+" ...":n+"..."}function je(e){return e===0?"$0.00":Math.abs(e)<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function tbe(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(1)}K`:`${(e/1e6).toFixed(2)}M`}function P5e(e){let t=x_(e);if(!t||t.conversation.turns===0)return"";let n=Mu(t),o=Za(t),r=wu(t),i=$q(t),s=t.conversation.inputTokens+t.conversation.cacheReadTokens+t.conversation.cacheWriteTokens,a=s>0?(t.conversation.cacheReadTokens/s*100).toFixed(0):"0",c=i>0?(r/i*100).toFixed(0):"0",u=`<div class="card" style="margin-bottom:1.5em">
1140
1140
  <h2 style="margin-top:0">Cost Intelligence</h2>
1141
1141
  <table class="cost-table">
1142
1142
  <tr class="section-header"><td colspan="2"><strong>Your Spend</strong></td></tr>
@@ -1581,7 +1581,7 @@ Options:
1581
1581
  --scope <scope> Search scope: all (default), session, project, knowledge
1582
1582
  --session <id> Session ID (required when scope=session)
1583
1583
  --limit <n> Max results (default: 10)
1584
- --json Output raw JSON instead of formatted markdown`),process.exit(1));let{runRecall:o,config:r}=await Promise.resolve().then(()=>(wt(),qs)),i=(0,hIe.resolve)(t.project??process.cwd()),s=t.scope??"all",a=t.session,c=t.limit?Number(t.limit):10,u=!!t.json;s==="session"&&!a&&(console.error("Error: --session <id> is required when --scope session is used."),process.exit(1));let d={...r().search,recallLimit:c,queryExpansion:!1};try{let p=await o({query:n,scope:s,projectPath:i,sessionID:a,searchConfig:d});console.log(u?JSON.stringify({query:n,scope:s,projectPath:i,result:p},null,2):p)}catch(p){console.error(`Error: ${p instanceof Error?p.message:String(p)}`),process.exit(1)}}var hIe,TIe=T(()=>{"use strict";l();hIe=require("path")});var bIe={};Xe(bIe,{commandUpgrade:()=>gXe});function pXe(e){let{values:t,positionals:n}=(0,yIe.parseArgs)({args:e,options:{check:{type:"boolean",default:!1},force:{type:"boolean",default:!1},offline:{type:"boolean",default:!1},channel:{type:"string"}},allowPositionals:!0,strict:!1});return{flags:{check:!!t.check,force:!!t.force,offline:!!t.offline,channel:t.channel},versionArg:n[0]}}function fXe(e,t){let n=e?.toLowerCase();return n==="nightly"||n==="stable"?{channel:n,cleanVersionArg:void 0}:t==="nightly"||t==="stable"?{channel:t,cleanVersionArg:e}:{channel:W_(),cleanVersionArg:e}}function mXe(){try{let e=require("node:fs"),t=require("node:path"),{getConfigDir:n}=(ec(),dM(mY));return e.readFileSync(t.join(n(),"latest-version"),"utf-8").trim()||null}catch{return null}}function _Xe(e){try{let t=require("node:fs"),n=require("node:path"),{getConfigDir:o}=(ec(),dM(mY)),r=o();t.mkdirSync(r,{recursive:!0}),t.writeFileSync(n.join(r,"latest-version"),e,"utf-8")}catch{}}function AIe(e){if(e)return e.replace(Xx,"");let t=mXe();if(!t)throw new ct("network_error","No cached version available. Run `lore upgrade` with network access first, then retry with --offline.");return t}async function gXe(e){let{flags:t,versionArg:n}=pXe(e),{channel:o,cleanVersionArg:r}=fXe(n,t.channel),i=W_(),s=o!==i;console.error(`[lore] Current version: ${rt}`),console.error(`[lore] Channel: ${o}`);let a,c=!1;if(t.offline)a=AIe(r),c="explicit",console.error(`[lore] Offline mode: using cached target ${a}`);else try{let m=await Kbe(o);a=r?.replace(Xx,"")??m,_Xe(m)}catch(m){if(m instanceof ct&&m.reason==="network_error")try{a=AIe(r),c="network-fallback",console.error("[lore] Network unavailable, falling back to cached upgrade target")}catch{throw m}else throw m}if((s||SIe.has(n??""))&&Wbe(o),t.check){if(rt===a)console.error(`[lore] Already up to date (${rt})`);else{let m=F_(rt,a)?"Downgrade":"Update";console.error(`[lore] ${m} available: ${rt} -> ${a}`),console.error("[lore] Run 'lore upgrade' to update.")}c&&console.error("[lore] (resolved from cache \u2014 network unavailable)");return}if(rt===a&&!t.force&&!s){console.error(`[lore] Already up to date (${rt})`);return}if(r&&!SIe.has(r)&&!c&&!await Zbe(a,o))throw new ct("version_not_found",`Version ${a} not found`);let u=F_(rt,a);console.error(`[lore] ${u?"Downgrading":"Upgrading"} to ${a}...`);let f=await Xbe(a,o==="nightly"&&!r?qbe:void 0,c);f.patchBytes&&console.error(`[lore] Applied delta patch (${hXe(f.patchBytes)} downloaded)`);try{let m=(0,RIe.dirname)(NY().installPath),_=pY(require("node:os").homedir(),process.env),g=process.execPath.startsWith(m)?m:_,h=await fY(f.tempBinaryPath,g);console.error(`[lore] ${u?"Downgraded":"Upgraded"} successfully: ${rt} -> ${a}`),console.error(`[lore] Binary installed at: ${h}`),c&&console.error("[lore] (upgraded from cached patches)")}finally{H_(f.lockPath)}}function hXe(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}var yIe,RIe,SIe,IIe=T(()=>{"use strict";l();yIe=require("node:util"),RIe=require("node:path");$d();ec();LS();CY();SIe=new Set(["nightly","stable"])});var AXe={};Xe(AXe,{_cli:()=>OIe,handleRequest:()=>PS,loadConfig:()=>fx,resetPipelineState:()=>kx,startServer:()=>Bx});module.exports=dM(AXe);l();l();Em();wt();$d();try{let e=new Error().stack;if(e){let t=globalThis;t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="f818b781-70d2-4c8a-a9e7-60a1b07070b5"}}catch{}var fye=process.env.SENTRY_ENABLED?.trim(),mye=rt==="dev",T3e=fye==="1"?!0:fye==="0"?!1:!mye;T3e&&!In()&&(X1({dsn:"https://0282201d6a3df3bc46423e61012ae62b@o275100.ingest.us.sentry.io/4511355222622208",release:rt,environment:mye?"development":"production",sendDefaultPii:!0,tracesSampleRate:1,enableLogs:!0}),$.registerSink({info:(e,t)=>zl.info(e,t),warn:(e,t)=>zl.warn(e,t),error:(e,t)=>zl.error(e,t),captureException:e=>be(e)}));TS();cY();Dx();l();var NIe=require("node:util");l();$d();var q5e=`
1584
+ --json Output raw JSON instead of formatted markdown`),process.exit(1));let{runRecall:o,config:r}=await Promise.resolve().then(()=>(wt(),qs)),i=(0,hIe.resolve)(t.project??process.cwd()),s=t.scope??"all",a=t.session,c=t.limit?Number(t.limit):10,u=!!t.json;s==="session"&&!a&&(console.error("Error: --session <id> is required when --scope session is used."),process.exit(1));let d={...r().search,recallLimit:c,queryExpansion:!1};try{let p=await o({query:n,scope:s,projectPath:i,sessionID:a,searchConfig:d});console.log(u?JSON.stringify({query:n,scope:s,projectPath:i,result:p},null,2):p)}catch(p){console.error(`Error: ${p instanceof Error?p.message:String(p)}`),process.exit(1)}}var hIe,TIe=T(()=>{"use strict";l();hIe=require("path")});var bIe={};Xe(bIe,{commandUpgrade:()=>gXe});function pXe(e){let{values:t,positionals:n}=(0,yIe.parseArgs)({args:e,options:{check:{type:"boolean",default:!1},force:{type:"boolean",default:!1},offline:{type:"boolean",default:!1},channel:{type:"string"}},allowPositionals:!0,strict:!1});return{flags:{check:!!t.check,force:!!t.force,offline:!!t.offline,channel:t.channel},versionArg:n[0]}}function fXe(e,t){let n=e?.toLowerCase();return n==="nightly"||n==="stable"?{channel:n,cleanVersionArg:void 0}:t==="nightly"||t==="stable"?{channel:t,cleanVersionArg:e}:{channel:W_(),cleanVersionArg:e}}function mXe(){try{let e=require("node:fs"),t=require("node:path"),{getConfigDir:n}=(ec(),dM(mY));return e.readFileSync(t.join(n(),"latest-version"),"utf-8").trim()||null}catch{return null}}function _Xe(e){try{let t=require("node:fs"),n=require("node:path"),{getConfigDir:o}=(ec(),dM(mY)),r=o();t.mkdirSync(r,{recursive:!0}),t.writeFileSync(n.join(r,"latest-version"),e,"utf-8")}catch{}}function AIe(e){if(e)return e.replace(Xx,"");let t=mXe();if(!t)throw new ct("network_error","No cached version available. Run `lore upgrade` with network access first, then retry with --offline.");return t}async function gXe(e){let{flags:t,versionArg:n}=pXe(e),{channel:o,cleanVersionArg:r}=fXe(n,t.channel),i=W_(),s=o!==i;console.error(`[lore] Current version: ${rt}`),console.error(`[lore] Channel: ${o}`);let a,c=!1;if(t.offline)a=AIe(r),c="explicit",console.error(`[lore] Offline mode: using cached target ${a}`);else try{let m=await Kbe(o);a=r?.replace(Xx,"")??m,_Xe(m)}catch(m){if(m instanceof ct&&m.reason==="network_error")try{a=AIe(r),c="network-fallback",console.error("[lore] Network unavailable, falling back to cached upgrade target")}catch{throw m}else throw m}if((s||SIe.has(n??""))&&Wbe(o),t.check){if(rt===a)console.error(`[lore] Already up to date (${rt})`);else{let m=F_(rt,a)?"Downgrade":"Update";console.error(`[lore] ${m} available: ${rt} -> ${a}`),console.error("[lore] Run 'lore upgrade' to update.")}c&&console.error("[lore] (resolved from cache \u2014 network unavailable)");return}if(rt===a&&!t.force&&!s){console.error(`[lore] Already up to date (${rt})`);return}if(r&&!SIe.has(r)&&!c&&!await Zbe(a,o))throw new ct("version_not_found",`Version ${a} not found`);let u=F_(rt,a);console.error(`[lore] ${u?"Downgrading":"Upgrading"} to ${a}...`);let f=await Xbe(a,o==="nightly"&&!r?qbe:void 0,c);f.patchBytes&&console.error(`[lore] Applied delta patch (${hXe(f.patchBytes)} downloaded)`);try{let m=(0,RIe.dirname)(NY().installPath),_=pY(require("node:os").homedir(),process.env),g=process.execPath.startsWith(m)?m:_,h=await fY(f.tempBinaryPath,g);console.error(`[lore] ${u?"Downgraded":"Upgraded"} successfully: ${rt} -> ${a}`),console.error(`[lore] Binary installed at: ${h}`),c&&console.error("[lore] (upgraded from cached patches)")}finally{H_(f.lockPath)}}function hXe(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}var yIe,RIe,SIe,IIe=T(()=>{"use strict";l();yIe=require("node:util"),RIe=require("node:path");$d();ec();LS();CY();SIe=new Set(["nightly","stable"])});var AXe={};Xe(AXe,{_cli:()=>OIe,handleRequest:()=>PS,loadConfig:()=>fx,resetPipelineState:()=>kx,startServer:()=>Bx});module.exports=dM(AXe);l();l();Em();wt();$d();try{let e=new Error().stack;if(e){let t=globalThis;t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="9c2b35a8-f63d-44c1-879c-eb95febe246a"}}catch{}var fye=process.env.SENTRY_ENABLED?.trim(),mye=rt==="dev",T3e=fye==="1"?!0:fye==="0"?!1:!mye;T3e&&!In()&&(X1({dsn:"https://0282201d6a3df3bc46423e61012ae62b@o275100.ingest.us.sentry.io/4511355222622208",release:rt,environment:mye?"development":"production",sendDefaultPii:!0,tracesSampleRate:1,enableLogs:!0}),$.registerSink({info:(e,t)=>zl.info(e,t),warn:(e,t)=>zl.warn(e,t),error:(e,t)=>zl.error(e,t),captureException:e=>be(e)}));TS();cY();Dx();l();var NIe=require("node:util");l();$d();var q5e=`
1585
1585
  lore v${rt} \u2014 context management proxy for AI coding agents
1586
1586
 
1587
1587
  Usage:
@@ -1653,4 +1653,4 @@ ${VJe(o)} ${PY(rt)} -> ${PY(e)} Run ${PY('"lore upgrade"')} to update.
1653
1653
  `}catch{return null}}function oIe(e){return e.some(t=>FJe.has(t))}function iIe(){return process.env.LORE_NO_UPDATE_CHECK==="1"}function sIe(){iIe()||ZJe()}function aIe(){return iIe()?null:XJe()}function cIe(){GS?.abort(),GS=null}var EXe={port:{type:"string",short:"p"},host:{type:"string",short:"H",multiple:!0},debug:{type:"boolean",short:"d"},version:{type:"boolean",short:"v"},help:{type:"boolean",short:"h"},"print-vendor-info":{type:"boolean"},"check-embeddings":{type:"boolean"}};function TXe(e){let t=Number.parseInt(e,10);return(Number.isNaN(t)||t<0||t>65535)&&(console.error(`Error: Invalid port "${e}". Must be 0\u201365535.`),process.exit(1)),t}function SXe(e){let t=e.host?.flatMap(n=>n.split(",").map(o=>o.trim()).filter(Boolean));return{port:e.port?TXe(e.port):void 0,hosts:t?.length?t:void 0,debug:e.debug??void 0}}async function OIe(){let e,t;try{let s=(0,NIe.parseArgs)({args:process.argv.slice(2),options:EXe,allowPositionals:!0,strict:!1});e=s.values,t=s.positionals}catch(s){console.error(`Error: ${s instanceof Error?s.message:s}`),Gx(),process.exit(1)}if(e.version){cbe();return}if(e["print-vendor-info"]){let{embeddingVendor:s}=await Promise.resolve().then(()=>(wt(),qs)),a=s.vendorRegistration();console.log(a?JSON.stringify(a):"none");return}if(e["check-embeddings"]){let{embedding:s}=await Promise.resolve().then(()=>(wt(),qs));try{let[a]=await s.embed(["hello world"],"query");(!a||a.length===0)&&(console.error("\u2717 embed returned empty vector"),process.exit(1)),console.log(`ok dim=${a.length}`);try{let{dlopen:c,FFIType:u}=await import("bun:ffi"),d=process.platform==="win32"?["msvcrt.dll"]:["libSystem.B.dylib","libc.so.6"];for(let p of d)try{c(p,{_exit:{args:[u.int],returns:u.void}}).symbols._exit(0)}catch{}}catch{}process.exit(0)}catch(a){let c=a?.cause;console.error(`\u2717 embed failed: ${a instanceof Error?a.message:String(a)}`),c&&console.error(` cause: ${c instanceof Error?c.stack??c.message:String(c)}`),process.exit(1)}return}if(e.help&&t.length===0){Gx();return}let n=t[0]??"run",o=t.slice(1),r=SXe(e),i=oIe(t);i||sIe();try{switch(n){case"start":await uY(r);break;case"run":{let{commandRun:s}=await Promise.resolve().then(()=>(wY(),MY));await s(r,o);break}case"data":{let{commandData:s}=await Promise.resolve().then(()=>(gIe(),_Ie));await s(o,e);break}case"recall":{let{commandRecall:s}=await Promise.resolve().then(()=>(TIe(),EIe));await s(o,e);break}case"upgrade":{let{commandUpgrade:s}=await Promise.resolve().then(()=>(IIe(),bIe));await s(o);break}case"help":Gx();break;default:{let{commandRun:s}=await Promise.resolve().then(()=>(wY(),MY));await s(r,[n,...o])}break}}finally{cIe()}if(!i){let s=aIe();s&&process.stderr.write(s)}}var yXe={};typeof Bun<"u"&&Bun.main===yXe.path&&Promise.resolve().then(()=>(Fx(),ube)).then(({commandStart:e})=>e({quiet:!0}));0&&(module.exports={_cli,handleRequest,loadConfig,resetPipelineState,startServer});
1654
1654
  //# sourceMappingURL=index.cjs.map
1655
1655
 
1656
- //# debugId=f818b781-70d2-4c8a-a9e7-60a1b07070b5
1656
+ //# debugId=9c2b35a8-f63d-44c1-879c-eb95febe246a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loreai/gateway",
3
- "version": "0.17.0",
3
+ "version": "0.17.1",
4
4
  "type": "module",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "description": "Lore as a transparent LLM proxy — context management for any AI coding client",
@@ -54,7 +54,7 @@
54
54
  ],
55
55
  "author": "BYK",
56
56
  "devDependencies": {
57
- "@loreai/core": "0.17.0",
57
+ "@loreai/core": "0.17.1",
58
58
  "@sentry/bun": "^10.52.0",
59
59
  "binpunch": "^1.0.0"
60
60
  }