@zhivex-ai/core 0.4.0 → 0.5.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.
Files changed (64) hide show
  1. package/dist/agent-approval.d.ts +6 -0
  2. package/dist/agent-approval.d.ts.map +1 -0
  3. package/dist/agent-approval.js +38 -0
  4. package/dist/agent-approval.js.map +1 -0
  5. package/dist/agent-handoff.d.ts +11 -0
  6. package/dist/agent-handoff.d.ts.map +1 -0
  7. package/dist/agent-handoff.js +20 -0
  8. package/dist/agent-handoff.js.map +1 -0
  9. package/dist/agent-store.d.ts +20 -0
  10. package/dist/agent-store.d.ts.map +1 -0
  11. package/dist/agent-store.js +252 -0
  12. package/dist/agent-store.js.map +1 -0
  13. package/dist/agent.d.ts +8 -0
  14. package/dist/agent.d.ts.map +1 -0
  15. package/dist/agent.js +701 -0
  16. package/dist/agent.js.map +1 -0
  17. package/dist/catalog.js +1 -1
  18. package/dist/catalog.js.map +1 -1
  19. package/dist/errors.d.ts +8 -0
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +9 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/generate-text.d.ts.map +1 -1
  24. package/dist/generate-text.js +87 -9
  25. package/dist/generate-text.js.map +1 -1
  26. package/dist/index.d.ts +13 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +10 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/live-agent.d.ts +3 -0
  31. package/dist/live-agent.d.ts.map +1 -0
  32. package/dist/live-agent.js +565 -0
  33. package/dist/live-agent.js.map +1 -0
  34. package/dist/mcp.d.ts +40 -0
  35. package/dist/mcp.d.ts.map +1 -0
  36. package/dist/mcp.js +167 -0
  37. package/dist/mcp.js.map +1 -0
  38. package/dist/messages.d.ts +9 -1
  39. package/dist/messages.d.ts.map +1 -1
  40. package/dist/messages.js +55 -0
  41. package/dist/messages.js.map +1 -1
  42. package/dist/observability.d.ts +51 -0
  43. package/dist/observability.d.ts.map +1 -0
  44. package/dist/observability.js +276 -0
  45. package/dist/observability.js.map +1 -0
  46. package/dist/realtime.d.ts +52 -0
  47. package/dist/realtime.d.ts.map +1 -0
  48. package/dist/realtime.js +304 -0
  49. package/dist/realtime.js.map +1 -0
  50. package/dist/stream.d.ts +5 -2
  51. package/dist/stream.d.ts.map +1 -1
  52. package/dist/stream.js +1 -0
  53. package/dist/stream.js.map +1 -1
  54. package/dist/tool-registry.d.ts +17 -0
  55. package/dist/tool-registry.d.ts.map +1 -0
  56. package/dist/tool-registry.js +74 -0
  57. package/dist/tool-registry.js.map +1 -0
  58. package/dist/types.d.ts +589 -6
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/ui.d.ts +4 -2
  61. package/dist/ui.d.ts.map +1 -1
  62. package/dist/ui.js +47 -0
  63. package/dist/ui.js.map +1 -1
  64. package/package.json +1 -1
package/dist/mcp.js ADDED
@@ -0,0 +1,167 @@
1
+ import { z } from "zod";
2
+ import { serializeJsonValue, tool } from "./messages.js";
3
+ import { createToolRegistry } from "./tool-registry.js";
4
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
5
+ const toZodLiteral = (value) => {
6
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
7
+ return z.literal(value);
8
+ }
9
+ return z.unknown();
10
+ };
11
+ const toZodUnion = (schemas) => {
12
+ if (!schemas?.length) {
13
+ return z.unknown();
14
+ }
15
+ const parsed = schemas.map((schema) => jsonSchemaToZod(schema));
16
+ if (parsed.length === 1) {
17
+ return parsed[0];
18
+ }
19
+ return z.union(parsed);
20
+ };
21
+ const applyCommonConstraints = (schema, jsonSchema) => {
22
+ if (schema instanceof z.ZodString) {
23
+ let next = schema;
24
+ if (typeof jsonSchema.minLength === "number") {
25
+ next = next.min(jsonSchema.minLength);
26
+ }
27
+ if (typeof jsonSchema.maxLength === "number") {
28
+ next = next.max(jsonSchema.maxLength);
29
+ }
30
+ return next.describe(typeof jsonSchema.description === "string" ? jsonSchema.description : "");
31
+ }
32
+ if (schema instanceof z.ZodNumber) {
33
+ let next = schema;
34
+ if (typeof jsonSchema.minimum === "number") {
35
+ next = next.gte(jsonSchema.minimum);
36
+ }
37
+ if (typeof jsonSchema.maximum === "number") {
38
+ next = next.lte(jsonSchema.maximum);
39
+ }
40
+ return next.describe(typeof jsonSchema.description === "string" ? jsonSchema.description : "");
41
+ }
42
+ if (schema instanceof z.ZodArray) {
43
+ let next = schema;
44
+ if (typeof jsonSchema.minItems === "number") {
45
+ next = next.min(jsonSchema.minItems);
46
+ }
47
+ if (typeof jsonSchema.maxItems === "number") {
48
+ next = next.max(jsonSchema.maxItems);
49
+ }
50
+ return next.describe(typeof jsonSchema.description === "string" ? jsonSchema.description : "");
51
+ }
52
+ return typeof jsonSchema.description === "string" ? schema.describe(jsonSchema.description) : schema;
53
+ };
54
+ const jsonSchemaToZod = (schema) => {
55
+ if (!schema) {
56
+ return z.unknown();
57
+ }
58
+ if (!isRecord(schema)) {
59
+ return z.unknown();
60
+ }
61
+ const jsonSchema = schema;
62
+ if (jsonSchema.const !== undefined) {
63
+ return toZodLiteral(jsonSchema.const);
64
+ }
65
+ if (Array.isArray(jsonSchema.enum) && jsonSchema.enum.length > 0) {
66
+ return toZodUnion(jsonSchema.enum);
67
+ }
68
+ if (Array.isArray(jsonSchema.oneOf)) {
69
+ return toZodUnion(jsonSchema.oneOf);
70
+ }
71
+ if (Array.isArray(jsonSchema.anyOf)) {
72
+ return toZodUnion(jsonSchema.anyOf);
73
+ }
74
+ if (Array.isArray(jsonSchema.type)) {
75
+ return toZodUnion(jsonSchema.type.map((type) => ({
76
+ ...jsonSchema,
77
+ type
78
+ })));
79
+ }
80
+ switch (jsonSchema.type) {
81
+ case "string":
82
+ return applyCommonConstraints(z.string(), jsonSchema);
83
+ case "number":
84
+ return applyCommonConstraints(z.number(), jsonSchema);
85
+ case "integer":
86
+ return applyCommonConstraints(z.number().int(), jsonSchema);
87
+ case "boolean":
88
+ return applyCommonConstraints(z.boolean(), jsonSchema);
89
+ case "null":
90
+ return z.null();
91
+ case "array":
92
+ return applyCommonConstraints(z.array(jsonSchemaToZod(jsonSchema.items)), jsonSchema);
93
+ case "object": {
94
+ const properties = isRecord(jsonSchema.properties) ? jsonSchema.properties : {};
95
+ const required = Array.isArray(jsonSchema.required)
96
+ ? new Set(jsonSchema.required.filter((value) => typeof value === "string"))
97
+ : new Set();
98
+ const shape = Object.fromEntries(Object.entries(properties).map(([key, value]) => {
99
+ const propertySchema = jsonSchemaToZod(value);
100
+ return [key, required.has(key) ? propertySchema : propertySchema.optional()];
101
+ }));
102
+ let objectSchema = z.object(shape);
103
+ if (jsonSchema.additionalProperties === true) {
104
+ objectSchema = objectSchema.passthrough();
105
+ }
106
+ else if (jsonSchema.additionalProperties === false) {
107
+ objectSchema = objectSchema.strict();
108
+ }
109
+ else if (isRecord(jsonSchema.additionalProperties)) {
110
+ objectSchema = objectSchema.catchall(jsonSchemaToZod(jsonSchema.additionalProperties));
111
+ }
112
+ else {
113
+ objectSchema = objectSchema.passthrough();
114
+ }
115
+ return applyCommonConstraints(objectSchema, jsonSchema);
116
+ }
117
+ default:
118
+ return z.unknown();
119
+ }
120
+ };
121
+ const normalizeListedTools = async (client) => {
122
+ const listed = await client.listTools();
123
+ return Array.isArray(listed) ? listed : listed.tools;
124
+ };
125
+ const getToolName = (name, prefix) => (prefix ? `${prefix}${name}` : name);
126
+ export const createMcpToolSet = async (client, options = {}) => {
127
+ const include = options.includeTools ? new Set(options.includeTools) : undefined;
128
+ const exclude = options.excludeTools ? new Set(options.excludeTools) : undefined;
129
+ const listedTools = await normalizeListedTools(client);
130
+ const toolEntries = listedTools.filter((listedTool) => {
131
+ if (include && !include.has(listedTool.name)) {
132
+ return false;
133
+ }
134
+ if (exclude?.has(listedTool.name)) {
135
+ return false;
136
+ }
137
+ return true;
138
+ });
139
+ const seenNames = new Set();
140
+ return Object.fromEntries(toolEntries.map((listedTool) => {
141
+ const toolName = getToolName(listedTool.name, options.toolNamePrefix);
142
+ if (seenNames.has(toolName)) {
143
+ throw new Error(`Duplicate MCP tool name "${toolName}".`);
144
+ }
145
+ seenNames.add(toolName);
146
+ return [
147
+ toolName,
148
+ tool({
149
+ name: toolName,
150
+ description: listedTool.description,
151
+ schema: jsonSchemaToZod(listedTool.inputSchema),
152
+ metadata: serializeJsonValue({
153
+ source: "mcp",
154
+ originalName: listedTool.name,
155
+ inputSchema: listedTool.inputSchema ?? null,
156
+ annotations: listedTool.annotations ?? null
157
+ }),
158
+ execute: async (input) => serializeJsonValue(await client.callTool({
159
+ name: listedTool.name,
160
+ arguments: input
161
+ }))
162
+ })
163
+ ];
164
+ }));
165
+ };
166
+ export const createMcpToolRegistry = async (client, options = {}) => createToolRegistry(await createMcpToolSet(client, options));
167
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAiE3E,MAAM,QAAQ,GAAG,CAAC,KAA4B,EAAsC,EAAE,CACpF,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,YAAY,GAAG,CAAC,KAAgB,EAAE,EAAE;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3G,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAgC,EAAgB,EAAE;IACpE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,CAAC,KAAK,CAAC,MAAyD,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAoB,EAAE,UAA4B,EAAgB,EAAE;IAClG,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAA6B,EAAgB,EAAE;IACtE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,MAA0B,CAAC;IAE9C,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,UAAU,CACf,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,UAAU;YACb,IAAI;SACL,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QACxD,KAAK,SAAS;YACZ,OAAO,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9D,KAAK,SAAS;YACZ,OAAO,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;QACzD,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACxF,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACjD,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;gBAC5F,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;YAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,CACH,CAAC;YAEF,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,UAAU,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;gBAC7C,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5C,CAAC;iBAAM,IAAI,UAAU,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;gBACrD,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACrD,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5C,CAAC;YAED,OAAO,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QACD;YACE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAiB,EAA4B,EAAE;IACjF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,MAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAiB,EAAE,UAA6B,EAAE,EAAoB,EAAE;IAC7G,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACpD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACvB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExB,OAAO;YACL,QAAQ;YACR,IAAI,CAAC;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,UAAU,CAAC,WAAW;gBACnC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/C,QAAQ,EAAE,kBAAkB,CAAC;oBAC3B,MAAM,EAAE,KAAK;oBACb,YAAY,EAAE,UAAU,CAAC,IAAI;oBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI;oBAC3C,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI;iBAC5C,CAA8B;gBAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,kBAAkB,CAChB,MAAM,MAAM,CAAC,QAAQ,CAAC;oBACpB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,SAAS,EAAE,KAAkB;iBAC9B,CAAC,CACH;aACJ,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,MAAiB,EACjB,UAA6B,EAAE,EACR,EAAE,CAAC,kBAAkB,CAAC,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC"}
@@ -1,7 +1,8 @@
1
- import type { ContentPart, FinishReason, GenerateResult, JsonValue, LanguageModel, ModelMessage, StreamEvent, ToolCall, ToolDefinition, ToolExecutionResult } from "./types.js";
1
+ import type { AgentCapabilities, AgentSupportTier, ContentPart, FinishReason, GenerateResult, HostedToolDefinition, HostedToolClass, JsonValue, LanguageModel, ModelMessage, StreamEvent, ToolCall, ToolDefinition, ToolExecutionResult } from "./types.js";
2
2
  export declare const textPart: (text: string) => ContentPart;
