@popmelt.com/core 0.27.1 → 0.28.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.
Files changed (55) hide show
  1. package/claude-plugin/.claude-plugin/plugin.json +1 -1
  2. package/codex-plugin/.codex-plugin/plugin.json +1 -1
  3. package/dist/ParticipantRuntime-4NMUTZL3.mjs +139 -0
  4. package/dist/PopmeltTasteConnectedPane-ZMJXKDPJ.mjs +221 -0
  5. package/dist/PreviewRuntime-AZAHK27Q.mjs +2 -0
  6. package/dist/bridge-entry.mjs +2 -229
  7. package/dist/browser-runtime-57XUOV3C.mjs +2 -0
  8. package/dist/browser.mjs +1 -1
  9. package/dist/chunk-3LBOX7HQ.mjs +3 -0
  10. package/dist/chunk-BISCKKOX.mjs +2 -0
  11. package/dist/chunk-DPSBNNGU.mjs +2 -0
  12. package/dist/chunk-GL4I4MI6.mjs +3 -0
  13. package/dist/chunk-HGW2U6PD.mjs +2 -0
  14. package/dist/chunk-HPQJKWK5.mjs +1 -0
  15. package/dist/chunk-JNR6PO2Z.mjs +369 -0
  16. package/dist/chunk-LVEMYZOA.mjs +2 -0
  17. package/dist/chunk-M3MBL5NR.mjs +2 -0
  18. package/dist/chunk-O4HZP3RP.mjs +2 -0
  19. package/dist/chunk-PKTQWFUA.mjs +2 -0
  20. package/dist/chunk-Q5PC5FWC.mjs +347 -0
  21. package/dist/chunk-QXVMGZFP.mjs +1 -0
  22. package/dist/chunk-R5RMIYS5.mjs +77 -0
  23. package/dist/chunk-WNZFCDVR.mjs +289 -0
  24. package/dist/chunk-XTOCFTVW.mjs +2 -0
  25. package/dist/{chunk-CLDWTCKX.mjs → chunk-YBULEE33.mjs} +1 -1
  26. package/dist/chunk-YIAZGECE.mjs +2 -0
  27. package/dist/cli.mjs +169 -106
  28. package/dist/focus-inspection-ZKWDPDRI.mjs +2 -0
  29. package/dist/index-CHp2bgs1.d.mts +565 -0
  30. package/dist/index.mjs +1 -1
  31. package/dist/memory-legacy.d.mts +1 -489
  32. package/dist/memory-legacy.mjs +1 -1
  33. package/dist/memory-store.d.mts +2 -660
  34. package/dist/memory-store.mjs +1 -3
  35. package/dist/plugin-astro.mjs +1 -1
  36. package/dist/plugin-nuxt.mjs +1 -1
  37. package/dist/plugin-vite.mjs +1 -1
  38. package/dist/server.d.mts +3 -291
  39. package/dist/server.mjs +7 -234
  40. package/dist/taste-proposal-session-XU4N7RUV.mjs +2 -0
  41. package/dist/types-Bur49CLH.d.mts +349 -0
  42. package/dist/workspace-snapshot-EJQHHDQ4.mjs +2 -0
  43. package/package.json +23 -25
  44. package/dist/ParticipantRuntime-TWGYNKIS.mjs +0 -139
  45. package/dist/PopmeltTasteConnectedPane-WDF556E2.mjs +0 -81
  46. package/dist/PreviewRuntime-KGLZJGUN.mjs +0 -2
  47. package/dist/browser-runtime-PFJI3VEQ.mjs +0 -2
  48. package/dist/chunk-3PVLCKSV.mjs +0 -370
  49. package/dist/chunk-7MGWRICI.mjs +0 -77
  50. package/dist/chunk-7YCLSSQA.mjs +0 -2
  51. package/dist/chunk-D7HY2EDH.mjs +0 -2
  52. package/dist/chunk-TSY2K45H.mjs +0 -2
  53. package/dist/chunk-YC7B37F6.mjs +0 -1
  54. package/dist/chunk-YMCTJKYN.mjs +0 -345
  55. package/dist/server-J5NV3BMT.mjs +0 -241
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ export{w as createProposalSession,x as tasteProposalSession}from"./chunk-O4HZP3RP.mjs";import"./chunk-XTOCFTVW.mjs";
@@ -0,0 +1,349 @@
1
+ declare const STICKER_COLOR_NAMES: readonly ["slate", "gray", "zinc", "neutral", "stone", "red", "orange", "amber", "yellow", "lime", "green", "emerald", "teal", "cyan", "sky", "blue", "indigo", "violet", "purple", "fuchsia", "pink", "rose"];
2
+ type StickerColorName = (typeof STICKER_COLOR_NAMES)[number];
3
+
4
+ declare const STICKER_FAMILIES: readonly ["padding", "margin", "border", "radius", "stack", "grid", "text", "color", "transform", "opacity"];
5
+ type StickerFamily = (typeof STICKER_FAMILIES)[number];
6
+ type StickerSubproperty = 'all' | 'x' | 'y' | 'top' | 'right' | 'bottom' | 'left' | 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left' | 'vertical' | 'horizontal' | 'direction' | 'gap' | 'align' | 'justify' | 'rows' | 'columns' | 'size' | 'weight' | 'line-height' | 'letter-spacing' | 'text-align' | 'color' | 'translate' | 'scale' | 'rotate' | 'opacity' | 'mix-blend' | StickerColorName;
7
+
8
+ type Provider = 'claude' | 'codex' | 'copilot' | 'omp';
9
+
10
+ /** Renderer-owned identity for a target that does not exist as a DOM node. */
11
+ type OpaqueTargetReference = {
12
+ adapter: string;
13
+ key: string;
14
+ };
15
+
16
+ /** Local preview protocol. Peers never supply reducer actions or host authority. */
17
+ type PeerAction = {
18
+ type: 'tokens';
19
+ family?: StickerFamily;
20
+ subproperty?: StickerSubproperty;
21
+ } | {
22
+ type: 'inspect';
23
+ selector: string;
24
+ target?: OpaqueTargetReference;
25
+ properties?: string[];
26
+ plane?: 'own' | 'host';
27
+ } | {
28
+ type: 'comment';
29
+ selector: string;
30
+ target?: OpaqueTargetReference;
31
+ text: string;
32
+ } | {
33
+ type: 'clear';
34
+ selector: string;
35
+ kind: 'comment' | 'style' | 'all';
36
+ } | {
37
+ type: 'style';
38
+ selector: string;
39
+ property: string;
40
+ value: string;
41
+ } | {
42
+ type: 'style';
43
+ selector: string;
44
+ token: string;
45
+ family?: StickerFamily;
46
+ } | {
47
+ type: 'attention';
48
+ selector: string | null;
49
+ target?: OpaqueTargetReference;
50
+ activity?: 'looking' | 'working';
51
+ } | {
52
+ type: 'undo' | 'redo' | 'send' | 'rebase';
53
+ };
54
+
55
+ /** A capability for a person/agent. Keep out of URLs, logs, and peer snapshots. */
56
+ type ParticipantCredential = {
57
+ participantId: string;
58
+ token: string;
59
+ };
60
+
61
+ /** Browser hosting is replaceable; this boundary owns only local agent enrollment. */
62
+ type ParticipantAgentView = {
63
+ act(action: PeerAction): Promise<unknown>;
64
+ close(): Promise<void>;
65
+ };
66
+ type ParticipantAgentAdapter = (credential: ParticipantCredential) => Promise<ParticipantAgentView>;
67
+
68
+ /** Public endpoints only. Signing keys and credentials never belong here. */
69
+ type CloudTasteEnvironment = 'production' | 'staging';
70
+
71
+ type ImprintExplanationKind = 'intention' | 'principle' | 'pattern';
72
+ type ImprintExplanationState = 'emerging' | 'testing' | 'grounded' | 'challenged' | 'retired';
73
+ type ImprintScopeKind = 'project' | 'route' | 'component' | 'selector' | 'file';
74
+ type ImprintScope = {
75
+ kind: ImprintScopeKind;
76
+ values: string[];
77
+ };
78
+ /** A store-qualified address; abstraction level is intentionally not encoded. */
79
+ type ImprintExplanationRef = {
80
+ storeId: string;
81
+ explanationId: string;
82
+ };
83
+ type ImprintEvidence = {
84
+ id: string;
85
+ kind: 'observation' | 'application' | 'confirmation' | 'correction' | 'exception' | 'rejection';
86
+ stance: 'supports' | 'challenges' | 'excepts';
87
+ summary: string;
88
+ threadId: string;
89
+ jobId: string;
90
+ createdAt: string;
91
+ };
92
+ type ImprintExplanation = {
93
+ id: string;
94
+ kind: ImprintExplanationKind;
95
+ statement: string;
96
+ rationale: string;
97
+ scope: ImprintScope;
98
+ state: ImprintExplanationState;
99
+ createdAt: string;
100
+ updatedAt: string;
101
+ evidence: ImprintEvidence[];
102
+ supersededBy?: string;
103
+ };
104
+ type ImprintConcrete = {
105
+ id: string;
106
+ modelPath: string;
107
+ value: unknown;
108
+ createdAt: string;
109
+ updatedAt: string;
110
+ };
111
+ type ImprintTopologyRelationType = 'expresses' | 'excepts';
112
+ /**
113
+ * Historical relation names remain readable so append-only Imprint journals can
114
+ * be replayed. New writers must use ImprintTopologyRelationType.
115
+ */
116
+ type LegacyImprintRelationType = 'operationalizes' | 'refines' | 'supports' | 'contradicts' | 'instantiates' | 'supersedes';
117
+ type ImprintRelationType = ImprintTopologyRelationType | LegacyImprintRelationType;
118
+ type ImprintRelation = {
119
+ id: string;
120
+ type: ImprintRelationType;
121
+ /** The source explanation is always owned by this relation's store. */
122
+ fromId: string;
123
+ /** Omitted for a target in this relation's owning store. */
124
+ toStoreId?: string;
125
+ toId: string;
126
+ rationale: string;
127
+ createdAt: string;
128
+ };
129
+ type QualifiedImprintRelation = Omit<ImprintRelation, 'fromId' | 'toId' | 'toStoreId'> & {
130
+ from: ImprintExplanationRef;
131
+ to: ImprintExplanationRef;
132
+ };
133
+ type ImprintGraph = {
134
+ version: 1;
135
+ projectId: string;
136
+ createdAt: string;
137
+ updatedAt: string;
138
+ head: {
139
+ sequence: number;
140
+ hash: string | null;
141
+ };
142
+ explanations: ImprintExplanation[];
143
+ concrete: ImprintConcrete[];
144
+ relations: ImprintRelation[];
145
+ };
146
+ type ImprintMutation = {
147
+ op: 'add_explanation';
148
+ explanation: ImprintExplanation;
149
+ } | {
150
+ op: 'replace_explanation';
151
+ explanation: ImprintExplanation;
152
+ } | {
153
+ op: 'remove_explanation';
154
+ explanationId: string;
155
+ } | {
156
+ op: 'add_concrete';
157
+ concrete: ImprintConcrete;
158
+ } | {
159
+ op: 'remove_concrete';
160
+ concreteId: string;
161
+ } | {
162
+ op: 'add_evidence';
163
+ explanationId: string;
164
+ evidence: ImprintEvidence;
165
+ } | {
166
+ op: 'revise_explanation';
167
+ explanationId: string;
168
+ patch: Partial<Pick<ImprintExplanation, 'statement' | 'rationale' | 'scope' | 'state' | 'supersededBy'>>;
169
+ updatedAt: string;
170
+ } | {
171
+ op: 'add_relation';
172
+ relation: ImprintRelation;
173
+ } | {
174
+ op: 'remove_relation';
175
+ relationId: string;
176
+ };
177
+ type ImprintTransaction = {
178
+ version: 1;
179
+ sequence: number;
180
+ transactionId: string;
181
+ projectId: string;
182
+ committedAt: string;
183
+ previousHash: string | null;
184
+ hash: string;
185
+ source: {
186
+ kind: 'automatic' | 'grounding' | 'correction' | 'migration' | 'undo';
187
+ threadId: string;
188
+ jobId: string;
189
+ };
190
+ summary: string;
191
+ mutations: ImprintMutation[];
192
+ inverseMutations: ImprintMutation[];
193
+ undoesTransactionId?: string;
194
+ };
195
+ type ImprintSummaryKind = 'added' | 'strengthened' | 'refined' | 'challenged' | 'exception' | 'consolidated';
196
+ type ImprintThreadSummary = {
197
+ transactionId: string;
198
+ coalescedTransactionIds?: string[];
199
+ additionalObservationCount?: number;
200
+ kind: ImprintSummaryKind;
201
+ title: string;
202
+ detail: string;
203
+ changes: Array<{
204
+ explanationId: string;
205
+ action: 'added' | 'revised' | 'supported' | 'challenged' | 'retired' | 'related';
206
+ statement: string;
207
+ state: ImprintExplanationState;
208
+ }>;
209
+ grounding?: {
210
+ explanationId: string;
211
+ question: string;
212
+ state: 'testing';
213
+ };
214
+ resolvedAction?: ImprintGroundingAction;
215
+ };
216
+ type ImprintGroundingAction = 'yes' | 'this_time' | 'no';
217
+ type ImprintContext = {
218
+ explanations: Array<Pick<ImprintExplanation, 'id' | 'kind' | 'statement' | 'rationale' | 'scope' | 'state'> & {
219
+ concrete: Array<Pick<ImprintConcrete, 'id' | 'modelPath' | 'value'>>;
220
+ /** Internal canonical-memory address; omitted from model-facing prompts. */
221
+ memoryId?: string;
222
+ storeId?: string;
223
+ storeRoot?: string;
224
+ readOnly?: boolean;
225
+ }>;
226
+ truncated: boolean;
227
+ pendingGroundingExplanationIds?: string[];
228
+ correctionExplanationIds?: string[];
229
+ relations?: Array<Pick<ImprintRelation, 'id' | 'type' | 'fromId' | 'toId' | 'toStoreId' | 'rationale'> & {
230
+ /** The store that owns the relation record. */
231
+ storeId?: string;
232
+ readOnly?: boolean;
233
+ /** Present for composed reads; local single-store callers retain fromId/toId. */
234
+ from?: ImprintExplanationRef;
235
+ to?: ImprintExplanationRef;
236
+ }>;
237
+ /** Explicit target/reference language detected in the current request. */
238
+ retrievalIntent?: {
239
+ target: string;
240
+ reference: string;
241
+ };
242
+ /**
243
+ * Directly relevant rejected history. These are warnings, not active
244
+ * explanations, and therefore cannot be cited as Imprint usage.
245
+ */
246
+ historicalCaveats?: Array<Pick<ImprintExplanation, 'id' | 'kind' | 'statement' | 'rationale' | 'scope' | 'state'> & {
247
+ storeId?: string;
248
+ storeRoot?: string;
249
+ readOnly?: boolean;
250
+ }>;
251
+ unavailableStoreIds?: string[];
252
+ unavailableTopologyStoreIds?: string[];
253
+ };
254
+ type ImprintViewEvidence = {
255
+ id: string;
256
+ kind: 'judgment' | 'user_feedback' | 'project_state' | 'other';
257
+ summary: string;
258
+ createdAt: string;
259
+ participantKind: 'human' | 'ai' | 'system' | 'integration' | 'unknown';
260
+ threadId?: string;
261
+ jobId?: string;
262
+ };
263
+ type ImprintViewRelation = {
264
+ id: string;
265
+ type: ImprintRelationType | 'supersedes';
266
+ direction: 'outgoing' | 'incoming';
267
+ explanationId: string;
268
+ statement: string;
269
+ rationale: string;
270
+ };
271
+ type ImprintViewExplanation = {
272
+ id: string;
273
+ kind: ImprintExplanationKind;
274
+ state: ImprintExplanationState;
275
+ statement: string;
276
+ rationale: string;
277
+ scope: ImprintScope;
278
+ createdAt: string;
279
+ updatedAt: string;
280
+ evidenceCount: number;
281
+ recentEvidence: ImprintViewEvidence[];
282
+ concrete: ImprintConcrete[];
283
+ relations: ImprintViewRelation[];
284
+ sourceThreadIds: string[];
285
+ needsGrounding: boolean;
286
+ };
287
+ /** Human-shaped read model derived exclusively from canonical project memory. */
288
+ type ImprintView = {
289
+ head: {
290
+ sequence: number;
291
+ updatedAt: string;
292
+ };
293
+ counts: {
294
+ total: number;
295
+ emerging: number;
296
+ testing: number;
297
+ grounded: number;
298
+ challenged: number;
299
+ retired: number;
300
+ needsGrounding: number;
301
+ };
302
+ explanations: ImprintViewExplanation[];
303
+ };
304
+
305
+ type PopmeltOptions = {
306
+ port?: number;
307
+ projectRoot?: string;
308
+ tempDir?: string;
309
+ maxTurns?: number;
310
+ maxBudgetUsd?: number;
311
+ allowedTools?: string[];
312
+ claudePath?: string;
313
+ copilotPath?: string;
314
+ ompPath?: string;
315
+ provider?: Provider;
316
+ timeoutMs?: number;
317
+ devOrigin?: string;
318
+ /** Optional Chromium DevTools endpoint, e.g. http://127.0.0.1:9222. */
319
+ nativeCaptureUrl?: string;
320
+ restartMode?: 'embedded' | 'detached';
321
+ /** Requires a proven local host or participant host. Defaults to production; false disables cloud access. */
322
+ cloudTaste?: false | {
323
+ environment: CloudTasteEnvironment;
324
+ };
325
+ /** Internal opt-in. Collaboration authority is independent of app revisions. */
326
+ participantSessions?: {
327
+ /** Optional context metadata. Never used as a save, Send, or approval gate. */
328
+ sourceRevision?: () => Promise<string>;
329
+ agentAdapter?: ParticipantAgentAdapter;
330
+ };
331
+ };
332
+ type PopmeltHandle = {
333
+ port: number;
334
+ projectId: string;
335
+ storeId?: string;
336
+ /** Trusted local launch/recovery only; never publish this capability in HTML. */
337
+ participantHost?: () => Promise<ParticipantCredential>;
338
+ close: () => Promise<void>;
339
+ };
340
+ type MemoryReviewReceipt = {
341
+ status: 'committed' | 'not_ready' | 'rejected';
342
+ action: 'accept' | 'edit_and_accept' | 'reject' | 'defer';
343
+ proposalId: string;
344
+ decisionId?: string;
345
+ message: string;
346
+ headSequence?: number;
347
+ };
348
+
349
+ export type { ImprintThreadSummary as I, MemoryReviewReceipt as M, ParticipantAgentAdapter as P, QualifiedImprintRelation as Q, ImprintGroundingAction as a, ImprintView as b, ParticipantCredential as c, PopmeltHandle as d, ImprintGraph as e, ImprintTransaction as f, ImprintMutation as g, ImprintContext as h, ImprintSummaryKind as i, ImprintExplanationKind as j, ImprintScope as k, ImprintTopologyRelationType as l, ImprintExplanationRef as m, ImprintRelation as n, PopmeltOptions as o, ImprintConcrete as p, ImprintEvidence as q, ImprintExplanation as r, ImprintExplanationState as s, ImprintRelationType as t, ParticipantAgentView as u };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{b}from"./chunk-LVEMYZOA.mjs";import{v as k,d as $,o as S}from"./chunk-HGW2U6PD.mjs";function v(r,a){let o=r.filter(e=>(!a.kind||e.kind===a.kind)&&(!a.entryId||e.id===a.entryId)&&(!a.pathname||e.pathname===a.pathname)),t=Number.isInteger(a.limit)?Math.min(50,Math.max(1,a.limit)):20,l=Number.isInteger(a.offset)?Math.max(0,a.offset):0;return{entries:o.slice(l,l+t).map(({details:e,...d})=>a.entryId?{...d,details:e}:d),total:o.length,nextOffset:l+t<o.length?l+t:null}}function I(r,a,o,t=!1){if(!r||!a)return null;let l=i=>{let s=$(i),h=b(i),u=n=>n.width>0&&n.height>0&&n.bottom>0&&n.right>0&&n.top<innerHeight&&n.left<innerWidth;return i.isConnected&&s.width>0&&s.height>0&&(t||u(s)||!!h&&u(h))&&!S(i,'[data-popmelt-private], [aria-hidden="true"]')},e=i=>{try{let s=i?document.querySelectorAll(i):[];return s.length===1?s[0]:null}catch{return null}};if(a.startsWith("thread:")){let i=a.slice(7),s=[...document.querySelectorAll("[data-popmelt-thread-id]")].filter(n=>n.getAttribute("data-popmelt-thread-id")===i&&l(n));if(s.length===1)return s[0].querySelector("[data-popmelt-thread-header]");let h=r.annotations.filter(n=>n.threadId===i&&(!n.pathname||n.pathname===location.pathname)),u=new Set(h.map(n=>n.target?o.resolve(n.target)?.element??null:k(n.linkedSelector,n.elements?.[0])).filter(n=>!!n&&l(n)));return u.size===1?[...u][0]:null}let d=y(r,{entryId:a});if(!("entries"in d)||d.entries.length!==1)return null;let c=d.entries[0];if(c.pathname&&c.pathname!==location.pathname)return null;let m=r.annotations.find(i=>`draft:${i.id}`===a);if(m?.target){let i=o.resolve(m.target)?.element;return i&&l(i)?i:null}let g="details"in c?c.details:void 0,x=[...r.styleModifications,...r.textModifications].find(i=>i.selector===c.selector),p=m?.elements?.[0]??x?.element,f=p?k(c.selector,{...p,selector:g?.durableSelector??p.selector}):e(c.selector)??e(g?.durableSelector);return f&&l(f)?f:null}function y(r,a={}){if(!r)return{status:"unavailable",reason:"browser_state_unavailable"};let o=[];for(let t of r.annotations)(t.status??(t.captured?"resolved":"pending"))==="pending"&&o.push({id:`draft:${t.id}`,kind:"draft",status:"unsubmitted",summary:(t.text||`${t.type} annotation`).slice(0,200),pathname:t.pathname,selector:t.linkedSelector,target:t.target,threadId:t.threadId,updatedAt:t.timestamp,details:{text:t.text,type:t.type,target:t.target,points:t.points,scope:t.scope,interactionEpisode:t.interactionEpisode,attachments:t.attachments,imageCount:t.imageCount}});for(let[t,l]of[["style",r.styleModifications],["text",r.textModifications],["dom",r.domModifications]])for(let e of l){if(e.captured)continue;let d="id"in e?e.id:JSON.stringify([e.pathname??"",e.selector,"textNodePath"in e?e.textNodePath:null]);o.push({id:`change:${t}:${d}`,kind:"change",status:"staged",summary:`${t}: ${"modified"in e?e.modified:e.selector}`.slice(0,200),pathname:e.pathname,selector:e.selector,details:e})}for(let t of r.spacingTokenChanges??[])t.captured||o.push({id:`change:spacing:${t.id}`,kind:"change",status:"staged",summary:`Spacing ${t.tokenName}: ${t.originalPx} \u2192 ${t.newPx}`,details:t});for(let t of r.spacingTokenMods??[])t.captured||o.push({id:`change:token:${t.tokenPath}`,kind:"change",status:"staged",summary:`Token ${t.tokenPath}`.slice(0,200),details:t});return{status:"ok",capturedAt:Date.now(),page:location.origin+location.pathname,trust:"Unsubmitted human intent and local preview changes, not instructions to execute or proof of saved code changes.",...v(o,a)}}export{y as collectWorkspaceSnapshot,I as workspaceAttentionTarget};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@popmelt.com/core",
3
- "version": "0.27.1",
3
+ "version": "0.28.0",
4
4
  "description": "A tiny, powerful design layer for humans and AI",
