@versini/sassysaint-common 4.63.0 → 4.64.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.
package/dist/index.d.ts CHANGED
@@ -19,7 +19,7 @@ export declare enum ActionColor {
19
19
  * List of all models available TODAY. This is used by the client to display the
20
20
  * list of models.
21
21
  */
22
- export declare const ALL_MODELS: readonly ["gpt-6.1-sol", "gpt-6-luna", "claude-opus-5-5", "claude-sonnet-5-5", "claude-haiku-4-5", "gemini-3.5-flash-lite", "gemini-3.8-flash", "gpt-image-2.5-flare", "gpt-image-2.5-sunburst"];
22
+ export declare const ALL_MODELS: readonly ["gpt-6.1-sol", "gpt-6-luna", "claude-opus-5-5", "claude-sonnet-5-5", "claude-haiku-5-5", "gemini-3.5-flash-lite", "gemini-3.8-flash", "gpt-image-2.5-sunburst"];
23
23
 
24
24
  export declare const ALL_PROVIDERS: readonly ["OpenAI", "Anthropic", "Google"];
25
25
 
@@ -28,12 +28,14 @@ export declare const ALL_PROVIDERS: readonly ["OpenAI", "Anthropic", "Google"];
28
28
  * (and by Settings, to decide which providers get a Response Speed row). It
29
29
  * affects Google and Anthropic. Google members get thinkingLevel, while
30
30
  * non-members get the older numeric thinkingBudget. Anthropic members get an
31
- * `effort`; non-members get none, because claude-haiku-4-5 rejects the
32
- * parameter with a 400 ("This model does not support the effort parameter",
33
- * probed 2026-10-04), so check that a new Anthropic model accepts effort before
34
- * listing it. The OpenAI entries do not change what vercelEngine sends (it sets
35
- * reasoningEffort unconditionally), but they decide whether Settings shows an
36
- * OpenAI Response Speed row, so list every OpenAI chat model.
31
+ * `effort`; non-members get none. Every Anthropic catalog model is a member
32
+ * since claude-haiku-5-5 (low, medium and high probed 2026-10-08), but its
33
+ * predecessor claude-haiku-4-5 rejected the parameter with a 400 ("This model
34
+ * does not support the effort parameter", probed 2026-10-04), so check that a
35
+ * new Anthropic model accepts effort before listing it. The OpenAI entries do
36
+ * not change what vercelEngine sends (it sets reasoningEffort unconditionally),
37
+ * but they decide whether Settings shows an OpenAI Response Speed row, so list
38
+ * every OpenAI chat model.
37
39
  *
38
40
  * Both Google models are listed because Google documents thinking_level for
39
41
  * both ids. This matters more than it looks: our explicit providerOptions
@@ -55,7 +57,7 @@ export declare const APPLICATION_NAME = "Diggidy";
55
57
  * versions change over time.
56
58
  */
57
59
  export declare const APPROXIMATE_MODELS_PER_PROVIDER: {
58
- readonly Anthropic: readonly ["claude-opus-5", "claude-opus-4", "claude-sonnet-5", "claude-sonnet-4", "claude-haiku-4", "claude-3"];
60
+ readonly Anthropic: readonly ["claude-opus-5", "claude-opus-4", "claude-sonnet-5", "claude-sonnet-4", "claude-haiku-5", "claude-haiku-4", "claude-3"];
59
61
  readonly OpenAI: readonly ["gpt-", "o3", "o4"];
60
62
  readonly Google: readonly ["gemini"];
61
63
  readonly Perplexity: readonly ["sonar"];
@@ -213,10 +215,10 @@ export declare const DEFAULT_PROVIDER = "OpenAI";
213
215
  /**
214
216
  * What a user who never touched the setting gets. OpenAI and Google keep the
215
217
  * `low` they were hard-coded to before the setting existed. Anthropic starts on
216
- * medium: unchanged for Opus 5.5, whose API default is medium, and one step
217
- * down from high for Sonnet 5.5, which Anthropic suggests for chat. Defaults
218
- * are applied on read and never stored, so changing one here moves every user
219
- * who has not picked a value.
218
+ * medium: unchanged for Opus 5.5 and Haiku 5.5, whose API default is medium,
219
+ * and one step down from high for Sonnet 5.5, which Anthropic suggests for
220
+ * chat. Defaults are applied on read and never stored, so changing one here
221
+ * moves every user who has not picked a value.
220
222
  */
221
223
  export declare const DEFAULT_RESPONSE_SPEED: {
222
224
  readonly OpenAI: "fast";
@@ -598,7 +600,7 @@ export declare const MEMORY_CATEGORIES: readonly ["preference", "identity", "con
598
600
 
599
601
  export declare type MemoryCategory = (typeof MEMORY_CATEGORIES)[number];
600
602
 
601
- export declare const MODEL_ANTHROPIC_LOW = "claude-haiku-4-5";
603
+ export declare const MODEL_ANTHROPIC_LOW = "claude-haiku-5-5";
602
604
 
603
605
  export declare const MODEL_ANTHROPIC_MEDIUM = "claude-sonnet-5-5";
604
606
 
@@ -638,13 +640,13 @@ export declare const MODEL_DISPLAY_NAMES: Record<string, string>;
638
640
  export declare const MODEL_EMBEDDING_TEXT = "text-embedding-3-small";
639
641
 
640
642
  /**
641
- * The generateImage tool picks between two OpenAI image models per call:
642
- * MODEL_GENERATE_IMAGE is the fast default, and MODEL_GENERATE_IMAGE_PRECISE is
643
- * the slower precision variant used for edits and detail-heavy requests.
643
+ * The generateImage tool uses one OpenAI image model for every call, new images
644
+ * and edits alike. gpt-image-2.5-flare used to make new images, and was dropped
645
+ * after a side-by-side on 2026-10-11: on "A pelican riding a bicycle" it drew a
646
+ * foot with no leg in 2 of 5 images, Sunburst in 0 of 5, at the same output
647
+ * tokens and about 15 seconds slower.
644
648
  */
645
- export declare const MODEL_GENERATE_IMAGE = "gpt-image-2.5-flare";
646
-
647
- export declare const MODEL_GENERATE_IMAGE_PRECISE = "gpt-image-2.5-sunburst";
649
+ export declare const MODEL_GENERATE_IMAGE = "gpt-image-2.5-sunburst";
648
650
 
649
651
  export declare const MODEL_GOOGLE_MEDIUM = "gemini-3.5-flash-lite";
650
652
 
@@ -682,14 +684,21 @@ export declare const MODEL_HUMANIZE_REWRITE = "gemini-3.8-flash";
682
684
  * tokens.
683
685
  *
684
686
  * Bumped gpt-5.6-luna→gpt-6-luna alongside the OpenAI Luna picker tier, at half
685
- * the price (0.10/0.50). Unlike the mini→luna move this one was NOT
686
- * re-measured: the numbers above describe gpt-5.6-luna, so re-run the command
687
- * above before trusting them for gpt-6-luna. This slot shares its id with other
688
- * role slots and a picker tier; modelPricing.ts owns that set, so do not
689
- * restate it here.
687
+ * the price (0.10/0.50), without re-measuring.
688
+ *
689
+ * Moved gpt-6-luna→claude-haiku-5-5 at the same per-token price for prompts of
690
+ * 100K tokens or fewer (see the MODEL_ANTHROPIC_LOW row in modelPricing.ts).
691
+ * gpt-6-luna found the facts but often wrote a role word ("current", "user")
692
+ * where the message id belongs, so validation rejected them. Measured on
693
+ * 2026-10-08: on 40 extractions of a one-line "remember" chat, Haiku stored the
694
+ * fact 40 times against luna's 30; on the salience eval it produced 66/66 valid
695
+ * message ids against luna's 15/63, at about a third of the latency, and used
696
+ * about the same total tokens (104K against 100K, since luna's misses were
697
+ * resampled). Consolidation runs on this slot too; there Haiku uses about twice
698
+ * luna's tokens per call.
690
699
  *
691
700
  */
692
- export declare const MODEL_MEMORY_INFERENCE = "gpt-6-luna";
701
+ export declare const MODEL_MEMORY_INFERENCE = "claude-haiku-5-5";
693
702
 
694
703
  /**
695
704
  * The nutrition fallback runs a web-search-tool lookup for branded products FDC
@@ -722,11 +731,10 @@ export declare const MODEL_OPENAI_MEDIUM = "gpt-6-luna";
722
731
  * and not user-selectable, and the role-purpose slots (MODEL_MEMORY_INFERENCE,
723
732
  * MODEL_CHAT_SUMMARY, MODEL_SEARCH_DECOMPOSER, MODEL_HUMANIZE_REWRITE,
724
733
  * MODEL_HUMANIZE_AUDIT, MODEL_NUTRITION_SEARCH, MODEL_REVIEW_TRUST_PANEL,
725
- * MODEL_EMBEDDING_TEXT, MODEL_GENERATE_IMAGE, MODEL_GENERATE_IMAGE_PRECISE,
726
- * MODEL_DEV) are named for the job they do rather than a provider tier, so a
727
- * bump there never renames them either. Anything that needs a specific model
728
- * for a specific job belongs in that group, NOT pointed at a picker tier whose
729
- * value can move.
734
+ * MODEL_EMBEDDING_TEXT, MODEL_GENERATE_IMAGE, MODEL_DEV) are named for the job
735
+ * they do rather than a provider tier, so a bump there never renames them
736
+ * either. Anything that needs a specific model for a specific job belongs in
737
+ * that group, NOT pointed at a picker tier whose value can move.
730
738
  *
731
739
  */
732
740
  export declare const MODEL_OPENAI_TOP = "gpt-6.1-sol";
@@ -816,7 +824,7 @@ export declare interface ModelProviderMatchOptions {
816
824
  */
817
825
  export declare const MODELS_PER_PROVIDER: {
818
826
  readonly OpenAI: readonly ["gpt-6.1-sol", "gpt-6-luna"];
819
- readonly Anthropic: readonly ["claude-opus-5-5", "claude-haiku-4-5", "claude-sonnet-5-5"];
827
+ readonly Anthropic: readonly ["claude-opus-5-5", "claude-haiku-5-5", "claude-sonnet-5-5"];
820
828
  readonly Google: readonly ["gemini-3.5-flash-lite", "gemini-3.8-flash"];
821
829
  readonly Perplexity: readonly ["sonar", "sonar-pro", "perplexity-search"];
822
830
  };
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",O="user",i="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",I="claude-opus-5-5",L="claude-sonnet-5-5",g="claude-haiku-4-5",M="gemini-3.8-flash",c="gemini-3.5-flash-lite",N="sonar",h="sonar-pro",d="perplexity-search",D="openai/gpt-oss-20b:free",p="gpt-6-luna",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",F="text-embedding-3-small",b="gpt-image-2.5-flare",w="gpt-image-2.5-sunburst",B=5,Y=1e4,v=3e3,V={[u]:"GPT-6.1 Sol",[P]:"GPT-6 Luna",[I]:"Claude Opus 5.5",[L]:"Claude Sonnet 5.5",[g]:"Claude Haiku 4.5",[M]:"Gemini 3.8 Flash",[c]:"Gemini 3.5 Flash-Lite",[N]:"Sonar",[h]:"Sonar Pro",[d]:"Perplexity Search",[b]:"GPT Image 2.5 Flare",[w]:"GPT Image 2.5 Sunburst"},k=[u,P,I,L,g,c,M,b,w],W=[u,P,I,L,M,c],X="fast",x="balanced",K="thorough",z=[X,x,K],Z={[X]:"low",[x]:"medium",[K]:"high"},$={[o]:X,[s]:x,[_]:X},j={[o]:[u,P],[s]:[I,g,L],[_]:[c,M],[T]:[N,h,d]},Q={[o]:[a,O,i],[s]:[O,i],[l]:[O,i],[R]:[O,i],[_]:[O,i],[T]:[O,i]},q={[s]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-4","claude-3"],[o]:["gpt-","o3","o4"],[_]:["gemini"],[T]:["sonar"]},J="x-diggidy-chat-id",ee="x-diggidy-chat-timestamp",et="complete",eE="timestamp",er="tokenUsage",en="Diggidy",ea="sassy:basic",eO="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"}},es={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..."},e_="Using tools...",el=1e5,eR=8e5;function eT(e){return e===ei?eR:el}let eS=16384,eA=4,eu=3,eP=8388608,eI="context-compression-summary",eL="data-urlRead",eg="[Note from the system: you read",eM="(?:an?\\s+|another\\s+)?",ec=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+)?${eM}(?:new|fresh)\\s+(?:chat|conversation)|${eM}(?:new|fresh)\\s+(?:thread|session))(?:[\\s,]+(?:please|pls|plz|now|thanks|thank you|thx|ty))*$`),eN=/^[^\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(eN,"").replace(eh,"").trim();return""!==t&&ec.test(t)}function eD(e){return{type:eL,data:e}}function ep(e){return Array.isArray(e)?e.filter(e=>"string"==typeof e?.url).map(e=>eD({url:e.url,partial:!1!==e.partial})):[]}let eC=new Set(["OpenAI",s,"Google"]);function em(e){return"string"==typeof e&&eC.has(e)}let ef=/^auto \((.+)\)$/;function eU(e){let t=e.match(ef);return t?t[1]:e}let eG=e=>{for(let[t,E]of Object.entries(q))if(E.some(t=>e.startsWith(t)))return t;return null},ey=/image|embedding|tts|realtime|transcribe|audio/;function eH(e,{matchUnknownByPrefix:t=!1}){for(let[t,E]of Object.entries(j))if(E.includes(e))return em(t)?t:null;if(!t||k.includes(e)||ey.test(e))return null;let E=eG(e);return em(E)?E:null}let eF=(e,t={})=>{if(!e||0===e.length)return[];let E=new Set;for(let r of e){let e=eH(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=eH(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 eY(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 ev(e){return W.includes(e)}function eV(e){let t=t=>{let E=e?.[t];return z.includes(E)?E:$[t]};return{OpenAI:t("OpenAI"),[s]:t(s),Google:t("Google")}}export{k as ALL_MODELS,A as ALL_PROVIDERS,W as ALL_REASONING_MODELS,en as APPLICATION_NAME,q as APPROXIMATE_MODELS_PER_PROVIDER,eo as CAPABILITIES,et as CHAT_COMPLETION_MARKER_KEY,el as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,eR as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eu as CONTEXT_COMPRESSION_KEEP_IMAGES,eA as CONTEXT_COMPRESSION_KEEP_RECENT,eP as CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES,eI as CONTEXT_COMPRESSION_SUMMARY_ID,S as DEFAULT_PROVIDER,$ as DEFAULT_RESPONSE_SPEED,e_ as DEFAULT_TOOL_LOADING_LABEL,J as DIGGIDY_CHAT_ID_HEADER,ee as DIGGIDY_CHAT_TIMESTAMP_HEADER,t as HARD_CATEGORIES,eS as MAX_OUTPUT_TOKENS,B as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,j as MODELS_PER_PROVIDER,g as MODEL_ANTHROPIC_LOW,L as MODEL_ANTHROPIC_MEDIUM,I as MODEL_ANTHROPIC_TOP,C as MODEL_CHAT_SUMMARY,D as MODEL_DEV,V as MODEL_DISPLAY_NAMES,F as MODEL_EMBEDDING_TEXT,b as MODEL_GENERATE_IMAGE,w as MODEL_GENERATE_IMAGE_PRECISE,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,d as MODEL_PERPLEXITY_SEARCH,y as MODEL_REVIEW_TRUST_PANEL,H as MODEL_REVIEW_TRUST_PANEL_GOOGLE,m as MODEL_SEARCH_DECOMPOSER,N as MODEL_SONAR,h as MODEL_SONAR_PRO,ea as PLAN_BASIC,eO 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,Q as PROVIDER_ROLE_MAP,l as PROVIDER_SUMMARY,z as RESPONSE_SPEEDS,x as RESPONSE_SPEED_BALANCED,X as RESPONSE_SPEED_FAST,K as RESPONSE_SPEED_THOROUGH,Z as RESPONSE_SPEED_TO_EFFORT,i as ROLE_ASSISTANT,a as ROLE_SYSTEM,O as ROLE_USER,v as SEARCH_DECOMPOSE_TIMEOUT_MS,Y as SEARCH_QUERY_TIMEOUT_MS,eE as SORT_BY_TIMESTAMP,er as SORT_BY_TOKEN_USAGE,es as TOOL_LOADING_LABELS,eg as URL_READ_NOTE_PREFIX,eL as URL_READ_PART_TYPE,eG as findProvider,eT as getCompressionEmergencyThreshold,eb as getModelsGroupedByProvider,eF as getProvidersFromModels,ew as hasMultipleModelsPerProvider,eY as isEntitled,ed as isExplicitNewChatRequest,E as isHardCategory,eB as isModelAllowedForPlan,em as isRealProvider,ev as isReasoningModel,ep as readUrlParts,eV as resolveResponseSpeed,eU as stripAutoWrapper,n as ActionColor,eD as toUrlReadPart};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.63.0",
3
+ "version": "4.64.1",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {