@happyvertical/smrt-svelte 0.43.2 → 0.43.4

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 (44) hide show
  1. package/AGENTS.md +23 -0
  2. package/README.md +82 -0
  3. package/dist/Provider.svelte +83 -26
  4. package/dist/Provider.svelte.d.ts +4 -12
  5. package/dist/Provider.svelte.d.ts.map +1 -1
  6. package/dist/__tests__/provider-webmcp-harness.svelte +14 -0
  7. package/dist/__tests__/provider-webmcp-harness.svelte.d.ts +8 -0
  8. package/dist/__tests__/provider-webmcp-harness.svelte.d.ts.map +1 -0
  9. package/dist/components/forms/Form.svelte +112 -35
  10. package/dist/components/forms/Form.svelte.d.ts.map +1 -1
  11. package/dist/components/forms/__tests__/Form.webmcp.test.js +5 -5
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/provider-webmcp.test.js +244 -0
  16. package/dist/web/__tests__/provider-ui-registry.fixture.svelte +43 -0
  17. package/dist/web/__tests__/provider-ui-registry.fixture.svelte.d.ts +13 -0
  18. package/dist/web/__tests__/provider-ui-registry.fixture.svelte.d.ts.map +1 -0
  19. package/dist/web/__tests__/provider-ui-registry.test.js +235 -0
  20. package/dist/web/__tests__/remote-query-harness.svelte +27 -0
  21. package/dist/web/__tests__/remote-query-harness.svelte.d.ts +11 -0
  22. package/dist/web/__tests__/remote-query-harness.svelte.d.ts.map +1 -0
  23. package/dist/web/__tests__/remote-query.svelte.test.js +100 -0
  24. package/dist/web/__tests__/webmcp-ui.test.js +410 -0
  25. package/dist/web/__tests__/webmcp.test.js +1 -1
  26. package/dist/web/index.d.ts +4 -0
  27. package/dist/web/index.d.ts.map +1 -1
  28. package/dist/web/index.js +3 -0
  29. package/dist/web/remote-query.svelte.d.ts +26 -0
  30. package/dist/web/remote-query.svelte.d.ts.map +1 -0
  31. package/dist/web/remote-query.svelte.js +57 -0
  32. package/dist/web/webmcp-provider.d.ts +23 -0
  33. package/dist/web/webmcp-provider.d.ts.map +1 -0
  34. package/dist/web/webmcp-provider.js +1 -0
  35. package/dist/web/webmcp-ui-context.d.ts +12 -0
  36. package/dist/web/webmcp-ui-context.d.ts.map +1 -0
  37. package/dist/web/webmcp-ui-context.js +16 -0
  38. package/dist/web/webmcp-ui.d.ts +21 -0
  39. package/dist/web/webmcp-ui.d.ts.map +1 -0
  40. package/dist/web/webmcp-ui.js +455 -0
  41. package/dist/web/webmcp.d.ts +1 -1
  42. package/dist/web/webmcp.svelte.d.ts +4 -1
  43. package/dist/web/webmcp.svelte.d.ts.map +1 -1
  44. package/package.json +5 -5
@@ -0,0 +1,455 @@
1
+ import { DATA_SURFACE_IDENTIFIER_MAX_LENGTH, DATA_SURFACE_MAX_REQUEST_BYTES, } from '@happyvertical/smrt-ui/data';
2
+ const CONTROL_ACTIONS = new Set([
3
+ 'focus',
4
+ 'reveal',
5
+ 'highlight',
6
+ 'explain',
7
+ 'validate',
8
+ 'stage',
9
+ 'apply',
10
+ 'clear',
11
+ 'undo',
12
+ ]);
13
+ const DEFAULT_PREFIX = 'smrt_ui_';
14
+ const PREFIX_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;
15
+ const PUBLIC_FAILURE_REASONS = new Set([
16
+ 'invalid_request',
17
+ 'invalid_identifier',
18
+ 'limit_exceeded',
19
+ 'not_found',
20
+ ]);
21
+ const PUBLIC_CONTROL_RESULT_REASONS = new Set([
22
+ 'not_found',
23
+ 'consent_required',
24
+ 'sensitive_control',
25
+ 'control_not_writable',
26
+ 'control_not_editable',
27
+ 'nothing_to_undo',
28
+ 'denied',
29
+ ]);
30
+ const documentLocks = new WeakMap();
31
+ class PublicToolError extends Error {
32
+ reason;
33
+ details;
34
+ constructor(reason, details) {
35
+ super(reason);
36
+ this.reason = reason;
37
+ this.details = details;
38
+ }
39
+ }
40
+ function publicError(reason, details) {
41
+ return new PublicToolError(reason, details);
42
+ }
43
+ function success(result) {
44
+ return JSON.stringify({ ok: true, result });
45
+ }
46
+ function failure(reason, details) {
47
+ return JSON.stringify({
48
+ ok: false,
49
+ reason,
50
+ ...(details ? { details } : {}),
51
+ });
52
+ }
53
+ function requestBytes(value) {
54
+ return new TextEncoder().encode(JSON.stringify(value)).byteLength;
55
+ }
56
+ function assertRequestSize(value) {
57
+ if (requestBytes(value) > DATA_SURFACE_MAX_REQUEST_BYTES) {
58
+ throw publicError('limit_exceeded');
59
+ }
60
+ }
61
+ function requiredIdentifier(value, name, maxLength = DATA_SURFACE_IDENTIFIER_MAX_LENGTH) {
62
+ if (typeof value !== 'string' ||
63
+ value.length === 0 ||
64
+ value.length > maxLength ||
65
+ Array.from(value).some((character) => {
66
+ const code = character.charCodeAt(0);
67
+ return code < 32 || code === 127;
68
+ })) {
69
+ throw publicError('invalid_identifier', name);
70
+ }
71
+ return value;
72
+ }
73
+ function optionalIdentifier(value, name) {
74
+ return value === undefined ? undefined : requiredIdentifier(value, name);
75
+ }
76
+ function record(value) {
77
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
78
+ throw publicError('invalid_request');
79
+ }
80
+ return value;
81
+ }
82
+ function controlIdentity(value) {
83
+ const input = record(value);
84
+ const subjectInput = input.subject;
85
+ const subject = subjectInput === undefined
86
+ ? undefined
87
+ : (() => {
88
+ const next = record(subjectInput);
89
+ return {
90
+ type: requiredIdentifier(next.type, 'subject.type'),
91
+ id: requiredIdentifier(next.id, 'subject.id'),
92
+ ...(next.label === undefined
93
+ ? {}
94
+ : { label: requiredIdentifier(next.label, 'subject.label') }),
95
+ };
96
+ })();
97
+ return {
98
+ formId: requiredIdentifier(input.formId, 'formId'),
99
+ controlId: requiredIdentifier(input.controlId, 'controlId'),
100
+ ...(subject ? { subject } : {}),
101
+ };
102
+ }
103
+ function dataSurfaceIdentity(value) {
104
+ const input = record(value);
105
+ const kind = input.kind;
106
+ if (!['table', 'list', 'report', 'custom'].includes(String(kind))) {
107
+ throw publicError('invalid_request', 'identity.kind');
108
+ }
109
+ const subjectInput = input.subject;
110
+ const subject = subjectInput === undefined
111
+ ? undefined
112
+ : (() => {
113
+ const next = record(subjectInput);
114
+ return {
115
+ type: requiredIdentifier(next.type, 'subject.type'),
116
+ id: requiredIdentifier(next.id, 'subject.id'),
117
+ ...(next.label === undefined
118
+ ? {}
119
+ : { label: requiredIdentifier(next.label, 'subject.label') }),
120
+ };
121
+ })();
122
+ return {
123
+ surfaceId: requiredIdentifier(input.surfaceId, 'surfaceId'),
124
+ kind: kind,
125
+ ...(subject ? { subject } : {}),
126
+ };
127
+ }
128
+ function sanitizeControl(snapshot) {
129
+ const redactText = snapshot.metadata.sensitivity === 'secret' || snapshot.state.valueRedacted;
130
+ const runtimeState = { ...snapshot.state };
131
+ delete runtimeState.validationMessage;
132
+ return {
133
+ ...snapshot,
134
+ identity: { ...snapshot.identity },
135
+ metadata: {
136
+ ...snapshot.metadata,
137
+ constraints: snapshot.metadata.constraints
138
+ ? { ...snapshot.metadata.constraints }
139
+ : undefined,
140
+ options: snapshot.metadata.options?.map((option) => ({ ...option })),
141
+ },
142
+ state: {
143
+ ...(redactText ? runtimeState : snapshot.state),
144
+ ...(redactText || snapshot.state.valueRedacted
145
+ ? { value: undefined }
146
+ : {}),
147
+ ...(redactText || snapshot.state.stagedValueRedacted
148
+ ? { stagedValue: undefined }
149
+ : {}),
150
+ },
151
+ };
152
+ }
153
+ function sanitizeSurfaceValue(value, hiddenColumnIds, redactRowIds, parentKey) {
154
+ if (Array.isArray(value)) {
155
+ return value
156
+ .filter((entry) => parentKey !== 'columnOrder' ||
157
+ typeof entry !== 'string' ||
158
+ !hiddenColumnIds.has(entry))
159
+ .map((entry) => sanitizeSurfaceValue(entry, hiddenColumnIds, redactRowIds, parentKey))
160
+ .filter((entry) => entry !== undefined);
161
+ }
162
+ if (!value || typeof value !== 'object')
163
+ return value;
164
+ const object = value;
165
+ if (typeof object.columnId === 'string' &&
166
+ hiddenColumnIds.has(object.columnId)) {
167
+ return undefined;
168
+ }
169
+ return Object.fromEntries(Object.entries(object).flatMap(([key, entry]) => {
170
+ if (hiddenColumnIds.has(key))
171
+ return [];
172
+ if (redactRowIds &&
173
+ (key === 'selection' ||
174
+ key === 'selectedRowIds' ||
175
+ key === 'expandedRowIds')) {
176
+ return [];
177
+ }
178
+ const sanitized = sanitizeSurfaceValue(entry, hiddenColumnIds, redactRowIds, key);
179
+ return sanitized === undefined ? [] : [[key, sanitized]];
180
+ }));
181
+ }
182
+ function visibleDescriptor(descriptor) {
183
+ const columns = descriptor.columns.filter((column) => column.visibility !== 'hidden');
184
+ const visibleColumnIds = new Set(columns.map((column) => column.id));
185
+ const { rowKey, ...visible } = descriptor;
186
+ return {
187
+ ...visible,
188
+ identity: { ...descriptor.identity },
189
+ ...(visibleColumnIds.has(rowKey) ? { rowKey } : {}),
190
+ columns,
191
+ query: {
192
+ ...descriptor.query,
193
+ projectableColumnIds: descriptor.query.projectableColumnIds.filter((id) => visibleColumnIds.has(id)),
194
+ searchableColumnIds: descriptor.query.searchableColumnIds?.filter((id) => visibleColumnIds.has(id)),
195
+ filterableColumnIds: descriptor.query.filterableColumnIds?.filter((id) => visibleColumnIds.has(id)),
196
+ sortableColumnIds: descriptor.query.sortableColumnIds?.filter((id) => visibleColumnIds.has(id)),
197
+ },
198
+ actions: descriptor.actions.filter((action) => (action.columnIds ?? []).every((id) => visibleColumnIds.has(id))),
199
+ };
200
+ }
201
+ function visibleSnapshot(snapshot) {
202
+ const hiddenColumnIds = new Set(snapshot.descriptor.columns
203
+ .filter((column) => column.visibility === 'hidden')
204
+ .map((column) => column.id));
205
+ const rowKeyHidden = hiddenColumnIds.has(snapshot.descriptor.rowKey);
206
+ const state = sanitizeSurfaceValue(snapshot.state, hiddenColumnIds, rowKeyHidden);
207
+ return {
208
+ ...snapshot,
209
+ descriptor: visibleDescriptor(snapshot.descriptor),
210
+ state,
211
+ selection: rowKeyHidden ? null : snapshot.selection,
212
+ };
213
+ }
214
+ function executeSafely(execute) {
215
+ return Promise.resolve()
216
+ .then(execute)
217
+ .then(success)
218
+ .catch((error) => {
219
+ return error instanceof PublicToolError &&
220
+ PUBLIC_FAILURE_REASONS.has(error.reason)
221
+ ? failure(error.reason, error.details)
222
+ : failure('execution_failed');
223
+ });
224
+ }
225
+ function readTool(name, description, inputSchema, execute) {
226
+ return {
227
+ name,
228
+ description,
229
+ inputSchema,
230
+ annotations: { readOnlyHint: true, untrustedContentHint: true },
231
+ execute,
232
+ };
233
+ }
234
+ function tools(prefix, controlRegistry, dataSurfaceRegistry) {
235
+ const identitySchema = {
236
+ type: 'object',
237
+ required: ['formId', 'controlId'],
238
+ additionalProperties: false,
239
+ properties: {
240
+ formId: { type: 'string', minLength: 1, maxLength: 256 },
241
+ controlId: { type: 'string', minLength: 1, maxLength: 256 },
242
+ subject: { type: 'object' },
243
+ },
244
+ };
245
+ const surfaceIdentitySchema = {
246
+ type: 'object',
247
+ required: ['surfaceId', 'kind'],
248
+ additionalProperties: false,
249
+ properties: {
250
+ surfaceId: { type: 'string', minLength: 1, maxLength: 256 },
251
+ kind: { type: 'string', enum: ['table', 'list', 'report', 'custom'] },
252
+ subject: { type: 'object' },
253
+ },
254
+ };
255
+ return [
256
+ readTool(`${prefix}list_form_controls`, 'List the controls currently mounted in SMRT forms.', {
257
+ type: 'object',
258
+ additionalProperties: false,
259
+ properties: {
260
+ formId: { type: 'string', minLength: 1, maxLength: 256 },
261
+ },
262
+ }, (args) => executeSafely(() => {
263
+ assertRequestSize(args);
264
+ const input = record(args);
265
+ const formId = optionalIdentifier(input.formId, 'formId');
266
+ return controlRegistry.list(formId).map(sanitizeControl);
267
+ })),
268
+ readTool(`${prefix}inspect_form_control`, 'Inspect one currently mounted SMRT form control.', {
269
+ type: 'object',
270
+ required: ['identity'],
271
+ additionalProperties: false,
272
+ properties: { identity: identitySchema },
273
+ }, (args) => executeSafely(() => {
274
+ assertRequestSize(args);
275
+ const input = record(args);
276
+ const snapshot = controlRegistry.get(controlIdentity(input.identity));
277
+ if (!snapshot)
278
+ throw publicError('not_found');
279
+ return sanitizeControl(snapshot);
280
+ })),
281
+ {
282
+ name: `${prefix}execute_form_control`,
283
+ description: 'Execute an allowed command on a mounted SMRT form control. Agent mutations are consent-gated.',
284
+ inputSchema: {
285
+ type: 'object',
286
+ required: ['action', 'identity'],
287
+ additionalProperties: false,
288
+ properties: {
289
+ action: { type: 'string', enum: [...CONTROL_ACTIONS] },
290
+ identity: identitySchema,
291
+ value: {},
292
+ durationMs: { type: 'number', minimum: 0, maximum: 60_000 },
293
+ },
294
+ },
295
+ annotations: { readOnlyHint: false, untrustedContentHint: true },
296
+ execute: (args) => executeSafely(async () => {
297
+ assertRequestSize(args);
298
+ const input = record(args);
299
+ if ('confirmed' in input)
300
+ throw publicError('invalid_request', 'confirmed');
301
+ if (!CONTROL_ACTIONS.has(input.action)) {
302
+ throw publicError('invalid_request', 'action');
303
+ }
304
+ const action = input.action;
305
+ const identity = controlIdentity(input.identity);
306
+ let command;
307
+ if (action === 'stage') {
308
+ if (!('value' in input))
309
+ throw publicError('invalid_request', 'value');
310
+ command = { action, identity, value: input.value };
311
+ }
312
+ else if (action === 'apply') {
313
+ command =
314
+ 'value' in input
315
+ ? { action, identity, value: input.value }
316
+ : { action, identity };
317
+ }
318
+ else if (action === 'highlight') {
319
+ if (input.durationMs !== undefined &&
320
+ (typeof input.durationMs !== 'number' ||
321
+ input.durationMs < 0 ||
322
+ input.durationMs > 60_000)) {
323
+ throw publicError('invalid_request', 'durationMs');
324
+ }
325
+ command = { action, identity, durationMs: input.durationMs };
326
+ }
327
+ else {
328
+ command = { action, identity };
329
+ }
330
+ const result = await controlRegistry.execute(command, {
331
+ source: 'agent',
332
+ });
333
+ const reason = result.reason
334
+ ? PUBLIC_CONTROL_RESULT_REASONS.has(result.reason)
335
+ ? result.reason
336
+ : 'execution_failed'
337
+ : undefined;
338
+ return {
339
+ ...result,
340
+ ...(reason ? { reason } : { reason: undefined }),
341
+ ...(result.snapshot
342
+ ? { snapshot: sanitizeControl(result.snapshot) }
343
+ : {}),
344
+ };
345
+ }),
346
+ },
347
+ readTool(`${prefix}list_data_surfaces`, 'List the data surfaces currently mounted in this SMRT Provider.', { type: 'object', additionalProperties: false, properties: {} }, (args) => executeSafely(() => {
348
+ assertRequestSize(args);
349
+ record(args);
350
+ return dataSurfaceRegistry.list().map(visibleDescriptor);
351
+ })),
352
+ readTool(`${prefix}inspect_data_surface`, 'Inspect one currently mounted SMRT data surface.', {
353
+ type: 'object',
354
+ required: ['identity'],
355
+ additionalProperties: false,
356
+ properties: { identity: surfaceIdentitySchema },
357
+ }, (args) => executeSafely(() => {
358
+ assertRequestSize(args);
359
+ const input = record(args);
360
+ const snapshot = dataSurfaceRegistry.inspect(dataSurfaceIdentity(input.identity));
361
+ if (!snapshot)
362
+ throw publicError('not_found');
363
+ return visibleSnapshot(snapshot);
364
+ })),
365
+ {
366
+ name: `${prefix}execute_data_surface_control`,
367
+ description: 'Execute a bounded visible-state command on a mounted SMRT data surface.',
368
+ inputSchema: {
369
+ type: 'object',
370
+ required: [
371
+ 'version',
372
+ 'commandId',
373
+ 'identity',
374
+ 'expectedRevision',
375
+ 'controlId',
376
+ ],
377
+ additionalProperties: false,
378
+ properties: {
379
+ version: { type: 'number', const: 1 },
380
+ commandId: { type: 'string', minLength: 1, maxLength: 256 },
381
+ identity: surfaceIdentitySchema,
382
+ expectedRevision: { type: 'number', minimum: 0 },
383
+ controlId: { type: 'string', minLength: 1, maxLength: 256 },
384
+ payload: {},
385
+ },
386
+ },
387
+ annotations: { readOnlyHint: false, untrustedContentHint: true },
388
+ execute: (args) => executeSafely(async () => {
389
+ assertRequestSize(args);
390
+ const input = record(args);
391
+ if (input.version !== 1)
392
+ throw publicError('invalid_request', 'version');
393
+ if (typeof input.expectedRevision !== 'number' ||
394
+ !Number.isSafeInteger(input.expectedRevision) ||
395
+ input.expectedRevision < 0) {
396
+ throw publicError('invalid_request', 'expectedRevision');
397
+ }
398
+ const command = {
399
+ version: 1,
400
+ commandId: requiredIdentifier(input.commandId, 'commandId'),
401
+ identity: dataSurfaceIdentity(input.identity),
402
+ expectedRevision: input.expectedRevision,
403
+ controlId: requiredIdentifier(input.controlId, 'controlId'),
404
+ ...('payload' in input ? { payload: input.payload } : {}),
405
+ };
406
+ const result = await dataSurfaceRegistry.execute(command);
407
+ return result.snapshot
408
+ ? { ...result, snapshot: visibleSnapshot(result.snapshot) }
409
+ : result;
410
+ }),
411
+ },
412
+ ];
413
+ }
414
+ /** Register the fixed browser-native adapter over mounted UI registries. */
415
+ export function registerWebMcpUiTools(options) {
416
+ const prefix = options.prefix ?? DEFAULT_PREFIX;
417
+ if (!PREFIX_PATTERN.test(prefix)) {
418
+ throw new TypeError('Invalid WebMCP UI tool prefix');
419
+ }
420
+ const documentLike = options.document ??
421
+ globalThis
422
+ .document;
423
+ const modelContext = documentLike?.modelContext;
424
+ if (!modelContext || typeof modelContext.registerTool !== 'function') {
425
+ return () => { };
426
+ }
427
+ let locks = documentLocks.get(documentLike);
428
+ if (!locks) {
429
+ locks = new Set();
430
+ documentLocks.set(documentLike, locks);
431
+ }
432
+ if (locks.has(prefix)) {
433
+ throw new Error(`WebMCP UI prefix is already registered: ${prefix}`);
434
+ }
435
+ locks.add(prefix);
436
+ const controller = new AbortController();
437
+ let disposed = false;
438
+ try {
439
+ for (const tool of tools(prefix, options.controlRegistry, options.dataSurfaceRegistry)) {
440
+ modelContext.registerTool(tool, { signal: controller.signal });
441
+ }
442
+ }
443
+ catch (error) {
444
+ controller.abort();
445
+ locks.delete(prefix);
446
+ throw error;
447
+ }
448
+ return () => {
449
+ if (disposed)
450
+ return;
451
+ disposed = true;
452
+ controller.abort();
453
+ locks.delete(prefix);
454
+ };
455
+ }
@@ -14,7 +14,7 @@ declare global {
14
14
  registerTool(
15
15
  tool: WebMcpToolSpec,
16
16
  options?: { signal?: AbortSignal },
17
- ): void;
17
+ ): Promise<void>;
18
18
  }