3
3
  export declare const toolCallPart: (toolCall: ToolCall) => ContentPart;
4
4
  export declare const toolResultPart: (toolResult: ToolExecutionResult) => ContentPart;
5
+ export declare const providerDataPart: (provider: string, data: JsonValue) => ContentPart;
5
6
  export declare const createTextMessage: (role: ModelMessage["role"], text: string) => ModelMessage;
6
7
  export declare const system: (text: string) => ModelMessage;
7
8
  export declare const user: (input: string | ContentPart[]) => ModelMessage;
@@ -10,6 +11,13 @@ export declare const getTextFromParts: (parts: ContentPart[]) => string;
10
11
  export declare const getTextFromMessages: (messages: ModelMessage[]) => string;
11
12
  export declare const serializeJsonValue: (value: unknown) => JsonValue;
12
13
  export declare const tool: <TTool extends ToolDefinition>(definition: TTool) => TTool;
14
+ export declare const hostedTool: <TTool extends HostedToolDefinition>(definition: Omit<TTool, "kind">) => TTool;
15
+ export declare const isHostedToolDefinition: (toolDefinition: ToolDefinition | HostedToolDefinition) => toolDefinition is HostedToolDefinition;
16
+ export declare const isCallableToolDefinition: (toolDefinition: ToolDefinition | HostedToolDefinition) => toolDefinition is ToolDefinition;
17
+ export declare const getHostedToolClass: (toolDefinition: HostedToolDefinition) => HostedToolClass;
18
+ export declare const isHostedToolClass: (toolDefinition: HostedToolDefinition, toolClass: HostedToolClass) => boolean;
19
+ export declare const getAgentCapabilities: (model: LanguageModel) => AgentCapabilities;
20
+ export declare const getAgentSupportTier: (model: LanguageModel) => AgentSupportTier;
13
21
  export declare const normalizeFinishReason: (reason: string | undefined | null) => FinishReason | undefined;
