@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.
- package/dist/constants/index.js +1 -0
- package/dist/constants/memory.js +1 -0
- package/dist/constants/theme-types.js +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.js +1 -1
- package/dist/utilities/index.js +1 -0
- package/dist/utilities/newChatRequest.js +1 -0
- package/dist/utilities/newsBrief.js +1 -0
- package/dist/utilities/readUrlParts.js +1 -0
- package/package.json +6 -1
|
@@ -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
|
-
|
|
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.
|
|
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",
|