19
19
  }
20
20
 
@@ -5,6 +5,9 @@ export interface WebMcpToolSpec {
5
5
  inputSchema: Record<string, unknown>;
6
6
  annotations?: {
7
7
  readOnlyHint?: boolean;
8
+ destructiveHint?: boolean;
9
+ idempotentHint?: boolean;
10
+ openWorldHint?: boolean;
8
11
  untrustedContentHint?: boolean;
9
12
  };
10
13
  execute: (args: Record<string, unknown>) => string | Promise<string>;
@@ -16,7 +19,7 @@ declare global {
16
19
  interface WebMcpModelContext {
17
20
  registerTool(tool: WebMcpToolSpec, options?: {
18
21
  signal?: AbortSignal;
19
- }): void;
22
+ }): Promise<void>;
20
23
  }
21
24
  }
22
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"webmcp.svelte.d.ts","sourceRoot":"","sources":["../../src/web/webmcp.svelte.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,QAAQ;QAChB,YAAY,CAAC,EAAE,kBAAkB,CAAC;KACnC;IAED,UAAU,kBAAkB;QAC1B,YAAY,CACV,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,GACjC,IAAI,CAAC;KACT;CACF;AAYD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,GAC/C,IAAI,CAYN"}
1
+ {"version":3,"file":"webmcp.svelte.d.ts","sourceRoot":"","sources":["../../src/web/webmcp.svelte.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,QAAQ;QAChB,YAAY,CAAC,EAAE,kBAAkB,CAAC;KACnC;IAED,UAAU,kBAAkB;QAC1B,YAAY,CACV,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,GACjC,OAAO,CAAC,IAAI,CAAC,CAAC;KAClB;CACF;AAYD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,GAC/C,IAAI,CAYN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.43.2",
3
+ "version": "0.43.4",
4
4
  "description": "Svelte 5 components for SMRT user management - auth, users, tenants, roles, permissions, groups",
5
5
  "type": "module",
6
6
  "smrtRawPrimitives": "strict",
@@ -123,10 +123,10 @@
123
123
  "@tanstack/db": "^0.6.14",
124
124
  "@tanstack/svelte-db": "^0.1.91",
125
125
  "esm-env": "^1.2.2",
126
- "@happyvertical/smrt-types": "0.43.2",
127
- "@happyvertical/smrt-ui": "0.43.2",
128
- "@happyvertical/smrt-languages": "0.43.2",
129
- "@happyvertical/smrt-web": "0.43.2"
126
+ "@happyvertical/smrt-web": "0.43.4",
127
+ "@happyvertical/smrt-ui": "0.43.4",
128
+ "@happyvertical/smrt-types": "0.43.4",
129
+ "@happyvertical/smrt-languages": "0.43.4"
130
130
  },
131
131
  "peerDependencies": {
132
132
  "@huggingface/transformers": ">=3.8.1",