14
22
  export declare const resultMessages: (result: GenerateResult) => ModelMessage[];
15
23
  export declare const validateMessageParts: (model: LanguageModel, messages: ModelMessage[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,WAAuC,CAAC;AAIhF,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,KAAG,WAGhD,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,YAAY,mBAAmB,KAAG,WAG/D,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,YAG3E,CAAC;AAEH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,YAGpC,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,GAAG,WAAW,EAAE,KAAG,YAGnD,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,GAAG,WAAW,EAAE,KAAG,YAGxD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,KAAG,MAI3C,CAAC;AAEd,eAAO,MAAM,mBAAmB,GAAI,UAAU,YAAY,EAAE,KAAG,MAIlD,CAAC;AAEd,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAA2D,CAAC;AAEhH,eAAO,MAAM,IAAI,GAAI,KAAK,SAAS,cAAc,EAAE,YAAY,KAAK,KAAG,KAAmB,CAAC;AAE3F,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,GAAG,SAAS,GAAG,IAAI,KAAG,YAAY,GAAG,SAsBxF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,cAAc,KAAG,YAAY,EAWnE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,aAAa,EAAE,UAAU,YAAY,EAAE,SAwBlF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,WAAW,EAAE,KAAG,QAAQ,EAGpC,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,WAAuC,CAAC;AAIhF,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,KAAG,WAGhD,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,YAAY,mBAAmB,KAAG,WAG/D,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,MAAM,SAAS,KAAG,WAInE,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,YAG3E,CAAC;AAEH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,YAGpC,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,GAAG,WAAW,EAAE,KAAG,YAGnD,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,GAAG,WAAW,EAAE,KAAG,YAGxD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,KAAG,MAI3C,CAAC;AAEd,eAAO,MAAM,mBAAmB,GAAI,UAAU,YAAY,EAAE,KAAG,MAIlD,CAAC;AAEd,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAA2D,CAAC;AAEhH,eAAO,MAAM,IAAI,GAAI,KAAK,SAAS,cAAc,EAAE,YAAY,KAAK,KAAG,KAAmB,CAAC;AA0C3F,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,oBAAoB,EAAE,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAG,KAKpF,CAAC;AAEd,eAAO,MAAM,sBAAsB,GACjC,gBAAgB,cAAc,GAAG,oBAAoB,KACpD,cAAc,IAAI,oBAAoF,CAAC;AAE1G,eAAO,MAAM,wBAAwB,GACnC,gBAAgB,cAAc,GAAG,oBAAoB,KACpD,cAAc,IAAI,cAAyD,CAAC;AAE/E,eAAO,MAAM,kBAAkB,GAAI,gBAAgB,oBAAoB,KAAG,eACR,CAAC;AAEnE,eAAO,MAAM,iBAAiB,GAC5B,gBAAgB,oBAAoB,EACpC,WAAW,eAAe,YACyB,CAAC;AActD,eAAO,MAAM,oBAAoB,GAAI,OAAO,aAAa,KAAG,iBAG1D,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,aAAa,KAAG,gBAA2D,CAAC;AAEvH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,GAAG,SAAS,GAAG,IAAI,KAAG,YAAY,GAAG,SAsBxF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,cAAc,KAAG,YAAY,EAWnE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,aAAa,EAAE,UAAU,YAAY,EAAE,SAwBlF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,WAAW,EAAE,KAAG,QAAQ,EAGpC,CAAC"}
package/dist/messages.js CHANGED
@@ -9,6 +9,11 @@ export const toolResultPart = (toolResult) => ({
9
9
  type: "tool-result",
10
10
  toolResult
11
11
  });
12
+ export const providerDataPart = (provider, data) => ({
13
+ type: "provider-data",
14
+ provider,
15
+ data
16
+ });
12
17
  export const createTextMessage = (role, text) => ({
13
18
  role,
14
19
  parts: [textPart(text)]
@@ -35,6 +40,56 @@ export const getTextFromMessages = (messages) => messages
35
40
  .join("");
36
41
  export const serializeJsonValue = (value) => JSON.parse(JSON.stringify(value));
37
42
  export const tool = (definition) => definition;
43
+ const inferHostedToolClass = (definition) => {
44
+ const normalizedType = definition.type.toLowerCase();
45
+ if (normalizedType.includes("web_search") ||
46
+ normalizedType.includes("web-search") ||
47
+ normalizedType.includes("googlesearch")) {
48
+ return "web-search";
49
+ }
50
+ if (normalizedType.includes("file_search") ||
51
+ normalizedType.includes("file-search")) {
52
+ return "file-search";
53
+ }
54
+ if (normalizedType === "mcp" || normalizedType.includes("mcp_toolset") || normalizedType.includes("mcp-toolset")) {
55
+ return normalizedType.includes("toolset") ? "toolset" : "remote-mcp";
56
+ }
57
+ if (normalizedType.includes("computer_use") ||
58
+ normalizedType.includes("computer-use")) {
59
+ return "computer-use";
60
+ }
61
+ if (normalizedType.includes("codeexecution") ||
62
+ normalizedType.includes("code_execution") ||
63
+ normalizedType.includes("code-execution")) {
64
+ return "code-execution";
65
+ }
66
+ return "custom";
67
+ };
68
+ export const hostedTool = (definition) => ({
69
+ kind: "hosted",
70
+ toolClass: inferHostedToolClass(definition),
71
+ ...definition
72
+ });
73
+ export const isHostedToolDefinition = (toolDefinition) => "kind" in toolDefinition && toolDefinition.kind === "hosted";
74
+ export const isCallableToolDefinition = (toolDefinition) => !isHostedToolDefinition(toolDefinition);
75
+ export const getHostedToolClass = (toolDefinition) => toolDefinition.toolClass ?? inferHostedToolClass(toolDefinition);
76
+ export const isHostedToolClass = (toolDefinition, toolClass) => getHostedToolClass(toolDefinition) === toolClass;
77
+ const emptyAgentCapabilities = {
78
+ supportTier: "tier-c",
79
+ toolChoiceNone: false,
80
+ approvalRequests: false,
81
+ hostedWebSearch: false,
82
+ hostedFileSearch: false,
83
+ remoteMcp: false,
84
+ computerUse: false,
85
+ codeExecution: false,
86
+ toolsets: false
87
+ };
88
+ export const getAgentCapabilities = (model) => ({
89
+ ...emptyAgentCapabilities,
90
+ ...(model.capabilities.agentCapabilities ?? {})
91
+ });
92
+ export const getAgentSupportTier = (model) => getAgentCapabilities(model).supportTier;
38
93
  export const normalizeFinishReason = (reason) => {
39
94
  if (!reason) {
40
95
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { AgentTelemetryObserver, LanguageModelMiddleware, ProviderOptions } from "./types.js";
2
+ type PrimitiveSpanAttribute = string | number | boolean | null;
3
+ type SpanAttributeValue = PrimitiveSpanAttribute | PrimitiveSpanAttribute[];
4
+ export interface OTelSpanLike {
5
+ setAttribute?(key: string, value: SpanAttributeValue): unknown;
6
+ addEvent?(name: string, attributes?: Record<string, SpanAttributeValue>): unknown;
7
+ recordException?(error: Error): unknown;
8
+ setStatus?(status: unknown): unknown;
9
+ end(): unknown;
10
+ }
11
+ export interface OTelTracerLike {
12
+ startSpan(name: string, options?: {
13
+ attributes?: Record<string, SpanAttributeValue>;
14
+ }): OTelSpanLike;
15
+ }
16
+ export declare class OTelSpanHandle {
17
+ readonly span: OTelSpanLike;
18
+ private readonly statusSetter?;
19
+ constructor(span: OTelSpanLike, statusSetter?: ((span: OTelSpanLike, error: Error) => Promise<void> | void) | undefined);
20
+ end(options?: {
21
+ attributes?: Record<string, unknown>;
22
+ error?: Error;
23
+ }): Promise<void>;
24
+ }
25
+ export declare class OTelObserver {
26
+ private readonly tracer;
27
+ private readonly statusSetter?;
28
+ constructor(tracer: OTelTracerLike, statusSetter?: ((span: OTelSpanLike, error: Error) => Promise<void> | void) | undefined);
29
+ startSpan(name: string, attributes?: Record<string, unknown>): OTelSpanHandle;
30
+ }
31
+ export declare const createOtelObserver: (options?: {
32
+ tracer?: OTelTracerLike;
33
+ tracerName?: string;
34
+ version?: string;
35
+ }) => Promise<OTelObserver>;
36
+ export declare const createOtelAgentObserver: (options?: {
37
+ observer?: OTelObserver;
38
+ tracer?: OTelTracerLike;
39
+ tracerName?: string;
40
+ version?: string;
41
+ spanNamePrefix?: string;
42
+ }) => Promise<AgentTelemetryObserver>;
43
+ export declare const createOtelTelemetryMiddleware: <TProviderOptions extends ProviderOptions = ProviderOptions>(options?: {
44
+ observer?: OTelObserver;
45
+ tracer?: OTelTracerLike;
46
+ tracerName?: string;
47
+ version?: string;
48
+ spanNamePrefix?: string;
49
+ }) => Promise<LanguageModelMiddleware<TProviderOptions>>;
50
+ export {};
51
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,sBAAsB,EACtB,uBAAuB,EAEvB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,KAAK,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC/D,KAAK,kBAAkB,GAAG,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAC/D,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,OAAO,CAAC;IAClF,eAAe,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IACrC,GAAG,IAAI,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;KAAE,GAAG,YAAY,CAAC;CACtG;AA8CD,qBAAa,cAAc;IAEvB,QAAQ,CAAC,IAAI,EAAE,YAAY;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBADrB,IAAI,EAAE,YAAY,EACV,YAAY,CAAC,GAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,aAAA;IAGtF,GAAG,CAAC,OAAO,GAAE;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,CAAC,EAAE,KAAK,CAAC;KACV;CAQP;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBADb,MAAM,EAAE,cAAc,EACtB,YAAY,CAAC,GAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,aAAA;IAG5F,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc;CAM9E;AAgBD,eAAO,MAAM,kBAAkB,GAAU,UAAS;IAChD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,KAAG,OAAO,CAAC,YAAY,CAgB5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,UAAS;IACrD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,OAAO,CAAC,sBAAsB,CA6HtC,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAU,gBAAgB,SAAS,eAAe,GAAG,eAAe,EAAE,UAAS;IACvH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAuFzD,CAAC"}
@@ -0,0 +1,276 @@
1
+ import { createTelemetryMiddleware } from "./middleware.js";
2
+ const toSpanAttributeValue = (value) => {
3
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
4
+ return value;
5
+ }
6
+ if (Array.isArray(value)) {
7
+ const normalized = value
8
+ .map((item) => (item === null || typeof item === "string" || typeof item === "number" || typeof item === "boolean" ? item : JSON.stringify(item)))
9
+ .filter((item) => item !== undefined);
10
+ return normalized.length ? normalized : undefined;
11
+ }
12
+ if (value === undefined) {
13
+ return undefined;
14
+ }
15
+ try {
16
+ return JSON.stringify(value);
17
+ }
18
+ catch {
19
+ return String(value);
20
+ }
21
+ };
22
+ const toSpanAttributes = (attributes) => {
23
+ const entries = Object.entries(attributes ?? {})
24
+ .map(([key, value]) => [key, toSpanAttributeValue(value)])
25
+ .filter((entry) => entry[1] !== undefined);
26
+ return Object.fromEntries(entries);
27
+ };
28
+ const safeSetAttributes = (span, attributes) => {
29
+ for (const [key, value] of Object.entries(toSpanAttributes(attributes))) {
30
+ span.setAttribute?.(key, value);
31
+ }
32
+ };
33
+ const safeAddEvent = (span, name, attributes) => {
34
+ if (!span?.addEvent) {
35
+ return;
36
+ }
37
+ span.addEvent(name, toSpanAttributes(attributes));
38
+ };
39
+ export class OTelSpanHandle {
40
+ span;
41
+ statusSetter;
42
+ constructor(span, statusSetter) {
43
+ this.span = span;
44
+ this.statusSetter = statusSetter;
45
+ }
46
+ async end(options = {}) {
47
+ safeSetAttributes(this.span, options.attributes);
48
+ if (options.error) {
49
+ this.span.recordException?.(options.error);
50
+ await this.statusSetter?.(this.span, options.error);
51
+ }
52
+ this.span.end();
53
+ }
54
+ }
55
+ export class OTelObserver {
56
+ tracer;
57
+ statusSetter;
58
+ constructor(tracer, statusSetter) {
59
+ this.tracer = tracer;
60
+ this.statusSetter = statusSetter;
61
+ }
62
+ startSpan(name, attributes) {
63
+ const span = this.tracer.startSpan(name, {
64
+ attributes: toSpanAttributes(attributes)
65
+ });
66
+ return new OTelSpanHandle(span, this.statusSetter);
67
+ }
68
+ }
69
+ const createDefaultStatusSetter = async () => {
70
+ try {
71
+ const otel = await import("@opentelemetry/api");
72
+ return (span, error) => {
73
+ span.setStatus?.({
74
+ code: otel.SpanStatusCode.ERROR,
75
+ message: error.message
76
+ });
77
+ };
78
+ }
79
+ catch {
80
+ return undefined;
81
+ }
82
+ };
83
+ export const createOtelObserver = async (options = {}) => {
84
+ const statusSetter = await createDefaultStatusSetter();
85
+ if (options.tracer) {
86
+ return new OTelObserver(options.tracer, statusSetter);
87
+ }
88
+ try {
89
+ const otel = await import("@opentelemetry/api");
90
+ return new OTelObserver(otel.trace.getTracer(options.tracerName ?? "zhivex-ai", options.version), statusSetter);
91
+ }
92
+ catch (error) {
93
+ throw new Error('OpenTelemetry is not installed. Install "@opentelemetry/api" to use OTEL observability helpers.', { cause: error });
94
+ }
95
+ };
96
+ export const createOtelAgentObserver = async (options = {}) => {
97
+ const observer = options.observer ?? (await createOtelObserver(options));
98
+ const runSpans = new Map();
99
+ const stepSpans = new Map();
100
+ const prefix = options.spanNamePrefix ?? "zhivex.agent";
101
+ return async (event) => {
102
+ if (event.type === "run-start") {
103
+ runSpans.set(event.runId, observer.startSpan(`${prefix}.run`, {
104
+ "zhivex.run_id": event.runId,
105
+ "zhivex.agent_id": event.agentId,
106
+ "zhivex.provider": event.provider,
107
+ "zhivex.model_id": event.modelId,
108
+ "zhivex.max_steps": event.maxSteps
109
+ }));
110
+ return;
111
+ }
112
+ if (event.type === "step-start") {
113
+ stepSpans.set(`${event.runId}:${event.stepIndex}`, observer.startSpan(`${prefix}.step`, {
114
+ "zhivex.run_id": event.runId,
115
+ "zhivex.agent_id": event.agentId,
116
+ "zhivex.step_index": event.stepIndex
117
+ }));
118
+ return;
119
+ }
120
+ if (event.type === "step-finish") {
121
+ const key = `${event.runId}:${event.step.index}`;
122
+ const handle = stepSpans.get(key);
123
+ stepSpans.delete(key);
124
+ await handle?.end({
125
+ attributes: {
126
+ "zhivex.step_status": event.step.status,
127
+ "zhivex.tool_results": event.step.toolResults.length
128
+ }
129
+ });
130
+ return;
131
+ }
132
+ if (event.type === "approval-request") {
133
+ safeAddEvent(runSpans.get(event.runId)?.span, "approval-request", {
134
+ "zhivex.approval_id": event.approval.id,
135
+ "zhivex.approval_provider": event.approval.provider,
136
+ "zhivex.approval_name": event.approval.name
137
+ });
138
+ return;
139
+ }
140
+ if (event.type === "approval-resolved") {
141
+ safeAddEvent(runSpans.get(event.runId)?.span, "approval-resolved", {
142
+ "zhivex.approval_id": event.approval.approvalRequestId,
143
+ "zhivex.approval_provider": event.approval.provider,
144
+ "zhivex.approved": event.approval.approve,
145
+ "zhivex.reason": event.approval.reason
146
+ });
147
+ return;
148
+ }
149
+ if (event.type === "tool-approval") {
150
+ safeAddEvent(runSpans.get(event.runId)?.span, "tool-approval", {
151
+ "zhivex.tool_name": event.toolCall.name,
152
+ "zhivex.tool_call_id": event.toolCall.id,
153
+ "zhivex.approved": event.approved,
154
+ "zhivex.reason": event.reason
155
+ });
156
+ return;
157
+ }
158
+ if (event.type === "memory-loaded") {
159
+ safeAddEvent(runSpans.get(event.runId)?.span, "memory-loaded", {
160
+ "zhivex.message_count": event.messageCount
161
+ });
162
+ return;
163
+ }
164
+ if (event.type === "guardrail-triggered") {
165
+ safeAddEvent(runSpans.get(event.runId)?.span, "guardrail-triggered", {
166
+ "zhivex.stage": event.stage,
167
+ "zhivex.reason": event.reason,
168
+ ...event.metadata
169
+ });
170
+ return;
171
+ }
172
+ if (event.type === "handoff") {
173
+ safeAddEvent(runSpans.get(event.runId)?.span, "handoff", {
174
+ "zhivex.handoff_id": event.handoff.id,
175
+ "zhivex.from_agent_id": event.handoff.fromAgentId,
176
+ "zhivex.to_agent_id": event.handoff.toAgentId
177
+ });
178
+ return;
179
+ }
180
+ if (event.type === "state-saved") {
181
+ safeAddEvent(runSpans.get(event.runId)?.span, "state-saved", {
182
+ "zhivex.status": event.status
183
+ });
184
+ return;
185
+ }
186
+ if (event.type === "run-finish") {
187
+ const handle = runSpans.get(event.runId);
188
+ runSpans.delete(event.runId);
189
+ await handle?.end({
190
+ attributes: {
191
+ "zhivex.status": event.status,
192
+ "zhivex.current_step": event.state.currentStep,
193
+ "zhivex.pending_approvals": event.state.pendingApprovals.length,
194
+ "zhivex.finish_reason": event.state.finishReason,
195
+ "zhivex.provider_finish_reason": event.state.providerFinishReason
196
+ },
197
+ error: event.status === "failed" && event.state.error?.message
198
+ ? new Error(event.state.error.message)
199
+ : undefined
200
+ });
201
+ }
202
+ };
203
+ };
204
+ export const createOtelTelemetryMiddleware = async (options = {}) => {
205
+ const observer = options.observer ?? (await createOtelObserver(options));
206
+ const spans = new Map();
207
+ const prefix = options.spanNamePrefix ?? "zhivex.model";
208
+ const keyFor = (event) => {
209
+ if (event.type === "generate-start" || event.type === "generate-finish" || event.type === "generate-error") {
210
+ return `generate:${event.model.provider}:${event.model.modelId}:${event.startedAt}`;
211
+ }
212
+ if (event.type === "stream-start" || event.type === "stream-finish" || event.type === "stream-error") {
213
+ return `stream:${event.model.provider}:${event.model.modelId}:${event.startedAt}`;
214
+ }
215
+ return `tool:${event.model.provider}:${event.model.modelId}:${event.step}:${event.toolCall.id}:${event.startedAt}`;
216
+ };
217
+ return createTelemetryMiddleware({
218
+ onEvent: async (event) => {
219
+ if (event.type === "generate-start" || event.type === "stream-start") {
220
+ spans.set(keyFor(event), observer.startSpan(`${prefix}.${event.type === "generate-start" ? "generate" : "stream"}`, {
221
+ "zhivex.provider": event.model.provider,
222
+ "zhivex.model_id": event.model.modelId
223
+ }));
224
+ return;
225
+ }
226
+ if (event.type === "tool-execution-start") {
227
+ spans.set(keyFor(event), observer.startSpan(`${prefix}.tool`, {
228
+ "zhivex.provider": event.model.provider,
229
+ "zhivex.model_id": event.model.modelId,
230
+ "zhivex.step": event.step,
231
+ "zhivex.tool_name": event.toolCall.name,
232
+ "zhivex.tool_call_id": event.toolCall.id
233
+ }));
234
+ return;
235
+ }
236
+ const handle = spans.get(keyFor(event));
237
+ spans.delete(keyFor(event));
238
+ if (event.type === "generate-finish") {
239
+ await handle?.end({
240
+ attributes: {
241
+ "zhivex.latency_ms": event.latencyMs
242
+ }
243
+ });
244
+ return;
245
+ }
246
+ if (event.type === "stream-finish") {
247
+ await handle?.end({
248
+ attributes: {
249
+ "zhivex.finish_reason": event.finishReason,
250
+ "zhivex.provider_finish_reason": event.providerFinishReason,
251
+ "zhivex.latency_ms": event.latencyMs
252
+ }
253
+ });
254
+ return;
255
+ }
256
+ if (event.type === "tool-execution-finish") {
257
+ await handle?.end({
258
+ attributes: {
259
+ "zhivex.latency_ms": event.latencyMs,
260
+ "zhivex.tool_error": event.toolResult.isError
261
+ }
262
+ });
263
+ return;
264
+ }
265
+ if (event.type === "generate-error" || event.type === "stream-error" || event.type === "tool-execution-error") {
266
+ await handle?.end({
267
+ attributes: {
268
+ "zhivex.latency_ms": event.latencyMs
269
+ },
270
+ error: event.error
271
+ });
272
+ }
273
+ }
274
+ });
275
+ };
276
+ //# sourceMappingURL=observability.js.map