@zhivex-ai/core 0.5.0-next.0 → 0.6.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 +86 -43
  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 +282 -0
  45. package/dist/observability.js.map +1 -0
  46. package/dist/realtime.d.ts +55 -0
  47. package/dist/realtime.d.ts.map +1 -0
  48. package/dist/realtime.js +316 -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 +595 -500
  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":"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"}
@@ -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":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAkBtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEhF,MAAM,qBAAqB,GAAG,CAAC,KAA6B,EAAiB,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAExI,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAe,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,WAAW;IACjB,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAA+B,EAAe,EAAE,CAAC,CAAC;IAC/E,IAAI,EAAE,aAAa;IACnB,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,IAAe,EAAe,EAAE,CAAC,CAAC;IACnF,IAAI,EAAE,eAAe;IACrB,QAAQ;IACR,IAAI;CACL,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA0B,EAAE,IAAY,EAAgB,EAAE,CAAC,CAAC;IAC5F,IAAI;IACJ,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAgB,EAAE,CAAC,CAAC;IACrD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAA6B,EAAgB,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAA6B,EAAgB,EAAE,CAAC,CAAC;IACzE,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAU,EAAE,CAC/D,KAAK;KACF,MAAM,CAAC,CAAC,IAAI,EAAkD,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;KACtF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;KACxB,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAU,EAAE,CACtE,QAAQ;KACL,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;KACjD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACjD,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAc,CAAC;AAEhH,MAAM,CAAC,MAAM,IAAI,GAAG,CAA+B,UAAiB,EAAS,EAAE,CAAC,UAAU,CAAC;AAE3F,MAAM,oBAAoB,GAAG,CAAC,UAA8C,EAAmB,EAAE;IAC/F,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAErD,IACE,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;QACrC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;QACrC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,EACvC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IACE,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EACtC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,cAAc,KAAK,KAAK,IAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjH,OAAO,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,CAAC;IAED,IACE,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,EACvC,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IACE,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;QACxC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACzC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACzC,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAqC,UAA+B,EAAS,EAAE,CACvG,CAAC;IACC,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,oBAAoB,CAAC,UAAU,CAAC;IAC3C,GAAG,UAAU;CACd,CAAU,CAAC;AAEd,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,cAAqD,EACb,EAAE,CAAC,MAAM,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,QAAQ,CAAC;AAE1G,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,cAAqD,EACnB,EAAE,CAAC,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAoC,EAAmB,EAAE,CAC1F,cAAc,CAAC,SAAS,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,cAAoC,EACpC,SAA0B,EAC1B,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC;AAEtD,MAAM,sBAAsB,GAAsB;IAChD,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAoB,EAAqB,EAAE,CAAC,CAAC;IAChF,GAAG,sBAAsB;IACzB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,IAAI,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAoB,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;AAEvH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAiC,EAA4B,EAAE;IACnG,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,YAAY,CAAC;QACtB,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAsB,EAAkB,EAAE;IACvE,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAoB,EAAE,QAAwB,EAAE,EAAE;IACrF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxD,MAAM,IAAI,uBAAuB,CAC/B,UAAU,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,kCAAkC,CAC5E,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACtD,MAAM,IAAI,uBAAuB,CAC/B,UAAU,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,iCAAiC,CAC3E,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC7D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,IAAI,uBAAuB,CAC/B,UAAU,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,kCAAkC,CAC5E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAqB,EAAc,EAAE,CAC1E,MAAM;KACH,MAAM,CAAC,CAAC,KAAK,EAAwD,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;KACnG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC"}
@@ -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;AAyDD,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;AAeD,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,CAe5B,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,282 @@
1
+ import { createTelemetryMiddleware } from "./middleware.js";
2
+ const OTEL_API_MODULE = "@opentelemetry/api";
3
+ // Keep OpenTelemetry optional for consumers that never use the OTEL helpers.
4
+ const loadOptionalOtelApi = async () => {
5
+ try {
6
+ return await import(OTEL_API_MODULE);
7
+ }
8
+ catch {
9
+ return undefined;
10
+ }
11
+ };
12
+ const toSpanAttributeValue = (value) => {
13
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
14
+ return value;
15
+ }
16
+ if (Array.isArray(value)) {
17
+ const normalized = value
18
+ .map((item) => (item === null || typeof item === "string" || typeof item === "number" || typeof item === "boolean" ? item : JSON.stringify(item)))
19
+ .filter((item) => item !== undefined);
20
+ return normalized.length ? normalized : undefined;
21
+ }
22
+ if (value === undefined) {
23
+ return undefined;
24
+ }
25
+ try {
26
+ return JSON.stringify(value);
27
+ }
28
+ catch {
29
+ return String(value);
30
+ }
31
+ };
32
+ const toSpanAttributes = (attributes) => {
33
+ const entries = Object.entries(attributes ?? {})
34
+ .map(([key, value]) => [key, toSpanAttributeValue(value)])
35
+ .filter((entry) => entry[1] !== undefined);
36
+ return Object.fromEntries(entries);
37
+ };
38
+ const safeSetAttributes = (span, attributes) => {
39
+ for (const [key, value] of Object.entries(toSpanAttributes(attributes))) {
40
+ span.setAttribute?.(key, value);
41
+ }
42
+ };
43
+ const safeAddEvent = (span, name, attributes) => {
44
+ if (!span?.addEvent) {
45
+ return;
46
+ }
47
+ span.addEvent(name, toSpanAttributes(attributes));
48
+ };
49
+ export class OTelSpanHandle {
50
+ span;
51
+ statusSetter;
52
+ constructor(span, statusSetter) {
53
+ this.span = span;
54
+ this.statusSetter = statusSetter;
55
+ }
56
+ async end(options = {}) {
57
+ safeSetAttributes(this.span, options.attributes);
58
+ if (options.error) {
59
+ this.span.recordException?.(options.error);
60
+ await this.statusSetter?.(this.span, options.error);
61
+ }
62
+ this.span.end();
63
+ }
64
+ }
65
+ export class OTelObserver {
66
+ tracer;
67
+ statusSetter;
68
+ constructor(tracer, statusSetter) {
69
+ this.tracer = tracer;
70
+ this.statusSetter = statusSetter;
71
+ }
72
+ startSpan(name, attributes) {
73
+ const span = this.tracer.startSpan(name, {
74
+ attributes: toSpanAttributes(attributes)
75
+ });
76
+ return new OTelSpanHandle(span, this.statusSetter);
77
+ }
78
+ }
79
+ const createDefaultStatusSetter = async () => {
80
+ const otel = await loadOptionalOtelApi();
81
+ if (!otel) {
82
+ return undefined;
83
+ }
84
+ return (span, error) => {
85
+ span.setStatus?.({
86
+ code: otel.SpanStatusCode.ERROR,
87
+ message: error.message
88
+ });
89
+ };
90
+ };
91
+ export const createOtelObserver = async (options = {}) => {
92
+ const statusSetter = await createDefaultStatusSetter();
93
+ if (options.tracer) {
94
+ return new OTelObserver(options.tracer, statusSetter);
95
+ }
96
+ const otel = await loadOptionalOtelApi();
97
+ if (!otel) {
98
+ throw new Error('OpenTelemetry is not installed. Install "@opentelemetry/api" to use OTEL observability helpers.', { cause: new Error(`Missing optional dependency: ${OTEL_API_MODULE}`) });
99
+ }
100
+ return new OTelObserver(otel.trace.getTracer(options.tracerName ?? "zhivex-ai", options.version), statusSetter);
101
+ };
102
+ export const createOtelAgentObserver = async (options = {}) => {
103
+ const observer = options.observer ?? (await createOtelObserver(options));
104
+ const runSpans = new Map();
105
+ const stepSpans = new Map();
106
+ const prefix = options.spanNamePrefix ?? "zhivex.agent";
107
+ return async (event) => {
108
+ if (event.type === "run-start") {
109
+ runSpans.set(event.runId, observer.startSpan(`${prefix}.run`, {
110
+ "zhivex.run_id": event.runId,
111
+ "zhivex.agent_id": event.agentId,
112
+ "zhivex.provider": event.provider,
113
+ "zhivex.model_id": event.modelId,
114
+ "zhivex.max_steps": event.maxSteps
115
+ }));
116
+ return;
117
+ }
118
+ if (event.type === "step-start") {
119
+ stepSpans.set(`${event.runId}:${event.stepIndex}`, observer.startSpan(`${prefix}.step`, {
120
+ "zhivex.run_id": event.runId,
121
+ "zhivex.agent_id": event.agentId,
122
+ "zhivex.step_index": event.stepIndex
123
+ }));
124
+ return;
125
+ }
126
+ if (event.type === "step-finish") {
127
+ const key = `${event.runId}:${event.step.index}`;
128
+ const handle = stepSpans.get(key);
129
+ stepSpans.delete(key);
130
+ await handle?.end({
131
+ attributes: {
132
+ "zhivex.step_status": event.step.status,
133
+ "zhivex.tool_results": event.step.toolResults.length
134
+ }
135
+ });
136
+ return;
137
+ }
138
+ if (event.type === "approval-request") {
139
+ safeAddEvent(runSpans.get(event.runId)?.span, "approval-request", {
140
+ "zhivex.approval_id": event.approval.id,
141
+ "zhivex.approval_provider": event.approval.provider,
142
+ "zhivex.approval_name": event.approval.name
143
+ });
144
+ return;
145
+ }
146
+ if (event.type === "approval-resolved") {
147
+ safeAddEvent(runSpans.get(event.runId)?.span, "approval-resolved", {
148
+ "zhivex.approval_id": event.approval.approvalRequestId,
149
+ "zhivex.approval_provider": event.approval.provider,
150
+ "zhivex.approved": event.approval.approve,
151
+ "zhivex.reason": event.approval.reason
152
+ });
153
+ return;
154
+ }
155
+ if (event.type === "tool-approval") {
156
+ safeAddEvent(runSpans.get(event.runId)?.span, "tool-approval", {
157
+ "zhivex.tool_name": event.toolCall.name,
158
+ "zhivex.tool_call_id": event.toolCall.id,
159
+ "zhivex.approved": event.approved,
160
+ "zhivex.reason": event.reason
161
+ });
162
+ return;
163
+ }
164
+ if (event.type === "memory-loaded") {
165
+ safeAddEvent(runSpans.get(event.runId)?.span, "memory-loaded", {
166
+ "zhivex.message_count": event.messageCount
167
+ });
168
+ return;
169
+ }
170
+ if (event.type === "guardrail-triggered") {
171
+ safeAddEvent(runSpans.get(event.runId)?.span, "guardrail-triggered", {
172
+ "zhivex.stage": event.stage,
173
+ "zhivex.reason": event.reason,
174
+ ...event.metadata
175
+ });
176
+ return;
177
+ }
178
+ if (event.type === "handoff") {
179
+ safeAddEvent(runSpans.get(event.runId)?.span, "handoff", {
180
+ "zhivex.handoff_id": event.handoff.id,
181
+ "zhivex.from_agent_id": event.handoff.fromAgentId,
182
+ "zhivex.to_agent_id": event.handoff.toAgentId
183
+ });
184
+ return;
185
+ }
186
+ if (event.type === "state-saved") {
187
+ safeAddEvent(runSpans.get(event.runId)?.span, "state-saved", {
188
+ "zhivex.status": event.status
189
+ });
190
+ return;
191
+ }
192
+ if (event.type === "run-finish") {
193
+ const handle = runSpans.get(event.runId);
194
+ runSpans.delete(event.runId);
195
+ await handle?.end({
196
+ attributes: {
197
+ "zhivex.status": event.status,
198
+ "zhivex.current_step": event.state.currentStep,
199
+ "zhivex.pending_approvals": event.state.pendingApprovals.length,
200
+ "zhivex.finish_reason": event.state.finishReason,
201
+ "zhivex.provider_finish_reason": event.state.providerFinishReason
202
+ },
203
+ error: event.status === "failed" && event.state.error?.message
204
+ ? new Error(event.state.error.message)
205
+ : undefined
206
+ });
207
+ }
208
+ };
209
+ };
210
+ export const createOtelTelemetryMiddleware = async (options = {}) => {
211
+ const observer = options.observer ?? (await createOtelObserver(options));
212
+ const spans = new Map();
213
+ const prefix = options.spanNamePrefix ?? "zhivex.model";
214
+ const keyFor = (event) => {
215
+ if (event.type === "generate-start" || event.type === "generate-finish" || event.type === "generate-error") {
216
+ return `generate:${event.model.provider}:${event.model.modelId}:${event.startedAt}`;
217
+ }
218
+ if (event.type === "stream-start" || event.type === "stream-finish" || event.type === "stream-error") {
219
+ return `stream:${event.model.provider}:${event.model.modelId}:${event.startedAt}`;
220
+ }
221
+ return `tool:${event.model.provider}:${event.model.modelId}:${event.step}:${event.toolCall.id}:${event.startedAt}`;
222
+ };
223
+ return createTelemetryMiddleware({
224
+ onEvent: async (event) => {
225
+ if (event.type === "generate-start" || event.type === "stream-start") {
226
+ spans.set(keyFor(event), observer.startSpan(`${prefix}.${event.type === "generate-start" ? "generate" : "stream"}`, {
227
+ "zhivex.provider": event.model.provider,
228
+ "zhivex.model_id": event.model.modelId
229
+ }));
230
+ return;
231
+ }
232
+ if (event.type === "tool-execution-start") {
233
+ spans.set(keyFor(event), observer.startSpan(`${prefix}.tool`, {
234
+ "zhivex.provider": event.model.provider,
235
+ "zhivex.model_id": event.model.modelId,
236
+ "zhivex.step": event.step,
237
+ "zhivex.tool_name": event.toolCall.name,
238
+ "zhivex.tool_call_id": event.toolCall.id
239
+ }));
240
+ return;
241
+ }
242
+ const handle = spans.get(keyFor(event));
243
+ spans.delete(keyFor(event));
244
+ if (event.type === "generate-finish") {
245
+ await handle?.end({
246
+ attributes: {
247
+ "zhivex.latency_ms": event.latencyMs
248
+ }
249
+ });
250
+ return;
251
+ }
252
+ if (event.type === "stream-finish") {
253
+ await handle?.end({
254
+ attributes: {
255
+ "zhivex.finish_reason": event.finishReason,
256
+ "zhivex.provider_finish_reason": event.providerFinishReason,
257
+ "zhivex.latency_ms": event.latencyMs
258
+ }
259
+ });
260
+ return;
261
+ }
262
+ if (event.type === "tool-execution-finish") {
263
+ await handle?.end({
264
+ attributes: {
265
+ "zhivex.latency_ms": event.latencyMs,
266
+ "zhivex.tool_error": event.toolResult.isError
267
+ }
268
+ });
269
+ return;
270
+ }
271
+ if (event.type === "generate-error" || event.type === "stream-error" || event.type === "tool-execution-error") {
272
+ await handle?.end({
273
+ attributes: {
274
+ "zhivex.latency_ms": event.latencyMs
275
+ },
276
+ error: event.error
277
+ });
278
+ }
279
+ }
280
+ });
281
+ };
282
+ //# sourceMappingURL=observability.js.map