@versini/sassysaint-common 4.54.0 → 4.55.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 +75 -24
- package/dist/index.js +1 -1
- package/package.json +34 -35
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-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5", "gemini-3.5-flash-lite", "gemini-3.
|
|
22
|
+
export declare const ALL_MODELS: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5", "gemini-3.5-flash-lite", "gemini-3.7-flash", "gemini-3-pro-image"];
|
|
23
23
|
|
|
24
24
|
export declare const ALL_PROVIDERS: readonly ["OpenAI", "Anthropic", "Google"];
|
|
25
25
|
|
|
@@ -120,16 +120,30 @@ export declare const CHAT_COMPLETION_MARKER_KEY = "complete";
|
|
|
120
120
|
export declare type ColorMap = Partial<Record<ActionColor, string>>;
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* context window and fail the request opaquely. These ceilings let uncompressed
|
|
127
|
-
* chats grow well past the normal threshold while still forcing a last-resort
|
|
128
|
-
* compression before the context overflows.
|
|
123
|
+
* The ONLY threshold that triggers context compression, and it is a safety
|
|
124
|
+
* floor rather than an optimisation: an unbounded conversation would eventually
|
|
125
|
+
* exceed the model's context window and fail the request opaquely.
|
|
129
126
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
127
|
+
* There was a routine threshold above this (50k accumulated tokens) until
|
|
128
|
+
* #3184, on the assumption that summarising older turns saved money. The
|
|
129
|
+
* summary is regenerated every turn and sits at the head of the message array,
|
|
130
|
+
* so it invalidates the Anthropic cache prefix the whole history is read from —
|
|
131
|
+
* turning a 0.1x read of the full conversation into a 1.25x re-write of the
|
|
132
|
+
* compressed one, every turn, plus a summariser call on the critical path.
|
|
133
|
+
* `pnpm cache:probe --compressed` measured 12.19x the effective input of not
|
|
134
|
+
* compressing ON A DOCUMENT CHAT, warm cache, Anthropic; see the block at the
|
|
135
|
+
* compression call site in vercelEngine.ts for why none of those three
|
|
136
|
+
* qualifiers may be dropped when quoting that number.
|
|
137
|
+
*
|
|
138
|
+
* BEWARE THE UNIT. Both floors are compared against the client's accumulated
|
|
139
|
+
* `contextTokenUsage`, which sums each turn's full prompt plus output, so it
|
|
140
|
+
* grows quadratically in turns while real context grows linearly. They are not
|
|
141
|
+
* context-window percentages and must not be read as any: 100_000 accumulated
|
|
142
|
+
* is reached at roughly 13.5k of real context in an ordinary text chat. Fixing
|
|
143
|
+
* the unit is #3180; until then these numbers are calibration, not capacity.
|
|
144
|
+
*
|
|
145
|
+
* Premium's floor is far higher because its plans unlock large-context models
|
|
146
|
+
* and a flat low value would compress those chats needlessly early.
|
|
133
147
|
*
|
|
134
148
|
*/
|
|
135
149
|
export declare const CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD = 100000;
|
|
@@ -141,8 +155,9 @@ export declare const CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM = 800000;
|
|
|
141
155
|
* are compressed into a text summary. Compression flattens older turns into
|
|
142
156
|
* image-blind text; without this the original upload and every previously
|
|
143
157
|
* generated image would silently vanish from what the model can see, breaking
|
|
144
|
-
* iterative image editing and vision follow-ups. Bounded so a few images
|
|
145
|
-
*
|
|
158
|
+
* iterative image editing and vision follow-ups. Bounded so a few images cannot
|
|
159
|
+
* stop an emergency compression from shrinking the context below the window it
|
|
160
|
+
* is protecting.
|
|
146
161
|
*/
|
|
147
162
|
export declare const CONTEXT_COMPRESSION_KEEP_IMAGES = 3;
|
|
148
163
|
|
|
@@ -154,16 +169,34 @@ export declare const CONTEXT_COMPRESSION_KEEP_IMAGES = 3;
|
|
|
154
169
|
export declare const CONTEXT_COMPRESSION_KEEP_RECENT = 4;
|
|
155
170
|
|
|
156
171
|
/**
|
|
157
|
-
*
|
|
158
|
-
*
|
|
172
|
+
* Byte budget for attached DOCUMENTS (non-image file parts) carried across a
|
|
173
|
+
* compression, measured on the `data:` URL string, newest kept first.
|
|
174
|
+
*
|
|
175
|
+
* A budget rather than a count, because documents vary by three orders of
|
|
176
|
+
* magnitude where images do not: one 20 MB PDF and twenty 40 KB ones are both
|
|
177
|
+
* plausible, and only bytes describe the wall we are avoiding. Two walls,
|
|
178
|
+
* specifically — MongoDB's 16 MiB per-document limit, where
|
|
179
|
+
* `persistChatSession` throws into a catch that only logs, and the route's 30
|
|
180
|
+
* MB bodyLimit, which returns a raw 413.
|
|
181
|
+
*
|
|
182
|
+
* There is deliberately no per-CHAT ceiling upstream: MAX_PDF_FILE_SIZE and
|
|
183
|
+
* MAX_TOTAL_UPLOAD_BYTES are both per-TURN, so before this budget existed a
|
|
184
|
+
* user attaching a document per turn accumulated them without bound (measured:
|
|
185
|
+
* 12 documents after 12 turns, and one still carried 50 unrelated turns later).
|
|
186
|
+
*
|
|
187
|
+
* 8 MiB leaves room for the rest of the chat inside the 16 MiB document limit.
|
|
188
|
+
* Anything dropped is ANNOUNCED in the summary text — a silent drop is the
|
|
189
|
+
* exact bug #3178 fixed, and a cap without the announcement would reintroduce
|
|
190
|
+
* it.
|
|
191
|
+
*
|
|
159
192
|
*/
|
|
160
|
-
export declare const
|
|
193
|
+
export declare const CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES: number;
|
|
161
194
|
|
|
162
195
|
/**
|
|
163
|
-
*
|
|
164
|
-
*
|
|
196
|
+
* Stable ID assigned to the summary message produced by context compression.
|
|
197
|
+
* Used to identify (and hide) the summary in the UI.
|
|
165
198
|
*/
|
|
166
|
-
export declare const
|
|
199
|
+
export declare const CONTEXT_COMPRESSION_SUMMARY_ID = "context-compression-summary";
|
|
167
200
|
|
|
168
201
|
/**
|
|
169
202
|
* CSS variables that can be dynamically applied to document.documentElement.
|
|
@@ -542,7 +575,7 @@ export declare const MODEL_GENERATE_IMAGE = "gemini-3-pro-image";
|
|
|
542
575
|
|
|
543
576
|
export declare const MODEL_GOOGLE_MEDIUM = "gemini-3.5-flash-lite";
|
|
544
577
|
|
|
545
|
-
export declare const MODEL_GOOGLE_TOP = "gemini-3.
|
|
578
|
+
export declare const MODEL_GOOGLE_TOP = "gemini-3.7-flash";
|
|
546
579
|
|
|
547
580
|
/**
|
|
548
581
|
* The humanizer's audit pass deliberately runs on a different model FAMILY than
|
|
@@ -560,7 +593,7 @@ export declare const MODEL_HUMANIZE_AUDIT = "gpt-5.6-terra";
|
|
|
560
593
|
* silently move it (it previously rode MODEL_GOOGLE_MEDIUM and was downgraded
|
|
561
594
|
* to Flash-Lite by exactly that).
|
|
562
595
|
*/
|
|
563
|
-
export declare const MODEL_HUMANIZE_REWRITE = "gemini-3.
|
|
596
|
+
export declare const MODEL_HUMANIZE_REWRITE = "gemini-3.7-flash";
|
|
564
597
|
|
|
565
598
|
/**
|
|
566
599
|
* Bumped nano→mini (Track 2 T7): memory extraction now emits structured
|
|
@@ -652,14 +685,32 @@ export declare const MODEL_PERPLEXITY_SEARCH = "perplexity-search";
|
|
|
652
685
|
*/
|
|
653
686
|
export declare const MODEL_REVIEW_TRUST_PANEL = "gpt-5.6-luna";
|
|
654
687
|
|
|
688
|
+
/**
|
|
689
|
+
* The Google seat on the same panel, split out for the same reason as the
|
|
690
|
+
* OpenAI seat above: it read MODEL_GOOGLE_TOP, so a Google catalog bump moved a
|
|
691
|
+
* rater without anyone deciding to. It is pinned to the id that actually
|
|
692
|
+
* labelled both fixtures, so unlike the OpenAI seat this pin PRESERVES
|
|
693
|
+
* comparability rather than breaking it — `panel` in each fixture records
|
|
694
|
+
* gemini-3.6-flash, and README.md's per-rater marginals and leave-one-out table
|
|
695
|
+
* describe that id.
|
|
696
|
+
*
|
|
697
|
+
* No picker tier holds this id any more, so its price comes from the historical
|
|
698
|
+
* EXACT row in modelPricing.ts rather than from a tier row. Keep that row as
|
|
699
|
+
* long as this slot points here.
|
|
700
|
+
*
|
|
701
|
+
*/
|
|
702
|
+
export declare const MODEL_REVIEW_TRUST_PANEL_GOOGLE = "gemini-3.6-flash";
|
|
703
|
+
|
|
655
704
|
/**
|
|
656
705
|
* The decomposer sits in front of every complex search, so its latency is paid
|
|
657
706
|
* on the critical path before a single result exists. Measured over 7 fixtures
|
|
658
707
|
* x 3 runs (GH #3018): Flash-Lite p50 644ms / p90 720ms, against gpt-5.4-mini's
|
|
659
708
|
* p50 1186ms / p90 1515ms and gemini-3.6-flash's p50 2037ms — the Google TOP
|
|
660
|
-
* tier
|
|
661
|
-
*
|
|
662
|
-
*
|
|
709
|
+
* tier of the day was SLOWER than either, so this slot must not be pointed at
|
|
710
|
+
* it. That tier has since moved to gemini-3.7-flash and has not been
|
|
711
|
+
* re-measured, so treat the gap as unverified rather than closed. Flash-Lite
|
|
712
|
+
* also decomposed better, splitting on real axes (one query per country) where
|
|
713
|
+
* mini emitted near-duplicate rewordings of the whole question.
|
|
663
714
|
*/
|
|
664
715
|
export declare const MODEL_SEARCH_DECOMPOSER = "gemini-3.5-flash-lite";
|
|
665
716
|
|
|
@@ -680,7 +731,7 @@ export declare const MODEL_SONAR_PRO = "sonar-pro";
|
|
|
680
731
|
export declare const MODELS_PER_PROVIDER: {
|
|
681
732
|
readonly OpenAI: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
|
|
682
733
|
readonly Anthropic: readonly ["claude-opus-5", "claude-haiku-4-5", "claude-sonnet-5"];
|
|
683
|
-
readonly Google: readonly ["gemini-3.5-flash-lite", "gemini-3.
|
|
734
|
+
readonly Google: readonly ["gemini-3.5-flash-lite", "gemini-3.7-flash"];
|
|
684
735
|
readonly Perplexity: readonly ["sonar", "sonar-pro", "perplexity-search"];
|
|
685
736
|
};
|
|
686
737
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],
|
|
1
|
+
let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],E=["identity","bio","constraint","professional"],t=e=>E.includes(e);var O,n=((O={})[O.NewChat=0]="NewChat",O[O.Prompts=1]="Prompts",O[O.Attachment=2]="Attachment",O[O.PrivateChat=3]="PrivateChat",O[O.Send=4]="Send",O[O.Header=5]="Header",O[O.Provider=6]="Provider",O[O.Logo=7]="Logo",O[O.Placeholder=8]="Placeholder",O[O.Footer=9]="Footer",O);let r="system",i="user",o="assistant",a="OpenAI",_="Anthropic",T="Google",s="Summary",R="Memory",S="Perplexity",A=a,I=[a,_,T],l="gpt-5.6-sol",L="gpt-5.6-terra",M="gpt-5.6-luna",P="claude-opus-5",g="claude-sonnet-5",N="claude-haiku-4-5",u="gemini-3.7-flash",c="gemini-3.5-flash-lite",D="sonar",d="sonar-pro",C="perplexity-search",h="openai/gpt-oss-20b:free",p="gpt-5.6-luna",U="gpt-5.6-luna",G="gemini-3.5-flash-lite",m="gemini-3.7-flash",f="gpt-5.6-terra",H="gpt-5.6-luna",y="gpt-5.6-luna",B="gemini-3.6-flash",Y="text-embedding-3-small",b="gemini-3-pro-image",v=5,F=1e4,V=3e3,w={[l]:"GPT-5.6 Sol",[L]:"GPT-5.6 Terra",[M]:"GPT-5.6 Luna",[P]:"Claude Opus 5",[g]:"Claude Sonnet 5",[N]:"Claude Haiku 4.5",[u]:"Gemini 3.7 Flash",[c]:"Gemini 3.5 Flash-Lite",[D]:"Sonar",[d]:"Sonar Pro",[C]:"Perplexity Search",[b]:"Nano Banana 3 Pro"},W=[l,L,M,P,g,N,c,u,b],X=[l,L,M,P,g,u,c],k={[a]:[l,L,M],[_]:[P,N,g],[T]:[c,u],[S]:[D,d,C]},x={[a]:[r,i,o],[_]:[i,o],[s]:[i,o],[R]:[i,o],[T]:[i,o],[S]:[i,o]},K={[_]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-4","claude-3"],[a]:["gpt-","o3","o4"],[T]:["gemini"],[S]:["sonar"]},Z="x-diggidy-chat-id",z="x-diggidy-chat-timestamp",j="complete",Q="timestamp",$="tokenUsage",q="Diggidy",J="sassy:basic",ee="sassy:plus",eE="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",PRODUCTS:"getProducts",REVIEW_TRUST:"getReviewTrust",STREAMING_PICKS:"getStreamingPicks",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},eO={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.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..."},en="Using tools...",er=1e5,ei=8e5;function eo(e){return e===eE?ei:er}let ea=16384,e_=4,eT=3,es=8388608,eR="context-compression-summary",eS=new Set(["OpenAI",_,"Google"]);function eA(e){return"string"==typeof e&&eS.has(e)}let eI=/^auto \((.+)\)$/;function el(e){let E=e.match(eI);return E?E[1]:e}let eL=e=>{for(let[E,t]of Object.entries(K))if(t.some(E=>e.startsWith(E)))return E;return null},eM=e=>{if(!e||0===e.length)return[];let E=new Set;for(let t of e)for(let[e,O]of Object.entries(k))O.includes(t)&&("OpenAI"===e||e===_||"Google"===e)&&E.add(e);return I.filter(e=>E.has(e))},eP=e=>{let E=new Map;if(!e||0===e.length)return E;for(let t of e)for(let[e,O]of Object.entries(k))if(O.includes(t)){E.has(e)||E.set(e,[]),E.get(e)?.push(t);break}return E},eg=e=>{for(let E of eP(e).values())if(E.length>1)return!0;return!1},eN=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function eu(e,E,t){if(!E||Array.isArray(E)&&0===E.length)return!0;let O=e instanceof Set?e:e?new Set(e):null;return!!O&&0!==O.size&&("string"==typeof E?O.has(E):t?.any===!0?E.some(e=>O.has(e)):E.every(e=>O.has(e)))}function ec(e){return X.includes(e)}export{W as ALL_MODELS,I as ALL_PROVIDERS,X as ALL_REASONING_MODELS,q as APPLICATION_NAME,K as APPROXIMATE_MODELS_PER_PROVIDER,et as CAPABILITIES,j as CHAT_COMPLETION_MARKER_KEY,er as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,ei as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eT as CONTEXT_COMPRESSION_KEEP_IMAGES,e_ as CONTEXT_COMPRESSION_KEEP_RECENT,es as CONTEXT_COMPRESSION_MAX_DOCUMENT_BYTES,eR as CONTEXT_COMPRESSION_SUMMARY_ID,A as DEFAULT_PROVIDER,en as DEFAULT_TOOL_LOADING_LABEL,Z as DIGGIDY_CHAT_ID_HEADER,z as DIGGIDY_CHAT_TIMESTAMP_HEADER,E as HARD_CATEGORIES,ea as MAX_OUTPUT_TOKENS,v as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,k as MODELS_PER_PROVIDER,N as MODEL_ANTHROPIC_LOW,g as MODEL_ANTHROPIC_MEDIUM,P as MODEL_ANTHROPIC_TOP,U as MODEL_CHAT_SUMMARY,h as MODEL_DEV,w as MODEL_DISPLAY_NAMES,Y as MODEL_EMBEDDING_TEXT,b as MODEL_GENERATE_IMAGE,c as MODEL_GOOGLE_MEDIUM,u as MODEL_GOOGLE_TOP,f as MODEL_HUMANIZE_AUDIT,m as MODEL_HUMANIZE_REWRITE,p as MODEL_MEMORY_INFERENCE,H as MODEL_NUTRITION_SEARCH,M as MODEL_OPENAI_LOW,L as MODEL_OPENAI_MEDIUM,l as MODEL_OPENAI_TOP,C as MODEL_PERPLEXITY_SEARCH,y as MODEL_REVIEW_TRUST_PANEL,B as MODEL_REVIEW_TRUST_PANEL_GOOGLE,G as MODEL_SEARCH_DECOMPOSER,D as MODEL_SONAR,d as MODEL_SONAR_PRO,J as PLAN_BASIC,ee as PLAN_PLUS,eE as PLAN_PREMIUM,_ as PROVIDER_ANTHROPIC,T as PROVIDER_GOOGLE,R as PROVIDER_MEMORY,a as PROVIDER_OPENAI,S as PROVIDER_PERPLEXITY,x as PROVIDER_ROLE_MAP,s as PROVIDER_SUMMARY,o as ROLE_ASSISTANT,r as ROLE_SYSTEM,i as ROLE_USER,V as SEARCH_DECOMPOSE_TIMEOUT_MS,F as SEARCH_QUERY_TIMEOUT_MS,Q as SORT_BY_TIMESTAMP,$ as SORT_BY_TOKEN_USAGE,eO as TOOL_LOADING_LABELS,eL as findProvider,eo as getCompressionEmergencyThreshold,eP as getModelsGroupedByProvider,eM as getProvidersFromModels,eg as hasMultipleModelsPerProvider,eu as isEntitled,t as isHardCategory,eN as isModelAllowedForPlan,eA as isRealProvider,ec as isReasoningModel,el as stripAutoWrapper,n as ActionColor};
|
package/package.json
CHANGED
|
@@ -1,36 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
2
|
+
"name": "@versini/sassysaint-common",
|
|
3
|
+
"version": "4.55.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "Arno Versini",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build:check": "tsc",
|
|
17
|
+
"build:common": "npm-run-all build",
|
|
18
|
+
"build:js": "rslib build",
|
|
19
|
+
"build:types": "echo 'Types now built with rslib'",
|
|
20
|
+
"build": "npm-run-all --serial clean build:check build:js",
|
|
21
|
+
"clean": "rimraf dist tmp",
|
|
22
|
+
"comments:fix": "comments \"src/**/*.ts*\" --merge-line-comments",
|
|
23
|
+
"dev:js": "rslib build --watch",
|
|
24
|
+
"dev:types": "echo 'Types now watched with rslib'",
|
|
25
|
+
"dev": "rslib build --watch",
|
|
26
|
+
"fix": "npm-run-all lint:fix comments:fix",
|
|
27
|
+
"lint": "biome lint src",
|
|
28
|
+
"lint:fix": "biome check src --write --no-errors-on-unmatched",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:coverage": "vitest run --coverage",
|
|
31
|
+
"test:coverage:ui": "vitest --coverage --ui",
|
|
32
|
+
"test:watch": "vitest",
|
|
33
|
+
"watch": "npm-run-all dev"
|
|
34
|
+
}
|
|
35
|
+
}
|