@seedgrid/fe-core 2026.4.19 → 2026.4.21

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/dist/ai/seedgrid-core.manifest.json +832 -0
  2. package/dist/http/api-client.d.ts +50 -0
  3. package/dist/http/api-client.d.ts.map +1 -0
  4. package/dist/http/api-client.js +281 -0
  5. package/dist/http/api-client.meta.d.ts +61 -0
  6. package/dist/http/api-client.meta.d.ts.map +1 -0
  7. package/dist/http/api-client.meta.js +99 -0
  8. package/dist/http/api-errors.d.ts +9 -0
  9. package/dist/http/api-errors.d.ts.map +1 -0
  10. package/dist/http/api-errors.js +78 -0
  11. package/dist/http/api-errors.meta.d.ts +44 -0
  12. package/dist/http/api-errors.meta.d.ts.map +1 -0
  13. package/dist/http/api-errors.meta.js +60 -0
  14. package/dist/http/api-exception-handler.d.ts +15 -0
  15. package/dist/http/api-exception-handler.d.ts.map +1 -0
  16. package/dist/http/api-exception-handler.js +53 -0
  17. package/dist/http/api-exception-handler.meta.d.ts +61 -0
  18. package/dist/http/api-exception-handler.meta.d.ts.map +1 -0
  19. package/dist/http/api-exception-handler.meta.js +57 -0
  20. package/dist/index.d.ts +5 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +5 -0
  23. package/dist/persistence-api.meta.d.ts +61 -0
  24. package/dist/persistence-api.meta.d.ts.map +1 -0
  25. package/dist/persistence-api.meta.js +73 -0
  26. package/dist/persistence-composite.meta.d.ts +61 -0
  27. package/dist/persistence-composite.meta.d.ts.map +1 -0
  28. package/dist/persistence-composite.meta.js +69 -0
  29. package/dist/persistence-localstorage.meta.d.ts +61 -0
  30. package/dist/persistence-localstorage.meta.d.ts.map +1 -0
  31. package/dist/persistence-localstorage.meta.js +55 -0
  32. package/dist/registry.meta.d.ts +61 -0
  33. package/dist/registry.meta.d.ts.map +1 -0
  34. package/dist/registry.meta.js +85 -0
  35. package/dist/server.d.ts +2 -0
  36. package/dist/server.d.ts.map +1 -0
  37. package/dist/server.js +2 -0
  38. package/dist/useDebouncedValue.d.ts +2 -0
  39. package/dist/useDebouncedValue.d.ts.map +1 -0
  40. package/dist/useDebouncedValue.js +16 -0
  41. package/dist/useDebouncedValue.meta.d.ts +44 -0
  42. package/dist/useDebouncedValue.meta.d.ts.map +1 -0
  43. package/dist/useDebouncedValue.meta.js +63 -0
  44. package/package.json +2 -2
