@versini/sassysaint-common 4.40.1 → 4.40.2

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/index.d.ts CHANGED
@@ -439,6 +439,21 @@ export declare const MAX_OUTPUT_TOKENS = 16384;
439
439
 
440
440
  export declare const MAX_SEARCH_QUERIES = 5;
441
441
 
442
+ /**
443
+ * Canonical long-term memory category enumeration. This is the single source
444
+ * of truth for memory categories across the whole stack: the Mongoose model
445
+ * enum, every Zod extraction/consolidation schema, and the per-category
446
+ * default-expiration (TTL) map all derive from this one array.
447
+ *
448
+ * It lives in the common layer (rather than the server's DB model) on purpose:
449
+ * the memory inference / consolidation code in `common/memory/` must reference
450
+ * the enum without importing from `services/db/models`, which would invert the
451
+ * intended dependency direction (model → common, never common → model).
452
+ */
453
+ export declare const MEMORY_CATEGORIES: readonly ["preference", "identity", "constraint", "habit", "bio", "device", "location", "finance", "professional", "interest", "style", "behavior", "other"];
454
+
455
+ export declare type MemoryCategory = (typeof MEMORY_CATEGORIES)[number];
456
+
442
457
  export declare const MODEL_AUTO_RESPONDER_ANTHROPIC = "claude-sonnet-4-6";
443
458
 
444
459
  export declare const MODEL_AUTO_RESPONDER_GOOGLE = "gemini-3-flash-preview";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var e,E=((e={})[e.NewChat=0]="NewChat",e[e.Prompts=1]="Prompts",e[e.Attachment=2]="Attachment",e[e.PrivateChat=3]="PrivateChat",e[e.Reasoning=4]="Reasoning",e[e.Send=5]="Send",e[e.Header=6]="Header",e[e.Provider=7]="Provider",e[e.Logo=8]="Logo",e[e.Placeholder=9]="Placeholder",e[e.Footer=10]="Footer",e);let O="system",t="user",n="assistant",r="OpenAI",o="Anthropic",i="Google",a="Summary",_="Memory",R="Perplexity",T="Mistral",A="Auto",s=r,L=[r,o,i],I="gpt-5.4",M="gpt-5.4-mini",S="gpt-5.4-nano",P="claude-opus-4-8",l="claude-sonnet-4-6",N="claude-haiku-4-5",g="gemini-3-flash-preview",D="gemini-3.1-pro-preview",d="sonar",u="sonar-pro",C="openai/gpt-oss-20b:free",c="mistral-large-latest",h="gpt-5.4-nano",p="gpt-5.4-nano",G="gpt-5.4-mini",U="text-embedding-3-small",m="gemini-3-pro-image",H=S,f=N,y=g,B=M,Y=l,F=g,v=5,w=3e4,V={[I]:"GPT-5.4",[M]:"GPT-5.4 Mini",[S]:"GPT-5.4 Nano",[P]:"Claude Opus 4.8",[l]:"Claude Sonnet 4.6",[N]:"Claude Haiku 4.5",[D]:"Gemini 3.1 Pro",[g]:"Gemini 3 Flash",[d]:"Sonar",[u]:"Sonar Pro",[m]:"Nano Banana 3 Pro",[c]:"Mistral Large"},b=[I,M,S,P,l,N,g,D,m],X=[I,M,S,P,l,D],k={[r]:[I,M,S],[o]:[P,N,l],[i]:[g,D],[R]:[d,u]},x={[r]:[O,t,n],[o]:[t,n],[a]:[t,n],[_]:[t,n],[i]:[t,n],[R]:[t,n],[T]:[t,n]},W={[o]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[r]:["gpt-","o3","o4"],[i]:["gemini"],[R]:["sonar"],[T]:["mistral"]},z="x-diggidy-chat-id",K="x-diggidy-chat-timestamp",Z="timestamp",j="tokenUsage",Q="Diggidy",q="sassy:basic",J="sassy:plus",$="sassy:advanced",ee={TOOL:{BARCODE:"getProductByBarcode",BUNDLESIZE:"getBundleSize",DATETIME:"getDateTime",GENERATE_IMAGE:"generateImage",IMAGES:"getImages",NUTRITION_FACTS:"getNutritionFacts",POLLUTION:"getAirPollution",WEATHER:"getWeather",URLCONTENTPARSER:"getUrlContent",MEMORIES:"getUserMemories",HUMANIZE:"humanize",WEBSEARCH:"getWebSearch",GITREPOSITORY:"getGitRepoDetails",HOTELS:"getHotelDetails",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",REASONING:"addon:reasoning",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},eE={code_interpreter:"Running code...",web_search:"Searching the web...",[ee.TOOL.WEATHER]:"Checking the weather...",[ee.TOOL.POLLUTION]:"Fetching air pollution data...",[ee.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[ee.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[ee.TOOL.WEBSEARCH]:"Searching the web...",[ee.TOOL.GITREPOSITORY]:"Looking up repository...",[ee.TOOL.HOTELS]:"Searching for hotels...",[ee.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[ee.TOOL.GENERATE_IMAGE]:"Generating image...",[ee.TOOL.BARCODE]:"Looking up product...",[ee.TOOL.PRONUNCIATION]:"Generating pronunciation...",[ee.TOOL.HUMANIZE]:"Rewriting text...",[ee.TOOL.IMAGES]:"Searching for images..."},eO="Using tools...",et=5e4,en=1e5,er=8e5;function eo(e){return e===$?er:en}let ei=16384,ea=4,e_=3,eR="context-compression-summary",eT=new Set(["OpenAI",o,"Google",T]);function eA(e){return"string"==typeof e&&eT.has(e)}let es=e=>{for(let[E,O]of Object.entries(W))if(O.some(E=>e.startsWith(E)))return E;return null},eL=e=>{if(!e||0===e.length)return[];let E=new Set;for(let O of e)for(let[e,t]of Object.entries(k))t.includes(O)&&("OpenAI"===e||e===o||"Google"===e)&&E.add(e);return L.filter(e=>E.has(e))},eI=e=>{let E=new Map;if(!e||0===e.length)return E;for(let O of e)for(let[e,t]of Object.entries(k))if(t.includes(O)){E.has(e)||E.set(e,[]),E.get(e)?.push(O);break}return E},eM=e=>{for(let E of eI(e).values())if(E.length>1)return!0;return!1},eS=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function eP(e,E,O){if(!E||Array.isArray(E)&&0===E.length)return!0;let t=e instanceof Set?e:e?new Set(e):null;return!!t&&0!==t.size&&("string"==typeof E?t.has(E):O?.any===!0?E.some(e=>t.has(e)):E.every(e=>t.has(e)))}function el(e){return X.includes(e)}export{b as ALL_MODELS,L as ALL_PROVIDERS,X as ALL_REASONING_MODELS,Q as APPLICATION_NAME,W as APPROXIMATE_MODELS_PER_PROVIDER,ee as CAPABILITIES,en as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,er as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,e_ as CONTEXT_COMPRESSION_KEEP_IMAGES,ea as CONTEXT_COMPRESSION_KEEP_RECENT,eR as CONTEXT_COMPRESSION_SUMMARY_ID,et as CONTEXT_COMPRESSION_THRESHOLD,s as DEFAULT_PROVIDER,eO as DEFAULT_TOOL_LOADING_LABEL,z as DIGGIDY_CHAT_ID_HEADER,K as DIGGIDY_CHAT_TIMESTAMP_HEADER,ei as MAX_OUTPUT_TOKENS,v as MAX_SEARCH_QUERIES,k as MODELS_PER_PROVIDER,Y as MODEL_AUTO_RESPONDER_ANTHROPIC,F as MODEL_AUTO_RESPONDER_GOOGLE,B as MODEL_AUTO_RESPONDER_OPENAI,f as MODEL_AUTO_ROUTER_ANTHROPIC,y as MODEL_AUTO_ROUTER_GOOGLE,H as MODEL_AUTO_ROUTER_OPENAI,p as MODEL_CHAT_SUMMARY,N as MODEL_CLAUDE_HAIKU,P as MODEL_CLAUDE_OPUS,l as MODEL_CLAUDE_SONNET,C as MODEL_DEV,V as MODEL_DISPLAY_NAMES,U as MODEL_EMBEDDING_TEXT,g as MODEL_GEMINI_FLASH,D as MODEL_GEMINI_PRO,m as MODEL_GENERATE_IMAGE,I as MODEL_GPT5,M as MODEL_GPT5_MINI,S as MODEL_GPT5_NANO,h as MODEL_MEMORY_INFERENCE,G as MODEL_SEARCH_DECOMPOSER,d as MODEL_SONAR,u as MODEL_SONAR_PRO,c as MODEL_TEACHER,q as PLAN_BASIC,J as PLAN_PLUS,$ as PLAN_PREMIUM,o as PROVIDER_ANTHROPIC,A as PROVIDER_AUTO,i as PROVIDER_GOOGLE,_ as PROVIDER_MEMORY,T as PROVIDER_MISTRAL,r as PROVIDER_OPENAI,R as PROVIDER_PERPLEXITY,x as PROVIDER_ROLE_MAP,a as PROVIDER_SUMMARY,n as ROLE_ASSISTANT,O as ROLE_SYSTEM,t as ROLE_USER,w as SEARCH_QUERY_TIMEOUT_MS,Z as SORT_BY_TIMESTAMP,j as SORT_BY_TOKEN_USAGE,eE as TOOL_LOADING_LABELS,es as findProvider,eo as getCompressionEmergencyThreshold,eI as getModelsGroupedByProvider,eL as getProvidersFromModels,eM as hasMultipleModelsPerProvider,eP as isEntitled,eS as isModelAllowedForPlan,eA as isRealProvider,el as isReasoningModel,E as ActionColor};
1
+ let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"];var E,t=((E={})[E.NewChat=0]="NewChat",E[E.Prompts=1]="Prompts",E[E.Attachment=2]="Attachment",E[E.PrivateChat=3]="PrivateChat",E[E.Reasoning=4]="Reasoning",E[E.Send=5]="Send",E[E.Header=6]="Header",E[E.Provider=7]="Provider",E[E.Logo=8]="Logo",E[E.Placeholder=9]="Placeholder",E[E.Footer=10]="Footer",E);let O="system",n="user",r="assistant",i="OpenAI",o="Anthropic",a="Google",_="Summary",R="Memory",T="Perplexity",A="Mistral",s="Auto",L=i,I=[i,o,a],M="gpt-5.4",S="gpt-5.4-mini",P="gpt-5.4-nano",l="claude-opus-4-8",N="claude-sonnet-4-6",g="claude-haiku-4-5",D="gemini-3-flash-preview",d="gemini-3.1-pro-preview",u="sonar",c="sonar-pro",C="openai/gpt-oss-20b:free",h="mistral-large-latest",p="gpt-5.4-nano",G="gpt-5.4-nano",U="gpt-5.4-mini",m="text-embedding-3-small",H="gemini-3-pro-image",f=P,y=g,B=D,Y=S,v=N,b=D,F=5,w=3e4,V={[M]:"GPT-5.4",[S]:"GPT-5.4 Mini",[P]:"GPT-5.4 Nano",[l]:"Claude Opus 4.8",[N]:"Claude Sonnet 4.6",[g]:"Claude Haiku 4.5",[d]:"Gemini 3.1 Pro",[D]:"Gemini 3 Flash",[u]:"Sonar",[c]:"Sonar Pro",[H]:"Nano Banana 3 Pro",[h]:"Mistral Large"},X=[M,S,P,l,N,g,D,d,H],k=[M,S,P,l,N,d],x={[i]:[M,S,P],[o]:[l,g,N],[a]:[D,d],[T]:[u,c]},W={[i]:[O,n,r],[o]:[n,r],[_]:[n,r],[R]:[n,r],[a]:[n,r],[T]:[n,r],[A]:[n,r]},z={[o]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[i]:["gpt-","o3","o4"],[a]:["gemini"],[T]:["sonar"],[A]:["mistral"]},K="x-diggidy-chat-id",Z="x-diggidy-chat-timestamp",j="timestamp",Q="tokenUsage",q="Diggidy",J="sassy:basic",$="sassy:plus",ee="sassy:advanced",eE={TOOL:{BARCODE:"getProductByBarcode",BUNDLESIZE:"getBundleSize",DATETIME:"getDateTime",GENERATE_IMAGE:"generateImage",IMAGES:"getImages",NUTRITION_FACTS:"getNutritionFacts",POLLUTION:"getAirPollution",WEATHER:"getWeather",URLCONTENTPARSER:"getUrlContent",MEMORIES:"getUserMemories",HUMANIZE:"humanize",WEBSEARCH:"getWebSearch",GITREPOSITORY:"getGitRepoDetails",HOTELS:"getHotelDetails",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",REASONING:"addon:reasoning",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},et={code_interpreter:"Running code...",web_search:"Searching the web...",[eE.TOOL.WEATHER]:"Checking the weather...",[eE.TOOL.POLLUTION]:"Fetching air pollution data...",[eE.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[eE.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[eE.TOOL.WEBSEARCH]:"Searching the web...",[eE.TOOL.GITREPOSITORY]:"Looking up repository...",[eE.TOOL.HOTELS]:"Searching for hotels...",[eE.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[eE.TOOL.GENERATE_IMAGE]:"Generating image...",[eE.TOOL.BARCODE]:"Looking up product...",[eE.TOOL.PRONUNCIATION]:"Generating pronunciation...",[eE.TOOL.HUMANIZE]:"Rewriting text...",[eE.TOOL.IMAGES]:"Searching for images..."},eO="Using tools...",en=5e4,er=1e5,ei=8e5;function eo(e){return e===ee?ei:er}let ea=16384,e_=4,eR=3,eT="context-compression-summary",eA=new Set(["OpenAI",o,"Google",A]);function es(e){return"string"==typeof e&&eA.has(e)}let eL=e=>{for(let[E,t]of Object.entries(z))if(t.some(E=>e.startsWith(E)))return E;return null},eI=e=>{if(!e||0===e.length)return[];let E=new Set;for(let t of e)for(let[e,O]of Object.entries(x))O.includes(t)&&("OpenAI"===e||e===o||"Google"===e)&&E.add(e);return I.filter(e=>E.has(e))},eM=e=>{let E=new Map;if(!e||0===e.length)return E;for(let t of e)for(let[e,O]of Object.entries(x))if(O.includes(t)){E.has(e)||E.set(e,[]),E.get(e)?.push(t);break}return E},eS=e=>{for(let E of eM(e).values())if(E.length>1)return!0;return!1},eP=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function el(e,E,t){if(!E||Array.isArray(E)&&0===E.length)return!0;let O=e instanceof Set?e:e?new Set(e):null;return!!O&&0!==O.size&&("string"==typeof E?O.has(E):t?.any===!0?E.some(e=>O.has(e)):E.every(e=>O.has(e)))}function eN(e){return k.includes(e)}export{X as ALL_MODELS,I as ALL_PROVIDERS,k as ALL_REASONING_MODELS,q as APPLICATION_NAME,z as APPROXIMATE_MODELS_PER_PROVIDER,eE as CAPABILITIES,er as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,ei as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eR as CONTEXT_COMPRESSION_KEEP_IMAGES,e_ as CONTEXT_COMPRESSION_KEEP_RECENT,eT as CONTEXT_COMPRESSION_SUMMARY_ID,en as CONTEXT_COMPRESSION_THRESHOLD,L as DEFAULT_PROVIDER,eO as DEFAULT_TOOL_LOADING_LABEL,K as DIGGIDY_CHAT_ID_HEADER,Z as DIGGIDY_CHAT_TIMESTAMP_HEADER,ea as MAX_OUTPUT_TOKENS,F as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,x as MODELS_PER_PROVIDER,v as MODEL_AUTO_RESPONDER_ANTHROPIC,b as MODEL_AUTO_RESPONDER_GOOGLE,Y as MODEL_AUTO_RESPONDER_OPENAI,y as MODEL_AUTO_ROUTER_ANTHROPIC,B as MODEL_AUTO_ROUTER_GOOGLE,f as MODEL_AUTO_ROUTER_OPENAI,G as MODEL_CHAT_SUMMARY,g as MODEL_CLAUDE_HAIKU,l as MODEL_CLAUDE_OPUS,N as MODEL_CLAUDE_SONNET,C as MODEL_DEV,V as MODEL_DISPLAY_NAMES,m as MODEL_EMBEDDING_TEXT,D as MODEL_GEMINI_FLASH,d as MODEL_GEMINI_PRO,H as MODEL_GENERATE_IMAGE,M as MODEL_GPT5,S as MODEL_GPT5_MINI,P as MODEL_GPT5_NANO,p as MODEL_MEMORY_INFERENCE,U as MODEL_SEARCH_DECOMPOSER,u as MODEL_SONAR,c as MODEL_SONAR_PRO,h as MODEL_TEACHER,J as PLAN_BASIC,$ as PLAN_PLUS,ee as PLAN_PREMIUM,o as PROVIDER_ANTHROPIC,s as PROVIDER_AUTO,a as PROVIDER_GOOGLE,R as PROVIDER_MEMORY,A as PROVIDER_MISTRAL,i as PROVIDER_OPENAI,T as PROVIDER_PERPLEXITY,W as PROVIDER_ROLE_MAP,_ as PROVIDER_SUMMARY,r as ROLE_ASSISTANT,O as ROLE_SYSTEM,n as ROLE_USER,w as SEARCH_QUERY_TIMEOUT_MS,j as SORT_BY_TIMESTAMP,Q as SORT_BY_TOKEN_USAGE,et as TOOL_LOADING_LABELS,eL as findProvider,eo as getCompressionEmergencyThreshold,eM as getModelsGroupedByProvider,eI as getProvidersFromModels,eS as hasMultipleModelsPerProvider,el as isEntitled,eP as isModelAllowedForPlan,es as isRealProvider,eN as isReasoningModel,t as ActionColor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.40.1",
3
+ "version": "4.40.2",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {
@@ -32,5 +32,5 @@
32
32
  "test:watch": "vitest",
33
33
  "watch": "npm-run-all dev"
34
34
  },
35
- "gitHead": "429e5bfbd3f00a0321d3dfd9f64e49cc845be5aa"
35
+ "gitHead": "edeea07b6a417a53951f6158d48a178ed31973b1"
36
36
  }