@contractspec/lib.ai-agent 0.0.0-canary-20260113162409
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/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/_virtual/rolldown_runtime.js +8 -0
- package/dist/agent/agent-factory.d.ts +104 -0
- package/dist/agent/agent-factory.d.ts.map +1 -0
- package/dist/agent/agent-factory.js +103 -0
- package/dist/agent/agent-factory.js.map +1 -0
- package/dist/agent/contract-spec-agent.d.ts +75 -0
- package/dist/agent/contract-spec-agent.d.ts.map +1 -0
- package/dist/agent/contract-spec-agent.js +148 -0
- package/dist/agent/contract-spec-agent.js.map +1 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +4 -0
- package/dist/agent/unified-agent.d.ts +131 -0
- package/dist/agent/unified-agent.d.ts.map +1 -0
- package/dist/agent/unified-agent.js +267 -0
- package/dist/agent/unified-agent.js.map +1 -0
- package/dist/approval/index.d.ts +2 -0
- package/dist/approval/index.js +3 -0
- package/dist/approval/workflow.d.ts +156 -0
- package/dist/approval/workflow.d.ts.map +1 -0
- package/dist/approval/workflow.js +160 -0
- package/dist/approval/workflow.js.map +1 -0
- package/dist/exporters/claude-agent-exporter.d.ts +64 -0
- package/dist/exporters/claude-agent-exporter.d.ts.map +1 -0
- package/dist/exporters/claude-agent-exporter.js +210 -0
- package/dist/exporters/claude-agent-exporter.js.map +1 -0
- package/dist/exporters/index.d.ts +4 -0
- package/dist/exporters/index.js +4 -0
- package/dist/exporters/opencode-exporter.d.ts +64 -0
- package/dist/exporters/opencode-exporter.d.ts.map +1 -0
- package/dist/exporters/opencode-exporter.js +200 -0
- package/dist/exporters/opencode-exporter.js.map +1 -0
- package/dist/exporters/types.d.ts +239 -0
- package/dist/exporters/types.d.ts.map +1 -0
- package/dist/exporters/types.js +0 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +31 -0
- package/dist/interop/index.d.ts +4 -0
- package/dist/interop/index.js +4 -0
- package/dist/interop/spec-consumer.d.ts +81 -0
- package/dist/interop/spec-consumer.d.ts.map +1 -0
- package/dist/interop/spec-consumer.js +287 -0
- package/dist/interop/spec-consumer.js.map +1 -0
- package/dist/interop/tool-consumer.d.ts +68 -0
- package/dist/interop/tool-consumer.d.ts.map +1 -0
- package/dist/interop/tool-consumer.js +220 -0
- package/dist/interop/tool-consumer.js.map +1 -0
- package/dist/interop/types.d.ts +262 -0
- package/dist/interop/types.d.ts.map +1 -0
- package/dist/interop/types.js +0 -0
- package/dist/knowledge/index.d.ts +2 -0
- package/dist/knowledge/index.js +3 -0
- package/dist/knowledge/injector.d.ts +38 -0
- package/dist/knowledge/injector.d.ts.map +1 -0
- package/dist/knowledge/injector.js +58 -0
- package/dist/knowledge/injector.js.map +1 -0
- package/dist/memory/in-memory.d.ts +22 -0
- package/dist/memory/in-memory.d.ts.map +1 -0
- package/dist/memory/in-memory.js +48 -0
- package/dist/memory/in-memory.js.map +1 -0
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.js +4 -0
- package/dist/memory/manager.d.ts +42 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +80 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts +58 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/adapter.js +306 -0
- package/dist/providers/claude-agent-sdk/adapter.js.map +1 -0
- package/dist/providers/claude-agent-sdk/index.d.ts +4 -0
- package/dist/providers/claude-agent-sdk/index.js +5 -0
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +101 -0
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/session-bridge.js +158 -0
- package/dist/providers/claude-agent-sdk/session-bridge.js.map +1 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +110 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.js +122 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/opencode-sdk/adapter.d.ts +54 -0
- package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/adapter.js +276 -0
- package/dist/providers/opencode-sdk/adapter.js.map +1 -0
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +94 -0
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/agent-bridge.js +165 -0
- package/dist/providers/opencode-sdk/agent-bridge.js.map +1 -0
- package/dist/providers/opencode-sdk/index.d.ts +4 -0
- package/dist/providers/opencode-sdk/index.js +5 -0
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +81 -0
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/tool-bridge.js +127 -0
- package/dist/providers/opencode-sdk/tool-bridge.js.map +1 -0
- package/dist/providers/registry.d.ts +22 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +52 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +243 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +44 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/json-schema-to-zod.d.ts +55 -0
- package/dist/schema/json-schema-to-zod.d.ts.map +1 -0
- package/dist/schema/json-schema-to-zod.js +124 -0
- package/dist/schema/json-schema-to-zod.js.map +1 -0
- package/dist/schema/schema-output.d.ts +77 -0
- package/dist/schema/schema-output.d.ts.map +1 -0
- package/dist/schema/schema-output.js +65 -0
- package/dist/schema/schema-output.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.js +3 -0
- package/dist/session/store.d.ts +74 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +79 -0
- package/dist/session/store.js.map +1 -0
- package/dist/spec/index.d.ts +3 -0
- package/dist/spec/index.js +4 -0
- package/dist/spec/registry.d.ts +47 -0
- package/dist/spec/registry.d.ts.map +1 -0
- package/dist/spec/registry.js +65 -0
- package/dist/spec/registry.js.map +1 -0
- package/dist/spec/spec.d.ts +127 -0
- package/dist/spec/spec.d.ts.map +1 -0
- package/dist/spec/spec.js +30 -0
- package/dist/spec/spec.js.map +1 -0
- package/dist/telemetry/adapter.d.ts +73 -0
- package/dist/telemetry/adapter.d.ts.map +1 -0
- package/dist/telemetry/adapter.js +103 -0
- package/dist/telemetry/adapter.js.map +1 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.js +3 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/knowledge-tool.d.ts +21 -0
- package/dist/tools/knowledge-tool.d.ts.map +1 -0
- package/dist/tools/knowledge-tool.js +54 -0
- package/dist/tools/knowledge-tool.js.map +1 -0
- package/dist/tools/mcp-client.d.ts +59 -0
- package/dist/tools/mcp-client.d.ts.map +1 -0
- package/dist/tools/mcp-client.js +58 -0
- package/dist/tools/mcp-client.js.map +1 -0
- package/dist/tools/mcp-server.d.ts +46 -0
- package/dist/tools/mcp-server.d.ts.map +1 -0
- package/dist/tools/mcp-server.js +69 -0
- package/dist/tools/mcp-server.js.map +1 -0
- package/dist/tools/tool-adapter.d.ts +50 -0
- package/dist/tools/tool-adapter.d.ts.map +1 -0
- package/dist/tools/tool-adapter.js +80 -0
- package/dist/tools/tool-adapter.js.map +1 -0
- package/dist/types.d.ts +146 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/package.json +155 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ZodType } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/schema/json-schema-to-zod.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* JSON Schema type definitions for conversion.
|
|
7
|
+
*/
|
|
8
|
+
interface JsonSchema {
|
|
9
|
+
type?: string;
|
|
10
|
+
properties?: Record<string, JsonSchema>;
|
|
11
|
+
required?: string[];
|
|
12
|
+
items?: JsonSchema;
|
|
13
|
+
enum?: (string | number | boolean)[];
|
|
14
|
+
const?: unknown;
|
|
15
|
+
anyOf?: JsonSchema[];
|
|
16
|
+
oneOf?: JsonSchema[];
|
|
17
|
+
allOf?: JsonSchema[];
|
|
18
|
+
description?: string;
|
|
19
|
+
default?: unknown;
|
|
20
|
+
minimum?: number;
|
|
21
|
+
maximum?: number;
|
|
22
|
+
minLength?: number;
|
|
23
|
+
maxLength?: number;
|
|
24
|
+
pattern?: string;
|
|
25
|
+
format?: string;
|
|
26
|
+
nullable?: boolean;
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert a JSON Schema to a Zod schema.
|
|
31
|
+
*
|
|
32
|
+
* Supports common JSON Schema types and constraints:
|
|
33
|
+
* - string, number, integer, boolean, null
|
|
34
|
+
* - object with properties and required
|
|
35
|
+
* - array with items
|
|
36
|
+
* - enum and const
|
|
37
|
+
* - anyOf, oneOf, allOf
|
|
38
|
+
* - format constraints (email, uri, uuid, date-time)
|
|
39
|
+
* - numeric constraints (minimum, maximum)
|
|
40
|
+
* - string constraints (minLength, maxLength, pattern)
|
|
41
|
+
*
|
|
42
|
+
* @param schema - JSON Schema object
|
|
43
|
+
* @returns Zod schema
|
|
44
|
+
*/
|
|
45
|
+
declare function jsonSchemaToZod(schema: JsonSchema | Record<string, unknown>): ZodType;
|
|
46
|
+
/**
|
|
47
|
+
* Convert a JSON Schema to a Zod schema with a default empty object fallback.
|
|
48
|
+
*
|
|
49
|
+
* @param schema - Optional JSON Schema object
|
|
50
|
+
* @returns Zod schema (defaults to empty object schema)
|
|
51
|
+
*/
|
|
52
|
+
declare function jsonSchemaToZodSafe(schema?: Record<string, unknown>): ZodType;
|
|
53
|
+
//#endregion
|
|
54
|
+
export { jsonSchemaToZod, jsonSchemaToZodSafe };
|
|
55
|
+
//# sourceMappingURL=json-schema-to-zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-to-zod.d.ts","names":[],"sources":["../../src/schema/json-schema-to-zod.ts"],"sourcesContent":[],"mappings":";;;;;;AAAsC;UAK5B,UAAA,CAEoB;EAAf,IAAA,CAAA,EAAA,MAAA;EAEL,UAAA,CAAA,EAFK,MAEL,CAAA,MAAA,EAFoB,UAEpB,CAAA;EAGA,QAAA,CAAA,EAAA,MAAA,EAAA;EACA,KAAA,CAAA,EAJA,UAIA;EACA,IAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA;EAAU,KAAA,CAAA,EAAA,OAAA;EA6BJ,KAAA,CAAA,EA/BN,UA+BqB,EAAA;EACrB,KAAA,CAAA,EA/BA,UA+BA,EAAA;EAAa,KAAA,CAAA,EA9Bb,UA8Ba,EAAA;EACpB,WAAA,CAAA,EAAA,MAAA;EAAO,OAAA,CAAA,EAAA,OAAA;EAyKM,OAAA,CAAA,EAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;iBA3KA,eAAA,SACN,aAAa,0BACpB;;;;;;;iBAyKa,mBAAA,UAA6B,0BAA0B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/schema/json-schema-to-zod.ts
|
|
4
|
+
/**
|
|
5
|
+
* Convert a JSON Schema to a Zod schema.
|
|
6
|
+
*
|
|
7
|
+
* Supports common JSON Schema types and constraints:
|
|
8
|
+
* - string, number, integer, boolean, null
|
|
9
|
+
* - object with properties and required
|
|
10
|
+
* - array with items
|
|
11
|
+
* - enum and const
|
|
12
|
+
* - anyOf, oneOf, allOf
|
|
13
|
+
* - format constraints (email, uri, uuid, date-time)
|
|
14
|
+
* - numeric constraints (minimum, maximum)
|
|
15
|
+
* - string constraints (minLength, maxLength, pattern)
|
|
16
|
+
*
|
|
17
|
+
* @param schema - JSON Schema object
|
|
18
|
+
* @returns Zod schema
|
|
19
|
+
*/
|
|
20
|
+
function jsonSchemaToZod(schema) {
|
|
21
|
+
const s = schema;
|
|
22
|
+
const makeNullable = (zodSchema) => {
|
|
23
|
+
return s.nullable ? z.union([zodSchema, z.null()]) : zodSchema;
|
|
24
|
+
};
|
|
25
|
+
if (s.const !== void 0) return z.literal(s.const);
|
|
26
|
+
if (s.enum) {
|
|
27
|
+
const values = s.enum;
|
|
28
|
+
return makeNullable(z.enum(values.map(String)));
|
|
29
|
+
}
|
|
30
|
+
if (s.anyOf && s.anyOf.length > 0) {
|
|
31
|
+
const schemas = s.anyOf.map((sub) => jsonSchemaToZod(sub));
|
|
32
|
+
if (schemas.length === 1) return schemas[0] ?? z.unknown();
|
|
33
|
+
return z.union([
|
|
34
|
+
schemas[0] ?? z.unknown(),
|
|
35
|
+
schemas[1] ?? z.unknown(),
|
|
36
|
+
...schemas.slice(2)
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
if (s.oneOf && s.oneOf.length > 0) {
|
|
40
|
+
const schemas = s.oneOf.map((sub) => jsonSchemaToZod(sub));
|
|
41
|
+
if (schemas.length === 1) return schemas[0] ?? z.unknown();
|
|
42
|
+
return z.union([
|
|
43
|
+
schemas[0] ?? z.unknown(),
|
|
44
|
+
schemas[1] ?? z.unknown(),
|
|
45
|
+
...schemas.slice(2)
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
if (s.allOf && s.allOf.length > 0) return s.allOf.map((sub) => jsonSchemaToZod(sub)).reduce((acc, curr) => z.intersection(acc, curr));
|
|
49
|
+
switch (s.type) {
|
|
50
|
+
case "string": return makeNullable(buildStringSchema(s));
|
|
51
|
+
case "number":
|
|
52
|
+
case "integer": return makeNullable(buildNumberSchema(s));
|
|
53
|
+
case "boolean": return makeNullable(z.boolean());
|
|
54
|
+
case "null": return z.null();
|
|
55
|
+
case "array": return makeNullable(buildArraySchema(s));
|
|
56
|
+
case "object": return makeNullable(buildObjectSchema(s));
|
|
57
|
+
default: return z.unknown();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function buildStringSchema(schema) {
|
|
61
|
+
let zodSchema = z.string();
|
|
62
|
+
if (schema.description) zodSchema = zodSchema.describe(schema.description);
|
|
63
|
+
switch (schema.format) {
|
|
64
|
+
case "email":
|
|
65
|
+
zodSchema = zodSchema.email();
|
|
66
|
+
break;
|
|
67
|
+
case "uri":
|
|
68
|
+
case "url":
|
|
69
|
+
zodSchema = zodSchema.url();
|
|
70
|
+
break;
|
|
71
|
+
case "uuid":
|
|
72
|
+
zodSchema = zodSchema.uuid();
|
|
73
|
+
break;
|
|
74
|
+
case "date-time":
|
|
75
|
+
zodSchema = zodSchema.datetime();
|
|
76
|
+
break;
|
|
77
|
+
case "date":
|
|
78
|
+
zodSchema = zodSchema.date();
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
if (schema.minLength !== void 0) zodSchema = zodSchema.min(schema.minLength);
|
|
82
|
+
if (schema.maxLength !== void 0) zodSchema = zodSchema.max(schema.maxLength);
|
|
83
|
+
if (schema.pattern) zodSchema = zodSchema.regex(new RegExp(schema.pattern));
|
|
84
|
+
return zodSchema;
|
|
85
|
+
}
|
|
86
|
+
function buildNumberSchema(schema) {
|
|
87
|
+
let zodSchema = schema.type === "integer" ? z.number().int() : z.number();
|
|
88
|
+
if (schema.description) zodSchema = zodSchema.describe(schema.description);
|
|
89
|
+
if (schema.minimum !== void 0) zodSchema = zodSchema.min(schema.minimum);
|
|
90
|
+
if (schema.maximum !== void 0) zodSchema = zodSchema.max(schema.maximum);
|
|
91
|
+
return zodSchema;
|
|
92
|
+
}
|
|
93
|
+
function buildArraySchema(schema) {
|
|
94
|
+
const itemsSchema = schema.items ? jsonSchemaToZod(schema.items) : z.unknown();
|
|
95
|
+
let zodSchema = z.array(itemsSchema);
|
|
96
|
+
if (schema.description) zodSchema = zodSchema.describe(schema.description);
|
|
97
|
+
return zodSchema;
|
|
98
|
+
}
|
|
99
|
+
function buildObjectSchema(schema) {
|
|
100
|
+
const properties = schema.properties ?? {};
|
|
101
|
+
const required = new Set(schema.required ?? []);
|
|
102
|
+
const shape = {};
|
|
103
|
+
for (const [key, propSchema] of Object.entries(properties)) {
|
|
104
|
+
const zodProp = jsonSchemaToZod(propSchema);
|
|
105
|
+
shape[key] = required.has(key) ? zodProp : zodProp.optional();
|
|
106
|
+
}
|
|
107
|
+
let zodSchema = z.object(shape);
|
|
108
|
+
if (schema.description) zodSchema = zodSchema.describe(schema.description);
|
|
109
|
+
return zodSchema;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Convert a JSON Schema to a Zod schema with a default empty object fallback.
|
|
113
|
+
*
|
|
114
|
+
* @param schema - Optional JSON Schema object
|
|
115
|
+
* @returns Zod schema (defaults to empty object schema)
|
|
116
|
+
*/
|
|
117
|
+
function jsonSchemaToZodSafe(schema) {
|
|
118
|
+
if (!schema || Object.keys(schema).length === 0) return z.object({});
|
|
119
|
+
return jsonSchemaToZod(schema);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//#endregion
|
|
123
|
+
export { jsonSchemaToZod, jsonSchemaToZodSafe };
|
|
124
|
+
//# sourceMappingURL=json-schema-to-zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-to-zod.js","names":[],"sources":["../../src/schema/json-schema-to-zod.ts"],"sourcesContent":["import { z, type ZodType } from 'zod';\n\n/**\n * JSON Schema type definitions for conversion.\n */\ninterface JsonSchema {\n type?: string;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n items?: JsonSchema;\n enum?: (string | number | boolean)[];\n const?: unknown;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n description?: string;\n default?: unknown;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n nullable?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Convert a JSON Schema to a Zod schema.\n *\n * Supports common JSON Schema types and constraints:\n * - string, number, integer, boolean, null\n * - object with properties and required\n * - array with items\n * - enum and const\n * - anyOf, oneOf, allOf\n * - format constraints (email, uri, uuid, date-time)\n * - numeric constraints (minimum, maximum)\n * - string constraints (minLength, maxLength, pattern)\n *\n * @param schema - JSON Schema object\n * @returns Zod schema\n */\nexport function jsonSchemaToZod(\n schema: JsonSchema | Record<string, unknown>\n): ZodType {\n const s = schema as JsonSchema;\n\n // Handle nullable\n const makeNullable = (zodSchema: ZodType): ZodType => {\n return s.nullable ? z.union([zodSchema, z.null()]) : zodSchema;\n };\n\n // Handle const\n if (s.const !== undefined) {\n return z.literal(s.const as string | number | boolean);\n }\n\n // Handle enum\n if (s.enum) {\n const values = s.enum as [\n string | number | boolean,\n ...(string | number | boolean)[],\n ];\n return makeNullable(z.enum(values.map(String) as [string, ...string[]]));\n }\n\n // Handle anyOf\n if (s.anyOf && s.anyOf.length > 0) {\n const schemas = s.anyOf.map((sub) => jsonSchemaToZod(sub));\n if (schemas.length === 1) return schemas[0] ?? z.unknown();\n return z.union([\n schemas[0] ?? z.unknown(),\n schemas[1] ?? z.unknown(),\n ...schemas.slice(2),\n ]);\n }\n\n // Handle oneOf (same as anyOf for Zod purposes)\n if (s.oneOf && s.oneOf.length > 0) {\n const schemas = s.oneOf.map((sub) => jsonSchemaToZod(sub));\n if (schemas.length === 1) return schemas[0] ?? z.unknown();\n return z.union([\n schemas[0] ?? z.unknown(),\n schemas[1] ?? z.unknown(),\n ...schemas.slice(2),\n ]);\n }\n\n // Handle allOf (intersection)\n if (s.allOf && s.allOf.length > 0) {\n const schemas = s.allOf.map((sub) => jsonSchemaToZod(sub));\n return schemas.reduce((acc, curr) => z.intersection(acc, curr));\n }\n\n // Handle type\n switch (s.type) {\n case 'string':\n return makeNullable(buildStringSchema(s));\n case 'number':\n case 'integer':\n return makeNullable(buildNumberSchema(s));\n case 'boolean':\n return makeNullable(z.boolean());\n case 'null':\n return z.null();\n case 'array':\n return makeNullable(buildArraySchema(s));\n case 'object':\n return makeNullable(buildObjectSchema(s));\n default:\n // Unknown type, accept anything\n return z.unknown();\n }\n}\n\nfunction buildStringSchema(schema: JsonSchema): ZodType {\n let zodSchema = z.string();\n\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n\n // Format constraints\n switch (schema.format) {\n case 'email':\n zodSchema = zodSchema.email();\n break;\n case 'uri':\n case 'url':\n zodSchema = zodSchema.url();\n break;\n case 'uuid':\n zodSchema = zodSchema.uuid();\n break;\n case 'date-time':\n zodSchema = zodSchema.datetime();\n break;\n case 'date':\n zodSchema = zodSchema.date();\n break;\n }\n\n // Length constraints\n if (schema.minLength !== undefined) {\n zodSchema = zodSchema.min(schema.minLength);\n }\n if (schema.maxLength !== undefined) {\n zodSchema = zodSchema.max(schema.maxLength);\n }\n\n // Pattern constraint\n if (schema.pattern) {\n zodSchema = zodSchema.regex(new RegExp(schema.pattern));\n }\n\n return zodSchema;\n}\n\nfunction buildNumberSchema(schema: JsonSchema): ZodType {\n let zodSchema = schema.type === 'integer' ? z.number().int() : z.number();\n\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n\n if (schema.minimum !== undefined) {\n zodSchema = zodSchema.min(schema.minimum);\n }\n if (schema.maximum !== undefined) {\n zodSchema = zodSchema.max(schema.maximum);\n }\n\n return zodSchema;\n}\n\nfunction buildArraySchema(schema: JsonSchema): ZodType {\n const itemsSchema = schema.items\n ? jsonSchemaToZod(schema.items)\n : z.unknown();\n let zodSchema = z.array(itemsSchema);\n\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n\n return zodSchema;\n}\n\nfunction buildObjectSchema(schema: JsonSchema): ZodType {\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n\n const shape: Record<string, ZodType> = {};\n for (const [key, propSchema] of Object.entries(properties)) {\n const zodProp = jsonSchemaToZod(propSchema);\n shape[key] = required.has(key) ? zodProp : zodProp.optional();\n }\n\n let zodSchema = z.object(shape);\n\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n\n return zodSchema;\n}\n\n/**\n * Convert a JSON Schema to a Zod schema with a default empty object fallback.\n *\n * @param schema - Optional JSON Schema object\n * @returns Zod schema (defaults to empty object schema)\n */\nexport function jsonSchemaToZodSafe(schema?: Record<string, unknown>): ZodType {\n if (!schema || Object.keys(schema).length === 0) {\n return z.object({});\n }\n return jsonSchemaToZod(schema);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Output } from "ai";
|
|
2
|
+
import { ZodType } from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/schema/schema-output.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Bridge between ContractSpec SchemaModel and AI SDK Output.
|
|
8
|
+
*
|
|
9
|
+
* This module provides utilities to convert ContractSpec schema definitions
|
|
10
|
+
* to AI SDK v6 Output.* structured output configurations.
|
|
11
|
+
*/
|
|
12
|
+
type ObjectOutputReturn = ReturnType<typeof Output.object>;
|
|
13
|
+
type ArrayOutputReturn = ReturnType<typeof Output.array>;
|
|
14
|
+
type ChoiceOutputReturn = ReturnType<typeof Output.choice>;
|
|
15
|
+
type TextOutputReturn = ReturnType<typeof Output.text>;
|
|
16
|
+
/**
|
|
17
|
+
* Create an AI SDK Output.object from a JSON Schema.
|
|
18
|
+
*
|
|
19
|
+
* @param schema - JSON Schema object
|
|
20
|
+
* @returns AI SDK Output configuration
|
|
21
|
+
*/
|
|
22
|
+
declare function jsonSchemaToOutput(schema: Record<string, unknown>): ObjectOutputReturn;
|
|
23
|
+
/**
|
|
24
|
+
* Create an AI SDK Output.array from a JSON Schema items definition.
|
|
25
|
+
*
|
|
26
|
+
* @param itemSchema - JSON Schema for array items
|
|
27
|
+
* @returns AI SDK Output configuration
|
|
28
|
+
*/
|
|
29
|
+
declare function jsonSchemaToArrayOutput(itemSchema: Record<string, unknown>): ArrayOutputReturn;
|
|
30
|
+
/**
|
|
31
|
+
* Create an AI SDK Output.choice from enum values.
|
|
32
|
+
*
|
|
33
|
+
* @param choices - Array of choice values
|
|
34
|
+
* @returns AI SDK Output configuration
|
|
35
|
+
*/
|
|
36
|
+
declare function enumToChoiceOutput(choices: string[]): ChoiceOutputReturn;
|
|
37
|
+
/**
|
|
38
|
+
* Create an AI SDK Output from a Zod schema directly.
|
|
39
|
+
*
|
|
40
|
+
* @param schema - Zod schema
|
|
41
|
+
* @returns AI SDK Output configuration
|
|
42
|
+
*/
|
|
43
|
+
declare function zodToOutput<T extends ZodType>(schema: T): ObjectOutputReturn;
|
|
44
|
+
/**
|
|
45
|
+
* Create a simple text output configuration.
|
|
46
|
+
*
|
|
47
|
+
* @returns AI SDK Output configuration for text
|
|
48
|
+
*/
|
|
49
|
+
declare function textOutput(): TextOutputReturn;
|
|
50
|
+
/**
|
|
51
|
+
* Output builder that can be used fluently.
|
|
52
|
+
*/
|
|
53
|
+
declare const SchemaOutput: {
|
|
54
|
+
/**
|
|
55
|
+
* Create an object output from JSON Schema.
|
|
56
|
+
*/
|
|
57
|
+
readonly fromJsonSchema: typeof jsonSchemaToOutput;
|
|
58
|
+
/**
|
|
59
|
+
* Create an array output from JSON Schema.
|
|
60
|
+
*/
|
|
61
|
+
readonly arrayFromJsonSchema: typeof jsonSchemaToArrayOutput;
|
|
62
|
+
/**
|
|
63
|
+
* Create a choice output from enum.
|
|
64
|
+
*/
|
|
65
|
+
readonly fromEnum: typeof enumToChoiceOutput;
|
|
66
|
+
/**
|
|
67
|
+
* Create an output from Zod schema.
|
|
68
|
+
*/
|
|
69
|
+
readonly fromZod: typeof zodToOutput;
|
|
70
|
+
/**
|
|
71
|
+
* Create a text output.
|
|
72
|
+
*/
|
|
73
|
+
readonly text: typeof textOutput;
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
export { SchemaOutput, enumToChoiceOutput, jsonSchemaToArrayOutput, jsonSchemaToOutput, textOutput, zodToOutput };
|
|
77
|
+
//# sourceMappingURL=schema-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-output.d.ts","names":[],"sources":["../../src/schema/schema-output.ts"],"sourcesContent":[],"mappings":";;;;;;;AACmC;AAWC;AACD;AACC;AASpC,KAXK,kBAAA,GAAqB,UAWQ,CAAA,OAXU,MAAA,CAAO,MAahD,CAAA;AAaH,KAzBK,iBAAA,GAAoB,UAyBc,CAAA,OAzBI,MAAA,CAAO,KA2B/C,CAAA;AAaH,KAvCK,kBAAA,GAAqB,UAuCQ,CAAA,OAvCU,MAAA,CAAO,MAuCsB,CAAA;AAYzE,KAlDK,gBAAA,GAAmB,UAkDG,CAAA,OAlDe,MAAA,CAAO,IAkDtB,CAAA;;;;;AAW3B;AAOA;iBA5DgB,kBAAA,SACN,0BACP;;;;;;;iBAaa,uBAAA,aACF,0BACX;;;;;;;iBAaa,kBAAA,qBAAuC;;;;;;;iBAYvC,sBAAsB,iBAAiB,IAAI;;;;;;iBAW3C,UAAA,CAAA,GAAc;;;;cAOjB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsonSchemaToZod } from "./json-schema-to-zod.js";
|
|
2
|
+
import { Output } from "ai";
|
|
3
|
+
import "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/schema/schema-output.ts
|
|
6
|
+
/**
|
|
7
|
+
* Create an AI SDK Output.object from a JSON Schema.
|
|
8
|
+
*
|
|
9
|
+
* @param schema - JSON Schema object
|
|
10
|
+
* @returns AI SDK Output configuration
|
|
11
|
+
*/
|
|
12
|
+
function jsonSchemaToOutput(schema) {
|
|
13
|
+
const zodSchema = jsonSchemaToZod(schema);
|
|
14
|
+
return Output.object({ schema: zodSchema });
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create an AI SDK Output.array from a JSON Schema items definition.
|
|
18
|
+
*
|
|
19
|
+
* @param itemSchema - JSON Schema for array items
|
|
20
|
+
* @returns AI SDK Output configuration
|
|
21
|
+
*/
|
|
22
|
+
function jsonSchemaToArrayOutput(itemSchema) {
|
|
23
|
+
const zodSchema = jsonSchemaToZod(itemSchema);
|
|
24
|
+
return Output.array({ element: zodSchema });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create an AI SDK Output.choice from enum values.
|
|
28
|
+
*
|
|
29
|
+
* @param choices - Array of choice values
|
|
30
|
+
* @returns AI SDK Output configuration
|
|
31
|
+
*/
|
|
32
|
+
function enumToChoiceOutput(choices) {
|
|
33
|
+
return Output.choice({ options: choices });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create an AI SDK Output from a Zod schema directly.
|
|
37
|
+
*
|
|
38
|
+
* @param schema - Zod schema
|
|
39
|
+
* @returns AI SDK Output configuration
|
|
40
|
+
*/
|
|
41
|
+
function zodToOutput(schema) {
|
|
42
|
+
return Output.object({ schema });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a simple text output configuration.
|
|
46
|
+
*
|
|
47
|
+
* @returns AI SDK Output configuration for text
|
|
48
|
+
*/
|
|
49
|
+
function textOutput() {
|
|
50
|
+
return Output.text();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Output builder that can be used fluently.
|
|
54
|
+
*/
|
|
55
|
+
const SchemaOutput = {
|
|
56
|
+
fromJsonSchema: jsonSchemaToOutput,
|
|
57
|
+
arrayFromJsonSchema: jsonSchemaToArrayOutput,
|
|
58
|
+
fromEnum: enumToChoiceOutput,
|
|
59
|
+
fromZod: zodToOutput,
|
|
60
|
+
text: textOutput
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { SchemaOutput, enumToChoiceOutput, jsonSchemaToArrayOutput, jsonSchemaToOutput, textOutput, zodToOutput };
|
|
65
|
+
//# sourceMappingURL=schema-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-output.js","names":[],"sources":["../../src/schema/schema-output.ts"],"sourcesContent":["import { Output } from 'ai';\nimport { type ZodType } from 'zod';\nimport { jsonSchemaToZod } from './json-schema-to-zod';\n\n/**\n * Bridge between ContractSpec SchemaModel and AI SDK Output.\n *\n * This module provides utilities to convert ContractSpec schema definitions\n * to AI SDK v6 Output.* structured output configurations.\n */\n\n// Extract return types from Output functions for explicit type annotations\ntype ObjectOutputReturn = ReturnType<typeof Output.object>;\ntype ArrayOutputReturn = ReturnType<typeof Output.array>;\ntype ChoiceOutputReturn = ReturnType<typeof Output.choice>;\ntype TextOutputReturn = ReturnType<typeof Output.text>;\n\n/**\n * Create an AI SDK Output.object from a JSON Schema.\n *\n * @param schema - JSON Schema object\n * @returns AI SDK Output configuration\n */\nexport function jsonSchemaToOutput(\n schema: Record<string, unknown>\n): ObjectOutputReturn {\n const zodSchema = jsonSchemaToZod(schema);\n return Output.object({\n schema: zodSchema,\n });\n}\n\n/**\n * Create an AI SDK Output.array from a JSON Schema items definition.\n *\n * @param itemSchema - JSON Schema for array items\n * @returns AI SDK Output configuration\n */\nexport function jsonSchemaToArrayOutput(\n itemSchema: Record<string, unknown>\n): ArrayOutputReturn {\n const zodSchema = jsonSchemaToZod(itemSchema);\n return Output.array({\n element: zodSchema,\n });\n}\n\n/**\n * Create an AI SDK Output.choice from enum values.\n *\n * @param choices - Array of choice values\n * @returns AI SDK Output configuration\n */\nexport function enumToChoiceOutput(choices: string[]): ChoiceOutputReturn {\n return Output.choice({\n options: choices as [string, ...string[]],\n });\n}\n\n/**\n * Create an AI SDK Output from a Zod schema directly.\n *\n * @param schema - Zod schema\n * @returns AI SDK Output configuration\n */\nexport function zodToOutput<T extends ZodType>(schema: T): ObjectOutputReturn {\n return Output.object({\n schema,\n });\n}\n\n/**\n * Create a simple text output configuration.\n *\n * @returns AI SDK Output configuration for text\n */\nexport function textOutput(): TextOutputReturn {\n return Output.text();\n}\n\n/**\n * Output builder that can be used fluently.\n */\nexport const SchemaOutput = {\n /**\n * Create an object output from JSON Schema.\n */\n fromJsonSchema: jsonSchemaToOutput,\n\n /**\n * Create an array output from JSON Schema.\n */\n arrayFromJsonSchema: jsonSchemaToArrayOutput,\n\n /**\n * Create a choice output from enum.\n */\n fromEnum: enumToChoiceOutput,\n\n /**\n * Create an output from Zod schema.\n */\n fromZod: zodToOutput,\n\n /**\n * Create a text output.\n */\n text: textOutput,\n} as const;\n"],"mappings":";;;;;;;;;;;AAuBA,SAAgB,mBACd,QACoB;CACpB,MAAM,YAAY,gBAAgB,OAAO;AACzC,QAAO,OAAO,OAAO,EACnB,QAAQ,WACT,CAAC;;;;;;;;AASJ,SAAgB,wBACd,YACmB;CACnB,MAAM,YAAY,gBAAgB,WAAW;AAC7C,QAAO,OAAO,MAAM,EAClB,SAAS,WACV,CAAC;;;;;;;;AASJ,SAAgB,mBAAmB,SAAuC;AACxE,QAAO,OAAO,OAAO,EACnB,SAAS,SACV,CAAC;;;;;;;;AASJ,SAAgB,YAA+B,QAA+B;AAC5E,QAAO,OAAO,OAAO,EACnB,QACD,CAAC;;;;;;;AAQJ,SAAgB,aAA+B;AAC7C,QAAO,OAAO,MAAM;;;;;AAMtB,MAAa,eAAe;CAI1B,gBAAgB;CAKhB,qBAAqB;CAKrB,UAAU;CAKV,SAAS;CAKT,MAAM;CACP"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AgentSessionState } from "../types.js";
|
|
2
|
+
import { ModelMessage, StepResult, ToolSet } from "ai";
|
|
3
|
+
|
|
4
|
+
//#region src/session/store.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Interface for persisting agent session state.
|
|
8
|
+
*
|
|
9
|
+
* Implementations can use in-memory storage, databases,
|
|
10
|
+
* or external services like Redis.
|
|
11
|
+
*/
|
|
12
|
+
interface AgentSessionStore {
|
|
13
|
+
/**
|
|
14
|
+
* Get a session by ID.
|
|
15
|
+
*/
|
|
16
|
+
get(sessionId: string): Promise<AgentSessionState | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new session.
|
|
19
|
+
*/
|
|
20
|
+
create(session: Omit<AgentSessionState, 'createdAt' | 'updatedAt'>): Promise<AgentSessionState>;
|
|
21
|
+
/**
|
|
22
|
+
* Append a step to a session.
|
|
23
|
+
*/
|
|
24
|
+
appendStep(sessionId: string, step: StepResult<ToolSet>): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Append a message to a session.
|
|
27
|
+
*/
|
|
28
|
+
appendMessage(sessionId: string, message: ModelMessage): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Update session properties.
|
|
31
|
+
*/
|
|
32
|
+
update(sessionId: string, updates: Partial<Pick<AgentSessionState, 'status' | 'metadata'>>): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete a session.
|
|
35
|
+
*/
|
|
36
|
+
delete(sessionId: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* List sessions by agent ID.
|
|
39
|
+
*/
|
|
40
|
+
listByAgent(agentId: string, limit?: number): Promise<AgentSessionState[]>;
|
|
41
|
+
/**
|
|
42
|
+
* List sessions by tenant ID.
|
|
43
|
+
*/
|
|
44
|
+
listByTenant(tenantId: string, limit?: number): Promise<AgentSessionState[]>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* In-memory session store for development and testing.
|
|
48
|
+
*/
|
|
49
|
+
declare class InMemorySessionStore implements AgentSessionStore {
|
|
50
|
+
private readonly sessions;
|
|
51
|
+
get(sessionId: string): Promise<AgentSessionState | null>;
|
|
52
|
+
create(session: Omit<AgentSessionState, 'createdAt' | 'updatedAt'>): Promise<AgentSessionState>;
|
|
53
|
+
appendStep(sessionId: string, step: StepResult<ToolSet>): Promise<void>;
|
|
54
|
+
appendMessage(sessionId: string, message: ModelMessage): Promise<void>;
|
|
55
|
+
update(sessionId: string, updates: Partial<Pick<AgentSessionState, 'status' | 'metadata'>>): Promise<void>;
|
|
56
|
+
delete(sessionId: string): Promise<boolean>;
|
|
57
|
+
listByAgent(agentId: string, limit?: number): Promise<AgentSessionState[]>;
|
|
58
|
+
listByTenant(tenantId: string, limit?: number): Promise<AgentSessionState[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Clear all sessions (for testing).
|
|
61
|
+
*/
|
|
62
|
+
clear(): void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create an in-memory session store.
|
|
66
|
+
*/
|
|
67
|
+
declare function createInMemorySessionStore(): AgentSessionStore;
|
|
68
|
+
/**
|
|
69
|
+
* Generate a unique session ID.
|
|
70
|
+
*/
|
|
71
|
+
declare function generateSessionId(): string;
|
|
72
|
+
//#endregion
|
|
73
|
+
export { AgentSessionStore, InMemorySessionStore, createInMemorySessionStore, generateSessionId };
|
|
74
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","names":[],"sources":["../../src/session/store.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;;;;AAUa,UAVI,iBAAA,CAUJ;EACA;;;EAKyB,GAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAZZ,OAYY,CAZJ,iBAYI,GAAA,IAAA,CAAA;EAAsB;;;EAYlC,MAAA,CAAA,OAAA,EAlBb,IAkBa,CAlBR,iBAkBQ,EAAA,WAAA,GAAA,WAAA,CAAA,CAAA,EAjBrB,OAiBqB,CAjBb,iBAiBa,CAAA;EAAL;;;EAMQ,UAAA,CAAA,SAAA,EAAA,MAAA,EAAA,IAAA,EAlBS,UAkBT,CAlBoB,OAkBpB,CAAA,CAAA,EAlB+B,OAkB/B,CAAA,IAAA,CAAA;EAK2B;;;EAKN,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAvBN,YAuBM,CAAA,EAvBS,OAuBT,CAAA,IAAA,CAAA;EAAO;AAMzD;;EAGgC,MAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAzBnB,OAyBmB,CAzBX,IAyBW,CAzBN,iBAyBM,EAAA,QAAA,GAAA,UAAA,CAAA,CAAA,CAAA,EAxB3B,OAwB2B,CAAA,IAAA,CAAA;EAKd;;;EACb,MAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAzBwB,OAyBxB,CAAA,OAAA,CAAA;EAagB;;;EAS6B,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,MAAA,CAAA,EA1CF,OA0CE,CA1CM,iBA0CN,EAAA,CAAA;EAAe;;;EAUpD,YAAA,CAAA,QAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,MAAA,CAAA,EA/CqC,OA+CrC,CA/C6C,iBA+C7C,EAAA,CAAA;;;;;AA+BA,cAxEA,oBAAA,YAAgC,iBAwEhC,CAAA;EAAR,iBAAA,QAAA;EAxEwC,GAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAGb,OAHa,CAGL,iBAHK,GAAA,IAAA,CAAA;EAAiB,MAAA,CAAA,OAAA,EAQjD,IARiD,CAQ5C,iBAR4C,EAAA,WAAA,GAAA,WAAA,CAAA,CAAA,EASzD,OATyD,CASjD,iBATiD,CAAA;EAgG9C,UAAA,CAAA,SAAA,EAAA,MAAA,EAA0B,IAAA,EA1EhC,UA0EoC,CA1EzB,OA0EyB,CAAA,CAAA,EAzEzC,OAyE0D,CAAA,IAAA,CAAA;EAO/C,aAAA,CAAA,SAAiB,EAAA,MAAA,EAAA,OAAA,EAxEiB,YAwEjB,CAAA,EAxEgC,OAwEhC,CAAA,IAAA,CAAA;qCA9DpB,QAAQ,KAAK,6CACrB;6BAO8B;gDAO9B,QAAQ;kDAgBR,QAAQ;;;;;;;;;iBAwBG,0BAAA,CAAA,GAA8B;;;;iBAO9B,iBAAA,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
//#region src/session/store.ts
|
|
2
|
+
/**
|
|
3
|
+
* In-memory session store for development and testing.
|
|
4
|
+
*/
|
|
5
|
+
var InMemorySessionStore = class {
|
|
6
|
+
sessions = /* @__PURE__ */ new Map();
|
|
7
|
+
async get(sessionId) {
|
|
8
|
+
return this.sessions.get(sessionId) ?? null;
|
|
9
|
+
}
|
|
10
|
+
async create(session) {
|
|
11
|
+
const now = /* @__PURE__ */ new Date();
|
|
12
|
+
const fullSession = {
|
|
13
|
+
...session,
|
|
14
|
+
createdAt: now,
|
|
15
|
+
updatedAt: now
|
|
16
|
+
};
|
|
17
|
+
this.sessions.set(session.sessionId, fullSession);
|
|
18
|
+
return fullSession;
|
|
19
|
+
}
|
|
20
|
+
async appendStep(sessionId, step) {
|
|
21
|
+
const session = this.sessions.get(sessionId);
|
|
22
|
+
if (session) {
|
|
23
|
+
session.steps.push(step);
|
|
24
|
+
session.updatedAt = /* @__PURE__ */ new Date();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async appendMessage(sessionId, message) {
|
|
28
|
+
const session = this.sessions.get(sessionId);
|
|
29
|
+
if (session) {
|
|
30
|
+
session.messages.push(message);
|
|
31
|
+
session.updatedAt = /* @__PURE__ */ new Date();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async update(sessionId, updates) {
|
|
35
|
+
const session = this.sessions.get(sessionId);
|
|
36
|
+
if (session) Object.assign(session, updates, { updatedAt: /* @__PURE__ */ new Date() });
|
|
37
|
+
}
|
|
38
|
+
async delete(sessionId) {
|
|
39
|
+
return this.sessions.delete(sessionId);
|
|
40
|
+
}
|
|
41
|
+
async listByAgent(agentId, limit = 100) {
|
|
42
|
+
const results = [];
|
|
43
|
+
for (const session of this.sessions.values()) if (session.agentId === agentId) {
|
|
44
|
+
results.push(session);
|
|
45
|
+
if (results.length >= limit) break;
|
|
46
|
+
}
|
|
47
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
48
|
+
}
|
|
49
|
+
async listByTenant(tenantId, limit = 100) {
|
|
50
|
+
const results = [];
|
|
51
|
+
for (const session of this.sessions.values()) if (session.tenantId === tenantId) {
|
|
52
|
+
results.push(session);
|
|
53
|
+
if (results.length >= limit) break;
|
|
54
|
+
}
|
|
55
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clear all sessions (for testing).
|
|
59
|
+
*/
|
|
60
|
+
clear() {
|
|
61
|
+
this.sessions.clear();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Create an in-memory session store.
|
|
66
|
+
*/
|
|
67
|
+
function createInMemorySessionStore() {
|
|
68
|
+
return new InMemorySessionStore();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generate a unique session ID.
|
|
72
|
+
*/
|
|
73
|
+
function generateSessionId() {
|
|
74
|
+
return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { InMemorySessionStore, createInMemorySessionStore, generateSessionId };
|
|
79
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","names":[],"sources":["../../src/session/store.ts"],"sourcesContent":["import type { ModelMessage, StepResult, ToolSet } from 'ai';\nimport type { AgentSessionState } from '../types';\n\n/**\n * Interface for persisting agent session state.\n *\n * Implementations can use in-memory storage, databases,\n * or external services like Redis.\n */\nexport interface AgentSessionStore {\n /**\n * Get a session by ID.\n */\n get(sessionId: string): Promise<AgentSessionState | null>;\n\n /**\n * Create a new session.\n */\n create(\n session: Omit<AgentSessionState, 'createdAt' | 'updatedAt'>\n ): Promise<AgentSessionState>;\n\n /**\n * Append a step to a session.\n */\n appendStep(sessionId: string, step: StepResult<ToolSet>): Promise<void>;\n\n /**\n * Append a message to a session.\n */\n appendMessage(sessionId: string, message: ModelMessage): Promise<void>;\n\n /**\n * Update session properties.\n */\n update(\n sessionId: string,\n updates: Partial<Pick<AgentSessionState, 'status' | 'metadata'>>\n ): Promise<void>;\n\n /**\n * Delete a session.\n */\n delete(sessionId: string): Promise<boolean>;\n\n /**\n * List sessions by agent ID.\n */\n listByAgent(agentId: string, limit?: number): Promise<AgentSessionState[]>;\n\n /**\n * List sessions by tenant ID.\n */\n listByTenant(tenantId: string, limit?: number): Promise<AgentSessionState[]>;\n}\n\n/**\n * In-memory session store for development and testing.\n */\nexport class InMemorySessionStore implements AgentSessionStore {\n private readonly sessions = new Map<string, AgentSessionState>();\n\n async get(sessionId: string): Promise<AgentSessionState | null> {\n return this.sessions.get(sessionId) ?? null;\n }\n\n async create(\n session: Omit<AgentSessionState, 'createdAt' | 'updatedAt'>\n ): Promise<AgentSessionState> {\n const now = new Date();\n const fullSession: AgentSessionState = {\n ...session,\n createdAt: now,\n updatedAt: now,\n };\n this.sessions.set(session.sessionId, fullSession);\n return fullSession;\n }\n\n async appendStep(\n sessionId: string,\n step: StepResult<ToolSet>\n ): Promise<void> {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.steps.push(step);\n session.updatedAt = new Date();\n }\n }\n\n async appendMessage(sessionId: string, message: ModelMessage): Promise<void> {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.messages.push(message);\n session.updatedAt = new Date();\n }\n }\n\n async update(\n sessionId: string,\n updates: Partial<Pick<AgentSessionState, 'status' | 'metadata'>>\n ): Promise<void> {\n const session = this.sessions.get(sessionId);\n if (session) {\n Object.assign(session, updates, { updatedAt: new Date() });\n }\n }\n\n async delete(sessionId: string): Promise<boolean> {\n return this.sessions.delete(sessionId);\n }\n\n async listByAgent(\n agentId: string,\n limit = 100\n ): Promise<AgentSessionState[]> {\n const results: AgentSessionState[] = [];\n for (const session of this.sessions.values()) {\n if (session.agentId === agentId) {\n results.push(session);\n if (results.length >= limit) break;\n }\n }\n return results.sort(\n (a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()\n );\n }\n\n async listByTenant(\n tenantId: string,\n limit = 100\n ): Promise<AgentSessionState[]> {\n const results: AgentSessionState[] = [];\n for (const session of this.sessions.values()) {\n if (session.tenantId === tenantId) {\n results.push(session);\n if (results.length >= limit) break;\n }\n }\n return results.sort(\n (a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()\n );\n }\n\n /**\n * Clear all sessions (for testing).\n */\n clear(): void {\n this.sessions.clear();\n }\n}\n\n/**\n * Create an in-memory session store.\n */\nexport function createInMemorySessionStore(): AgentSessionStore {\n return new InMemorySessionStore();\n}\n\n/**\n * Generate a unique session ID.\n */\nexport function generateSessionId(): string {\n return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;\n}\n"],"mappings":";;;;AA2DA,IAAa,uBAAb,MAA+D;CAC7D,AAAiB,2BAAW,IAAI,KAAgC;CAEhE,MAAM,IAAI,WAAsD;AAC9D,SAAO,KAAK,SAAS,IAAI,UAAU,IAAI;;CAGzC,MAAM,OACJ,SAC4B;EAC5B,MAAM,sBAAM,IAAI,MAAM;EACtB,MAAM,cAAiC;GACrC,GAAG;GACH,WAAW;GACX,WAAW;GACZ;AACD,OAAK,SAAS,IAAI,QAAQ,WAAW,YAAY;AACjD,SAAO;;CAGT,MAAM,WACJ,WACA,MACe;EACf,MAAM,UAAU,KAAK,SAAS,IAAI,UAAU;AAC5C,MAAI,SAAS;AACX,WAAQ,MAAM,KAAK,KAAK;AACxB,WAAQ,4BAAY,IAAI,MAAM;;;CAIlC,MAAM,cAAc,WAAmB,SAAsC;EAC3E,MAAM,UAAU,KAAK,SAAS,IAAI,UAAU;AAC5C,MAAI,SAAS;AACX,WAAQ,SAAS,KAAK,QAAQ;AAC9B,WAAQ,4BAAY,IAAI,MAAM;;;CAIlC,MAAM,OACJ,WACA,SACe;EACf,MAAM,UAAU,KAAK,SAAS,IAAI,UAAU;AAC5C,MAAI,QACF,QAAO,OAAO,SAAS,SAAS,EAAE,2BAAW,IAAI,MAAM,EAAE,CAAC;;CAI9D,MAAM,OAAO,WAAqC;AAChD,SAAO,KAAK,SAAS,OAAO,UAAU;;CAGxC,MAAM,YACJ,SACA,QAAQ,KACsB;EAC9B,MAAM,UAA+B,EAAE;AACvC,OAAK,MAAM,WAAW,KAAK,SAAS,QAAQ,CAC1C,KAAI,QAAQ,YAAY,SAAS;AAC/B,WAAQ,KAAK,QAAQ;AACrB,OAAI,QAAQ,UAAU,MAAO;;AAGjC,SAAO,QAAQ,MACZ,GAAG,MAAM,EAAE,UAAU,SAAS,GAAG,EAAE,UAAU,SAAS,CACxD;;CAGH,MAAM,aACJ,UACA,QAAQ,KACsB;EAC9B,MAAM,UAA+B,EAAE;AACvC,OAAK,MAAM,WAAW,KAAK,SAAS,QAAQ,CAC1C,KAAI,QAAQ,aAAa,UAAU;AACjC,WAAQ,KAAK,QAAQ;AACrB,OAAI,QAAQ,UAAU,MAAO;;AAGjC,SAAO,QAAQ,MACZ,GAAG,MAAM,EAAE,UAAU,SAAS,GAAG,EAAE,UAAU,SAAS,CACxD;;;;;CAMH,QAAc;AACZ,OAAK,SAAS,OAAO;;;;;;AAOzB,SAAgB,6BAAgD;AAC9D,QAAO,IAAI,sBAAsB;;;;;AAMnC,SAAgB,oBAA4B;AAC1C,QAAO,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentSpec, AgentToolConfig, agentKey, defineAgent } from "./spec.js";
|
|
2
|
+
import { AgentRegistry, createAgentRegistry } from "./registry.js";
|
|
3
|
+
export { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentRegistry, AgentSpec, AgentToolConfig, agentKey, createAgentRegistry, defineAgent };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AgentSpec } from "./spec.js";
|
|
2
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
3
|
+
|
|
4
|
+
//#region src/spec/registry.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Registry for managing agent specifications.
|
|
8
|
+
*
|
|
9
|
+
* Provides registration, lookup, and version management for agent specs.
|
|
10
|
+
*/
|
|
11
|
+
declare class AgentRegistry extends SpecContractRegistry<'agent', AgentSpec> {
|
|
12
|
+
constructor(items?: AgentSpec[]);
|
|
13
|
+
/**
|
|
14
|
+
* List all unique agent names (without versions).
|
|
15
|
+
*/
|
|
16
|
+
listNames(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Get an agent specification or throw if not found.
|
|
19
|
+
*
|
|
20
|
+
* @param name - Agent name
|
|
21
|
+
* @param version - Optional version
|
|
22
|
+
* @returns The agent spec
|
|
23
|
+
* @throws Error if the spec is not found
|
|
24
|
+
*/
|
|
25
|
+
require(name: string, version?: string): AgentSpec;
|
|
26
|
+
/**
|
|
27
|
+
* Check if an agent is registered.
|
|
28
|
+
*
|
|
29
|
+
* @param name - Agent name
|
|
30
|
+
* @param version - Optional version
|
|
31
|
+
*/
|
|
32
|
+
has(name: string, version?: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Get all versions of an agent.
|
|
35
|
+
*
|
|
36
|
+
* @param name - Agent name
|
|
37
|
+
* @returns Array of specs sorted by version (ascending)
|
|
38
|
+
*/
|
|
39
|
+
getVersions(name: string): AgentSpec[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a new agent registry.
|
|
43
|
+
*/
|
|
44
|
+
declare function createAgentRegistry(): AgentRegistry;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { AgentRegistry, createAgentRegistry };
|
|
47
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","names":[],"sources":["../../src/spec/registry.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;;;AAwB2C,cAxB9B,aAAA,SAAsB,oBAwBQ,CAAA,OAAA,EAxBsB,SAwBtB,CAAA,CAAA;EA0Bd,WAAA,CAAA,KAAA,CAAA,EAjDA,SAiDA,EAAA;EAlDM;;AAkEnC;;;;;;;;;;2CA1C2C;;;;;;;;;;;;;;6BA0Bd;;;;;iBAgBb,mBAAA,CAAA,GAAuB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { compareVersions } from "compare-versions";
|
|
2
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
3
|
+
|
|
4
|
+
//#region src/spec/registry.ts
|
|
5
|
+
/**
|
|
6
|
+
* Registry for managing agent specifications.
|
|
7
|
+
*
|
|
8
|
+
* Provides registration, lookup, and version management for agent specs.
|
|
9
|
+
*/
|
|
10
|
+
var AgentRegistry = class extends SpecContractRegistry {
|
|
11
|
+
constructor(items) {
|
|
12
|
+
super("agent", items);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* List all unique agent names (without versions).
|
|
16
|
+
*/
|
|
17
|
+
listNames() {
|
|
18
|
+
const names = /* @__PURE__ */ new Set();
|
|
19
|
+
for (const spec of this.items.values()) names.add(spec.meta.key);
|
|
20
|
+
return [...names];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get an agent specification or throw if not found.
|
|
24
|
+
*
|
|
25
|
+
* @param name - Agent name
|
|
26
|
+
* @param version - Optional version
|
|
27
|
+
* @returns The agent spec
|
|
28
|
+
* @throws Error if the spec is not found
|
|
29
|
+
*/
|
|
30
|
+
require(name, version) {
|
|
31
|
+
const spec = this.get(name, version);
|
|
32
|
+
if (!spec) throw new Error(`Agent spec not found for ${name}${version != null ? `.v${version}` : ""}`);
|
|
33
|
+
return spec;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if an agent is registered.
|
|
37
|
+
*
|
|
38
|
+
* @param name - Agent name
|
|
39
|
+
* @param version - Optional version
|
|
40
|
+
*/
|
|
41
|
+
has(name, version) {
|
|
42
|
+
return this.get(name, version) !== void 0;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all versions of an agent.
|
|
46
|
+
*
|
|
47
|
+
* @param name - Agent name
|
|
48
|
+
* @returns Array of specs sorted by version (ascending)
|
|
49
|
+
*/
|
|
50
|
+
getVersions(name) {
|
|
51
|
+
const versions = [];
|
|
52
|
+
for (const spec of this.items.values()) if (spec.meta.key === name) versions.push(spec);
|
|
53
|
+
return versions.sort((a, b) => compareVersions(a.meta.version, b.meta.version));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Create a new agent registry.
|
|
58
|
+
*/
|
|
59
|
+
function createAgentRegistry() {
|
|
60
|
+
return new AgentRegistry();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { AgentRegistry, createAgentRegistry };
|
|
65
|
+
//# sourceMappingURL=registry.js.map
|