@agnt5/sdk 0.2.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.
- package/README.md +183 -0
- package/dist/__tests__/integration/helpers.d.ts +41 -0
- package/dist/__tests__/integration/helpers.d.ts.map +1 -0
- package/dist/__tests__/integration/helpers.js +78 -0
- package/dist/__tests__/integration/helpers.js.map +1 -0
- package/dist/agent.d.ts +260 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +493 -0
- package/dist/agent.js.map +1 -0
- package/dist/async-context.d.ts +57 -0
- package/dist/async-context.d.ts.map +1 -0
- package/dist/async-context.js +52 -0
- package/dist/async-context.js.map +1 -0
- package/dist/batch.d.ts +116 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +98 -0
- package/dist/batch.js.map +1 -0
- package/dist/chat.d.ts +137 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +278 -0
- package/dist/chat.js.map +1 -0
- package/dist/client.d.ts +394 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +757 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +47 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +244 -0
- package/dist/context.js.map +1 -0
- package/dist/errors.d.ts +148 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +201 -0
- package/dist/errors.js.map +1 -0
- package/dist/eval.d.ts +242 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +452 -0
- package/dist/eval.js.map +1 -0
- package/dist/event-emitter.d.ts +28 -0
- package/dist/event-emitter.d.ts.map +1 -0
- package/dist/event-emitter.js +79 -0
- package/dist/event-emitter.js.map +1 -0
- package/dist/events.d.ts +285 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +256 -0
- package/dist/events.js.map +1 -0
- package/dist/function.d.ts +61 -0
- package/dist/function.d.ts.map +1 -0
- package/dist/function.js +78 -0
- package/dist/function.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/lm.d.ts +301 -0
- package/dist/lm.d.ts.map +1 -0
- package/dist/lm.js +283 -0
- package/dist/lm.js.map +1 -0
- package/dist/logging.d.ts +68 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +165 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp-server.d.ts +98 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +307 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp.d.ts +73 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +224 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +234 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +609 -0
- package/dist/memory.js.map +1 -0
- package/dist/platform-adapters.d.ts +121 -0
- package/dist/platform-adapters.d.ts.map +1 -0
- package/dist/platform-adapters.js +174 -0
- package/dist/platform-adapters.js.map +1 -0
- package/dist/platform-context.d.ts +55 -0
- package/dist/platform-context.d.ts.map +1 -0
- package/dist/platform-context.js +196 -0
- package/dist/platform-context.js.map +1 -0
- package/dist/retry-utils.d.ts +169 -0
- package/dist/retry-utils.d.ts.map +1 -0
- package/dist/retry-utils.js +304 -0
- package/dist/retry-utils.js.map +1 -0
- package/dist/sandbox.d.ts +103 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +168 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schema-utils.d.ts +250 -0
- package/dist/schema-utils.d.ts.map +1 -0
- package/dist/schema-utils.js +444 -0
- package/dist/schema-utils.js.map +1 -0
- package/dist/scorer.d.ts +130 -0
- package/dist/scorer.d.ts.map +1 -0
- package/dist/scorer.js +211 -0
- package/dist/scorer.js.map +1 -0
- package/dist/state.d.ts +92 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +151 -0
- package/dist/state.js.map +1 -0
- package/dist/tool.d.ts +120 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +215 -0
- package/dist/tool.js.map +1 -0
- package/dist/tracing.d.ts +82 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +206 -0
- package/dist/tracing.js.map +1 -0
- package/dist/types.d.ts +139 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +111 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +944 -0
- package/dist/worker.js.map +1 -0
- package/dist/workflow-utils.d.ts +257 -0
- package/dist/workflow-utils.d.ts.map +1 -0
- package/dist/workflow-utils.js +370 -0
- package/dist/workflow-utils.js.map +1 -0
- package/dist/workflow.d.ts +78 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +138 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +86 -0
package/dist/sandbox.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox — secure code execution and file I/O.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the native Rust sandbox bindings, supporting both remote (HTTP)
|
|
5
|
+
* and embedded (WASM) backends. The backend is selected automatically
|
|
6
|
+
* based on available configuration.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { Sandbox } from '@agnt5/sdk';
|
|
11
|
+
*
|
|
12
|
+
* const sandbox = new Sandbox({ endpoint: 'http://localhost:8080' });
|
|
13
|
+
* const result = await sandbox.executeCode('console.log("hello")', 'javascript');
|
|
14
|
+
* console.log(result.stdout); // "hello"
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { createRequire } from 'node:module';
|
|
18
|
+
import { dirname, join } from 'node:path';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
// ── Native binding loader ──────────────────────────────────────
|
|
21
|
+
let _native = null;
|
|
22
|
+
function loadNative() {
|
|
23
|
+
if (_native)
|
|
24
|
+
return _native;
|
|
25
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
26
|
+
const __dirname = dirname(__filename);
|
|
27
|
+
const require = createRequire(import.meta.url);
|
|
28
|
+
const paths = [
|
|
29
|
+
join(__dirname, '../../native/agnt5-sdk-native.darwin-arm64.node'),
|
|
30
|
+
join(__dirname, '../native/agnt5-sdk-native.darwin-arm64.node'),
|
|
31
|
+
join(__dirname, '../../native/agnt5-sdk-native.linux-x64-gnu.node'),
|
|
32
|
+
join(__dirname, '../native/agnt5-sdk-native.linux-x64-gnu.node'),
|
|
33
|
+
join(__dirname, '../../native/agnt5-sdk-native.linux-x64.node'),
|
|
34
|
+
join(__dirname, '../native/agnt5-sdk-native.linux-x64.node'),
|
|
35
|
+
];
|
|
36
|
+
for (const p of paths) {
|
|
37
|
+
try {
|
|
38
|
+
_native = require(p);
|
|
39
|
+
return _native;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw new Error('Could not find native sandbox bindings');
|
|
46
|
+
}
|
|
47
|
+
// ── NAPI → TS field mapping helpers ────────────────────────────
|
|
48
|
+
function mapExecuteResult(r) {
|
|
49
|
+
return {
|
|
50
|
+
stdout: r.stdout,
|
|
51
|
+
stderr: r.stderr,
|
|
52
|
+
exitCode: r.exit_code ?? r.exitCode,
|
|
53
|
+
executionTimeMs: r.execution_time_ms ?? r.executionTimeMs,
|
|
54
|
+
error: r.error ?? undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function mapWriteResult(r) {
|
|
58
|
+
return {
|
|
59
|
+
success: r.success,
|
|
60
|
+
path: r.path,
|
|
61
|
+
size: r.size,
|
|
62
|
+
error: r.error ?? undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function mapReadResult(r) {
|
|
66
|
+
return {
|
|
67
|
+
path: r.path,
|
|
68
|
+
content: r.content,
|
|
69
|
+
size: r.size,
|
|
70
|
+
isDir: r.is_dir ?? r.isDir,
|
|
71
|
+
error: r.error ?? undefined,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function mapFileInfo(f) {
|
|
75
|
+
return {
|
|
76
|
+
name: f.name,
|
|
77
|
+
path: f.path,
|
|
78
|
+
size: f.size,
|
|
79
|
+
isDir: f.is_dir ?? f.isDir,
|
|
80
|
+
mode: f.mode,
|
|
81
|
+
modTime: f.mod_time ?? f.modTime,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function mapListResult(r) {
|
|
85
|
+
return {
|
|
86
|
+
path: r.path,
|
|
87
|
+
total: r.total,
|
|
88
|
+
files: (r.files ?? []).map(mapFileInfo),
|
|
89
|
+
error: r.error ?? undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function mapHealthResult(r) {
|
|
93
|
+
return {
|
|
94
|
+
status: r.status,
|
|
95
|
+
sandboxId: r.sandbox_id ?? r.sandboxId,
|
|
96
|
+
uptimeMs: r.uptime_ms ?? r.uptimeMs,
|
|
97
|
+
backendKind: r.backend_kind ?? r.backendKind,
|
|
98
|
+
error: r.error ?? undefined,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function mapCapabilities(c) {
|
|
102
|
+
return {
|
|
103
|
+
languages: c.languages,
|
|
104
|
+
supportsCommands: c.supports_commands ?? c.supportsCommands,
|
|
105
|
+
supportsGit: c.supports_git ?? c.supportsGit,
|
|
106
|
+
supportsPreviewUrl: c.supports_preview_url ?? c.supportsPreviewUrl,
|
|
107
|
+
supportsStreaming: c.supports_streaming ?? c.supportsStreaming,
|
|
108
|
+
supportsSnapshots: c.supports_snapshots ?? c.supportsSnapshots,
|
|
109
|
+
hasNetworkAccess: c.has_network_access ?? c.hasNetworkAccess,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// ── Sandbox class ──────────────────────────────────────────────
|
|
113
|
+
export class Sandbox {
|
|
114
|
+
constructor(options) {
|
|
115
|
+
const native = loadNative();
|
|
116
|
+
const nativeOpts = options
|
|
117
|
+
? {
|
|
118
|
+
backend: options.backend,
|
|
119
|
+
endpoint: options.endpoint ?? process.env.AGNT5_SANDBOX_ENDPOINT,
|
|
120
|
+
sandbox_id: options.sandboxId,
|
|
121
|
+
api_key: options.apiKey,
|
|
122
|
+
bearer_token: options.bearerToken,
|
|
123
|
+
timeout_secs: options.timeoutSecs,
|
|
124
|
+
quickjs_wasm_path: options.quickjsWasmPath,
|
|
125
|
+
}
|
|
126
|
+
: undefined;
|
|
127
|
+
this.inner = new native.Sandbox(nativeOpts);
|
|
128
|
+
}
|
|
129
|
+
/** Active backend type ("remote" or "wasm"). */
|
|
130
|
+
get backend() {
|
|
131
|
+
return this.inner.backend;
|
|
132
|
+
}
|
|
133
|
+
/** Execute code in a sandboxed environment. */
|
|
134
|
+
async executeCode(code, language, timeoutMs) {
|
|
135
|
+
const r = await this.inner.executeCode(code, language, timeoutMs);
|
|
136
|
+
return mapExecuteResult(r);
|
|
137
|
+
}
|
|
138
|
+
/** Write a file into the sandbox workspace. */
|
|
139
|
+
async writeFile(path, content) {
|
|
140
|
+
const buf = typeof content === 'string' ? Buffer.from(content) : content;
|
|
141
|
+
const r = await this.inner.writeFile(path, buf);
|
|
142
|
+
return mapWriteResult(r);
|
|
143
|
+
}
|
|
144
|
+
/** Read a file from the sandbox workspace. */
|
|
145
|
+
async readFile(path) {
|
|
146
|
+
const r = await this.inner.readFile(path);
|
|
147
|
+
return mapReadResult(r);
|
|
148
|
+
}
|
|
149
|
+
/** Delete a file or directory from the sandbox workspace. */
|
|
150
|
+
async deleteFile(path, recursive) {
|
|
151
|
+
return this.inner.deleteFile(path, recursive);
|
|
152
|
+
}
|
|
153
|
+
/** List files in the sandbox workspace. */
|
|
154
|
+
async listFiles(path, recursive) {
|
|
155
|
+
const r = await this.inner.listFiles(path, recursive);
|
|
156
|
+
return mapListResult(r);
|
|
157
|
+
}
|
|
158
|
+
/** Check sandbox health and status. */
|
|
159
|
+
async health() {
|
|
160
|
+
const r = await this.inner.health();
|
|
161
|
+
return mapHealthResult(r);
|
|
162
|
+
}
|
|
163
|
+
/** Query sandbox capabilities (languages, features). */
|
|
164
|
+
capabilities() {
|
|
165
|
+
return mapCapabilities(this.inner.capabilities());
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema conversion utilities for structured output support.
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities to convert TypeScript schemas (Zod, TypeBox, or manual)
|
|
5
|
+
* to JSON Schema format for LLM structured output generation, function signatures,
|
|
6
|
+
* and tool definitions.
|
|
7
|
+
*/
|
|
8
|
+
import type { JSONSchema } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Schema format types supported by the SDK
|
|
11
|
+
*/
|
|
12
|
+
export type SchemaFormat = 'zod' | 'typebox' | 'raw';
|
|
13
|
+
/**
|
|
14
|
+
* Options for schema conversion
|
|
15
|
+
*/
|
|
16
|
+
export interface SchemaConversionOptions {
|
|
17
|
+
/** Include descriptions in the schema */
|
|
18
|
+
includeDescriptions?: boolean;
|
|
19
|
+
/** Strict mode (additionalProperties: false) */
|
|
20
|
+
strict?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Auto-detect format type and convert to JSON schema.
|
|
24
|
+
*
|
|
25
|
+
* @param schema - Zod schema, TypeBox schema, or JSON schema object
|
|
26
|
+
* @param options - Conversion options
|
|
27
|
+
* @returns Tuple of [format_type, json_schema]
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { z } from 'zod';
|
|
32
|
+
* import { detectFormatType } from '@agnt5/sdk';
|
|
33
|
+
*
|
|
34
|
+
* const UserSchema = z.object({
|
|
35
|
+
* name: z.string(),
|
|
36
|
+
* age: z.number(),
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* const [format, schema] = detectFormatType(UserSchema);
|
|
40
|
+
* // format: 'zod'
|
|
41
|
+
* // schema: { type: 'object', properties: { ... }, required: ['name', 'age'] }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectFormatType(schema: any, options?: SchemaConversionOptions): [SchemaFormat, JSONSchema];
|
|
45
|
+
/**
|
|
46
|
+
* Check if value is a Zod schema
|
|
47
|
+
*/
|
|
48
|
+
export declare function isZodSchema(value: any): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if value is a TypeBox schema
|
|
51
|
+
*/
|
|
52
|
+
export declare function isTypeBoxSchema(value: any): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Check if value is a raw JSON schema
|
|
55
|
+
*/
|
|
56
|
+
export declare function isJsonSchema(value: any): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Convert Zod schema to JSON Schema.
|
|
59
|
+
*
|
|
60
|
+
* @param schema - Zod schema
|
|
61
|
+
* @param options - Conversion options
|
|
62
|
+
* @returns JSON Schema object
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* import { z } from 'zod';
|
|
67
|
+
*
|
|
68
|
+
* const schema = z.object({
|
|
69
|
+
* name: z.string().describe('User name'),
|
|
70
|
+
* age: z.number().int().positive(),
|
|
71
|
+
* email: z.string().email().optional(),
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* const jsonSchema = zodToJsonSchema(schema);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function zodToJsonSchema(schema: any, options?: SchemaConversionOptions): JSONSchema;
|
|
78
|
+
/**
|
|
79
|
+
* Convert TypeBox schema to JSON Schema.
|
|
80
|
+
*
|
|
81
|
+
* TypeBox schemas are already JSON Schema compatible, so this is mostly a pass-through.
|
|
82
|
+
*
|
|
83
|
+
* @param schema - TypeBox schema
|
|
84
|
+
* @param options - Conversion options
|
|
85
|
+
* @returns JSON Schema object
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* import { Type } from '@sinclair/typebox';
|
|
90
|
+
*
|
|
91
|
+
* const schema = Type.Object({
|
|
92
|
+
* name: Type.String(),
|
|
93
|
+
* age: Type.Number(),
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* const jsonSchema = typeBoxToJsonSchema(schema);
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function typeBoxToJsonSchema(schema: any, options?: SchemaConversionOptions): JSONSchema;
|
|
100
|
+
/**
|
|
101
|
+
* Convert basic TypeScript types to JSON Schema types.
|
|
102
|
+
*
|
|
103
|
+
* This is a utility for manual schema generation when you don't want to use Zod or TypeBox.
|
|
104
|
+
*
|
|
105
|
+
* @param typeName - TypeScript type name ('string', 'number', 'boolean', etc.)
|
|
106
|
+
* @param options - Additional schema options
|
|
107
|
+
* @returns JSON Schema type definition
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const stringSchema = typeToSchema('string', { description: 'User name' });
|
|
112
|
+
* // { type: 'string', description: 'User name' }
|
|
113
|
+
*
|
|
114
|
+
* const arraySchema = typeToSchema('array', { items: { type: 'number' } });
|
|
115
|
+
* // { type: 'array', items: { type: 'number' } }
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export declare function typeToSchema(typeName: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'null', options?: Partial<JSONSchema>): JSONSchema;
|
|
119
|
+
/**
|
|
120
|
+
* Create an object schema from property definitions.
|
|
121
|
+
*
|
|
122
|
+
* @param properties - Object property definitions
|
|
123
|
+
* @param required - Array of required property names
|
|
124
|
+
* @param options - Additional schema options
|
|
125
|
+
* @returns JSON Schema object definition
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const userSchema = createObjectSchema({
|
|
130
|
+
* name: { type: 'string', description: 'User name' },
|
|
131
|
+
* age: { type: 'number', minimum: 0 },
|
|
132
|
+
* email: { type: 'string', format: 'email' },
|
|
133
|
+
* }, ['name', 'age']);
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function createObjectSchema(properties: Record<string, JSONSchema>, required?: string[], options?: Partial<JSONSchema>): JSONSchema;
|
|
137
|
+
/**
|
|
138
|
+
* Create an array schema with item type.
|
|
139
|
+
*
|
|
140
|
+
* @param items - Schema for array items
|
|
141
|
+
* @param options - Additional schema options
|
|
142
|
+
* @returns JSON Schema array definition
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const numbersSchema = createArraySchema({ type: 'number' });
|
|
147
|
+
* const usersSchema = createArraySchema({
|
|
148
|
+
* type: 'object',
|
|
149
|
+
* properties: {
|
|
150
|
+
* name: { type: 'string' },
|
|
151
|
+
* age: { type: 'number' },
|
|
152
|
+
* },
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export declare function createArraySchema(items: JSONSchema, options?: Partial<JSONSchema>): JSONSchema;
|
|
157
|
+
/**
|
|
158
|
+
* Create an enum schema.
|
|
159
|
+
*
|
|
160
|
+
* @param values - Allowed enum values
|
|
161
|
+
* @param options - Additional schema options
|
|
162
|
+
* @returns JSON Schema enum definition
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const statusSchema = createEnumSchema(['pending', 'active', 'completed']);
|
|
167
|
+
* const roleSchema = createEnumSchema(['admin', 'user', 'guest'], {
|
|
168
|
+
* description: 'User role',
|
|
169
|
+
* });
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export declare function createEnumSchema(values: any[], options?: Partial<JSONSchema>): JSONSchema;
|
|
173
|
+
/**
|
|
174
|
+
* Create a union schema (anyOf).
|
|
175
|
+
*
|
|
176
|
+
* @param schemas - Array of possible schemas
|
|
177
|
+
* @param options - Additional schema options
|
|
178
|
+
* @returns JSON Schema union definition
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const stringOrNumber = createUnionSchema([
|
|
183
|
+
* { type: 'string' },
|
|
184
|
+
* { type: 'number' },
|
|
185
|
+
* ]);
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
export declare function createUnionSchema(schemas: JSONSchema[], options?: Partial<JSONSchema>): JSONSchema;
|
|
189
|
+
/**
|
|
190
|
+
* Make a schema optional (allows null).
|
|
191
|
+
*
|
|
192
|
+
* @param schema - Base schema
|
|
193
|
+
* @returns Schema that allows the base type or null
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* const optionalString = makeOptional({ type: 'string' });
|
|
198
|
+
* // { anyOf: [{ type: 'string' }, { type: 'null' }] }
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export declare function makeOptional(schema: JSONSchema): JSONSchema;
|
|
202
|
+
/**
|
|
203
|
+
* Merge multiple schemas into one (allOf).
|
|
204
|
+
*
|
|
205
|
+
* @param schemas - Array of schemas to merge
|
|
206
|
+
* @returns Merged schema
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* const baseSchema = { type: 'object', properties: { id: { type: 'string' } } };
|
|
211
|
+
* const extraSchema = { properties: { name: { type: 'string' } } };
|
|
212
|
+
* const merged = mergeSchemas([baseSchema, extraSchema]);
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export declare function mergeSchemas(schemas: JSONSchema[]): JSONSchema;
|
|
216
|
+
/**
|
|
217
|
+
* Validate a value against a JSON schema.
|
|
218
|
+
*
|
|
219
|
+
* This is a basic validator. For production use, consider using a dedicated library like Ajv.
|
|
220
|
+
*
|
|
221
|
+
* @param value - Value to validate
|
|
222
|
+
* @param schema - JSON Schema to validate against
|
|
223
|
+
* @returns True if valid, false otherwise
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const schema = { type: 'object', properties: { name: { type: 'string' } } };
|
|
228
|
+
* validateSchema({ name: 'Alice' }, schema); // true
|
|
229
|
+
* validateSchema({ name: 123 }, schema); // false
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export declare function validateSchema(value: any, schema: JSONSchema): boolean;
|
|
233
|
+
/**
|
|
234
|
+
* Extract description from JSDoc comment.
|
|
235
|
+
*
|
|
236
|
+
* @param func - Function to extract description from
|
|
237
|
+
* @returns Description string or undefined
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```typescript
|
|
241
|
+
* /**
|
|
242
|
+
* * This is a greeting function
|
|
243
|
+
* */
|
|
244
|
+
* function greet(name: string) { ... }
|
|
245
|
+
*
|
|
246
|
+
* extractFunctionDescription(greet); // 'This is a greeting function'
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
export declare function extractFunctionDescription(func: Function): string | undefined;
|
|
250
|
+
//# sourceMappingURL=schema-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,GAAG,EACX,OAAO,GAAE,uBAA4B,GACpC,CAAC,YAAY,EAAE,UAAU,CAAC,CAmB5B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAG/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,uBAA4B,GAAG,UAAU,CAoB9F;AAoED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,uBAA4B,GAAG,UAAU,CAclG;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EACnF,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,UAAU,CAKZ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,UAAU,CAOZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAMlG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAM7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAKtG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAI3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CAI9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAetE;AA2BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAQ7E"}
|