@contractspec/lib.ai-agent 1.57.0 → 1.59.0
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/dist/agent/agent-factory.d.ts +67 -71
- package/dist/agent/agent-factory.d.ts.map +1 -1
- package/dist/agent/agent-factory.js +658 -100
- package/dist/agent/agent.test.d.ts +2 -0
- package/dist/agent/agent.test.d.ts.map +1 -0
- package/dist/agent/contract-spec-agent.d.ts +48 -52
- package/dist/agent/contract-spec-agent.d.ts.map +1 -1
- package/dist/agent/contract-spec-agent.js +605 -146
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +2102 -4
- package/dist/agent/json-runner.d.ts +15 -19
- package/dist/agent/json-runner.d.ts.map +1 -1
- package/dist/agent/json-runner.js +672 -57
- package/dist/agent/json-runner.test.d.ts +2 -0
- package/dist/agent/json-runner.test.d.ts.map +1 -0
- package/dist/agent/unified-agent.d.ts +132 -109
- package/dist/agent/unified-agent.d.ts.map +1 -1
- package/dist/agent/unified-agent.js +2011 -293
- package/dist/approval/index.d.ts +3 -2
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +128 -2
- package/dist/approval/workflow.d.ts +106 -110
- package/dist/approval/workflow.d.ts.map +1 -1
- package/dist/approval/workflow.js +126 -157
- package/dist/exporters/claude-agent-exporter.d.ts +50 -48
- package/dist/exporters/claude-agent-exporter.d.ts.map +1 -1
- package/dist/exporters/claude-agent-exporter.js +258 -203
- package/dist/exporters/index.d.ts +28 -4
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +737 -3
- package/dist/exporters/opencode-exporter.d.ts +47 -45
- package/dist/exporters/opencode-exporter.d.ts.map +1 -1
- package/dist/exporters/opencode-exporter.js +507 -191
- package/dist/exporters/types.d.ts +171 -169
- package/dist/exporters/types.d.ts.map +1 -1
- package/dist/exporters/types.js +1 -0
- package/dist/index.d.ts +15 -39
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3337 -32
- package/dist/interop/index.d.ts +48 -4
- package/dist/interop/index.d.ts.map +1 -0
- package/dist/interop/index.js +709 -3
- package/dist/interop/spec-consumer.d.ts +57 -53
- package/dist/interop/spec-consumer.d.ts.map +1 -1
- package/dist/interop/spec-consumer.js +302 -282
- package/dist/interop/tool-consumer.d.ts +57 -53
- package/dist/interop/tool-consumer.d.ts.map +1 -1
- package/dist/interop/tool-consumer.js +412 -213
- package/dist/interop/types.d.ts +173 -171
- package/dist/interop/types.d.ts.map +1 -1
- package/dist/interop/types.js +1 -0
- package/dist/knowledge/index.d.ts +2 -2
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +66 -2
- package/dist/knowledge/injector.d.ts +16 -20
- package/dist/knowledge/injector.d.ts.map +1 -1
- package/dist/knowledge/injector.js +56 -47
- package/dist/memory/in-memory.d.ts +15 -19
- package/dist/memory/in-memory.d.ts.map +1 -1
- package/dist/memory/in-memory.js +152 -46
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +155 -3
- package/dist/memory/manager.d.ts +32 -36
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +96 -70
- package/dist/memory/memory.test.d.ts +2 -0
- package/dist/memory/memory.test.d.ts.map +1 -0
- package/dist/node/agent/agent-factory.js +661 -0
- package/dist/node/agent/contract-spec-agent.js +607 -0
- package/dist/node/agent/index.js +2103 -0
- package/dist/node/agent/json-runner.js +684 -0
- package/dist/node/agent/unified-agent.js +2019 -0
- package/dist/node/approval/index.js +129 -0
- package/dist/node/approval/workflow.js +129 -0
- package/dist/node/exporters/claude-agent-exporter.js +265 -0
- package/dist/node/exporters/index.js +738 -0
- package/dist/node/exporters/opencode-exporter.js +516 -0
- package/dist/node/exporters/types.js +0 -0
- package/dist/node/index.js +3337 -0
- package/dist/node/interop/index.js +710 -0
- package/dist/node/interop/spec-consumer.js +307 -0
- package/dist/node/interop/tool-consumer.js +419 -0
- package/dist/node/interop/types.js +0 -0
- package/dist/node/knowledge/index.js +67 -0
- package/dist/node/knowledge/injector.js +67 -0
- package/dist/node/memory/in-memory.js +154 -0
- package/dist/node/memory/index.js +156 -0
- package/dist/node/memory/manager.js +105 -0
- package/dist/node/providers/claude-agent-sdk/adapter.js +624 -0
- package/dist/node/providers/claude-agent-sdk/index.js +673 -0
- package/dist/node/providers/claude-agent-sdk/session-bridge.js +149 -0
- package/dist/node/providers/claude-agent-sdk/tool-bridge.js +118 -0
- package/dist/node/providers/index.js +1261 -0
- package/dist/node/providers/opencode-sdk/adapter.js +669 -0
- package/dist/node/providers/opencode-sdk/agent-bridge.js +299 -0
- package/dist/node/providers/opencode-sdk/index.js +703 -0
- package/dist/node/providers/opencode-sdk/tool-bridge.js +141 -0
- package/dist/node/providers/registry.js +89 -0
- package/dist/node/providers/types.js +56 -0
- package/dist/node/schema/index.js +195 -0
- package/dist/node/schema/json-schema-to-zod.js +152 -0
- package/dist/node/schema/schema-output.js +190 -0
- package/dist/node/session/index.js +90 -0
- package/dist/node/session/store.js +90 -0
- package/dist/node/spec/index.js +85 -0
- package/dist/node/spec/registry.js +56 -0
- package/dist/node/spec/spec.js +44 -0
- package/dist/node/telemetry/adapter.js +85 -0
- package/dist/node/telemetry/index.js +86 -0
- package/dist/node/tools/index.js +345 -0
- package/dist/node/tools/knowledge-tool.js +74 -0
- package/dist/node/tools/mcp-client.js +47 -0
- package/dist/node/tools/mcp-server.js +205 -0
- package/dist/node/tools/tool-adapter.js +197 -0
- package/dist/node/types.js +0 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts +60 -52
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/adapter.js +622 -304
- package/dist/providers/claude-agent-sdk/index.d.ts +22 -4
- package/dist/providers/claude-agent-sdk/index.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/index.js +672 -4
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +43 -40
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/session-bridge.js +121 -130
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +63 -60
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.js +104 -108
- package/dist/providers/index.d.ts +28 -7
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +1261 -8
- package/dist/providers/opencode-sdk/adapter.d.ts +56 -48
- package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/adapter.js +667 -274
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +62 -57
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/agent-bridge.js +289 -155
- package/dist/providers/opencode-sdk/index.d.ts +22 -4
- package/dist/providers/opencode-sdk/index.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/index.js +702 -4
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +41 -42
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/tool-bridge.js +121 -107
- package/dist/providers/registry.d.ts +10 -11
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +86 -49
- package/dist/providers/types.d.ts +169 -166
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +54 -42
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +194 -3
- package/dist/schema/json-schema-to-zod.d.ts +23 -26
- package/dist/schema/json-schema-to-zod.d.ts.map +1 -1
- package/dist/schema/json-schema-to-zod.js +138 -110
- package/dist/schema/schema-output.d.ts +29 -32
- package/dist/schema/schema-output.d.ts.map +1 -1
- package/dist/schema/schema-output.js +178 -53
- package/dist/session/index.d.ts +2 -2
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +89 -2
- package/dist/session/store.d.ts +51 -55
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +85 -74
- package/dist/spec/index.d.ts +3 -3
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +84 -3
- package/dist/spec/registry.d.ts +32 -36
- package/dist/spec/registry.d.ts.map +1 -1
- package/dist/spec/registry.js +51 -60
- package/dist/spec/spec.d.ts +80 -84
- package/dist/spec/spec.d.ts.map +1 -1
- package/dist/spec/spec.js +40 -26
- package/dist/telemetry/adapter.d.ts +33 -37
- package/dist/telemetry/adapter.d.ts.map +1 -1
- package/dist/telemetry/adapter.js +78 -96
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +85 -2
- package/dist/tools/index.d.ts +5 -5
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +344 -5
- package/dist/tools/knowledge-tool.d.ts +4 -8
- package/dist/tools/knowledge-tool.d.ts.map +1 -1
- package/dist/tools/knowledge-tool.js +68 -48
- package/dist/tools/mcp-client.d.ts +17 -21
- package/dist/tools/mcp-client.d.ts.map +1 -1
- package/dist/tools/mcp-client.js +42 -53
- package/dist/tools/mcp-server.d.ts +14 -18
- package/dist/tools/mcp-server.d.ts.map +1 -1
- package/dist/tools/mcp-server.js +200 -64
- package/dist/tools/tool-adapter.d.ts +7 -11
- package/dist/tools/tool-adapter.d.ts.map +1 -1
- package/dist/tools/tool-adapter.js +187 -70
- package/dist/tools/tools.test.d.ts +2 -0
- package/dist/tools/tools.test.d.ts.map +1 -0
- package/dist/types.d.ts +108 -111
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/package.json +448 -90
- package/dist/_virtual/_rolldown/runtime.js +0 -8
- package/dist/agent/agent-factory.js.map +0 -1
- package/dist/agent/contract-spec-agent.js.map +0 -1
- package/dist/agent/json-runner.js.map +0 -1
- package/dist/agent/unified-agent.js.map +0 -1
- package/dist/approval/workflow.js.map +0 -1
- package/dist/exporters/claude-agent-exporter.js.map +0 -1
- package/dist/exporters/opencode-exporter.js.map +0 -1
- package/dist/interop/spec-consumer.js.map +0 -1
- package/dist/interop/tool-consumer.js.map +0 -1
- package/dist/knowledge/injector.js.map +0 -1
- package/dist/memory/in-memory.js.map +0 -1
- package/dist/memory/manager.js.map +0 -1
- package/dist/providers/claude-agent-sdk/adapter.js.map +0 -1
- package/dist/providers/claude-agent-sdk/session-bridge.js.map +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/opencode-sdk/adapter.js.map +0 -1
- package/dist/providers/opencode-sdk/agent-bridge.js.map +0 -1
- package/dist/providers/opencode-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/types.js.map +0 -1
- package/dist/schema/json-schema-to-zod.js.map +0 -1
- package/dist/schema/schema-output.js.map +0 -1
- package/dist/session/store.js.map +0 -1
- package/dist/spec/registry.js.map +0 -1
- package/dist/spec/spec.js.map +0 -1
- package/dist/telemetry/adapter.js.map +0 -1
- package/dist/tools/knowledge-tool.js.map +0 -1
- package/dist/tools/mcp-client.js.map +0 -1
- package/dist/tools/mcp-server.js.map +0 -1
- package/dist/tools/tool-adapter.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/schema/json-schema-to-zod.ts
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
function jsonSchemaToZod(schema) {
|
|
18
|
+
const s = schema;
|
|
19
|
+
const makeNullable = (zodSchema) => {
|
|
20
|
+
return s.nullable ? z.union([zodSchema, z.null()]) : zodSchema;
|
|
21
|
+
};
|
|
22
|
+
if (s.const !== undefined) {
|
|
23
|
+
return z.literal(s.const);
|
|
24
|
+
}
|
|
25
|
+
if (s.enum) {
|
|
26
|
+
const values = s.enum;
|
|
27
|
+
return makeNullable(z.enum(values.map(String)));
|
|
28
|
+
}
|
|
29
|
+
if (s.anyOf && s.anyOf.length > 0) {
|
|
30
|
+
const schemas = s.anyOf.map((sub) => jsonSchemaToZod(sub));
|
|
31
|
+
if (schemas.length === 1)
|
|
32
|
+
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)
|
|
42
|
+
return schemas[0] ?? z.unknown();
|
|
43
|
+
return z.union([
|
|
44
|
+
schemas[0] ?? z.unknown(),
|
|
45
|
+
schemas[1] ?? z.unknown(),
|
|
46
|
+
...schemas.slice(2)
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
if (s.allOf && s.allOf.length > 0) {
|
|
50
|
+
const schemas = s.allOf.map((sub) => jsonSchemaToZod(sub));
|
|
51
|
+
return schemas.reduce((acc, curr) => z.intersection(acc, curr));
|
|
52
|
+
}
|
|
53
|
+
switch (s.type) {
|
|
54
|
+
case "string":
|
|
55
|
+
return makeNullable(buildStringSchema(s));
|
|
56
|
+
case "number":
|
|
57
|
+
case "integer":
|
|
58
|
+
return makeNullable(buildNumberSchema(s));
|
|
59
|
+
case "boolean":
|
|
60
|
+
return makeNullable(z.boolean());
|
|
61
|
+
case "null":
|
|
62
|
+
return z.null();
|
|
63
|
+
case "array":
|
|
64
|
+
return makeNullable(buildArraySchema(s));
|
|
65
|
+
case "object":
|
|
66
|
+
return makeNullable(buildObjectSchema(s));
|
|
67
|
+
default:
|
|
68
|
+
return z.unknown();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function buildStringSchema(schema) {
|
|
72
|
+
let zodSchema = z.string();
|
|
73
|
+
if (schema.description) {
|
|
74
|
+
zodSchema = zodSchema.describe(schema.description);
|
|
75
|
+
}
|
|
76
|
+
switch (schema.format) {
|
|
77
|
+
case "email":
|
|
78
|
+
zodSchema = zodSchema.email();
|
|
79
|
+
break;
|
|
80
|
+
case "uri":
|
|
81
|
+
case "url":
|
|
82
|
+
zodSchema = zodSchema.url();
|
|
83
|
+
break;
|
|
84
|
+
case "uuid":
|
|
85
|
+
zodSchema = zodSchema.uuid();
|
|
86
|
+
break;
|
|
87
|
+
case "date-time":
|
|
88
|
+
zodSchema = zodSchema.datetime();
|
|
89
|
+
break;
|
|
90
|
+
case "date":
|
|
91
|
+
zodSchema = zodSchema.date();
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
if (schema.minLength !== undefined) {
|
|
95
|
+
zodSchema = zodSchema.min(schema.minLength);
|
|
96
|
+
}
|
|
97
|
+
if (schema.maxLength !== undefined) {
|
|
98
|
+
zodSchema = zodSchema.max(schema.maxLength);
|
|
99
|
+
}
|
|
100
|
+
if (schema.pattern) {
|
|
101
|
+
zodSchema = zodSchema.regex(new RegExp(schema.pattern));
|
|
102
|
+
}
|
|
103
|
+
return zodSchema;
|
|
104
|
+
}
|
|
105
|
+
function buildNumberSchema(schema) {
|
|
106
|
+
let zodSchema = schema.type === "integer" ? z.number().int() : z.number();
|
|
107
|
+
if (schema.description) {
|
|
108
|
+
zodSchema = zodSchema.describe(schema.description);
|
|
109
|
+
}
|
|
110
|
+
if (schema.minimum !== undefined) {
|
|
111
|
+
zodSchema = zodSchema.min(schema.minimum);
|
|
112
|
+
}
|
|
113
|
+
if (schema.maximum !== undefined) {
|
|
114
|
+
zodSchema = zodSchema.max(schema.maximum);
|
|
115
|
+
}
|
|
116
|
+
return zodSchema;
|
|
117
|
+
}
|
|
118
|
+
function buildArraySchema(schema) {
|
|
119
|
+
const itemsSchema = schema.items ? jsonSchemaToZod(schema.items) : z.unknown();
|
|
120
|
+
let zodSchema = z.array(itemsSchema);
|
|
121
|
+
if (schema.description) {
|
|
122
|
+
zodSchema = zodSchema.describe(schema.description);
|
|
123
|
+
}
|
|
124
|
+
return zodSchema;
|
|
125
|
+
}
|
|
126
|
+
function buildObjectSchema(schema) {
|
|
127
|
+
const properties = schema.properties ?? {};
|
|
128
|
+
const required = new Set(schema.required ?? []);
|
|
129
|
+
const shape = {};
|
|
130
|
+
for (const [key, propSchema] of Object.entries(properties)) {
|
|
131
|
+
const zodProp = jsonSchemaToZod(propSchema);
|
|
132
|
+
shape[key] = required.has(key) ? zodProp : zodProp.optional();
|
|
133
|
+
}
|
|
134
|
+
let zodSchema = z.object(shape);
|
|
135
|
+
if (schema.description) {
|
|
136
|
+
zodSchema = zodSchema.describe(schema.description);
|
|
137
|
+
}
|
|
138
|
+
return zodSchema;
|
|
139
|
+
}
|
|
140
|
+
function jsonSchemaToZodSafe(schema) {
|
|
141
|
+
if (!schema || Object.keys(schema).length === 0) {
|
|
142
|
+
return z.object({});
|
|
143
|
+
}
|
|
144
|
+
return jsonSchemaToZod(schema);
|
|
145
|
+
}
|
|
146
|
+
var init_json_schema_to_zod = () => {};
|
|
147
|
+
|
|
148
|
+
// src/schema/schema-output.ts
|
|
149
|
+
init_json_schema_to_zod();
|
|
150
|
+
import { Output } from "ai";
|
|
151
|
+
function jsonSchemaToOutput(schema) {
|
|
152
|
+
const zodSchema = jsonSchemaToZod(schema);
|
|
153
|
+
return Output.object({
|
|
154
|
+
schema: zodSchema
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function jsonSchemaToArrayOutput(itemSchema) {
|
|
158
|
+
const zodSchema = jsonSchemaToZod(itemSchema);
|
|
159
|
+
return Output.array({
|
|
160
|
+
element: zodSchema
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function enumToChoiceOutput(choices) {
|
|
164
|
+
return Output.choice({
|
|
165
|
+
options: choices
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function zodToOutput(schema) {
|
|
169
|
+
return Output.object({
|
|
170
|
+
schema
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function textOutput() {
|
|
174
|
+
return Output.text();
|
|
175
|
+
}
|
|
176
|
+
var SchemaOutput = {
|
|
177
|
+
fromJsonSchema: jsonSchemaToOutput,
|
|
178
|
+
arrayFromJsonSchema: jsonSchemaToArrayOutput,
|
|
179
|
+
fromEnum: enumToChoiceOutput,
|
|
180
|
+
fromZod: zodToOutput,
|
|
181
|
+
text: textOutput
|
|
182
|
+
};
|
|
183
|
+
export {
|
|
184
|
+
zodToOutput,
|
|
185
|
+
textOutput,
|
|
186
|
+
jsonSchemaToOutput,
|
|
187
|
+
jsonSchemaToArrayOutput,
|
|
188
|
+
enumToChoiceOutput,
|
|
189
|
+
SchemaOutput
|
|
190
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/session/store.ts
|
|
16
|
+
class InMemorySessionStore {
|
|
17
|
+
sessions = new Map;
|
|
18
|
+
async get(sessionId) {
|
|
19
|
+
return this.sessions.get(sessionId) ?? null;
|
|
20
|
+
}
|
|
21
|
+
async create(session) {
|
|
22
|
+
const now = new Date;
|
|
23
|
+
const fullSession = {
|
|
24
|
+
...session,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
updatedAt: now
|
|
27
|
+
};
|
|
28
|
+
this.sessions.set(session.sessionId, fullSession);
|
|
29
|
+
return fullSession;
|
|
30
|
+
}
|
|
31
|
+
async appendStep(sessionId, step) {
|
|
32
|
+
const session = this.sessions.get(sessionId);
|
|
33
|
+
if (session) {
|
|
34
|
+
session.steps.push(step);
|
|
35
|
+
session.updatedAt = new Date;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async appendMessage(sessionId, message) {
|
|
39
|
+
const session = this.sessions.get(sessionId);
|
|
40
|
+
if (session) {
|
|
41
|
+
session.messages.push(message);
|
|
42
|
+
session.updatedAt = new Date;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async update(sessionId, updates) {
|
|
46
|
+
const session = this.sessions.get(sessionId);
|
|
47
|
+
if (session) {
|
|
48
|
+
Object.assign(session, updates, { updatedAt: new Date });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async delete(sessionId) {
|
|
52
|
+
return this.sessions.delete(sessionId);
|
|
53
|
+
}
|
|
54
|
+
async listByAgent(agentId, limit = 100) {
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const session of this.sessions.values()) {
|
|
57
|
+
if (session.agentId === agentId) {
|
|
58
|
+
results.push(session);
|
|
59
|
+
if (results.length >= limit)
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
64
|
+
}
|
|
65
|
+
async listByTenant(tenantId, limit = 100) {
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const session of this.sessions.values()) {
|
|
68
|
+
if (session.tenantId === tenantId) {
|
|
69
|
+
results.push(session);
|
|
70
|
+
if (results.length >= limit)
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
75
|
+
}
|
|
76
|
+
clear() {
|
|
77
|
+
this.sessions.clear();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function createInMemorySessionStore() {
|
|
81
|
+
return new InMemorySessionStore;
|
|
82
|
+
}
|
|
83
|
+
function generateSessionId() {
|
|
84
|
+
return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
generateSessionId,
|
|
88
|
+
createInMemorySessionStore,
|
|
89
|
+
InMemorySessionStore
|
|
90
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/session/store.ts
|
|
16
|
+
class InMemorySessionStore {
|
|
17
|
+
sessions = new Map;
|
|
18
|
+
async get(sessionId) {
|
|
19
|
+
return this.sessions.get(sessionId) ?? null;
|
|
20
|
+
}
|
|
21
|
+
async create(session) {
|
|
22
|
+
const now = new Date;
|
|
23
|
+
const fullSession = {
|
|
24
|
+
...session,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
updatedAt: now
|
|
27
|
+
};
|
|
28
|
+
this.sessions.set(session.sessionId, fullSession);
|
|
29
|
+
return fullSession;
|
|
30
|
+
}
|
|
31
|
+
async appendStep(sessionId, step) {
|
|
32
|
+
const session = this.sessions.get(sessionId);
|
|
33
|
+
if (session) {
|
|
34
|
+
session.steps.push(step);
|
|
35
|
+
session.updatedAt = new Date;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async appendMessage(sessionId, message) {
|
|
39
|
+
const session = this.sessions.get(sessionId);
|
|
40
|
+
if (session) {
|
|
41
|
+
session.messages.push(message);
|
|
42
|
+
session.updatedAt = new Date;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async update(sessionId, updates) {
|
|
46
|
+
const session = this.sessions.get(sessionId);
|
|
47
|
+
if (session) {
|
|
48
|
+
Object.assign(session, updates, { updatedAt: new Date });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async delete(sessionId) {
|
|
52
|
+
return this.sessions.delete(sessionId);
|
|
53
|
+
}
|
|
54
|
+
async listByAgent(agentId, limit = 100) {
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const session of this.sessions.values()) {
|
|
57
|
+
if (session.agentId === agentId) {
|
|
58
|
+
results.push(session);
|
|
59
|
+
if (results.length >= limit)
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
64
|
+
}
|
|
65
|
+
async listByTenant(tenantId, limit = 100) {
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const session of this.sessions.values()) {
|
|
68
|
+
if (session.tenantId === tenantId) {
|
|
69
|
+
results.push(session);
|
|
70
|
+
if (results.length >= limit)
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return results.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
75
|
+
}
|
|
76
|
+
clear() {
|
|
77
|
+
this.sessions.clear();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function createInMemorySessionStore() {
|
|
81
|
+
return new InMemorySessionStore;
|
|
82
|
+
}
|
|
83
|
+
function generateSessionId() {
|
|
84
|
+
return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
generateSessionId,
|
|
88
|
+
createInMemorySessionStore,
|
|
89
|
+
InMemorySessionStore
|
|
90
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/spec/spec.ts
|
|
16
|
+
function defineAgent(spec) {
|
|
17
|
+
if (!spec.meta?.key) {
|
|
18
|
+
throw new Error("Agent key is required");
|
|
19
|
+
}
|
|
20
|
+
if (typeof spec.meta.version !== "string") {
|
|
21
|
+
throw new Error(`Agent ${spec.meta.key} is missing a string version`);
|
|
22
|
+
}
|
|
23
|
+
if (!spec.instructions?.trim()) {
|
|
24
|
+
throw new Error(`Agent ${spec.meta.key} requires instructions`);
|
|
25
|
+
}
|
|
26
|
+
if (!spec.tools?.length) {
|
|
27
|
+
throw new Error(`Agent ${spec.meta.key} must expose at least one tool`);
|
|
28
|
+
}
|
|
29
|
+
const toolNames = new Set;
|
|
30
|
+
for (const tool of spec.tools) {
|
|
31
|
+
if (toolNames.has(tool.name)) {
|
|
32
|
+
throw new Error(`Agent ${spec.meta.key} has duplicate tool name: ${tool.name}`);
|
|
33
|
+
}
|
|
34
|
+
toolNames.add(tool.name);
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze(spec);
|
|
37
|
+
}
|
|
38
|
+
function agentKey(meta) {
|
|
39
|
+
return `${meta.key}.v${meta.version}`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// src/spec/registry.ts
|
|
43
|
+
import { compareVersions } from "compare-versions";
|
|
44
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
45
|
+
|
|
46
|
+
class AgentRegistry extends SpecContractRegistry {
|
|
47
|
+
constructor(items) {
|
|
48
|
+
super("agent", items);
|
|
49
|
+
}
|
|
50
|
+
listNames() {
|
|
51
|
+
const names = new Set;
|
|
52
|
+
for (const spec of this.items.values()) {
|
|
53
|
+
names.add(spec.meta.key);
|
|
54
|
+
}
|
|
55
|
+
return [...names];
|
|
56
|
+
}
|
|
57
|
+
require(name, version) {
|
|
58
|
+
const spec = this.get(name, version);
|
|
59
|
+
if (!spec) {
|
|
60
|
+
throw new Error(`Agent spec not found for ${name}${version != null ? `.v${version}` : ""}`);
|
|
61
|
+
}
|
|
62
|
+
return spec;
|
|
63
|
+
}
|
|
64
|
+
has(name, version) {
|
|
65
|
+
return this.get(name, version) !== undefined;
|
|
66
|
+
}
|
|
67
|
+
getVersions(name) {
|
|
68
|
+
const versions = [];
|
|
69
|
+
for (const spec of this.items.values()) {
|
|
70
|
+
if (spec.meta.key === name) {
|
|
71
|
+
versions.push(spec);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return versions.sort((a, b) => compareVersions(a.meta.version, b.meta.version));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function createAgentRegistry() {
|
|
78
|
+
return new AgentRegistry;
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
defineAgent,
|
|
82
|
+
createAgentRegistry,
|
|
83
|
+
agentKey,
|
|
84
|
+
AgentRegistry
|
|
85
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/spec/registry.ts
|
|
16
|
+
import { compareVersions } from "compare-versions";
|
|
17
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
18
|
+
|
|
19
|
+
class AgentRegistry extends SpecContractRegistry {
|
|
20
|
+
constructor(items) {
|
|
21
|
+
super("agent", items);
|
|
22
|
+
}
|
|
23
|
+
listNames() {
|
|
24
|
+
const names = new Set;
|
|
25
|
+
for (const spec of this.items.values()) {
|
|
26
|
+
names.add(spec.meta.key);
|
|
27
|
+
}
|
|
28
|
+
return [...names];
|
|
29
|
+
}
|
|
30
|
+
require(name, version) {
|
|
31
|
+
const spec = this.get(name, version);
|
|
32
|
+
if (!spec) {
|
|
33
|
+
throw new Error(`Agent spec not found for ${name}${version != null ? `.v${version}` : ""}`);
|
|
34
|
+
}
|
|
35
|
+
return spec;
|
|
36
|
+
}
|
|
37
|
+
has(name, version) {
|
|
38
|
+
return this.get(name, version) !== undefined;
|
|
39
|
+
}
|
|
40
|
+
getVersions(name) {
|
|
41
|
+
const versions = [];
|
|
42
|
+
for (const spec of this.items.values()) {
|
|
43
|
+
if (spec.meta.key === name) {
|
|
44
|
+
versions.push(spec);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return versions.sort((a, b) => compareVersions(a.meta.version, b.meta.version));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function createAgentRegistry() {
|
|
51
|
+
return new AgentRegistry;
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
createAgentRegistry,
|
|
55
|
+
AgentRegistry
|
|
56
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/spec/spec.ts
|
|
16
|
+
function defineAgent(spec) {
|
|
17
|
+
if (!spec.meta?.key) {
|
|
18
|
+
throw new Error("Agent key is required");
|
|
19
|
+
}
|
|
20
|
+
if (typeof spec.meta.version !== "string") {
|
|
21
|
+
throw new Error(`Agent ${spec.meta.key} is missing a string version`);
|
|
22
|
+
}
|
|
23
|
+
if (!spec.instructions?.trim()) {
|
|
24
|
+
throw new Error(`Agent ${spec.meta.key} requires instructions`);
|
|
25
|
+
}
|
|
26
|
+
if (!spec.tools?.length) {
|
|
27
|
+
throw new Error(`Agent ${spec.meta.key} must expose at least one tool`);
|
|
28
|
+
}
|
|
29
|
+
const toolNames = new Set;
|
|
30
|
+
for (const tool of spec.tools) {
|
|
31
|
+
if (toolNames.has(tool.name)) {
|
|
32
|
+
throw new Error(`Agent ${spec.meta.key} has duplicate tool name: ${tool.name}`);
|
|
33
|
+
}
|
|
34
|
+
toolNames.add(tool.name);
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze(spec);
|
|
37
|
+
}
|
|
38
|
+
function agentKey(meta) {
|
|
39
|
+
return `${meta.key}.v${meta.version}`;
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
defineAgent,
|
|
43
|
+
agentKey
|
|
44
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
// src/telemetry/adapter.ts
|
|
16
|
+
function parseAgentId(agentId) {
|
|
17
|
+
const match = agentId.match(/^(.+)\.v(\s+)$/);
|
|
18
|
+
if (match) {
|
|
19
|
+
return { name: match[1], version: match[2] };
|
|
20
|
+
}
|
|
21
|
+
return { name: agentId, version: "1.0.0" };
|
|
22
|
+
}
|
|
23
|
+
async function trackAgentStep(collector, agentId, step, durationMs) {
|
|
24
|
+
const { name, version } = parseAgentId(agentId);
|
|
25
|
+
for (const toolCall of step.toolCalls ?? []) {
|
|
26
|
+
const toolSample = {
|
|
27
|
+
operation: { name: `${name}.${toolCall.toolName}`, version },
|
|
28
|
+
durationMs: durationMs ?? 0,
|
|
29
|
+
success: step.toolResults?.some((r) => r.toolCallId === toolCall.toolCallId && r.output !== undefined) ?? false,
|
|
30
|
+
timestamp: new Date,
|
|
31
|
+
metadata: {
|
|
32
|
+
agentId,
|
|
33
|
+
toolName: toolCall.toolName,
|
|
34
|
+
finishReason: step.finishReason
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
await collector.collect(toolSample);
|
|
38
|
+
}
|
|
39
|
+
const stepSample = {
|
|
40
|
+
operation: { name, version },
|
|
41
|
+
durationMs: durationMs ?? 0,
|
|
42
|
+
success: step.finishReason !== "error",
|
|
43
|
+
timestamp: new Date,
|
|
44
|
+
metadata: {
|
|
45
|
+
agentId,
|
|
46
|
+
finishReason: step.finishReason,
|
|
47
|
+
tokenUsage: step.usage,
|
|
48
|
+
toolCallCount: step.toolCalls?.length ?? 0
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
await collector.collect(stepSample);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
class InMemoryTelemetryCollector {
|
|
55
|
+
samples = [];
|
|
56
|
+
async collect(sample) {
|
|
57
|
+
this.samples.push(sample);
|
|
58
|
+
}
|
|
59
|
+
getSamples() {
|
|
60
|
+
return [...this.samples];
|
|
61
|
+
}
|
|
62
|
+
getSamplesForOperation(operationName) {
|
|
63
|
+
return this.samples.filter((s) => s.operation.name === operationName);
|
|
64
|
+
}
|
|
65
|
+
clear() {
|
|
66
|
+
this.samples.length = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function createInMemoryTelemetryCollector() {
|
|
70
|
+
return new InMemoryTelemetryCollector;
|
|
71
|
+
}
|
|
72
|
+
var noopTelemetryCollector;
|
|
73
|
+
var init_adapter = __esm(() => {
|
|
74
|
+
noopTelemetryCollector = {
|
|
75
|
+
collect: async () => {}
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
init_adapter();
|
|
79
|
+
|
|
80
|
+
export {
|
|
81
|
+
trackAgentStep,
|
|
82
|
+
noopTelemetryCollector,
|
|
83
|
+
createInMemoryTelemetryCollector,
|
|
84
|
+
InMemoryTelemetryCollector
|
|
85
|
+
};
|