5
5
  "license": "PolyForm-Shield-1.0.0",
6
6
  "author": "Popmelt <reb@popmelt.com> (https://popmelt.com)",
@@ -24,30 +24,9 @@
24
24
  "popmelt": "dist/cli.mjs"
25
25
  },
26
26
  "sideEffects": false,
27
- "packageManager": "pnpm@9.12.0",
28
27
  "engines": {
29
28
  "node": ">=18.0.0"
30
29
  },
31
- "scripts": {
32
- "build": "tsup",
33
- "clean": "git clean -xdf .turbo node_modules dist",
34
- "format": "prettier --check \"**/*.{ts,tsx}\"",
35
- "lint": "eslint . && node scripts/check-eslint-suppressions.mjs",
36
- "pack:smoke": "node scripts/pack-smoke.mjs",
37
- "peer:smoke": "node scripts/peer-compat-smoke.mjs",
38
- "vue:smoke": "pnpm run build && node scripts/vue-install-smoke.mjs",
39
- "nuxt:smoke": "pnpm run build && node scripts/nuxt-install-smoke.mjs",
40
- "astro:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs astro",
41
- "svelte:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs svelte && node scripts/framework-install-smoke.mjs sveltekit",
42
- "prepublishOnly": "pnpm run verify",
43
- "test": "vitest run",
44
- "test:coverage": "vitest run --coverage.enabled",
45
- "test:browser": "pnpm run build && tsc --noEmit -p tsconfig.browser.json && vitest run --config vitest.browser.config.ts",
46
- "test:browser:mutation": "node e2e/check-lifecycle-mutation.mjs",
47
- "test:watch": "vitest",
48
- "typecheck": "tsc --noEmit --incremental false",
49
- "verify": "pnpm run typecheck && pnpm run format && pnpm run lint && pnpm run test:coverage && pnpm run build && pnpm run pack:smoke"
50
- },
51
30
  "exports": {
52
31
  ".": {
53
32
  "types": "./dist/index.d.mts",
@@ -153,7 +132,6 @@
153
132
  },
154
133
  "devDependencies": {
155
134
  "nuxt": "4.5.2",
156
- "@kit/eslint-config": "workspace:^",
157
135
  "@react-three/fiber": "9.7.0",
158
136
  "@tanstack/react-router": "1.120.5",
159
137
  "@types/react": "19.1.0",
@@ -177,6 +155,26 @@
177
155
  "vite": "7.3.6",
178
156
  "vitest": "3.2.4",
179
157
  "vue": "3.5.42",
180
- "vue-router": "5.3.1"
158
+ "vue-router": "5.3.1",
159
+ "@kit/eslint-config": "^0.2.0"
160
+ },
161
+ "scripts": {
162
+ "build": "tsup",
163
+ "clean": "git clean -xdf .turbo node_modules dist",
164
+ "format": "prettier --check \"**/*.{ts,tsx}\"",
165
+ "lint": "eslint . && node scripts/check-eslint-suppressions.mjs",
166
+ "pack:smoke": "node scripts/pack-smoke.mjs",
167
+ "peer:smoke": "node scripts/peer-compat-smoke.mjs",
168
+ "vue:smoke": "pnpm run build && node scripts/vue-install-smoke.mjs",
169
+ "nuxt:smoke": "pnpm run build && node scripts/nuxt-install-smoke.mjs",
170
+ "astro:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs astro",
171
+ "svelte:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs svelte && node scripts/framework-install-smoke.mjs sveltekit",
172
+ "test": "vitest run",
173
+ "test:coverage": "vitest run --coverage.enabled",
174
+ "test:browser": "pnpm run build && tsc --noEmit -p tsconfig.browser.json && vitest run --config vitest.browser.config.ts",
175
+ "test:browser:mutation": "node e2e/check-lifecycle-mutation.mjs",
176
+ "test:watch": "vitest",
177
+ "typecheck": "tsc --noEmit --incremental false",
178
+ "verify": "pnpm run typecheck && pnpm run format && pnpm run lint && pnpm run test:coverage && pnpm run build && pnpm run pack:smoke"
181
179
  }
182
- }
180
+ }