@xemahq/opencode-xema-plugin 0.1.1

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 (63) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +64 -0
  3. package/dist/context.d.ts +65 -0
  4. package/dist/context.d.ts.map +1 -0
  5. package/dist/context.js +82 -0
  6. package/dist/context.js.map +1 -0
  7. package/dist/errors.d.ts +5 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +8 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/hooks/session-idle-autocommit.d.ts +11 -0
  12. package/dist/hooks/session-idle-autocommit.d.ts.map +1 -0
  13. package/dist/hooks/session-idle-autocommit.js +206 -0
  14. package/dist/hooks/session-idle-autocommit.js.map +1 -0
  15. package/dist/hooks/system-prompt-overlay.d.ts +3 -0
  16. package/dist/hooks/system-prompt-overlay.d.ts.map +1 -0
  17. package/dist/hooks/system-prompt-overlay.js +30 -0
  18. package/dist/hooks/system-prompt-overlay.js.map +1 -0
  19. package/dist/hooks/workspace-listing.d.ts +3 -0
  20. package/dist/hooks/workspace-listing.d.ts.map +1 -0
  21. package/dist/hooks/workspace-listing.js +106 -0
  22. package/dist/hooks/workspace-listing.js.map +1 -0
  23. package/dist/index.d.ts +9 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +56 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/logger.d.ts +5 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +18 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/opencode-types.d.ts +55 -0
  32. package/dist/opencode-types.d.ts.map +1 -0
  33. package/dist/opencode-types.js +4 -0
  34. package/dist/opencode-types.js.map +1 -0
  35. package/dist/plugin-entry.d.ts +2 -0
  36. package/dist/plugin-entry.d.ts.map +1 -0
  37. package/dist/plugin-entry.js +2 -0
  38. package/dist/plugin-entry.js.map +1 -0
  39. package/dist/session-state.d.ts +20 -0
  40. package/dist/session-state.d.ts.map +1 -0
  41. package/dist/session-state.js +43 -0
  42. package/dist/session-state.js.map +1 -0
  43. package/dist/tools/runtime.d.ts +2 -0
  44. package/dist/tools/runtime.d.ts.map +1 -0
  45. package/dist/tools/runtime.js +2 -0
  46. package/dist/tools/runtime.js.map +1 -0
  47. package/dist/tools/service-token.d.ts +3 -0
  48. package/dist/tools/service-token.d.ts.map +1 -0
  49. package/dist/tools/service-token.js +31 -0
  50. package/dist/tools/service-token.js.map +1 -0
  51. package/dist/tools/shared.d.ts +3 -0
  52. package/dist/tools/shared.d.ts.map +1 -0
  53. package/dist/tools/shared.js +11 -0
  54. package/dist/tools/shared.js.map +1 -0
  55. package/dist/tools/xema-memory.d.ts +31 -0
  56. package/dist/tools/xema-memory.d.ts.map +1 -0
  57. package/dist/tools/xema-memory.js +157 -0
  58. package/dist/tools/xema-memory.js.map +1 -0
  59. package/dist/tools/xema-studio.d.ts +28 -0
  60. package/dist/tools/xema-studio.d.ts.map +1 -0
  61. package/dist/tools/xema-studio.js +220 -0
  62. package/dist/tools/xema-studio.js.map +1 -0
  63. package/package.json +45 -0
