@versini/sassysaint-common 4.64.1 → 4.66.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.
@@ -0,0 +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};
@@ -0,0 +1 @@
1
+ let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],i=["identity","bio","constraint","professional"],t=e=>i.includes(e);export{i as HARD_CATEGORIES,e as MEMORY_CATEGORIES,t as isHardCategory};
@@ -0,0 +1 @@
1
+ var e,o=((e={})[e.NewChat=0]="NewChat",e[e.Prompts=1]="Prompts",e[e.Attachment=2]="Attachment",e[e.PrivateChat=3]="PrivateChat",e[e.Send=4]="Send",e[e.Header=5]="Header",e[e.Provider=6]="Provider",e[e.Logo=7]="Logo",e[e.Placeholder=8]="Placeholder",e[e.Footer=9]="Footer",e);export{o as ActionColor};
package/dist/index.d.ts CHANGED
@@ -85,6 +85,7 @@ export declare const CAPABILITIES: {
85
85
  readonly GITREPOSITORY: "getGitRepoDetails";
86
86
  readonly HOTELS: "getHotelDetails";
87
87
  readonly LOCAL_BUSINESSES: "getLocalBusinesses";
88
+ readonly NEWS_BRIEF: "getNewsBrief";
88
89
  readonly PRODUCTS: "getProducts";
89
90
  readonly REVIEW_TRUST: "getReviewTrust";
90
91
  readonly STREAMING_PICKS: "getStreamingPicks";
@@ -240,6 +241,13 @@ export declare const DIGGIDY_CHAT_ID_HEADER = "x-diggidy-chat-id";
240
241
  */
241
242
  export declare const DIGGIDY_CHAT_TIMESTAMP_HEADER = "x-diggidy-chat-timestamp";
242
243
 
244
+ /**
245
+ * The brief in a finished reply: its first ```newsbrief fence, or an unlabeled
246
+ * fence holding the brief's JSON, as the client renders either one. null when
247
+ * the reply has no brief the card could show.
248
+ */
249
+ export declare function findNewsBrief(text: string): NewsBrief | null;
250
+
243
251
  /**
244
252
  * Identifies the AI provider associated with a given model name by matching
245
253
  * against known model prefixes. This function provides backward compatibility
@@ -829,6 +837,30 @@ export declare const MODELS_PER_PROVIDER: {
829
837
  readonly Perplexity: readonly ["sonar", "sonar-pro", "perplexity-search"];
830
838
  };
831
839
 
840
+ export declare interface NewsBrief {
841
+ asOf: string;
842
+ note?: string;
843
+ earlier?: {
844
+ chatId: string;
845
+ time: string;
846
+ };
847
+ items: NewsBriefItem[];
848
+ }
849
+
850
+ export declare interface NewsBriefItem {
851
+ id: string;
852
+ title: string;
853
+ summary: string;
854
+ local: boolean;
855
+ evidence: NewsEvidence[];
856
+ }
857
+
858
+ export declare interface NewsEvidence {
859
+ outlet: string;
860
+ headline: string;
861
+ url: string;
862
+ }
863
+
832
864
  /**
833
865
  * Color class mappings and CSS variables for the theme. Covers both color
834
866
  * schemes at once, via Tailwind `dark:` prefixes inside the class strings.
@@ -838,6 +870,15 @@ export declare interface Palette {
838
870
  cssVariables: CSSVariables;
839
871
  }
840
872
 
873
+ /**
874
+ * Parse the ```newsbrief payload the model writes, for the chat card and the
875
+ * shared page alike, so both show the same stories. Items missing an id, title
876
+ * or summary, repeats of an id, and repeats of an evidence url are dropped
877
+ * rather than failing the brief. null means nothing parseable, which is also
878
+ * the state while the block is still streaming.
879
+ */
880
+ export declare function parseNewsBrief(content: string): NewsBrief | null;
881
+
841
882
  /**
842
883
  * List of all plans available.
843
884
  */
@@ -874,6 +915,19 @@ export declare const PROVIDER_ROLE_MAP: {
874
915
 
875
916
  export declare const PROVIDER_SUMMARY = "Summary";
876
917
 
918
+ /**
919
+ * Quick Access, a user preference (Settings > Header): the panel an icon next
920
+ * to the header's gear opens in one tap, or none. In the iOS menu sheet's
921
+ * order. Profile is left out: it is the first row of the menu the gear opens.
922
+ */
923
+ export declare const QUICK_ACCESS_NONE = "none";
924
+
925
+ export declare const QUICK_ACCESS_PANELS: readonly ["settings", "shortcuts", "memories", "history", "usage", "about"];
926
+
927
+ export declare type QuickAccess = QuickAccessPanel | typeof QUICK_ACCESS_NONE;
928
+
929
+ export declare type QuickAccessPanel = (typeof QUICK_ACCESS_PANELS)[number];
930
+
877
931
  /**
878
932
  * The read-marker parts for a persisted message's `readUrls`, skipping entries
879
933
  * without a string URL. A record counts as a full read only when `partial` is
@@ -893,6 +947,19 @@ export declare function readUrlParts(readUrls: unknown): {
893
947
  */
894
948
  export declare type RealProvider = typeof PROVIDER_OPENAI | typeof PROVIDER_ANTHROPIC | typeof PROVIDER_GOOGLE;
895
949
 
950
+ /**
951
+ * Resolve a stored Quick Access preference: one of QUICK_ACCESS_PANELS, or
952
+ * QUICK_ACCESS_NONE for anything else, whatever the DB or a client sent.
953
+ *
954
+ * @example
955
+ * ```ts
956
+ * resolveQuickAccess("history"); // Returns: "history"
957
+ * resolveQuickAccess("profile"); // Returns: "none"
958
+ * ```
959
+ *
960
+ */
961
+ export declare function resolveQuickAccess(stored?: unknown): QuickAccess;
962
+
896
963
  /**
897
964
  * Resolve a stored Response Speed preference into a complete per-provider
898
965
  * record. Missing providers and unknown values fall back to
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],t=["identity","bio","constraint","professional"],E=e=>t.includes(e);var r,n=((r={})[r.NewChat=0]="NewChat",r[r.Prompts=1]="Prompts",r[r.Attachment=2]="Attachment",r[r.PrivateChat=3]="PrivateChat",r[r.Send=4]="Send",r[r.Header=5]="Header",r[r.Provider=6]="Provider",r[r.Logo=7]="Logo",r[r.Placeholder=8]="Placeholder",r[r.Footer=9]="Footer",r);let a="system",i="user",O="assistant",o="OpenAI",s="Anthropic",_="Google",l="Summary",R="Memory",T="Perplexity",S=o,A=[o,s,_],u="gpt-6.1-sol",P="gpt-6-luna",L="claude-opus-5-5",I="claude-sonnet-5-5",g="claude-haiku-5-5",M="gemini-3.8-flash",c="gemini-3.5-flash-lite",h="sonar",d="sonar-pro",N="perplexity-search",D="openai/gpt-oss-20b:free",p="claude-haiku-5-5",C="gpt-6-luna",m="gemini-3.5-flash-lite",f="gemini-3.8-flash",U="gpt-6.1-sol",G="gpt-6-luna",y="gpt-5.6-luna",H="gemini-3.6-flash",b="text-embedding-3-small",w="gpt-image-2.5-sunburst",B=5,F=1e4,Y=3e3,v={[u]:"GPT-6.1 Sol",[P]:"GPT-6 Luna",[L]:"Claude Opus 5.5",[I]:"Claude Sonnet 5.5",[g]:"Claude Haiku 5.5",[M]:"Gemini 3.8 Flash",[c]:"Gemini 3.5 Flash-Lite",[h]:"Sonar",[d]:"Sonar Pro",[N]:"Perplexity Search",[w]:"GPT Image 2.5 Sunburst"},k=[u,P,L,I,g,c,M,w],V=[u,P,L,I,g,M,c],W="fast",X="balanced",x="thorough",K=[W,X,x],z={[W]:"low",[X]:"medium",[x]:"high"},Z={[o]:W,[s]:X,[_]:W},$={[o]:[u,P],[s]:[L,g,I],[_]:[c,M],[T]:[h,d,N]},j={[o]:[a,i,O],[s]:[i,O],[l]:[i,O],[R]:[i,O],[_]:[i,O],[T]:[i,O]},Q={[s]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-5","claude-haiku-4","claude-3"],[o]:["gpt-","o3","o4"],[_]:["gemini"],[T]:["sonar"]},q="x-diggidy-chat-id",J="x-diggidy-chat-timestamp",ee="complete",et="timestamp",eE="tokenUsage",er="Diggidy",en="sassy:basic",ea="sassy:plus",ei="sassy:advanced",eO={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",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"}},eo={code_interpreter:"Running code...",web_search:"Searching the web...",[eO.TOOL.WEATHER]:"Checking the weather...",[eO.TOOL.POLLUTION]:"Fetching air pollution data...",[eO.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[eO.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[eO.TOOL.WEBSEARCH]:"Searching the web...",[eO.TOOL.GITREPOSITORY]:"Looking up repository...",[eO.TOOL.HOTELS]:"Searching for hotels...",[eO.TOOL.LOCAL_BUSINESSES]:"Searching for local businesses...",[eO.TOOL.PRODUCTS]:"Searching for products...",[eO.TOOL.REVIEW_TRUST]:"Checking reviews...",[eO.TOOL.STREAMING_PICKS]:"Finding movies to stream...",[eO.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[eO.TOOL.GENERATE_IMAGE]:"Generating image...",[eO.TOOL.BARCODE]:"Looking up product...",[eO.TOOL.PRONUNCIATION]:"Generating pronunciation...",[eO.TOOL.HUMANIZE]:"Rewriting text...",[eO.TOOL.IMAGES]:"Searching for images...",[eO.TOOL.PAST_CHATS]:"Searching your past chats..."},es="Using tools...",e_=1e5,el=8e5;function eR(e){return e===ei?el:e_}let eT=16384,eS=4,eA=3,eu=8388608,eP="context-compression-summary",eL="data-urlRead",eI="[Note from the system: you read",eg="(?:an?\\s+|another\\s+)?",eM=RegExp(`^(?:(?:ok(?:ay)?|alright|right|hey|hi|hello|yes|yep|yeah|sure|thanks|thank you|please|claude|diggidy)[\\s,]+)*(?:(?:(?:let'?s\\s+|can you\\s+|could you\\s+|can we\\s+|please\\s+)?(?:start|begin|create|open)\\s+)?${eg}(?:new|fresh)\\s+(?:chat|conversation)|${eg}(?:new|fresh)\\s+(?:thread|session))(?:[\\s,]+(?:please|pls|plz|now|thanks|thank you|thx|ty))*$`),ec=/^[^\p{L}\p{N}]+/u,eh=/[^\p{L}\p{N}]+$/u;function ed(e){if(!e||e.length>120)return!1;let t=e.toLowerCase().replace(/’/g,"'").replace(/\s+/g," ").trim().replace(ec,"").replace(eh,"").trim();return""!==t&&eM.test(t)}function eN(e){return{type:eL,data:e}}function eD(e){return Array.isArray(e)?e.filter(e=>"string"==typeof e?.url).map(e=>eN({url:e.url,partial:!1!==e.partial})):[]}let ep=new Set(["OpenAI",s,"Google"]);function eC(e){return"string"==typeof e&&ep.has(e)}let em=/^auto \((.+)\)$/;function ef(e){let t=e.match(em);return t?t[1]:e}let eU=e=>{for(let[t,E]of Object.entries(Q))if(E.some(t=>e.startsWith(t)))return t;return null},eG=/image|embedding|tts|realtime|transcribe|audio/;function ey(e,{matchUnknownByPrefix:t=!1}){for(let[t,E]of Object.entries($))if(E.includes(e))return eC(t)?t:null;if(!t||k.includes(e)||eG.test(e))return null;let E=eU(e);return eC(E)?E:null}let eH=(e,t={})=>{if(!e||0===e.length)return[];let E=new Set;for(let r of e){let e=ey(r,t);e&&E.add(e)}return A.filter(e=>E.has(e))},eb=(e,t={})=>{let E=new Map;if(!e||0===e.length)return E;for(let r of e){let e=ey(r,t);e&&(E.has(e)||E.set(e,[]),E.get(e)?.push(r))}return E},ew=(e,t={})=>{for(let E of eb(e,t).values())if(E.length>1)return!0;return!1},eB=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function eF(e,t,E){if(!t||Array.isArray(t)&&0===t.length)return!0;let r=e instanceof Set?e:e?new Set(e):null;return!!r&&0!==r.size&&("string"==typeof t?r.has(t):E?.any===!0?t.some(e=>r.has(e)):t.every(e=>r.has(e)))}function eY(e){return V.includes(e)}function ev(e){let t=t=>{let E=e?.[t];return K.includes(E)?E:Z[t]};return{OpenAI:t("OpenAI"),[s]:t(s),Google:t("Google")}}export{k as ALL_MODELS,A as ALL_PROVIDERS,V as ALL_REASONING_MODELS,er as APPLICATION_NAME,Q as APPROXIMATE_MODELS_PER_PROVIDER,eO as CAPABILITIES,ee as CHAT_COMPLETION_MARKER_KEY,e_ as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,el as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eA as CONTEXT_COMPRESSION_KEEP_IMAGES,eS as CONTEXT_COMPRESSION_KEEP_RECENT,eu as CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES,eP as CONTEXT_COMPRESSION_SUMMARY_ID,S as DEFAULT_PROVIDER,Z as DEFAULT_RESPONSE_SPEED,es as DEFAULT_TOOL_LOADING_LABEL,q as DIGGIDY_CHAT_ID_HEADER,J as DIGGIDY_CHAT_TIMESTAMP_HEADER,t as HARD_CATEGORIES,eT as MAX_OUTPUT_TOKENS,B as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,$ as MODELS_PER_PROVIDER,g as MODEL_ANTHROPIC_LOW,I as MODEL_ANTHROPIC_MEDIUM,L as MODEL_ANTHROPIC_TOP,C as MODEL_CHAT_SUMMARY,D as MODEL_DEV,v as MODEL_DISPLAY_NAMES,b as MODEL_EMBEDDING_TEXT,w as MODEL_GENERATE_IMAGE,c as MODEL_GOOGLE_MEDIUM,M as MODEL_GOOGLE_TOP,U as MODEL_HUMANIZE_AUDIT,f as MODEL_HUMANIZE_REWRITE,p as MODEL_MEMORY_INFERENCE,G as MODEL_NUTRITION_SEARCH,P as MODEL_OPENAI_MEDIUM,u as MODEL_OPENAI_TOP,N as MODEL_PERPLEXITY_SEARCH,y as MODEL_REVIEW_TRUST_PANEL,H as MODEL_REVIEW_TRUST_PANEL_GOOGLE,m as MODEL_SEARCH_DECOMPOSER,h as MODEL_SONAR,d as MODEL_SONAR_PRO,en as PLAN_BASIC,ea as PLAN_PLUS,ei as PLAN_PREMIUM,s as PROVIDER_ANTHROPIC,_ as PROVIDER_GOOGLE,R as PROVIDER_MEMORY,o as PROVIDER_OPENAI,T as PROVIDER_PERPLEXITY,j as PROVIDER_ROLE_MAP,l as PROVIDER_SUMMARY,K as RESPONSE_SPEEDS,X as RESPONSE_SPEED_BALANCED,W as RESPONSE_SPEED_FAST,x as RESPONSE_SPEED_THOROUGH,z as RESPONSE_SPEED_TO_EFFORT,O as ROLE_ASSISTANT,a as ROLE_SYSTEM,i as ROLE_USER,Y as SEARCH_DECOMPOSE_TIMEOUT_MS,F as SEARCH_QUERY_TIMEOUT_MS,et as SORT_BY_TIMESTAMP,eE as SORT_BY_TOKEN_USAGE,eo as TOOL_LOADING_LABELS,eI as URL_READ_NOTE_PREFIX,eL as URL_READ_PART_TYPE,eU as findProvider,eR as getCompressionEmergencyThreshold,eb as getModelsGroupedByProvider,eH as getProvidersFromModels,ew as hasMultipleModelsPerProvider,eF as isEntitled,ed as isExplicitNewChatRequest,E as isHardCategory,eB as isModelAllowedForPlan,eC as isRealProvider,eY as isReasoningModel,eD as readUrlParts,ev as resolveResponseSpeed,ef as stripAutoWrapper,n as ActionColor,eN as toUrlReadPart};
1
+ export*from"./constants/index.js";export*from"./utilities/index.js";
@@ -0,0 +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};
@@ -0,0 +1 @@
1
+ let e="(?:an?\\s+|another\\s+)?",s=RegExp(`^(?:(?:ok(?:ay)?|alright|right|hey|hi|hello|yes|yep|yeah|sure|thanks|thank you|please|claude|diggidy)[\\s,]+)*(?:(?:(?:let'?s\\s+|can you\\s+|could you\\s+|can we\\s+|please\\s+)?(?:start|begin|create|open)\\s+)?${e}(?:new|fresh)\\s+(?:chat|conversation)|${e}(?:new|fresh)\\s+(?:thread|session))(?:[\\s,]+(?:please|pls|plz|now|thanks|thank you|thx|ty))*$`),t=/^[^\p{L}\p{N}]+/u,a=/[^\p{L}\p{N}]+$/u;function r(e){if(!e||e.length>120)return!1;let r=e.toLowerCase().replace(/’/g,"'").replace(/\s+/g," ").trim().replace(t,"").replace(a,"").trim();return""!==r&&s.test(r)}export{r as isExplicitNewChatRequest};
@@ -0,0 +1 @@
1
+ function t(t){return"string"==typeof t&&""!==t.trim()}let e=new Set(['"',"\\","/","b","f","n","r","t","u"]),r={"\n":"\\n","\r":"\\r"," ":"\\t"};function n(t){return t.replace(/\\([\\|[\]])/g,"$1")}function l(l){let a,i=l.trim();if(!i||i.length>4e4)return null;try{a=function(t){try{return JSON.parse(t)}catch{return JSON.parse(function(t){let n="",l=!1;for(let a=0;a<t.length;a++){let i=t[a];if(l)if("\\"===i){let r=t[a+1]??"";n+=e.has(r)?`\\${r}`:`\\\\${r}`,a++}else'"'===i?(l=!1,n+=i):i<" "?n+=r[i]??`\\u${i.charCodeAt(0).toString(16).padStart(4,"0")}`:n+=i;else l='"'===i,n+=i}return n}(t))}}(i)}catch{return null}if(!a||!t(a.asOf)||!Array.isArray(a.items))return null;let u=new Set,f=a.items.flatMap(e=>{let{id:r,title:l,summary:a,local:i,evidence:f}=e??{};return!t(r)||u.has(r)||!t(l)||!t(a)?[]:(u.add(r),[{id:r,title:l,summary:a,local:!0===i,evidence:function(e){if(!Array.isArray(e))return[];let r=new Set;return e.flatMap(e=>{let{outlet:l,headline:a,url:i}=e??{};return!t(l)||!t(a)||!function(e){if(!t(e))return!1;try{let{protocol:t}=new URL(e);return"http:"===t||"https:"===t}catch{return!1}}(i)||r.has(i)?[]:(r.add(i),[{outlet:n(l),headline:n(a),url:i}])})}(f)}])}),s=a.earlier;return{asOf:a.asOf,...t(a.note)?{note:a.note}:{},...s&&t(s.chatId)&&t(s.time)?{earlier:{chatId:s.chatId,time:s.time}}:{},items:f}}let a=/^[^\S\n]{0,3}```(\w*)[^\S\n]*\n([\s\S]*?)\n[^\S\n]{0,3}```/gm;function i(t){for(let[,e,r]of t.matchAll(a))if("newsbrief"===e.toLowerCase()||""===e&&/"asOf"/.test(r)){let t=l(r);if(t)return t}return null}export{i as findNewsBrief,l as parseNewsBrief};
@@ -0,0 +1 @@
1
+ import{URL_READ_PART_TYPE as r}from"../constants/index.js";function t(t){return{type:r,data:t}}function a(r){return Array.isArray(r)?r.filter(r=>"string"==typeof r?.url).map(r=>t({url:r.url,partial:!1!==r.partial})):[]}export{a as readUrlParts,t as toUrlReadPart};
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.64.1",
3
+ "version": "4.66.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
9
  "type": "module",
10
+ "sideEffects": false,
10
11
  "main": "dist/index.js",
11
12
  "types": "dist/index.d.ts",
12
13
  "files": [
13
14
  "dist"
14
15
  ],
16
+ "devDependencies": {
17
+ "@microsoft/api-extractor": "7.59.4",
18
+ "@rslib/core": "1.0.3"
19
+ },
15
20
  "scripts": {
16
21
  "build:check": "tsc",
17
22
  "build:common": "npm-run-all build",