@versini/sassysaint-common 4.38.0 → 4.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -20,7 +20,7 @@ export declare enum ActionColor {
20
20
  * List of all models available TODAY. This is used by the client to display the
21
21
  * list of models.
22
22
  */
23
- export declare const ALL_MODELS: readonly ["gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano", "claude-opus-4-6", "claude-sonnet-4-6", "claude-haiku-4-5", "gemini-3-flash-preview", "gemini-3.1-pro-preview", "gemini-3-pro-image-preview"];
23
+ export declare const ALL_MODELS: readonly ["gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano", "claude-opus-4-8", "claude-sonnet-4-6", "claude-haiku-4-5", "gemini-3-flash-preview", "gemini-3.1-pro-preview", "gemini-3-pro-image"];
24
24
 
25
25
  export declare const ALL_PROVIDERS: readonly ["OpenAI", "Anthropic", "Google"];
26
26
 
@@ -93,6 +93,16 @@ export declare type CapabilityInput = string | readonly string[];
93
93
  */
94
94
  export declare type ColorMap = Partial<Record<ActionColor, string>>;
95
95
 
96
+ /**
97
+ * Maximum number of the most recent images carried forward when older messages
98
+ * are compressed into a text summary. Compression flattens older turns into
99
+ * image-blind text; without this the original upload and every previously
100
+ * generated image would silently vanish from what the model can see, breaking
101
+ * iterative image editing and vision follow-ups. Bounded so a few images don't
102
+ * defeat the token savings compression exists to provide.
103
+ */
104
+ export declare const CONTEXT_COMPRESSION_KEEP_IMAGES = 3;
105
+
96
106
  /**
97
107
  * Number of recent messages to keep intact during compression (two
98
108
  * user-assistant exchanges). Ensures the model has enough immediate
@@ -217,11 +227,11 @@ export declare const getModelsGroupedByProvider: (models: string[]) => Map<strin
217
227
  * @example
218
228
  * ```ts
219
229
  * // User's plan includes GPT and Claude models:
220
- * getProvidersFromModels([MODEL_GPT4_NANO, MODEL_CLAUDE_HAIKU]);
230
+ * getProvidersFromModels([MODEL_GPT5_NANO, MODEL_CLAUDE_HAIKU]);
221
231
  * // Returns: [PROVIDER_OPENAI, PROVIDER_ANTHROPIC]
222
232
  *
223
233
  * // Gemini models removed from plan:
224
- * getProvidersFromModels([MODEL_GPT4_NANO, MODEL_CLAUDE_HAIKU]);
234
+ * getProvidersFromModels([MODEL_GPT5_NANO, MODEL_CLAUDE_HAIKU]);
225
235
  * // Returns: [PROVIDER_OPENAI, PROVIDER_ANTHROPIC]
226
236
  * // (PROVIDER_GOOGLE is excluded)
227
237
  *
@@ -423,7 +433,7 @@ export declare const MODEL_CHAT_SUMMARY = "gpt-5.4-nano";
423
433
 
424
434
  export declare const MODEL_CLAUDE_HAIKU = "claude-haiku-4-5";
425
435
 
426
- export declare const MODEL_CLAUDE_OPUS = "claude-opus-4-6";
436
+ export declare const MODEL_CLAUDE_OPUS = "claude-opus-4-8";
427
437
 
428
438
  export declare const MODEL_CLAUDE_SONNET = "claude-sonnet-4-6";
429
439
 
@@ -441,9 +451,7 @@ export declare const MODEL_GEMINI_FLASH = "gemini-3-flash-preview";
441
451
 
442
452
  export declare const MODEL_GEMINI_PRO = "gemini-3.1-pro-preview";
443
453
 
444
- export declare const MODEL_GENERATE_IMAGE = "gemini-3-pro-image-preview";
445
-
446
- export declare const MODEL_GPT4_NANO = "gpt-4.1-nano";
454
+ export declare const MODEL_GENERATE_IMAGE = "gemini-3-pro-image";
447
455
 
448
456
  /**
449
457
  * List of available models TODAY.
@@ -468,8 +476,8 @@ export declare const MODEL_TEACHER = "mistral-large-latest";
468
476
  * List of models available according to the providers.
469
477
  */
470
478
  export declare const MODELS_PER_PROVIDER: {
471
- readonly OpenAI: readonly ["gpt-4.1-nano", "gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano"];
472
- readonly Anthropic: readonly ["claude-opus-4-6", "claude-haiku-4-5", "claude-sonnet-4-6"];
479
+ readonly OpenAI: readonly ["gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano"];
480
+ readonly Anthropic: readonly ["claude-opus-4-8", "claude-haiku-4-5", "claude-sonnet-4-6"];
473
481
  readonly Google: readonly ["gemini-3-flash-preview", "gemini-3.1-pro-preview"];
474
482
  readonly Perplexity: readonly ["sonar", "sonar-pro"];
475
483
  };
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="user",t="assistant",r="OpenAI",n="Anthropic",a="Google",_="Summary",o="Perplexity",i="Mistral",R=[r,n,a],s="gpt-5.4",T="gpt-5.4-mini",A="gpt-5.4-nano",I="gpt-4.1-nano",L="claude-opus-4-6",S="claude-sonnet-4-6",M="claude-haiku-4-5",P="gemini-3-flash-preview",l="gemini-3.1-pro-preview",N="sonar",g="sonar-pro",D="openai/gpt-oss-20b:free",c="mistral-large-latest",d="gpt-5.4-nano",u="gpt-5.4-nano",C="gpt-5.4-mini",h="text-embedding-3-small",p="gemini-3-pro-image-preview",U=A,G=M,m=P,H={[s]:"GPT-5.4",[T]:"GPT-5.4 Mini",[A]:"GPT-5.4 Nano",[I]:"GPT-4.1 Nano",[L]:"Claude Opus 4.6",[S]:"Claude Sonnet 4.6",[M]:"Claude Haiku 4.5",[l]:"Gemini 3.1 Pro",[P]:"Gemini 3 Flash",[N]:"Sonar",[g]:"Sonar Pro",[p]:"Nano Banana 3 Pro",[c]:"Mistral Large"},f=[s,T,A,L,S,M,P,l,p],y=[s,T,A,L,S,l],V={[r]:[I,s,T,A],[n]:[L,M,S],[a]:[P,l],[o]:[N,g]},B={[r]:["system",O,t],[n]:[O,t],[_]:[O,t],Memory:[O,t],[a]:[O,t],[o]:[O,t],[i]:[O,t]},Y={[n]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[r]:["gpt-","o3","o4"],[a]:["gemini"],[o]:["sonar"],[i]:["mistral"]},v="x-diggidy-chat-id",F="x-diggidy-chat-timestamp",w="timestamp",b="tokenUsage",X="Diggidy",k="sassy:basic",x="sassy:plus",W="sassy:advanced",K={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"}},z={code_interpreter:"Running code...",web_search:"Searching the web...",[K.TOOL.WEATHER]:"Checking the weather...",[K.TOOL.POLLUTION]:"Fetching air pollution data...",[K.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[K.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[K.TOOL.WEBSEARCH]:"Searching the web...",[K.TOOL.GITREPOSITORY]:"Looking up repository...",[K.TOOL.HOTELS]:"Searching for hotels...",[K.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[K.TOOL.GENERATE_IMAGE]:"Generating image...",[K.TOOL.BARCODE]:"Looking up product...",[K.TOOL.PRONUNCIATION]:"Generating pronunciation...",[K.TOOL.HUMANIZE]:"Rewriting text...",[K.TOOL.IMAGES]:"Searching for images..."},Q="Using tools...",Z="context-compression-summary",j=new Set(["OpenAI",n,"Google",i]);function q(e){return"string"==typeof e&&j.has(e)}let J=e=>{for(let[E,O]of Object.entries(Y))if(O.some(E=>e.startsWith(E)))return E;return null},$=e=>{if(!e||0===e.length)return[];let E=new Set;for(let O of e)for(let[e,t]of Object.entries(V))t.includes(O)&&("OpenAI"===e||e===n||"Google"===e)&&E.add(e);return R.filter(e=>E.has(e))},ee=e=>{let E=new Map;if(!e||0===e.length)return E;for(let O of e)for(let[e,t]of Object.entries(V))if(t.includes(O)){E.has(e)||E.set(e,[]),E.get(e)?.push(O);break}return E},eE=e=>{for(let E of ee(e).values())if(E.length>1)return!0;return!1},eO=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function et(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 er(e){return y.includes(e)}var en=4,ea=5e4,e_="OpenAI",eo=16384,ei=5,eR="sonar",es="Auto",eT="Google",eA="Memory",eI="OpenAI",eL="system",eS="user",eM=1e4;export{f as ALL_MODELS,R as ALL_PROVIDERS,y as ALL_REASONING_MODELS,X as APPLICATION_NAME,Y as APPROXIMATE_MODELS_PER_PROVIDER,K as CAPABILITIES,Z as CONTEXT_COMPRESSION_SUMMARY_ID,Q as DEFAULT_TOOL_LOADING_LABEL,v as DIGGIDY_CHAT_ID_HEADER,F as DIGGIDY_CHAT_TIMESTAMP_HEADER,V as MODELS_PER_PROVIDER,G as MODEL_AUTO_ROUTER_ANTHROPIC,m as MODEL_AUTO_ROUTER_GOOGLE,U as MODEL_AUTO_ROUTER_OPENAI,u as MODEL_CHAT_SUMMARY,M as MODEL_CLAUDE_HAIKU,L as MODEL_CLAUDE_OPUS,S as MODEL_CLAUDE_SONNET,D as MODEL_DEV,H as MODEL_DISPLAY_NAMES,h as MODEL_EMBEDDING_TEXT,P as MODEL_GEMINI_FLASH,l as MODEL_GEMINI_PRO,p as MODEL_GENERATE_IMAGE,I as MODEL_GPT4_NANO,s as MODEL_GPT5,T as MODEL_GPT5_MINI,A as MODEL_GPT5_NANO,d as MODEL_MEMORY_INFERENCE,C as MODEL_SEARCH_DECOMPOSER,g as MODEL_SONAR_PRO,c as MODEL_TEACHER,k as PLAN_BASIC,x as PLAN_PLUS,W as PLAN_PREMIUM,n as PROVIDER_ANTHROPIC,i as PROVIDER_MISTRAL,o as PROVIDER_PERPLEXITY,B as PROVIDER_ROLE_MAP,_ as PROVIDER_SUMMARY,t as ROLE_ASSISTANT,w as SORT_BY_TIMESTAMP,b as SORT_BY_TOKEN_USAGE,z as TOOL_LOADING_LABELS,J as findProvider,ee as getModelsGroupedByProvider,$ as getProvidersFromModels,eE as hasMultipleModelsPerProvider,et as isEntitled,eO as isModelAllowedForPlan,q as isRealProvider,er as isReasoningModel,en as CONTEXT_COMPRESSION_KEEP_RECENT,ea as CONTEXT_COMPRESSION_THRESHOLD,e_ as DEFAULT_PROVIDER,eo as MAX_OUTPUT_TOKENS,ei as MAX_SEARCH_QUERIES,eR as MODEL_SONAR,es as PROVIDER_AUTO,eT as PROVIDER_GOOGLE,eA as PROVIDER_MEMORY,eI as PROVIDER_OPENAI,eL as ROLE_SYSTEM,eS as ROLE_USER,eM as SEARCH_QUERY_TIMEOUT_MS,E as ActionColor};
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="user",t="assistant",r="OpenAI",n="Anthropic",_="Google",a="Summary",o="Perplexity",R="Mistral",i=[r,n,_],s="gpt-5.4",T="gpt-5.4-mini",A="gpt-5.4-nano",I="claude-opus-4-8",S="claude-sonnet-4-6",M="claude-haiku-4-5",L="gemini-3-flash-preview",P="gemini-3.1-pro-preview",l="sonar",N="sonar-pro",g="openai/gpt-oss-20b:free",D="mistral-large-latest",c="gpt-5.4-nano",d="gpt-5.4-nano",u="gpt-5.4-mini",C="text-embedding-3-small",h="gemini-3-pro-image",U=A,p=M,G=L,m={[s]:"GPT-5.4",[T]:"GPT-5.4 Mini",[A]:"GPT-5.4 Nano",[I]:"Claude Opus 4.8",[S]:"Claude Sonnet 4.6",[M]:"Claude Haiku 4.5",[P]:"Gemini 3.1 Pro",[L]:"Gemini 3 Flash",[l]:"Sonar",[N]:"Sonar Pro",[h]:"Nano Banana 3 Pro",[D]:"Mistral Large"},H=[s,T,A,I,S,M,L,P,h],f=[s,T,A,I,S,P],y={[r]:[s,T,A],[n]:[I,M,S],[_]:[L,P],[o]:[l,N]},V={[r]:["system",O,t],[n]:[O,t],[a]:[O,t],Memory:[O,t],[_]:[O,t],[o]:[O,t],[R]:[O,t]},B={[n]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[r]:["gpt-","o3","o4"],[_]:["gemini"],[o]:["sonar"],[R]:["mistral"]},Y="x-diggidy-chat-id",F="x-diggidy-chat-timestamp",v="timestamp",w="tokenUsage",X="Diggidy",b="sassy:basic",k="sassy:plus",K="sassy:advanced",x={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"}},W={code_interpreter:"Running code...",web_search:"Searching the web...",[x.TOOL.WEATHER]:"Checking the weather...",[x.TOOL.POLLUTION]:"Fetching air pollution data...",[x.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[x.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[x.TOOL.WEBSEARCH]:"Searching the web...",[x.TOOL.GITREPOSITORY]:"Looking up repository...",[x.TOOL.HOTELS]:"Searching for hotels...",[x.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[x.TOOL.GENERATE_IMAGE]:"Generating image...",[x.TOOL.BARCODE]:"Looking up product...",[x.TOOL.PRONUNCIATION]:"Generating pronunciation...",[x.TOOL.HUMANIZE]:"Rewriting text...",[x.TOOL.IMAGES]:"Searching for images..."},z="Using tools...",Q="context-compression-summary",Z=new Set(["OpenAI",n,"Google",R]);function j(e){return"string"==typeof e&&Z.has(e)}let q=e=>{for(let[E,O]of Object.entries(B))if(O.some(E=>e.startsWith(E)))return E;return null},J=e=>{if(!e||0===e.length)return[];let E=new Set;for(let O of e)for(let[e,t]of Object.entries(y))t.includes(O)&&("OpenAI"===e||e===n||"Google"===e)&&E.add(e);return i.filter(e=>E.has(e))},$=e=>{let E=new Map;if(!e||0===e.length)return E;for(let O of e)for(let[e,t]of Object.entries(y))if(t.includes(O)){E.has(e)||E.set(e,[]),E.get(e)?.push(O);break}return E},ee=e=>{for(let E of $(e).values())if(E.length>1)return!0;return!1},eE=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function eO(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 et(e){return f.includes(e)}var er=3,en=4,e_=5e4,ea="OpenAI",eo=16384,eR=5,ei="sonar",es="Auto",eT="Google",eA="Memory",eI="OpenAI",eS="system",eM="user",eL=1e4;export{H as ALL_MODELS,i as ALL_PROVIDERS,f as ALL_REASONING_MODELS,X as APPLICATION_NAME,B as APPROXIMATE_MODELS_PER_PROVIDER,x as CAPABILITIES,Q as CONTEXT_COMPRESSION_SUMMARY_ID,z as DEFAULT_TOOL_LOADING_LABEL,Y as DIGGIDY_CHAT_ID_HEADER,F as DIGGIDY_CHAT_TIMESTAMP_HEADER,y as MODELS_PER_PROVIDER,p as MODEL_AUTO_ROUTER_ANTHROPIC,G as MODEL_AUTO_ROUTER_GOOGLE,U as MODEL_AUTO_ROUTER_OPENAI,d as MODEL_CHAT_SUMMARY,M as MODEL_CLAUDE_HAIKU,I as MODEL_CLAUDE_OPUS,S as MODEL_CLAUDE_SONNET,g as MODEL_DEV,m as MODEL_DISPLAY_NAMES,C as MODEL_EMBEDDING_TEXT,L as MODEL_GEMINI_FLASH,P as MODEL_GEMINI_PRO,h as MODEL_GENERATE_IMAGE,s as MODEL_GPT5,T as MODEL_GPT5_MINI,A as MODEL_GPT5_NANO,c as MODEL_MEMORY_INFERENCE,u as MODEL_SEARCH_DECOMPOSER,N as MODEL_SONAR_PRO,D as MODEL_TEACHER,b as PLAN_BASIC,k as PLAN_PLUS,K as PLAN_PREMIUM,n as PROVIDER_ANTHROPIC,R as PROVIDER_MISTRAL,o as PROVIDER_PERPLEXITY,V as PROVIDER_ROLE_MAP,a as PROVIDER_SUMMARY,t as ROLE_ASSISTANT,v as SORT_BY_TIMESTAMP,w as SORT_BY_TOKEN_USAGE,W as TOOL_LOADING_LABELS,q as findProvider,$ as getModelsGroupedByProvider,J as getProvidersFromModels,ee as hasMultipleModelsPerProvider,eO as isEntitled,eE as isModelAllowedForPlan,j as isRealProvider,et as isReasoningModel,er as CONTEXT_COMPRESSION_KEEP_IMAGES,en as CONTEXT_COMPRESSION_KEEP_RECENT,e_ as CONTEXT_COMPRESSION_THRESHOLD,ea as DEFAULT_PROVIDER,eo as MAX_OUTPUT_TOKENS,eR as MAX_SEARCH_QUERIES,ei as MODEL_SONAR,es as PROVIDER_AUTO,eT as PROVIDER_GOOGLE,eA as PROVIDER_MEMORY,eI as PROVIDER_OPENAI,eS as ROLE_SYSTEM,eM as ROLE_USER,eL as SEARCH_QUERY_TIMEOUT_MS,E as ActionColor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.38.0",
3
+ "version": "4.39.0",
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": "16ea50569b2ac682d9341af446f5029dd3cdeb3b"
35
+ "gitHead": "a925e2b6b683a7d4c6958902e9a3f4bf1c39f765"
36
36
  }