@versini/sassysaint-common 4.68.0 → 4.70.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.
@@ -1 +1 @@
1
- export*from"./memory.js";export*from"./theme-types.js";let E="system",e="user",O="assistant",_="OpenAI",T="Anthropic",R="Google",S="Summary",t="Memory",a="Perplexity",A=_,I=[_,T,R],L="gpt-6.1-sol",i="gpt-6-luna",s="claude-opus-5-5",n="claude-sonnet-5-5",P="claude-haiku-5-5",N="gemini-3.8-flash",o="gemini-3.5-flash-lite",M="sonar",r="sonar-pro",D="perplexity-search",g="openai/gpt-oss-20b:free",C="claude-haiku-5-5",u="gpt-6-luna",l="gemini-3.5-flash-lite",c="gemini-3.8-flash",h="gpt-6.1-sol",U="gpt-6-luna",d="gpt-5.6-luna",m="gemini-3.6-flash",p="text-embedding-3-small",G="gpt-image-2.5-sunburst",H=5,y=1e4,B=3e3,Y={[L]:"GPT-6.1 Sol",[i]:"GPT-6 Luna",[s]:"Claude Opus 5.5",[n]:"Claude Sonnet 5.5",[P]:"Claude Haiku 5.5",[N]:"Gemini 3.8 Flash",[o]:"Gemini 3.5 Flash-Lite",[M]:"Sonar",[r]:"Sonar Pro",[D]:"Perplexity Search",[G]:"GPT Image 2.5 Sunburst"},F=[L,i,s,n,P,o,N,G],f=[L,i,s,n,P,N,o],V="fast",b="balanced",W="thorough",X=[V,b,W],k={[V]:"low",[b]:"medium",[W]:"high"},w={[_]:V,[T]:b,[R]:V},x="none",K=["settings","shortcuts","memories","history","usage","about"],Z={[_]:[L,i],[T]:[s,P,n],[R]:[o,N],[a]:[M,r,D]},v={[_]:[E,e,O],[T]:[e,O],[S]:[e,O],[t]:[e,O],[R]:[e,O],[a]:[e,O]},z={[T]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-5","claude-haiku-4","claude-3"],[_]:["gpt-","o3","o4"],[R]:["gemini"],[a]:["sonar"]},Q="x-diggidy-chat-id",j="x-diggidy-chat-timestamp",q="complete",J="timestamp",$="tokenUsage",EE="Diggidy",Ee="sassy:basic",EO="sassy:plus",E_="sassy:advanced",ET={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",LOCAL_BUSINESSES:"getLocalBusinesses",NEWS_BRIEF:"getNewsBrief",PRODUCTS:"getProducts",REVIEW_TRUST:"getReviewTrust",STREAMING_PICKS:"getStreamingPicks",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings",PAST_CHATS:"searchPastChats"},ADDON:{ATTACHMENTS:"addon:attachments",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},ER={code_interpreter:"Running code...",web_search:"Searching the web...",[ET.TOOL.WEATHER]:"Checking the weather...",[ET.TOOL.POLLUTION]:"Fetching air pollution data...",[ET.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[ET.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[ET.TOOL.WEBSEARCH]:"Searching the web...",[ET.TOOL.GITREPOSITORY]:"Looking up repository...",[ET.TOOL.HOTELS]:"Searching for hotels...",[ET.TOOL.LOCAL_BUSINESSES]:"Searching for local businesses...",[ET.TOOL.NEWS_BRIEF]:"Reading today's news...",[ET.TOOL.PRODUCTS]:"Searching for products...",[ET.TOOL.REVIEW_TRUST]:"Checking reviews...",[ET.TOOL.STREAMING_PICKS]:"Finding movies to stream...",[ET.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[ET.TOOL.GENERATE_IMAGE]:"Generating image...",[ET.TOOL.BARCODE]:"Looking up product...",[ET.TOOL.PRONUNCIATION]:"Generating pronunciation...",[ET.TOOL.HUMANIZE]:"Rewriting text...",[ET.TOOL.IMAGES]:"Searching for images...",[ET.TOOL.PAST_CHATS]:"Searching your past chats..."},ES="Using tools...",Et=1e5,Ea=8e5;function EA(E){return E===E_?Ea:Et}let EI=16384,EL=4,Ei=3,Es=8388608,En="context-compression-summary",EP="data-urlRead",EN="[Note from the system: you read";export{F as ALL_MODELS,I as ALL_PROVIDERS,f as ALL_REASONING_MODELS,EE as APPLICATION_NAME,z as APPROXIMATE_MODELS_PER_PROVIDER,ET as CAPABILITIES,q as CHAT_COMPLETION_MARKER_KEY,Et as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,Ea as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,Ei as CONTEXT_COMPRESSION_KEEP_IMAGES,EL as CONTEXT_COMPRESSION_KEEP_RECENT,Es as CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES,En as CONTEXT_COMPRESSION_SUMMARY_ID,A as DEFAULT_PROVIDER,w as DEFAULT_RESPONSE_SPEED,ES as DEFAULT_TOOL_LOADING_LABEL,Q as DIGGIDY_CHAT_ID_HEADER,j as DIGGIDY_CHAT_TIMESTAMP_HEADER,EI as MAX_OUTPUT_TOKENS,H as MAX_SEARCH_QUERIES,Z as MODELS_PER_PROVIDER,P as MODEL_ANTHROPIC_LOW,n as MODEL_ANTHROPIC_MEDIUM,s as MODEL_ANTHROPIC_TOP,u as MODEL_CHAT_SUMMARY,g as MODEL_DEV,Y as MODEL_DISPLAY_NAMES,p as MODEL_EMBEDDING_TEXT,G as MODEL_GENERATE_IMAGE,o as MODEL_GOOGLE_MEDIUM,N as MODEL_GOOGLE_TOP,h as MODEL_HUMANIZE_AUDIT,c as MODEL_HUMANIZE_REWRITE,C as MODEL_MEMORY_INFERENCE,U as MODEL_NUTRITION_SEARCH,i as MODEL_OPENAI_MEDIUM,L as MODEL_OPENAI_TOP,D as MODEL_PERPLEXITY_SEARCH,d as MODEL_REVIEW_TRUST_PANEL,m as MODEL_REVIEW_TRUST_PANEL_GOOGLE,l as MODEL_SEARCH_DECOMPOSER,M as MODEL_SONAR,r as MODEL_SONAR_PRO,Ee as PLAN_BASIC,EO as PLAN_PLUS,E_ as PLAN_PREMIUM,T as PROVIDER_ANTHROPIC,R as PROVIDER_GOOGLE,t as PROVIDER_MEMORY,_ as PROVIDER_OPENAI,a as PROVIDER_PERPLEXITY,v as PROVIDER_ROLE_MAP,S as PROVIDER_SUMMARY,x as QUICK_ACCESS_NONE,K as QUICK_ACCESS_PANELS,X as RESPONSE_SPEEDS,b as RESPONSE_SPEED_BALANCED,V as RESPONSE_SPEED_FAST,W as RESPONSE_SPEED_THOROUGH,k as RESPONSE_SPEED_TO_EFFORT,O as ROLE_ASSISTANT,E as ROLE_SYSTEM,e as ROLE_USER,B as SEARCH_DECOMPOSE_TIMEOUT_MS,y as SEARCH_QUERY_TIMEOUT_MS,J as SORT_BY_TIMESTAMP,$ as SORT_BY_TOKEN_USAGE,ER as TOOL_LOADING_LABELS,EN as URL_READ_NOTE_PREFIX,EP as URL_READ_PART_TYPE,EA as getCompressionEmergencyThreshold};
1
+ export*from"./memory.js";export*from"./theme-types.js";let E="system",e="user",O="assistant",_="OpenAI",T="Anthropic",R="Google",S="Summary",t="Memory",a="Perplexity",A=_,I=[_,T,R],L="gpt-6.1-sol",i="gpt-6-luna",s="claude-opus-5-5",n="claude-sonnet-5-5",P="claude-haiku-5-5",N="gemini-3.8-flash",o="gemini-3.5-flash-lite",M="sonar",r="sonar-pro",D="perplexity-search",g="openai/gpt-oss-20b:free",C="claude-haiku-5-5",u="gpt-6-luna",l="gemini-3.5-flash-lite",c="gemini-3.8-flash",h="gpt-6.1-sol",U="gpt-6-luna",d="gpt-5.6-luna",m="gemini-3.6-flash",p="text-embedding-3-small",G="gpt-image-2.5-sunburst",H=5,y=1e4,B=3e3,Y={[L]:"GPT-6.1 Sol",[i]:"GPT-6 Luna",[s]:"Claude Opus 5.5",[n]:"Claude Sonnet 5.5",[P]:"Claude Haiku 5.5",[N]:"Gemini 3.8 Flash",[o]:"Gemini 3.5 Flash-Lite",[M]:"Sonar",[r]:"Sonar Pro",[D]:"Perplexity Search",[G]:"GPT Image 2.5 Sunburst"},F=[L,i,s,n,P,o,N,G],f=[L,i,s,n,P,N,o],V="fast",W="balanced",b="thorough",X=[V,W,b],k={[V]:"low",[W]:"medium",[b]:"high"},w={[_]:V,[T]:W,[R]:V},x="none",K=["settings","shortcuts","memories","history","usage","about"],Z={[_]:[L,i],[T]:[s,P,n],[R]:[o,N],[a]:[M,r,D]},v={[_]:[E,e,O],[T]:[e,O],[S]:[e,O],[t]:[e,O],[R]:[e,O],[a]:[e,O]},z={[T]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-5","claude-haiku-4","claude-3"],[_]:["gpt-","o3","o4"],[R]:["gemini"],[a]:["sonar"]},Q="x-diggidy-chat-id",j="x-diggidy-chat-timestamp",q="complete",J="timestamp",$="tokenUsage",EE="Diggidy",Ee="sassy:basic",EO="sassy:plus",E_="sassy:advanced",ET={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",LOCAL_BUSINESSES:"getLocalBusinesses",NEWS_BRIEF:"getNewsBrief",PRODUCTS:"getProducts",REVIEW_TRUST:"getReviewTrust",STREAMING_PICKS:"getStreamingPicks",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings",PAST_CHATS:"searchPastChats"},ADDON:{ATTACHMENTS:"addon:attachments",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},ER={code_interpreter:"Running code...",web_search:"Searching the web...",[ET.TOOL.WEATHER]:"Checking the weather...",[ET.TOOL.POLLUTION]:"Fetching air pollution data...",[ET.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[ET.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[ET.TOOL.WEBSEARCH]:"Searching the web...",[ET.TOOL.GITREPOSITORY]:"Looking up repository...",[ET.TOOL.HOTELS]:"Searching for hotels...",[ET.TOOL.LOCAL_BUSINESSES]:"Searching for local businesses...",[ET.TOOL.NEWS_BRIEF]:"Reading today's news...",[ET.TOOL.PRODUCTS]:"Searching for products...",[ET.TOOL.REVIEW_TRUST]:"Checking reviews...",[ET.TOOL.STREAMING_PICKS]:"Finding movies to stream...",[ET.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[ET.TOOL.GENERATE_IMAGE]:"Generating image...",[ET.TOOL.BARCODE]:"Looking up product...",[ET.TOOL.PRONUNCIATION]:"Generating pronunciation...",[ET.TOOL.HUMANIZE]:"Rewriting text...",[ET.TOOL.IMAGES]:"Searching for images...",[ET.TOOL.PAST_CHATS]:"Searching your past chats..."},ES="Using tools...",Et=1e5,Ea=8e5;function EA(E){return E===E_?Ea:Et}let EI=16384,EL=4,Ei=3,Es=8388608,En="context-compression-summary",EP="data-urlRead",EN="[Note from the system: you read",Eo="data-newsLinks";export{F as ALL_MODELS,I as ALL_PROVIDERS,f as ALL_REASONING_MODELS,EE as APPLICATION_NAME,z as APPROXIMATE_MODELS_PER_PROVIDER,ET as CAPABILITIES,q as CHAT_COMPLETION_MARKER_KEY,Et as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,Ea as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,Ei as CONTEXT_COMPRESSION_KEEP_IMAGES,EL as CONTEXT_COMPRESSION_KEEP_RECENT,Es as CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES,En as CONTEXT_COMPRESSION_SUMMARY_ID,A as DEFAULT_PROVIDER,w as DEFAULT_RESPONSE_SPEED,ES as DEFAULT_TOOL_LOADING_LABEL,Q as DIGGIDY_CHAT_ID_HEADER,j as DIGGIDY_CHAT_TIMESTAMP_HEADER,EI as MAX_OUTPUT_TOKENS,H as MAX_SEARCH_QUERIES,Z as MODELS_PER_PROVIDER,P as MODEL_ANTHROPIC_LOW,n as MODEL_ANTHROPIC_MEDIUM,s as MODEL_ANTHROPIC_TOP,u as MODEL_CHAT_SUMMARY,g as MODEL_DEV,Y as MODEL_DISPLAY_NAMES,p as MODEL_EMBEDDING_TEXT,G as MODEL_GENERATE_IMAGE,o as MODEL_GOOGLE_MEDIUM,N as MODEL_GOOGLE_TOP,h as MODEL_HUMANIZE_AUDIT,c as MODEL_HUMANIZE_REWRITE,C as MODEL_MEMORY_INFERENCE,U as MODEL_NUTRITION_SEARCH,i as MODEL_OPENAI_MEDIUM,L as MODEL_OPENAI_TOP,D as MODEL_PERPLEXITY_SEARCH,d as MODEL_REVIEW_TRUST_PANEL,m as MODEL_REVIEW_TRUST_PANEL_GOOGLE,l as MODEL_SEARCH_DECOMPOSER,M as MODEL_SONAR,r as MODEL_SONAR_PRO,Eo as NEWS_LINKS_PART_TYPE,Ee as PLAN_BASIC,EO as PLAN_PLUS,E_ as PLAN_PREMIUM,T as PROVIDER_ANTHROPIC,R as PROVIDER_GOOGLE,t as PROVIDER_MEMORY,_ as PROVIDER_OPENAI,a as PROVIDER_PERPLEXITY,v as PROVIDER_ROLE_MAP,S as PROVIDER_SUMMARY,x as QUICK_ACCESS_NONE,K as QUICK_ACCESS_PANELS,X as RESPONSE_SPEEDS,W as RESPONSE_SPEED_BALANCED,V as RESPONSE_SPEED_FAST,b as RESPONSE_SPEED_THOROUGH,k as RESPONSE_SPEED_TO_EFFORT,O as ROLE_ASSISTANT,E as ROLE_SYSTEM,e as ROLE_USER,B as SEARCH_DECOMPOSE_TIMEOUT_MS,y as SEARCH_QUERY_TIMEOUT_MS,J as SORT_BY_TIMESTAMP,$ as SORT_BY_TOKEN_USAGE,ER as TOOL_LOADING_LABELS,EN as URL_READ_NOTE_PREFIX,EP as URL_READ_PART_TYPE,EA as getCompressionEmergencyThreshold};
package/dist/index.d.ts CHANGED
@@ -839,6 +839,15 @@ export declare const MODELS_PER_PROVIDER: {
839
839
  readonly Perplexity: readonly ["sonar", "sonar-pro", "perplexity-search"];
840
840
  };
841
841
 
842
+ /**
843
+ * UI message part that keeps a news brief's article links readable after a
844
+ * reload. getUrlContent may open a brief's links only while the getNewsBrief
845
+ * result is in the chat, and a saved chat does not keep tool results. The
846
+ * server persists the links the card showed as a message's `newsLinks`, and the
847
+ * client rebuilds this part from them when a chat is restored.
848
+ */
849
+ export declare const NEWS_LINKS_PART_TYPE = "data-newsLinks";
850
+
842
851
  export declare interface NewsBrief {
843
852
  asOf: string;
844
853
  note?: string;
@@ -848,8 +857,6 @@ export declare interface NewsBrief {
848
857
  time: string;
849
858
  };
850
859
  items: NewsBriefItem[];
851
- otherCommentary?: NewsCommentary[];
852
- onThisDay?: NewsOnThisDay;
853
860
  }
854
861
 
855
862
  export declare interface NewsBriefItem {
@@ -859,15 +866,6 @@ export declare interface NewsBriefItem {
859
866
  local: boolean;
860
867
  image?: string;
861
868
  evidence: NewsEvidence[];
862
- commentary?: NewsCommentary[];
863
- }
864
-
865
- export declare interface NewsCommentary {
866
- author: string;
867
- newsletter: string;
868
- title: string;
869
- url: string;
870
- summary: string;
871
869
  }
872
870
 
873
871
  export declare interface NewsEvidence {
@@ -876,11 +874,17 @@ export declare interface NewsEvidence {
876
874
  url: string;
877
875
  }
878
876
 
879
- export declare interface NewsOnThisDay {
880
- title: string;
881
- url: string;
882
- line: string;
883
- }
877
+ /**
878
+ * The news-links part for a persisted message's `newsLinks`, keeping only
879
+ * string entries, or none when no link is left. The server validates them again
880
+ * before trusting them.
881
+ */
882
+ export declare function newsLinkParts(newsLinks: unknown): {
883
+ type: string;
884
+ data: {
885
+ urls: string[];
886
+ };
887
+ }[];
884
888
 
885
889
  /**
886
890
  * Color class mappings and CSS variables for the theme. Covers both color
@@ -1069,6 +1073,25 @@ export declare const SORT_BY_TOKEN_USAGE = "tokenUsage";
1069
1073
  */
1070
1074
  export declare function stripAutoWrapper(modelName: string): string;
1071
1075
 
1076
+ /**
1077
+ * The follow-up a news card's "Tell me more" sends, and how the server tells it
1078
+ * apart from words the user typed.
1079
+ *
1080
+ * The story title is written by the model from third-party headlines, yet the
1081
+ * follow-up goes out as a user message, and the server grants a user's words
1082
+ * authority: a domain in them becomes a site getUrlContent may read
1083
+ * (buildAllowedHostSet), and memory extraction quotes them as the user's own.
1084
+ * So the title travels in one fixed form, between curly quotes, and
1085
+ * withoutCardQuote drops it wherever user text carries that authority. The chat
1086
+ * still shows the headline.
1087
+ *
1088
+ */
1089
+ /**
1090
+ * The follow-up for one story: its title on one line, without curly quotes and
1091
+ * cut to MAX_TITLE_LENGTH characters, so it always matches CARD_FOLLOW_UP_RE.
1092
+ */
1093
+ export declare function tellMeMorePrompt(title: string): string;
1094
+
1072
1095
  /**
1073
1096
  * Complete theme palette. This is the structure sent from the server to the
1074
1097
  * client via getUserPreferences.
@@ -1086,6 +1109,18 @@ export declare interface ThemePalette {
1086
1109
  normal: Palette;
1087
1110
  }
1088
1111
 
1112
+ /**
1113
+ * The news-links part for a message's brief links. The single builder of that
1114
+ * shape, shared by the server, which also reads it back, and the client, which
1115
+ * rebuilds it from stored `newsLinks`.
1116
+ */
1117
+ export declare function toNewsLinksPart(urls: string[]): {
1118
+ type: string;
1119
+ data: {
1120
+ urls: string[];
1121
+ };
1122
+ };
1123
+
1089
1124
  /**
1090
1125
  * Static loading labels for tool activity display. Generator tools override
1091
1126
  * these with contextual text (e.g., "Analyzing bundle size for lodash...").
@@ -1128,4 +1163,11 @@ export declare interface UrlReadRecord {
1128
1163
  partial: boolean;
1129
1164
  }
1130
1165
 
1166
+ /**
1167
+ * A user message's text with a card follow-up's title removed, so only the
1168
+ * words the user chose keep their authority. Any other text is returned
1169
+ * unchanged.
1170
+ */
1171
+ export declare function withoutCardQuote(text: string): string;
1172
+
1131
1173
  export { }
@@ -0,0 +1 @@
1
+ let t="Tell me more about",e=RegExp(`^${t} “[^“”\\n]{1,200}”$`);function r(e){let r=e.replace(/[“”]/g,'"').replace(/\s+/g," ").trim().slice(0,200).trim()||"this story";return`${t} “${r}”`}function o(r){return e.test(r.trim())?`${t} a story`:r}export{r as tellMeMorePrompt,o as withoutCardQuote};
@@ -1 +1 @@
1
- import{ALL_MODELS as e,ALL_PROVIDERS as t,ALL_REASONING_MODELS as r,APPROXIMATE_MODELS_PER_PROVIDER as n,DEFAULT_RESPONSE_SPEED as l,MODELS_PER_PROVIDER as s,PROVIDER_ANTHROPIC as o,PROVIDER_GOOGLE as i,PROVIDER_OPENAI as u,QUICK_ACCESS_NONE as f,QUICK_ACCESS_PANELS as a,RESPONSE_SPEEDS as d}from"../constants/index.js";export*from"./newChatRequest.js";export*from"./newsBrief.js";export*from"./readUrlParts.js";let c=new Set([u,o,i]);function h(e){return"string"==typeof e&&c.has(e)}let p=/^auto \((.+)\)$/;function g(e){let t=e.match(p);return t?t[1]:e}let m=e=>{for(let[t,r]of Object.entries(n))if(r.some(t=>e.startsWith(t)))return t;return null},v=/image|embedding|tts|realtime|transcribe|audio/;function P(t,{matchUnknownByPrefix:r=!1}){for(let[e,r]of Object.entries(s))if(r.includes(t))return h(e)?e:null;if(!r||e.includes(t)||v.test(t))return null;let n=m(t);return h(n)?n:null}let w=(e,r={})=>{if(!e||0===e.length)return[];let n=new Set;for(let t of e){let e=P(t,r);e&&n.add(e)}return t.filter(e=>n.has(e))},y=(e,t={})=>{let r=new Map;if(!e||0===e.length)return r;for(let n of e){let e=P(n,t);e&&(r.has(e)||r.set(e,[]),r.get(e)?.push(n))}return r},M=(e,t={})=>{for(let r of y(e,t).values())if(r.length>1)return!0;return!1},j=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function x(e,t,r){if(!t||Array.isArray(t)&&0===t.length)return!0;let n=e instanceof Set?e:e?new Set(e):null;return!!n&&0!==n.size&&("string"==typeof t?n.has(t):r?.any===!0?t.some(e=>n.has(e)):t.every(e=>n.has(e)))}function A(e){return r.includes(e)}function S(e){let t=t=>{let r=e?.[t];return d.includes(r)?r:l[t]};return{[u]:t(u),[o]:t(o),[i]:t(i)}}function b(e){return a.includes(e)?e:f}export{m as findProvider,y as getModelsGroupedByProvider,w as getProvidersFromModels,M as hasMultipleModelsPerProvider,x as isEntitled,j as isModelAllowedForPlan,h as isRealProvider,A as isReasoningModel,b as resolveQuickAccess,S as resolveResponseSpeed,g as stripAutoWrapper};
1
+ import{ALL_MODELS as e,ALL_PROVIDERS as t,ALL_REASONING_MODELS as r,APPROXIMATE_MODELS_PER_PROVIDER as n,DEFAULT_RESPONSE_SPEED as l,MODELS_PER_PROVIDER as o,PROVIDER_ANTHROPIC as s,PROVIDER_GOOGLE as i,PROVIDER_OPENAI as u,QUICK_ACCESS_NONE as f,QUICK_ACCESS_PANELS as a,RESPONSE_SPEEDS as d}from"../constants/index.js";export*from"./cardFollowUp.js";export*from"./newChatRequest.js";export*from"./newsBrief.js";export*from"./newsLinkParts.js";export*from"./readUrlParts.js";let c=new Set([u,s,i]);function p(e){return"string"==typeof e&&c.has(e)}let h=/^auto \((.+)\)$/;function m(e){let t=e.match(h);return t?t[1]:e}let g=e=>{for(let[t,r]of Object.entries(n))if(r.some(t=>e.startsWith(t)))return t;return null},v=/image|embedding|tts|realtime|transcribe|audio/;function w(t,{matchUnknownByPrefix:r=!1}){for(let[e,r]of Object.entries(o))if(r.includes(t))return p(e)?e:null;if(!r||e.includes(t)||v.test(t))return null;let n=g(t);return p(n)?n:null}let P=(e,r={})=>{if(!e||0===e.length)return[];let n=new Set;for(let t of e){let e=w(t,r);e&&n.add(e)}return t.filter(e=>n.has(e))},j=(e,t={})=>{let r=new Map;if(!e||0===e.length)return r;for(let n of e){let e=w(n,t);e&&(r.has(e)||r.set(e,[]),r.get(e)?.push(n))}return r},x=(e,t={})=>{for(let r of j(e,t).values())if(r.length>1)return!0;return!1},y=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function M(e,t,r){if(!t||Array.isArray(t)&&0===t.length)return!0;let n=e instanceof Set?e:e?new Set(e):null;return!!n&&0!==n.size&&("string"==typeof t?n.has(t):r?.any===!0?t.some(e=>n.has(e)):t.every(e=>n.has(e)))}function A(e){return r.includes(e)}function S(e){let t=t=>{let r=e?.[t];return d.includes(r)?r:l[t]};return{[u]:t(u),[s]:t(s),[i]:t(i)}}function b(e){return a.includes(e)?e:f}export{g as findProvider,j as getModelsGroupedByProvider,P as getProvidersFromModels,x as hasMultipleModelsPerProvider,M as isEntitled,y as isModelAllowedForPlan,p as isRealProvider,A as isReasoningModel,b as resolveQuickAccess,S as resolveResponseSpeed,m as stripAutoWrapper};
@@ -1 +1 @@
1
- let t=/^https:\/\/encrypted-tbn\d\.gstatic\.com\/images\?q=tbn:[\w-]+$/;function e(e){return"string"==typeof e&&t.test(e)}function r(t){return"string"==typeof t&&""!==t.trim()}let n=new Set(['"',"\\","/","b","f","n","r","t","u"]),a={"\n":"\\n","\r":"\\r"," ":"\\t"};function l(t){return t.replace(/\\([\\|[\]])/g,"$1")}function i(t){if(!r(t))return!1;try{let{protocol:e}=new URL(t);return"http:"===e||"https:"===e}catch{return!1}}function u(t,e){return Array.isArray(t)?t.flatMap(t=>{let{author:n,newsletter:a,title:u,url:f,summary:s}=t??{};return!r(n)||!r(a)||!r(u)||!r(s)||!i(f)||e.has(f)?[]:(e.add(f),[{author:l(n),newsletter:a,title:l(u),url:f,summary:s}])}):[]}function f(t){let f,s=t.trim();if(!s||s.length>4e4)return null;try{f=function(t){try{return JSON.parse(t)}catch{return JSON.parse(function(t){let e="",r=!1;for(let l=0;l<t.length;l++){let i=t[l];if(r)if("\\"===i){let r=t[l+1]??"";e+=n.has(r)?`\\${r}`:`\\\\${r}`,l++}else'"'===i?(r=!1,e+=i):i<" "?e+=a[i]??`\\u${i.charCodeAt(0).toString(16).padStart(4,"0")}`:e+=i;else r='"'===i,e+=i}return e}(t))}}(s)}catch{return null}if(!f||!r(f.asOf)||!Array.isArray(f.items))return null;let o=new Set,c=function(t){let{title:e,url:n,line:a}=t??{};return r(e)&&i(n)&&r(a)?{title:l(e),url:n,line:a}:void 0}(f.onThisDay),h=new Set(c?[c.url]:[]),p=f.items.flatMap(t=>{let{id:n,title:a,summary:f,local:s,image:c,evidence:p,commentary:d}=t??{};if(!r(n)||o.has(n)||!r(a)||!r(f))return[];o.add(n);let m=u(d,h);return[{id:n,title:a,summary:f,local:!0===s,...e(c)?{image:c}:{},evidence:function(t){if(!Array.isArray(t))return[];let e=new Set;return t.flatMap(t=>{let{outlet:n,headline:a,url:u}=t??{};return!r(n)||!r(a)||!i(u)||e.has(u)?[]:(e.add(u),[{outlet:l(n),headline:l(a),url:u}])})}(p),...m.length>0?{commentary:m}:{}}]}),d=u(f.otherCommentary,h),m=f.earlier;return{asOf:f.asOf,...r(f.note)?{note:f.note}:{},...r(f.place)?{place:f.place}:{},...m&&r(m.chatId)&&r(m.time)?{earlier:{chatId:m.chatId,time:m.time}}:{},items:p,...d.length>0?{otherCommentary:d}:{},...c?{onThisDay:c}:{}}}let s=/^[^\S\n]{0,3}```(\w*)[^\S\n]*\n([\s\S]*?)\n[^\S\n]{0,3}```/gm;function o(t){for(let[,e,r]of t.matchAll(s))if("newsbrief"===e.toLowerCase()||""===e&&/"asOf"/.test(r)){let t=f(r);if(t)return t}return null}export{o as findNewsBrief,e as isNewsImageUrl,f as parseNewsBrief};
1
+ let t=/^https:\/\/encrypted-tbn\d\.gstatic\.com\/images\?q=tbn:[\w-]+$/;function e(e){return"string"==typeof e&&t.test(e)}function r(t){return"string"==typeof t&&""!==t.trim()}let n=new Set(['"',"\\","/","b","f","n","r","t","u"]),a={"\n":"\\n","\r":"\\r"," ":"\\t"};function l(t){return t.replace(/\\([\\|[\]])/g,"$1")}function i(t){let i,u=t.trim();if(!u||u.length>4e4)return null;try{i=function(t){try{return JSON.parse(t)}catch{return JSON.parse(function(t){let e="",r=!1;for(let l=0;l<t.length;l++){let i=t[l];if(r)if("\\"===i){let r=t[l+1]??"";e+=n.has(r)?`\\${r}`:`\\\\${r}`,l++}else'"'===i?(r=!1,e+=i):i<" "?e+=a[i]??`\\u${i.charCodeAt(0).toString(16).padStart(4,"0")}`:e+=i;else r='"'===i,e+=i}return e}(t))}}(u)}catch{return null}if(!i||!r(i.asOf)||!Array.isArray(i.items))return null;let f=new Set,s=i.items.flatMap(t=>{let{id:n,title:a,summary:i,local:u,image:s,evidence:c}=t??{};return!r(n)||f.has(n)||!r(a)||!r(i)?[]:(f.add(n),[{id:n,title:a,summary:i,local:!0===u,...e(s)?{image:s}:{},evidence:function(t){if(!Array.isArray(t))return[];let e=new Set;return t.flatMap(t=>{let{outlet:n,headline:a,url:i}=t??{};return!r(n)||!r(a)||!function(t){if(!r(t))return!1;try{let{protocol:e}=new URL(t);return"http:"===e||"https:"===e}catch{return!1}}(i)||e.has(i)?[]:(e.add(i),[{outlet:l(n),headline:l(a),url:i}])})}(c)}])}),c=i.earlier;return{asOf:i.asOf,...r(i.note)?{note:i.note}:{},...r(i.place)?{place:i.place}:{},...c&&r(c.chatId)&&r(c.time)?{earlier:{chatId:c.chatId,time:c.time}}:{},items:s}}let u=/^[^\S\n]{0,3}```(\w*)[^\S\n]*\n([\s\S]*?)\n[^\S\n]{0,3}```/gm;function f(t){for(let[,e,r]of t.matchAll(u))if("newsbrief"===e.toLowerCase()||""===e&&/"asOf"/.test(r)){let t=i(r);if(t)return t}return null}export{f as findNewsBrief,e as isNewsImageUrl,i as parseNewsBrief};
@@ -0,0 +1 @@
1
+ import{NEWS_LINKS_PART_TYPE as t}from"../constants/index.js";function r(r){return{type:t,data:{urls:r}}}function n(t){if(!Array.isArray(t))return[];let n=t.filter(t=>"string"==typeof t);return n.length>0?[r(n)]:[]}export{n as newsLinkParts,r as toNewsLinksPart};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.68.0",
3
+ "version": "4.70.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {