@plitzi/sdk-server 0.32.16 → 0.32.18
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/CHANGELOG.md +20 -0
- package/dist/helpers/serverLog.js +3 -3
- package/dist/modules/mcp/apps/render/view.tsx +107 -3
- package/dist/modules/mcp/apps/shared/shell.ejs +19 -2
- package/dist/modules/mcp/helpers/guide.js +9 -2
- package/dist/modules/mcp/helpers/space.js +1 -1
- package/dist/modules/mcp/resources/renderGuide.js +205 -18
- package/dist/modules/mcp/server.js +1 -1
- package/dist/modules/mcp/tools/apply/dispatch.js +2 -0
- package/dist/modules/mcp/tools/apply/index.js +17 -3
- package/dist/modules/mcp/tools/operations/index.js +4 -0
- package/dist/modules/mcp/tools/operations/schema/elements/patchElement.js +1 -1
- package/dist/modules/mcp/tools/operations/schema/elements/repeatElement.js +148 -0
- package/dist/modules/mcp/tools/operations/schema/interactions/deleteInteraction.js +1 -1
- package/dist/modules/mcp/tools/operations/schema/interactions/patchInteractionNode.js +1 -1
- package/dist/modules/mcp/tools/operations/schema/interactions/upsertInteractionFlow.js +1 -1
- package/dist/modules/mcp/tools/operations/schema/operations.js +2 -0
- package/dist/modules/mcp/tools/operations/schema/pages/upsertPage.js +1 -1
- package/dist/modules/mcp/tools/operations/schema/shared.js +8 -5
- package/dist/modules/mcp/tools/operations/schemaIds.js +54 -0
- package/dist/modules/mcp/tools/operations/style/definitions/patchDefinition.js +1 -1
- package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinition.js +1 -1
- package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinitions.js +40 -0
- package/dist/modules/mcp/tools/operations/style/globalStyles/patchGlobalStyle.js +1 -1
- package/dist/modules/mcp/tools/operations/style/globalStyles/upsertGlobalStyle.js +1 -1
- package/dist/modules/mcp/tools/operations/style/idStyles/patchIdStyle.js +1 -1
- package/dist/modules/mcp/tools/operations/style/idStyles/upsertIdStyle.js +1 -1
- package/dist/modules/mcp/tools/operations/style/operations.js +2 -0
- package/dist/modules/mcp/tools/operations/style/shared.js +1 -1
- package/dist/modules/mcp/tools/render.js +70 -8
- package/dist/modules/mcp/tools/shared/expandOperations.js +44 -0
- package/dist/modules/mcp/tools/shared/validator/audit.js +3 -0
- package/dist/modules/mcp/tools/shared/validator/batch.js +13 -4
- package/dist/modules/mcp/tools/shared/validator/index.js +15 -0
- package/dist/modules/mcp/tools/validate.js +11 -3
- package/dist/modules/oauth/metadata.js +11 -4
- package/dist/src/helpers/serverLog.d.ts +1 -1
- package/dist/src/modules/mcp/apps/render/heldBatch.d.ts +10 -0
- package/dist/src/modules/mcp/apps/render/heldBatch.test.d.ts +1 -0
- package/dist/src/modules/mcp/e2e/index.d.ts +2 -2
- package/dist/src/modules/mcp/e2e/renderingHost.d.ts +16 -1
- package/dist/src/modules/mcp/helpers/guide.d.ts +1 -1
- package/dist/src/modules/mcp/helpers/space.d.ts +1 -1
- package/dist/src/modules/mcp/tests/schemaIds.test.d.ts +1 -0
- package/dist/src/modules/mcp/tools/apply/index.d.ts +50 -0
- package/dist/src/modules/mcp/tools/operations/index.d.ts +100 -0
- package/dist/src/modules/mcp/tools/operations/schema/elements/repeatElement.d.ts +55 -0
- package/dist/src/modules/mcp/tools/operations/schema/index.d.ts +1 -0
- package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +19 -0
- package/dist/src/modules/mcp/tools/operations/schema/shared.d.ts +15 -0
- package/dist/src/modules/mcp/tools/operations/schemaIds.d.ts +6 -0
- package/dist/src/modules/mcp/tools/operations/style/definitions/upsertDefinitions.d.ts +41 -0
- package/dist/src/modules/mcp/tools/operations/style/index.d.ts +1 -0
- package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +33 -0
- package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +4 -3
- package/dist/src/modules/mcp/tools/preview.d.ts +50 -0
- package/dist/src/modules/mcp/tools/render.d.ts +421 -363
- package/dist/src/modules/mcp/tools/screenshot.d.ts +50 -0
- package/dist/src/modules/mcp/tools/shared/expandOperations.d.ts +13 -0
- package/dist/src/modules/mcp/tools/validate.d.ts +50 -0
- package/dist/src/modules/oauth/metadata.d.ts +11 -4
- package/package.json +5 -5
|
@@ -11,6 +11,24 @@ export declare const screenshotShape: {
|
|
|
11
11
|
before: "before";
|
|
12
12
|
after: "after";
|
|
13
13
|
}>>;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"repeatElement">;
|
|
16
|
+
pageRef: z.ZodString;
|
|
17
|
+
ref: z.ZodString;
|
|
18
|
+
elementType: z.ZodOptional<z.ZodString>;
|
|
19
|
+
label: z.ZodOptional<z.ZodString>;
|
|
20
|
+
style: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
base: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
parentRef: z.ZodOptional<z.ZodString>;
|
|
25
|
+
position: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
inside: "inside";
|
|
27
|
+
before: "before";
|
|
28
|
+
after: "after";
|
|
29
|
+
}>>;
|
|
30
|
+
template: z.ZodType<import('./operations/schema').TemplateElement, unknown, z.core.$ZodTypeInternals<import('./operations/schema').TemplateElement, unknown>>;
|
|
31
|
+
items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
14
32
|
}, z.core.$strip>, z.ZodObject<{
|
|
15
33
|
type: z.ZodLiteral<"patchElement">;
|
|
16
34
|
pageRef: z.ZodString;
|
|
@@ -223,6 +241,38 @@ export declare const screenshotShape: {
|
|
|
223
241
|
}, z.core.$strip>>>;
|
|
224
242
|
type: z.ZodLiteral<"upsertDefinition">;
|
|
225
243
|
ref: z.ZodString;
|
|
244
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
245
|
+
type: z.ZodLiteral<"upsertDefinitions">;
|
|
246
|
+
definitions: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
247
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
248
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
249
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
250
|
+
states: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
251
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
252
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
253
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
254
|
+
}, z.core.$strip>>>;
|
|
255
|
+
variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
256
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
257
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
258
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
259
|
+
}, z.core.$strip>>>;
|
|
260
|
+
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
261
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
262
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
263
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
264
|
+
states: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
265
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
266
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
267
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
268
|
+
}, z.core.$strip>>>;
|
|
269
|
+
variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
270
|
+
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
271
|
+
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
272
|
+
mobile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
273
|
+
}, z.core.$strip>>>;
|
|
274
|
+
}, z.core.$strip>>>;
|
|
275
|
+
}, z.core.$strip>>;
|
|
226
276
|
}, z.core.$strip>, z.ZodObject<{
|
|
227
277
|
desktop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodNull]>>>;
|
|
228
278
|
tablet: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodNull]>>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ValidationError } from '../../types';
|
|
2
|
+
import { Operation } from '../operations';
|
|
3
|
+
/** Rewrites the sugar ops into the vocabulary the rest of the pipeline knows, BEFORE validation — today that is
|
|
4
|
+
* `repeatElement`, which stands for the `upsertElement` its template + rows expand to. Everything downstream
|
|
5
|
+
* (validator, dispatch, audit, versions) therefore stays unaware of it, and a row that renders a bad element is
|
|
6
|
+
* reported by the ordinary element checks.
|
|
7
|
+
*
|
|
8
|
+
* One op in, one op out: the indices the agent sent are the indices every error path names, so `operations[3]`
|
|
9
|
+
* still means the fourth operation it wrote. */
|
|
10
|
+
export declare const expandOperations: (ops: Operation[]) => {
|
|
11
|
+
operations: Operation[];
|
|
12
|
+
errors: ValidationError[];
|
|
13
|
+
};
|
|
@@ -12,6 +12,24 @@ export declare const validateShape: {
|
|
|
12
12
|
before: "before";
|
|
13
13
|
after: "after";
|
|
14
14
|
}>>;
|
|
15
|
+
}, import('zod/v4/core').$strip>, import('zod').ZodObject<{
|
|
16
|
+
type: import('zod').ZodLiteral<"repeatElement">;
|
|
17
|
+
pageRef: import('zod').ZodString;
|
|
18
|
+
ref: import('zod').ZodString;
|
|
19
|
+
elementType: import('zod').ZodOptional<import('zod').ZodString>;
|
|
20
|
+
label: import('zod').ZodOptional<import('zod').ZodString>;
|
|
21
|
+
style: import('zod').ZodOptional<import('zod').ZodObject<{
|
|
22
|
+
base: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodString>>;
|
|
23
|
+
slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodArray<import('zod').ZodString>>>;
|
|
24
|
+
}, import('zod/v4/core').$strip>>;
|
|
25
|
+
parentRef: import('zod').ZodOptional<import('zod').ZodString>;
|
|
26
|
+
position: import('zod').ZodOptional<import('zod').ZodEnum<{
|
|
27
|
+
inside: "inside";
|
|
28
|
+
before: "before";
|
|
29
|
+
after: "after";
|
|
30
|
+
}>>;
|
|
31
|
+
template: import('zod').ZodType<import('./operations/schema').TemplateElement, unknown, import('zod/v4/core').$ZodTypeInternals<import('./operations/schema').TemplateElement, unknown>>;
|
|
32
|
+
items: import('zod').ZodArray<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnknown>>;
|
|
15
33
|
}, import('zod/v4/core').$strip>, import('zod').ZodObject<{
|
|
16
34
|
type: import('zod').ZodLiteral<"patchElement">;
|
|
17
35
|
pageRef: import('zod').ZodString;
|
|
@@ -224,6 +242,38 @@ export declare const validateShape: {
|
|
|
224
242
|
}, import('zod/v4/core').$strip>>>;
|
|
225
243
|
type: import('zod').ZodLiteral<"upsertDefinition">;
|
|
226
244
|
ref: import('zod').ZodString;
|
|
245
|
+
}, import('zod/v4/core').$strip>, import('zod').ZodObject<{
|
|
246
|
+
type: import('zod').ZodLiteral<"upsertDefinitions">;
|
|
247
|
+
definitions: import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
248
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
249
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
250
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
251
|
+
states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
252
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
253
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
254
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
255
|
+
}, import('zod/v4/core').$strip>>>;
|
|
256
|
+
variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
257
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
258
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
259
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
260
|
+
}, import('zod/v4/core').$strip>>>;
|
|
261
|
+
slots: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
262
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
263
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
264
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
265
|
+
states: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
266
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
267
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
268
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
269
|
+
}, import('zod/v4/core').$strip>>>;
|
|
270
|
+
variants: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodObject<{
|
|
271
|
+
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
272
|
+
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
273
|
+
mobile: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber]>>>;
|
|
274
|
+
}, import('zod/v4/core').$strip>>>;
|
|
275
|
+
}, import('zod/v4/core').$strip>>>;
|
|
276
|
+
}, import('zod/v4/core').$strip>>;
|
|
227
277
|
}, import('zod/v4/core').$strip>, import('zod').ZodObject<{
|
|
228
278
|
desktop: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
|
|
229
279
|
tablet: import('zod').ZodOptional<import('zod').ZodRecord<import('zod').ZodString, import('zod').ZodUnion<readonly [import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodNull]>>>;
|
|
@@ -22,10 +22,17 @@ export declare const resourceMetadataUrl: (config: OAuthConfig, req: SSRRequest)
|
|
|
22
22
|
* describes `https://host/mcp` while the bare path describes the origin.
|
|
23
23
|
*
|
|
24
24
|
* A server mounted at the ORIGIN is `https://host/`, WITH the trailing slash: a host parses the URL the user
|
|
25
|
-
* typed before it does anything with it, and an empty path renders as `/` —
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* typed before it does anything with it, and an empty path renders as `/` — Claude's connector was observed
|
|
26
|
+
* asking for exactly `resource=https%3A%2F%2Fhost%2F`, so that is the form the document must claim.
|
|
27
|
+
*
|
|
28
|
+
* It does NOT make a bare-origin connector work, and nothing here can. Claude's remote-connector service will
|
|
29
|
+
* not open a session against an MCP endpoint whose URL has no path: the whole grant succeeds — discovery,
|
|
30
|
+
* registration, consent, a 200 from /token with the scope it asked for — and then it reports
|
|
31
|
+
* `McpAuthorizationError` ("the integration rejected the credentials it just issued") without ever presenting
|
|
32
|
+
* the bearer. Verified against the same deployment, minutes apart: at /mcp the token is followed by
|
|
33
|
+
* `initialize`, at / nothing follows it, in the ingress log as well as this server's. Claiming `https://host/mcp`
|
|
34
|
+
* from the bare document would only fail sooner — a client checks that the resource it is handed is no MORE
|
|
35
|
+
* specific than the URL it holds. Publish the connector URL WITH its path. */
|
|
29
36
|
export declare const protectedResourceMetadata: (config: OAuthConfig, req: SSRRequest) => Record<string, unknown>;
|
|
30
37
|
/** RFC 8414. Public clients with PKCE only: a desktop host stores no secret, so `none` is the sole endpoint auth
|
|
31
38
|
* method and S256 the sole challenge method. `offline_access` is advertised whenever refresh grants are issued,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plitzi/sdk-server",
|
|
3
|
-
"version": "0.32.
|
|
3
|
+
"version": "0.32.18",
|
|
4
4
|
"license": "AGPL-3.0",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@modelcontextprotocol/ext-apps": "^1.7.5",
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
32
|
-
"@plitzi/plitzi-sdk": "0.32.
|
|
33
|
-
"@plitzi/sdk-schema": "0.32.
|
|
34
|
-
"@plitzi/sdk-shared": "0.32.
|
|
32
|
+
"@plitzi/plitzi-sdk": "0.32.18",
|
|
33
|
+
"@plitzi/sdk-schema": "0.32.18",
|
|
34
|
+
"@plitzi/sdk-shared": "0.32.18",
|
|
35
35
|
"ejs": "^6.0.1",
|
|
36
36
|
"esbuild": "^0.28.1",
|
|
37
37
|
"zod": "^4.4.3"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@types/ejs": "^3.1.5",
|
|
45
45
|
"@types/jsdom": "^28.0.3",
|
|
46
46
|
"@types/node": "^26.1.2",
|
|
47
|
-
"@types/react": "^19.2.
|
|
47
|
+
"@types/react": "^19.2.18",
|
|
48
48
|
"@vitejs/plugin-react": "^6.0.5",
|
|
49
49
|
"@vitest/coverage-v8": "^4.1.10",
|
|
50
50
|
"eslint": "^9.39.5",
|