@@ -0,0 +1,157 @@
1
+ import { z } from 'zod';
2
+ import { tool } from '../opencode-types.js';
3
+ import { loadSessionStateForTool } from './runtime.js';
4
+ import { serviceTokenAuthorizationHeader } from './service-token.js';
5
+ import { toJsonString } from './shared.js';
6
+ const MEMORY_KINDS = [
7
+ 'GENERAL',
8
+ 'DECISION',
9
+ 'CONSTRAINT',
10
+ 'PATTERN',
11
+ 'LESSON',
12
+ 'EPISODIC',
13
+ 'PROCEDURAL',
14
+ 'CORRECTION',
15
+ ];
16
+ const SET_ARGS = {
17
+ content: z
18
+ .string()
19
+ .min(5)
20
+ .describe('The memory statement. A short fact / preference / lesson phrased as ' +
21
+ 'a complete sentence. Avoid ephemeral context ("just now the user said"); ' +
22
+ 'memory persists across turns.'),
23
+ kind: z
24
+ .enum(MEMORY_KINDS)
25
+ .default('GENERAL')
26
+ .describe('Kind of memory. Use DECISION for choices made, CONSTRAINT for ' +
27
+ 'hard limits, LESSON for insights from failures, PATTERN for ' +
28
+ 'recurring structures, CORRECTION when overriding a prior memory, ' +
29
+ 'GENERAL otherwise.'),
30
+ tag: z
31
+ .string()
32
+ .optional()
33
+ .describe('Optional short tag that appears in the originRef so the memory can ' +
34
+ 'later be recalled by the same tag (e.g. "preferences", "style").'),
35
+ importance: z
36
+ .number()
37
+ .int()
38
+ .min(1)
39
+ .max(4)
40
+ .optional()
41
+ .describe('1=LOW, 2=NORMAL (default), 3=HIGH, 4=CRITICAL.'),
42
+ };
43
+ const GET_ARGS = {
44
+ kind: z
45
+ .enum(MEMORY_KINDS)
46
+ .optional()
47
+ .describe('Filter to a specific kind. Omit for all.'),
48
+ tag: z
49
+ .string()
50
+ .optional()
51
+ .describe('Filter to memories written with this tag. Matches on originRef suffix.'),
52
+ limit: z
53
+ .number()
54
+ .int()
55
+ .min(1)
56
+ .max(50)
57
+ .default(20)
58
+ .describe('Maximum number of memories to return.'),
59
+ };
60
+ function resolveMemoryApiCtx(workspaceDir, toolName) {
61
+ const state = loadSessionStateForTool(workspaceDir, toolName);
62
+ const baseUrl = process.env.MEMORY_API_URL?.trim();
63
+ if (!baseUrl) {
64
+ throw new Error('MEMORY_API_URL is not configured on this worker. The operator must ' +
65
+ 'set it for xema_memory_* tools to work.');
66
+ }
67
+ const project = state.ctx.project;
68
+ if (!project || !project.projectId) {
69
+ throw new Error('Session memory requires a projectId in context.json; this session is ' +
70
+ 'not bound to a project (orgId-only). Skip xema_memory_* tools here.');
71
+ }
72
+ const sessionId = state.ctx.invocation.sessionId ?? state.ctx.invocation.runId ?? 'no-session';
73
+ return {
74
+ baseUrl: baseUrl.replace(/\/+$/, ''),
75
+ orgId: project.orgId,
76
+ projectId: project.projectId,
77
+ actorId: `xema:${state.ctx.invocation.role}`,
78
+ sessionId,
79
+ role: state.ctx.invocation.role,
80
+ };
81
+ }
82
+ function memoryApiHeaders(ctx) {
83
+ return {
84
+ 'Content-Type': 'application/json',
85
+ Authorization: serviceTokenAuthorizationHeader(),
86
+ 'x-org-id': ctx.orgId,
87
+ 'x-project-id': ctx.projectId,
88
+ 'x-actor-type': 'agent',
89
+ 'x-actor-id': ctx.actorId,
90
+ };
91
+ }
92
+ export function buildXemaMemorySetTool(workspaceDir) {
93
+ return tool({
94
+ description: 'Persist a project-scoped memory that survives context compaction and ' +
95
+ 'future sessions. Use sparingly — for durable preferences, decisions, ' +
96
+ 'lessons, or patterns worth recalling next time. Do NOT use for ' +
97
+ 'conversational context or task-local notes.',
98
+ args: SET_ARGS,
99
+ async execute(args) {
100
+ const ctx = resolveMemoryApiCtx(workspaceDir, 'xema_memory_set');
101
+ const originRef = args.tag
102
+ ? `session:${ctx.sessionId}:${args.tag}`
103
+ : `session:${ctx.sessionId}`;
104
+ const body = {
105
+ content: args.content,
106
+ type: args.kind ?? 'GENERAL',
107
+ source: ctx.actorId,
108
+ originType: 'SESSION',
109
+ originRef,
110
+ };
111
+ if (args.importance !== undefined)
112
+ body.importance = args.importance;
113
+ const res = await fetch(`${ctx.baseUrl}/memories`, {
114
+ method: 'POST',
115
+ headers: memoryApiHeaders(ctx),
116
+ body: JSON.stringify(body),
117
+ signal: AbortSignal.timeout(10_000),
118
+ });
119
+ if (!res.ok) {
120
+ const errText = await res.text().catch(() => '');
121
+ throw new Error(`memory-api rejected write (${res.status}): ${errText.slice(0, 400)}`);
122
+ }
123
+ const stored = (await res.json().catch(() => null));
124
+ return toJsonString({ stored, originRef });
125
+ },
126
+ });
127
+ }
128
+ export function buildXemaMemoryGetTool(workspaceDir) {
129
+ return tool({
130
+ description: 'Recall project-scoped memories written by earlier sessions or by ' +
131
+ 'xema_memory_set. Returns the most relevant items subject to an ' +
132
+ 'optional kind or tag filter. Read this BEFORE large decisions so ' +
133
+ 'prior lessons and preferences inform the work.',
134
+ args: GET_ARGS,
135
+ async execute(args) {
136
+ const ctx = resolveMemoryApiCtx(workspaceDir, 'xema_memory_get');
137
+ const params = new URLSearchParams();
138
+ params.set('limit', String(args.limit ?? 20));
139
+ if (args.kind)
140
+ params.set('type', args.kind);
141
+ if (args.tag)
142
+ params.set('originRefContains', `:${args.tag}`);
143
+ const res = await fetch(`${ctx.baseUrl}/memories?${params.toString()}`, {
144
+ method: 'GET',
145
+ headers: memoryApiHeaders(ctx),
146
+ signal: AbortSignal.timeout(10_000),
147
+ });
148
+ if (!res.ok) {
149
+ const errText = await res.text().catch(() => '');
150
+ throw new Error(`memory-api rejected read (${res.status}): ${errText.slice(0, 400)}`);
151
+ }
152
+ const raw = (await res.json().catch(() => null));
153
+ return toJsonString(raw ?? []);
154
+ },
155
+ });
156
+ }
157
+ //# sourceMappingURL=xema-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xema-memory.js","sourceRoot":"","sources":["../../src/tools/xema-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare enum StudioKind {
3
+ Workflow = "workflow",
4
+ Spec = "spec"
5
+ }
6
+ export declare function buildXemaStudioFetchSchemaTool(workspaceDir: string): import("../opencode-types.js").ToolDefinition<{
7
+ kind: z.ZodEnum<{
8
+ workflow: StudioKind.Workflow;
9
+ spec: StudioKind.Spec;
10
+ }>;
11
+ }>;
12
+ export declare function buildXemaStudioValidateTool(workspaceDir: string): import("../opencode-types.js").ToolDefinition<{
13
+ kind: z.ZodEnum<{
14
+ workflow: StudioKind.Workflow;
15
+ spec: StudioKind.Spec;
16
+ }>;
17
+ rawYaml: z.ZodString;
18
+ isReusable: z.ZodOptional<z.ZodBoolean>;
19
+ }>;
20
+ export declare function buildXemaStudioListExistingArtifactsTool(workspaceDir: string): import("../opencode-types.js").ToolDefinition<{
21
+ kind: z.ZodEnum<{
22
+ workflow: StudioKind.Workflow;
23
+ spec: StudioKind.Spec;
24
+ }>;
25
+ search: z.ZodOptional<z.ZodString>;
26
+ limit: z.ZodDefault<z.ZodNumber>;
27
+ }>;
28
+ //# sourceMappingURL=xema-studio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xema-studio.d.ts","sourceRoot":"","sources":["../../src/tools/xema-studio.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,oBAAY,UAAU;IACpB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AA4HD,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM;;;;;GAoBlE;AAyBD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM;;;;;;;GAmC/D;AAyDD,wBAAgB,wCAAwC,CAAC,YAAY,EAAE,MAAM;;;;;;;GAqC5E"}
@@ -0,0 +1,220 @@
1
+ import { z } from 'zod';
2
+ import { tool } from '../opencode-types.js';
3
+ import { loadSessionStateForTool } from './runtime.js';
4
+ import { serviceTokenAuthorizationHeader } from './service-token.js';
5
+ import { toJsonString } from './shared.js';
6
+ export var StudioKind;
7
+ (function (StudioKind) {
8
+ StudioKind["Workflow"] = "workflow";
9
+ StudioKind["Spec"] = "spec";
10
+ })(StudioKind || (StudioKind = {}));
11
+ const STUDIO_KINDS = [StudioKind.Workflow, StudioKind.Spec];
12
+ function trimSlash(value) {
13
+ return value.replace(/\/+$/, '');
14
+ }
15
+ function readEnv(name) {
16
+ const v = process.env[name]?.trim();
17
+ if (!v) {
18
+ throw new Error(`${name} is not configured on this worker. The operator must set it ` +
19
+ 'for xema_studio_* tools to work.');
20
+ }
21
+ return v;
22
+ }
23
+ function resolveStudioApiCtx(workspaceDir, toolName) {
24
+ const state = loadSessionStateForTool(workspaceDir, toolName);
25
+ const project = state.ctx.project;
26
+ if (!project || !project.projectId) {
27
+ throw new Error('xema_studio_* tools require a projectId in context.json; this session ' +
28
+ 'is not bound to a project (orgId-only).');
29
+ }
30
+ return {
31
+ workflowEngineUrl: trimSlash(readEnv('WORKFLOW_ENGINE_API_URL')),
32
+ deliverableSpecsUrl: trimSlash(readEnv('DELIVERABLE_SPECS_API_URL')),
33
+ orgId: project.orgId,
34
+ projectId: project.projectId,
35
+ actorId: `xema:${state.ctx.invocation.role}`,
36
+ };
37
+ }
38
+ function studioHeaders(ctx) {
39
+ return {
40
+ 'Content-Type': 'application/json',
41
+ Authorization: serviceTokenAuthorizationHeader(),
42
+ 'x-org-id': ctx.orgId,
43
+ 'x-project-id': ctx.projectId,
44
+ 'x-actor-type': 'agent',
45
+ 'x-actor-id': ctx.actorId,
46
+ };
47
+ }
48
+ function routesFor(kind, ctx) {
49
+ switch (kind) {
50
+ case StudioKind.Workflow:
51
+ return {
52
+ schema: `${ctx.workflowEngineUrl}/schemas/workflow/v1alpha1/Workflow.json`,
53
+ validate: `${ctx.workflowEngineUrl}/compiler/preview-raw`,
54
+ list: `${ctx.workflowEngineUrl}/workflows`,
55
+ };
56
+ case StudioKind.Spec:
57
+ return {
58
+ schema: `${ctx.deliverableSpecsUrl}/schemas/deliverable/v1/DeliverableSpec.json`,
59
+ validate: `${ctx.deliverableSpecsUrl}/deliverable-specs/preview-content`,
60
+ list: `${ctx.deliverableSpecsUrl}/deliverable-specs`,
61
+ };
62
+ }
63
+ }
64
+ async function httpJson(url, init, toolName) {
65
+ const res = await fetch(url, {
66
+ ...init,
67
+ signal: AbortSignal.timeout(15_000),
68
+ });
69
+ if (!res.ok) {
70
+ const errText = await res.text().catch(() => '');
71
+ throw new Error(`${toolName}: upstream ${res.status} at ${url} — ${errText.slice(0, 400)}`);
72
+ }
73
+ try {
74
+ return (await res.json());
75
+ }
76
+ catch (err) {
77
+ const message = err instanceof Error ? err.message : String(err);
78
+ throw new Error(`${toolName}: upstream 2xx at ${url} returned non-JSON body — ${message}`);
79
+ }
80
+ }
81
+ const FETCH_SCHEMA_ARGS = {
82
+ kind: z
83
+ .enum(STUDIO_KINDS)
84
+ .describe('Which Studio artifact kind to fetch the live JSON Schema for. ' +
85
+ '`workflow` → /schemas/workflow/v1alpha1/Workflow.json (engine), ' +
86
+ '`spec` → /schemas/deliverable/v1/DeliverableSpec.json.'),
87
+ };
88
+ export function buildXemaStudioFetchSchemaTool(workspaceDir) {
89
+ return tool({
90
+ description: 'Fetch the live JSON Schema for a Studio artifact kind. Returns the ' +
91
+ 'deterministic schema document published by the owning service so ' +
92
+ 'every proposal cites real field names + enum values, never guessed. ' +
93
+ 'Call this BEFORE proposing YAML so required keys and enum values ' +
94
+ 'come from the live schema, not training data.',
95
+ args: FETCH_SCHEMA_ARGS,
96
+ async execute(args) {
97
+ const ctx = resolveStudioApiCtx(workspaceDir, 'xema_studio_fetch_schema');
98
+ const routes = routesFor(args.kind, ctx);
99
+ const schema = await httpJson(routes.schema, { method: 'GET', headers: studioHeaders(ctx) }, 'xema_studio_fetch_schema');
100
+ return toJsonString({ kind: args.kind, schema });
101
+ },
102
+ });
103
+ }
104
+ const VALIDATE_ARGS = {
105
+ kind: z
106
+ .enum(STUDIO_KINDS)
107
+ .describe('Studio artifact kind being validated.'),
108
+ rawYaml: z
109
+ .string()
110
+ .min(1)
111
+ .describe('Raw YAML body for the artifact. The tool routes to the service-side ' +
112
+ 'compile-preview / preview / preview-content endpoint and reports ' +
113
+ 'the typed result.'),
114
+ isReusable: z
115
+ .boolean()
116
+ .optional()
117
+ .describe('For `kind="workflow"`, when true selects the reusable-workflow ' +
118
+ 'trigger envelope (`workflow_call`). Ignored for spec.'),
119
+ };
120
+ export function buildXemaStudioValidateTool(workspaceDir) {
121
+ return tool({
122
+ description: 'Validate proposed YAML against the live schema + compiler/preview ' +
123
+ 'endpoint BEFORE emitting a StudioAuthorProposal. Returns the typed ' +
124
+ 'compile-preview / validate result so the agent can either correct ' +
125
+ 'errors and retry or include the successful summary in its proposal.',
126
+ args: VALIDATE_ARGS,
127
+ async execute(args) {
128
+ const ctx = resolveStudioApiCtx(workspaceDir, 'xema_studio_validate');
129
+ const routes = routesFor(args.kind, ctx);
130
+ let body;
131
+ if (args.kind === StudioKind.Workflow) {
132
+ body = {
133
+ rawYaml: args.rawYaml,
134
+ isReusable: args.isReusable === true,
135
+ };
136
+ }
137
+ else {
138
+ body = { rawYaml: args.rawYaml };
139
+ }
140
+ const result = await httpJson(routes.validate, {
141
+ method: 'POST',
142
+ headers: studioHeaders(ctx),
143
+ body: JSON.stringify(body),
144
+ }, 'xema_studio_validate');
145
+ return toJsonString({ kind: args.kind, result });
146
+ },
147
+ });
148
+ }
149
+ const LIST_ARGS = {
150
+ kind: z
151
+ .enum(STUDIO_KINDS)
152
+ .describe('Studio artifact kind to list.'),
153
+ search: z
154
+ .string()
155
+ .optional()
156
+ .describe('Optional case-insensitive substring filter applied to slug + title.'),
157
+ limit: z
158
+ .number()
159
+ .int()
160
+ .min(1)
161
+ .max(100)
162
+ .default(25)
163
+ .describe('Maximum entries to return — keep small to save tokens.'),
164
+ };
165
+ function projectListRows(rows) {
166
+ if (!Array.isArray(rows))
167
+ return [];
168
+ const out = [];
169
+ for (const row of rows) {
170
+ if (row === null || typeof row !== 'object')
171
+ continue;
172
+ const r = row;
173
+ if (typeof r.slug !== 'string')
174
+ continue;
175
+ out.push({
176
+ slug: r.slug,
177
+ ...(typeof r.title === 'string' ? { title: r.title } : {}),
178
+ ...(typeof r.version === 'string' ? { version: r.version } : {}),
179
+ ...(typeof r.currentVersion === 'string'
180
+ ? { version: r.currentVersion }
181
+ : {}),
182
+ ...(typeof r.source === 'string' ? { source: r.source } : {}),
183
+ });
184
+ }
185
+ return out;
186
+ }
187
+ function matchesSearch(entry, search) {
188
+ const needle = search.toLowerCase();
189
+ if (entry.slug.toLowerCase().includes(needle))
190
+ return true;
191
+ if (entry.title && entry.title.toLowerCase().includes(needle))
192
+ return true;
193
+ return false;
194
+ }
195
+ export function buildXemaStudioListExistingArtifactsTool(workspaceDir) {
196
+ return tool({
197
+ description: 'List existing artifacts of a given kind within the active org/project ' +
198
+ 'so the agent can reference them by real slug instead of inventing ' +
199
+ 'names. Returns a slim array of { slug, title, version, source }; ' +
200
+ 'never full bodies. Use this BEFORE suggesting `uses:` actions, ' +
201
+ '`extends:` chains, or spec refs.',
202
+ args: LIST_ARGS,
203
+ async execute(args) {
204
+ const ctx = resolveStudioApiCtx(workspaceDir, 'xema_studio_list_existing_artifacts');
205
+ const routes = routesFor(args.kind, ctx);
206
+ const raw = await httpJson(routes.list, { method: 'GET', headers: studioHeaders(ctx) }, 'xema_studio_list_existing_artifacts');
207
+ const rows = raw !== null && typeof raw === 'object' && 'data' in raw
208
+ ? raw.data
209
+ : raw;
210
+ let entries = projectListRows(rows);
211
+ if (args.search && args.search.trim().length > 0) {
212
+ const filter = args.search.trim();
213
+ entries = entries.filter((e) => matchesSearch(e, filter));
214
+ }
215
+ const limit = args.limit ?? 25;
216
+ return toJsonString({ kind: args.kind, entries: entries.slice(0, limit) });
217
+ },
218
+ });
219
+ }
220
+ //# sourceMappingURL=xema-studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xema-studio.js","sourceRoot":"","sources":["../../src/tools/xema-studio.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@xemahq/opencode-xema-plugin",
3
+ "version": "0.1.1",
4
+ "description": "Opencode plugin providing Xema-namespaced runtime tools (xema_memory_*) and the dynamic system-prompt overlay hook.",
5
+ "publishConfig": {
6
+ "registry": "https://npm.pkg.github.com"
7
+ },
8
+ "type": "module",
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "peerDependencies": {
15
+ "@opencode-ai/plugin": ">=1.0.0",
16
+ "zod": ">=4"
17
+ },
18
+ "dependencies": {
19
+ "@xemahq/kernel-contracts": "^0.2.0"
20
+ },
21
+ "devDependencies": {
22
+ "@opencode-ai/plugin": "^1.15.10",
23
+ "@types/node": "25.2.3",
24
+ "esbuild": "^0.25.4",
25
+ "typescript": "5.9.3",
26
+ "zod": "^4.3.6"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "xema-source": "./src/index.ts",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./dist/lib/*": {
35
+ "types": "./dist/lib/*.d.ts",
36
+ "default": "./dist/lib/*.js"
37
+ }
38
+ },
39
+ "scripts": {
40
+ "clean": "rm -rf dist",
41
+ "build": "tsc -p tsconfig.json",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit",
43
+ "test": "node --test tests/*.test.mjs"
44
+ }
45
+ }