@@ -0,0 +1,55 @@
1
+ export const sgMeta = {
2
+ version: "0.1",
3
+ componentId: "hook.persistence-localstorage",
4
+ package: "@seedgrid/fe-core",
5
+ exportName: "createLocalStorageStrategy",
6
+ slug: "create-localstorage-strategy",
7
+ displayName: "Local Storage Persistence Strategy",
8
+ category: "hook",
9
+ subcategory: "persistence",
10
+ description: "Creates a persistence strategy that stores and retrieves application state from browser localStorage with optional key prefix.",
11
+ tags: ["persistence", "storage", "state", "localStorage", "browser"],
12
+ capabilities: ["persistence", "offline", "browser-native"],
13
+ fieldSemantics: ["state", "persistence", "storage"],
14
+ props: [
15
+ {
16
+ name: "options",
17
+ type: "{ prefix?: string }",
18
+ required: false,
19
+ description: "Optional configuration: prefix for localStorage keys (default: no prefix).",
20
+ semanticRole: "data",
21
+ },
22
+ ],
23
+ states: ["ready", "loading", "error"],
24
+ };
25
+ export const aiHints = {
26
+ version: "0.1",
27
+ preferredUseCases: [
28
+ "Client-side application state persistence across browser sessions.",
29
+ "Caching user preferences, form state, or temporary data in the browser.",
30
+ "Single-origin applications where cross-origin data sharing is not needed.",
31
+ ],
32
+ avoidUseCases: [
33
+ "Sensitive data (passwords, tokens) — use secure server-side persistence instead.",
34
+ "Large datasets that exceed localStorage limit (~5-10MB per origin).",
35
+ "Server-synchronized state that requires real-time consistency across tabs.",
36
+ ],
37
+ synonyms: [
38
+ "browser persistence",
39
+ "local storage strategy",
40
+ "client-side state storage",
41
+ ],
42
+ relatedEntityFields: ["persistence", "state", "storage", "caching"],
43
+ compositionHints: [
44
+ "Use prefix option to namespace data when multiple apps share the same origin.",
45
+ "Combine with createCompositePersistenceStrategy to fall back to API persistence on failure.",
46
+ "State should be serializable to JSON — complex objects are converted via stringify.",
47
+ ],
48
+ rankingSignals: {
49
+ freeText: 0.2,
50
+ structuredChoice: 0.3,
51
+ date: 0,
52
+ number: 0,
53
+ denseLayout: 0.1,
54
+ },
55
+ };
@@ -0,0 +1,61 @@
1
+ type SgMetaPropV0 = {
2
+ name: string;
3
+ type: string;
4
+ required?: boolean;
5
+ default?: unknown;
6
+ description?: string;
7
+ semanticRole?: "value" | "label" | "validation" | "behavior" | "appearance" | "event" | "data";
8
+ bindable?: boolean;
9
+ };
10
+ type SgMetaExampleV0 = {
11
+ id: string;
12
+ title: string;
13
+ file: string;
14
+ kind: "sample" | "playground";
15
+ };
16
+ type SgMetaV0 = {
17
+ version: "0.1";
18
+ componentId: string;
19
+ package: string;
20
+ exportName: string;
21
+ slug: string;
22
+ displayName: string;
23
+ category: string;
24
+ subcategory?: string;
25
+ description: string;
26
+ tags?: string[];
27
+ capabilities?: string[];
28
+ fieldSemantics?: string[];
29
+ props?: SgMetaPropV0[];
30
+ states?: string[];
31
+ examples?: SgMetaExampleV0[];
32
+ showcase?: {
33
+ route: string;
34
+ hasPlayground: boolean;
35
+ hasPropsTable: boolean;
36
+ };
37
+ sdui?: {
38
+ rendererType: string;
39
+ acceptsDataBinding?: boolean;
40
+ defaultProps?: Record<string, unknown>;
41
+ };
42
+ };
43
+ type SgAiHintsV0 = {
44
+ version: "0.1";
45
+ preferredUseCases: string[];
46
+ avoidUseCases?: string[];
47
+ synonyms?: string[];
48
+ relatedEntityFields?: string[];
49
+ compositionHints?: string[];
50
+ rankingSignals?: {
51
+ freeText?: number;
52
+ structuredChoice?: number;
53
+ date?: number;
54
+ number?: number;
55
+ denseLayout?: number;
56
+ };
57
+ };
58
+ export declare const sgMeta: SgMetaV0;
59
+ export declare const aiHints: SgAiHintsV0;
60
+ export {};
61
+ //# sourceMappingURL=registry.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.meta.d.ts","sourceRoot":"","sources":["../src/registry.meta.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;CAC/B,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,QA6DpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAyBrB,CAAC"}
@@ -0,0 +1,85 @@
1
+ export const sgMeta = {
2
+ version: "0.1",
3
+ componentId: "provider.registry",
4
+ package: "@seedgrid/fe-core",
5
+ exportName: "SeedGridRegistry",
6
+ slug: "seedgrid-registry",
7
+ displayName: "SeedGrid Registry",
8
+ category: "provider",
9
+ subcategory: "registry",
10
+ description: "Centralized provider and route registry for modular SeedGrid applications. Manages composition of providers, navigation items, and routes with ordering support.",
11
+ tags: ["registry", "provider", "composition", "modular", "architecture"],
12
+ capabilities: ["navItem", "provider", "route", "ordering"],
13
+ fieldSemantics: ["registry", "composition", "navigation"],
14
+ props: [
15
+ {
16
+ name: "addProvider",
17
+ type: "(provider: SeedGridProvider) => void",
18
+ required: true,
19
+ description: "Register a React provider component (context wrapper).",
20
+ semanticRole: "behavior",
21
+ },
22
+ {
23
+ name: "addNavItem",
24
+ type: "(item: SeedGridNavItem) => void",
25
+ required: true,
26
+ description: "Register a navigation item with id, labelKey, href, optional icon and order.",
27
+ semanticRole: "behavior",
28
+ },
29
+ {
30
+ name: "addRoute",
31
+ type: "(route: SeedGridRoute) => void",
32
+ required: true,
33
+ description: "Register an application route with id, path, and auth requirements.",
34
+ semanticRole: "behavior",
35
+ },
36
+ {
37
+ name: "getProviders",
38
+ type: "() => SeedGridProvider[]",
39
+ required: true,
40
+ description: "Retrieve all registered providers as a flat array.",
41
+ semanticRole: "behavior",
42
+ },
43
+ {
44
+ name: "getNavItems",
45
+ type: "() => SeedGridNavItem[]",
46
+ required: true,
47
+ description: "Retrieve all registered navigation items sorted by order (default 999).",
48
+ semanticRole: "behavior",
49
+ },
50
+ {
51
+ name: "getRoutes",
52
+ type: "() => SeedGridRoute[]",
53
+ required: true,
54
+ description: "Retrieve all registered routes.",
55
+ semanticRole: "behavior",
56
+ },
57
+ ],
58
+ states: ["initialized", "empty", "populated"],
59
+ };
60
+ export const aiHints = {
61
+ version: "0.1",
62
+ preferredUseCases: [
63
+ "Modular application architecture where features register themselves independently.",
64
+ "Dynamic provider composition to avoid prop drilling and provider hell.",
65
+ "Centralized routing and navigation configuration across modules.",
66
+ ],
67
+ avoidUseCases: [
68
+ "Simple single-feature applications that don't need modular composition.",
69
+ "Direct React Context usage when a single provider suffices.",
70
+ ],
71
+ synonyms: ["module registry", "provider registry", "app composer", "navigation builder"],
72
+ relatedEntityFields: ["module", "provider", "navigation", "route", "composition"],
73
+ compositionHints: [
74
+ "Registry is typically paired with SeedGridModuleManifest for self-contained module definitions.",
75
+ "Providers registered to the registry should be wrapped to inject dependencies from environment/core.",
76
+ "Order-based nav item sorting enables feature modules to control their menu position without cross-module coupling.",
77
+ ],
78
+ rankingSignals: {
79
+ freeText: 0.3,
80
+ structuredChoice: 0.4,
81
+ date: 0,
82
+ number: 0,
83
+ denseLayout: 0.2,
84
+ },
85
+ };
@@ -0,0 +1,2 @@
1
+ export { ApiClientError, createApiClient, type ApiClientConfig, type ApiRequestOptions, type ApiRetryOptions, } from "./http/api-client";
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,2 @@
1
+ // seedgrid:managed
2
+ export { ApiClientError, createApiClient, } from "./http/api-client";
@@ -0,0 +1,2 @@
1
+ export declare function useDebouncedValue<T>(value: T, delayMs: number, normalize?: (nextValue: T) => T): T;
2
+ //# sourceMappingURL=useDebouncedValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedValue.d.ts","sourceRoot":"","sources":["../src/useDebouncedValue.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,KAkBhC"}
@@ -0,0 +1,16 @@
1
+ // seedgrid:managed
2
+ "use client";
3
+ import { useEffect, useState } from "react";
4
+ export function useDebouncedValue(value, delayMs, normalize) {
5
+ const normalizeValue = normalize ?? ((nextValue) => nextValue);
6
+ const [debouncedValue, setDebouncedValue] = useState(() => normalizeValue(value));
7
+ useEffect(() => {
8
+ const timer = window.setTimeout(() => {
9
+ setDebouncedValue(normalizeValue(value));
10
+ }, Math.max(0, delayMs));
11
+ return () => {
12
+ window.clearTimeout(timer);
13
+ };
14
+ }, [delayMs, normalizeValue, value]);
15
+ return debouncedValue;
16
+ }
@@ -0,0 +1,44 @@
1
+ type SgMetaPropV0 = {
2
+ name: string;
3
+ type: string;
4
+ required?: boolean;
5
+ default?: unknown;
6
+ description?: string;
7
+ semanticRole?: "value" | "label" | "validation" | "behavior" | "appearance" | "event" | "data";
8
+ bindable?: boolean;
9
+ };
10
+ type SgMetaV0 = {
11
+ version: "0.1";
12
+ componentId: string;
13
+ package: string;
14
+ exportName: string;
15
+ slug: string;
16
+ displayName: string;
17
+ category: string;
18
+ subcategory?: string;
19
+ description: string;
20
+ tags?: string[];
21
+ capabilities?: string[];
22
+ fieldSemantics?: string[];
23
+ props?: SgMetaPropV0[];
24
+ states?: string[];
25
+ };
26
+ type SgAiHintsV0 = {
27
+ version: "0.1";
28
+ preferredUseCases: string[];
29
+ avoidUseCases?: string[];
30
+ synonyms?: string[];
31
+ relatedEntityFields?: string[];
32
+ compositionHints?: string[];
33
+ rankingSignals?: {
34
+ freeText?: number;
35
+ structuredChoice?: number;
36
+ date?: number;
37
+ number?: number;
38
+ denseLayout?: number;
39
+ };
40
+ };
41
+ export declare const sgMeta: SgMetaV0;
42
+ export declare const aiHints: SgAiHintsV0;
43
+ export {};
44
+ //# sourceMappingURL=useDebouncedValue.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedValue.meta.d.ts","sourceRoot":"","sources":["../src/useDebouncedValue.meta.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EACT,OAAO,GACP,OAAO,GACP,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,OAAO,GACP,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,QAsCpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAwBrB,CAAC"}
@@ -0,0 +1,63 @@
1
+ export const sgMeta = {
2
+ version: "0.1",
3
+ componentId: "hook.use-debounced-value",
4
+ package: "@seedgrid/fe-core",
5
+ exportName: "useDebouncedValue",
6
+ slug: "use-debounced-value",
7
+ displayName: "Use Debounced Value",
8
+ category: "hook",
9
+ subcategory: "interaction",
10
+ description: "React hook that returns a debounced version of a value with optional normalization before commit.",
11
+ tags: ["hook", "debounce", "search", "filter", "input"],
12
+ capabilities: ["delay", "normalize", "typed-value", "react-hook"],
13
+ fieldSemantics: ["search", "filter", "input", "debounce"],
14
+ props: [
15
+ {
16
+ name: "value",
17
+ type: "T",
18
+ required: true,
19
+ description: "Current source value that should be debounced.",
20
+ semanticRole: "value",
21
+ },
22
+ {
23
+ name: "delayMs",
24
+ type: "number",
25
+ required: true,
26
+ description: "Debounce delay in milliseconds before the debounced value updates.",
27
+ semanticRole: "behavior",
28
+ },
29
+ {
30
+ name: "normalize",
31
+ type: "(nextValue: T) => T",
32
+ required: false,
33
+ description: "Optional normalization function applied before the debounced value is stored.",
34
+ semanticRole: "behavior",
35
+ },
36
+ ],
37
+ states: ["idle", "pending", "debounced"],
38
+ };
39
+ export const aiHints = {
40
+ version: "0.1",
41
+ preferredUseCases: [
42
+ "Search inputs that should wait before querying paginated APIs.",
43
+ "Filter forms that should debounce local or remote state synchronization.",
44
+ "Shared debounce logic for multiple domain modules without pulling feature config into the core package.",
45
+ ],
46
+ avoidUseCases: [
47
+ "Immediate form validation that must react to every keystroke.",
48
+ "Complex stream composition better handled by dedicated observable pipelines.",
49
+ ],
50
+ synonyms: ["debounced search", "debounced input", "debounced state", "search debounce"],
51
+ relatedEntityFields: ["search", "filter", "query", "text input"],
52
+ compositionHints: [
53
+ "Wrap domain-specific normalization or min-length logic outside the hook and keep this hook generic.",
54
+ "Use with server-side pagination so list fetches are triggered only after the debounced value settles.",
55
+ ],
56
+ rankingSignals: {
57
+ freeText: 0.3,
58
+ structuredChoice: 0.25,
59
+ date: 0,
60
+ number: 0,
61
+ denseLayout: 0.05,
62
+ },
63
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedgrid/fe-core",
3
- "version": "2026.4.19",
3
+ "version": "2026.4.21",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "@types/react": "^19.0.0"
29
29
  },
30
30
  "scripts": {
31
- "build": "tsc -p tsconfig.json",
31
+ "build": "tsc -p tsconfig.json && node scripts/build-ai-manifest.mjs",
32
32
  "typecheck": "tsc -p tsconfig.json --noEmit"
33
33
  }
34
34
  }