@once-agent/sdk 0.1.10 → 0.1.12

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 (166) hide show
  1. package/README.md +76 -1
  2. package/dist/cli.js +50 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/connect/identity.d.ts +22 -0
  5. package/dist/connect/identity.d.ts.map +1 -0
  6. package/dist/connect/identity.js +159 -0
  7. package/dist/connect/identity.js.map +1 -0
  8. package/dist/connect/index.d.ts +17 -0
  9. package/dist/connect/index.d.ts.map +1 -0
  10. package/dist/connect/index.js +9 -0
  11. package/dist/connect/index.js.map +1 -0
  12. package/dist/connect/local-agent-tool.d.ts +62 -0
  13. package/dist/connect/local-agent-tool.d.ts.map +1 -0
  14. package/dist/connect/local-agent-tool.js +131 -0
  15. package/dist/connect/local-agent-tool.js.map +1 -0
  16. package/dist/connect/manifest.d.ts +55 -0
  17. package/dist/connect/manifest.d.ts.map +1 -0
  18. package/dist/connect/manifest.js +166 -0
  19. package/dist/connect/manifest.js.map +1 -0
  20. package/dist/connect/openai-function-tools.d.ts +66 -0
  21. package/dist/connect/openai-function-tools.d.ts.map +1 -0
  22. package/dist/connect/openai-function-tools.js +182 -0
  23. package/dist/connect/openai-function-tools.js.map +1 -0
  24. package/dist/connect/payload.d.ts +30 -0
  25. package/dist/connect/payload.d.ts.map +1 -0
  26. package/dist/connect/payload.js +122 -0
  27. package/dist/connect/payload.js.map +1 -0
  28. package/dist/connect/tool-classifier.d.ts +40 -0
  29. package/dist/connect/tool-classifier.d.ts.map +1 -0
  30. package/dist/connect/tool-classifier.js +271 -0
  31. package/dist/connect/tool-classifier.js.map +1 -0
  32. package/dist/connect/toolset.d.ts +42 -0
  33. package/dist/connect/toolset.d.ts.map +1 -0
  34. package/dist/connect/toolset.js +123 -0
  35. package/dist/connect/toolset.js.map +1 -0
  36. package/dist/discovery/index.d.ts +13 -0
  37. package/dist/discovery/index.d.ts.map +1 -0
  38. package/dist/discovery/index.js +8 -0
  39. package/dist/discovery/index.js.map +1 -0
  40. package/dist/execution-observation.d.ts +122 -0
  41. package/dist/execution-observation.d.ts.map +1 -0
  42. package/dist/execution-observation.js +324 -0
  43. package/dist/execution-observation.js.map +1 -0
  44. package/dist/gateway/index.d.ts +9 -0
  45. package/dist/gateway/index.d.ts.map +1 -0
  46. package/dist/gateway/index.js +5 -0
  47. package/dist/gateway/index.js.map +1 -0
  48. package/dist/gateway/local-toolset.d.ts +32 -0
  49. package/dist/gateway/local-toolset.d.ts.map +1 -0
  50. package/dist/gateway/local-toolset.js +79 -0
  51. package/dist/gateway/local-toolset.js.map +1 -0
  52. package/dist/gateway/openai-function-tools.d.ts +28 -0
  53. package/dist/gateway/openai-function-tools.d.ts.map +1 -0
  54. package/dist/gateway/openai-function-tools.js +117 -0
  55. package/dist/gateway/openai-function-tools.js.map +1 -0
  56. package/dist/gateway/planner.d.ts +53 -0
  57. package/dist/gateway/planner.d.ts.map +1 -0
  58. package/dist/gateway/planner.js +155 -0
  59. package/dist/gateway/planner.js.map +1 -0
  60. package/dist/gateway/tool-graph-binding.d.ts +51 -0
  61. package/dist/gateway/tool-graph-binding.d.ts.map +1 -0
  62. package/dist/gateway/tool-graph-binding.js +123 -0
  63. package/dist/gateway/tool-graph-binding.js.map +1 -0
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/langchain-execution-observer.d.ts +22 -0
  69. package/dist/langchain-execution-observer.d.ts.map +1 -0
  70. package/dist/langchain-execution-observer.js +128 -0
  71. package/dist/langchain-execution-observer.js.map +1 -0
  72. package/dist/langchain-runtime-discovery.d.ts +33 -0
  73. package/dist/langchain-runtime-discovery.d.ts.map +1 -0
  74. package/dist/langchain-runtime-discovery.js +214 -0
  75. package/dist/langchain-runtime-discovery.js.map +1 -0
  76. package/dist/mcp-live-discovery.d.ts +71 -0
  77. package/dist/mcp-live-discovery.d.ts.map +1 -0
  78. package/dist/mcp-live-discovery.js +710 -0
  79. package/dist/mcp-live-discovery.js.map +1 -0
  80. package/dist/mcp-live-report.d.ts +3 -0
  81. package/dist/mcp-live-report.d.ts.map +1 -0
  82. package/dist/mcp-live-report.js +50 -0
  83. package/dist/mcp-live-report.js.map +1 -0
  84. package/dist/mcp-tool-refresh-report.d.ts +3 -0
  85. package/dist/mcp-tool-refresh-report.d.ts.map +1 -0
  86. package/dist/mcp-tool-refresh-report.js +44 -0
  87. package/dist/mcp-tool-refresh-report.js.map +1 -0
  88. package/dist/mcp-tool-refresh.d.ts +33 -0
  89. package/dist/mcp-tool-refresh.d.ts.map +1 -0
  90. package/dist/mcp-tool-refresh.js +489 -0
  91. package/dist/mcp-tool-refresh.js.map +1 -0
  92. package/dist/openai-agents-execution-observer.d.ts +24 -0
  93. package/dist/openai-agents-execution-observer.d.ts.map +1 -0
  94. package/dist/openai-agents-execution-observer.js +163 -0
  95. package/dist/openai-agents-execution-observer.js.map +1 -0
  96. package/dist/otel-execution-observer.d.ts +16 -0
  97. package/dist/otel-execution-observer.d.ts.map +1 -0
  98. package/dist/otel-execution-observer.js +129 -0
  99. package/dist/otel-execution-observer.js.map +1 -0
  100. package/dist/runtime-tool-discovery.d.ts +86 -0
  101. package/dist/runtime-tool-discovery.d.ts.map +1 -0
  102. package/dist/runtime-tool-discovery.js +429 -0
  103. package/dist/runtime-tool-discovery.js.map +1 -0
  104. package/dist/tool-discovery.d.ts +51 -0
  105. package/dist/tool-discovery.d.ts.map +1 -0
  106. package/dist/tool-discovery.js +487 -0
  107. package/dist/tool-discovery.js.map +1 -0
  108. package/dist/tool-importance.d.ts +34 -0
  109. package/dist/tool-importance.d.ts.map +1 -0
  110. package/dist/tool-importance.js +269 -0
  111. package/dist/tool-importance.js.map +1 -0
  112. package/dist/tool-report.d.ts +3 -0
  113. package/dist/tool-report.d.ts.map +1 -0
  114. package/dist/tool-report.js +75 -0
  115. package/dist/tool-report.js.map +1 -0
  116. package/dist/vercel-execution-observer.d.ts +12 -0
  117. package/dist/vercel-execution-observer.d.ts.map +1 -0
  118. package/dist/vercel-execution-observer.js +97 -0
  119. package/dist/vercel-execution-observer.js.map +1 -0
  120. package/dist-cjs/connect/identity.js +162 -0
  121. package/dist-cjs/connect/identity.js.map +1 -0
  122. package/dist-cjs/connect/index.js +26 -0
  123. package/dist-cjs/connect/index.js.map +1 -0
  124. package/dist-cjs/connect/local-agent-tool.js +137 -0
  125. package/dist-cjs/connect/local-agent-tool.js.map +1 -0
  126. package/dist-cjs/connect/manifest.js +171 -0
  127. package/dist-cjs/connect/manifest.js.map +1 -0
  128. package/dist-cjs/connect/openai-function-tools.js +187 -0
  129. package/dist-cjs/connect/openai-function-tools.js.map +1 -0
  130. package/dist-cjs/connect/payload.js +125 -0
  131. package/dist-cjs/connect/payload.js.map +1 -0
  132. package/dist-cjs/connect/tool-classifier.js +276 -0
  133. package/dist-cjs/connect/tool-classifier.js.map +1 -0
  134. package/dist-cjs/connect/toolset.js +126 -0
  135. package/dist-cjs/connect/toolset.js.map +1 -0
  136. package/dist-cjs/discovery/index.js +26 -0
  137. package/dist-cjs/discovery/index.js.map +1 -0
  138. package/dist-cjs/execution-observation.js +330 -0
  139. package/dist-cjs/execution-observation.js.map +1 -0
  140. package/dist-cjs/gateway/index.js +16 -0
  141. package/dist-cjs/gateway/index.js.map +1 -0
  142. package/dist-cjs/gateway/local-toolset.js +84 -0
  143. package/dist-cjs/gateway/local-toolset.js.map +1 -0
  144. package/dist-cjs/gateway/openai-function-tools.js +120 -0
  145. package/dist-cjs/gateway/openai-function-tools.js.map +1 -0
  146. package/dist-cjs/gateway/planner.js +160 -0
  147. package/dist-cjs/gateway/planner.js.map +1 -0
  148. package/dist-cjs/gateway/tool-graph-binding.js +126 -0
  149. package/dist-cjs/gateway/tool-graph-binding.js.map +1 -0
  150. package/dist-cjs/index.js +4 -1
  151. package/dist-cjs/index.js.map +1 -1
  152. package/dist-cjs/langchain-execution-observer.js +131 -0
  153. package/dist-cjs/langchain-execution-observer.js.map +1 -0
  154. package/dist-cjs/langchain-runtime-discovery.js +218 -0
  155. package/dist-cjs/langchain-runtime-discovery.js.map +1 -0
  156. package/dist-cjs/openai-agents-execution-observer.js +166 -0
  157. package/dist-cjs/openai-agents-execution-observer.js.map +1 -0
  158. package/dist-cjs/otel-execution-observer.js +132 -0
  159. package/dist-cjs/otel-execution-observer.js.map +1 -0
  160. package/dist-cjs/runtime-tool-discovery.js +436 -0
  161. package/dist-cjs/runtime-tool-discovery.js.map +1 -0
  162. package/dist-cjs/tool-importance.js +272 -0
  163. package/dist-cjs/tool-importance.js.map +1 -0
  164. package/dist-cjs/vercel-execution-observer.js +100 -0
  165. package/dist-cjs/vercel-execution-observer.js.map +1 -0
  166. package/package.json +25 -3
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discoverLangChainRegisteredTools = discoverLangChainRegisteredTools;
4
+ exports.discoverLangChainModelVisibleTools = discoverLangChainModelVisibleTools;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const tool_importance_js_1 = require("./tool-importance.js");
7
+ function asRecord(value) {
8
+ if (value &&
9
+ typeof value === "object" &&
10
+ !Array.isArray(value)) {
11
+ return value;
12
+ }
13
+ return undefined;
14
+ }
15
+ function ownDataValue(record, key) {
16
+ if (!record)
17
+ return undefined;
18
+ const descriptor = Object.getOwnPropertyDescriptor(record, key);
19
+ return descriptor && "value" in descriptor
20
+ ? descriptor.value
21
+ : undefined;
22
+ }
23
+ function stableId(value) {
24
+ return `tool:${(0, node_crypto_1.createHash)("sha256")
25
+ .update(JSON.stringify(value))
26
+ .digest("hex")}`;
27
+ }
28
+ function stringValue(value) {
29
+ return typeof value === "string" && value.trim() !== ""
30
+ ? value
31
+ : undefined;
32
+ }
33
+ const secretNamePattern = /(?:^|[_-])(authorization|api[_-]?key|token|password|passwd|secret|credential|cookie)(?:$|[_-])/i;
34
+ function safeJsonData(value, depth = 0, seen = new Set(), secretContext = false) {
35
+ if (value === null)
36
+ return null;
37
+ if (typeof value === "string" ||
38
+ typeof value === "boolean") {
39
+ return secretContext ? "<redacted>" : value;
40
+ }
41
+ if (typeof value === "number") {
42
+ return Number.isFinite(value)
43
+ ? (secretContext ? "<redacted>" : value)
44
+ : undefined;
45
+ }
46
+ if (typeof value !== "object" || depth > 12) {
47
+ return undefined;
48
+ }
49
+ const objectValue = value;
50
+ if (seen.has(objectValue))
51
+ return undefined;
52
+ const prototype = Object.getPrototypeOf(value);
53
+ if (!Array.isArray(value) &&
54
+ prototype !== Object.prototype &&
55
+ prototype !== null) {
56
+ return undefined;
57
+ }
58
+ seen.add(objectValue);
59
+ try {
60
+ if (Array.isArray(value)) {
61
+ const output = [];
62
+ for (let index = 0; index < value.length; index++) {
63
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
64
+ if (!descriptor || !("value" in descriptor)) {
65
+ return undefined;
66
+ }
67
+ const item = safeJsonData(descriptor.value, depth + 1, seen, secretContext);
68
+ if (item === undefined)
69
+ return undefined;
70
+ output.push(item);
71
+ }
72
+ return output;
73
+ }
74
+ const output = {};
75
+ const descriptors = Object.getOwnPropertyDescriptors(value);
76
+ for (const [key, descriptor] of Object.entries(descriptors)) {
77
+ if (!("value" in descriptor))
78
+ continue;
79
+ if (descriptor.value === undefined)
80
+ continue;
81
+ const child = safeJsonData(descriptor.value, depth + 1, seen, secretContext || secretNamePattern.test(key));
82
+ if (child !== undefined) {
83
+ output[key] = child;
84
+ }
85
+ }
86
+ return output;
87
+ }
88
+ finally {
89
+ seen.delete(objectValue);
90
+ }
91
+ }
92
+ function langChainTools(input) {
93
+ if (Array.isArray(input))
94
+ return input;
95
+ const record = asRecord(input);
96
+ if (!record)
97
+ return [];
98
+ const tools = ownDataValue(record, "tools");
99
+ return Array.isArray(tools) ? tools : [];
100
+ }
101
+ function openAiFormattedFunction(tool) {
102
+ const type = stringValue(ownDataValue(tool, "type"));
103
+ if (type !== "function")
104
+ return undefined;
105
+ return asRecord(ownDataValue(tool, "function"));
106
+ }
107
+ function observeLangChainTool(rawTool, evidence, source, index, runtimeName) {
108
+ const tool = asRecord(rawTool);
109
+ if (!tool)
110
+ return undefined;
111
+ const formatted = openAiFormattedFunction(tool);
112
+ const name = stringValue(ownDataValue(tool, "name")) ??
113
+ stringValue(ownDataValue(formatted, "name"));
114
+ if (!name)
115
+ return undefined;
116
+ const description = stringValue(ownDataValue(tool, "description")) ??
117
+ stringValue(ownDataValue(formatted, "description")) ??
118
+ "";
119
+ const rawSchema = ownDataValue(tool, "schema") ??
120
+ ownDataValue(tool, "inputSchema") ??
121
+ ownDataValue(tool, "parameters") ??
122
+ ownDataValue(formatted, "parameters");
123
+ const schema = safeJsonData(rawSchema);
124
+ const schemaOpaque = rawSchema !== undefined &&
125
+ schema === undefined;
126
+ const autoExecutable = [
127
+ ownDataValue(tool, "invoke"),
128
+ ownDataValue(tool, "call"),
129
+ ownDataValue(tool, "func"),
130
+ ].some(value => typeof value === "function");
131
+ const rawReturnDirect = ownDataValue(tool, "returnDirect");
132
+ const returnDirect = typeof rawReturnDirect === "boolean"
133
+ ? rawReturnDirect
134
+ : undefined;
135
+ const namespace = `langchain/${runtimeName ?? "runtime"}`;
136
+ const toolType = formatted
137
+ ? "function"
138
+ : "structured_tool";
139
+ const safeMetadata = {
140
+ autoExecutable,
141
+ ...(schemaOpaque ? { schemaOpaque: true } : {}),
142
+ ...(returnDirect !== undefined ? { returnDirect } : {}),
143
+ };
144
+ const once = (0, tool_importance_js_1.assessToolImportance)({
145
+ name,
146
+ description,
147
+ sourceCategory: toolType,
148
+ evidence,
149
+ readOnlyHint: /(?:^|[_-])(?:search|lookup|retrieve|fetch|get|list|read|find)(?:$|[_-])/i.test(name)
150
+ ? true
151
+ : undefined,
152
+ });
153
+ return {
154
+ toolId: stableId({
155
+ framework: "langchain",
156
+ namespace,
157
+ name,
158
+ toolType,
159
+ description,
160
+ schema,
161
+ }),
162
+ namespacedName: `${namespace}/${name}`,
163
+ canonicalName: name,
164
+ displayName: name,
165
+ description,
166
+ toolType,
167
+ framework: "langchain",
168
+ origin: {
169
+ kind: "runtime",
170
+ source,
171
+ ...(runtimeName ? { runtimeName } : {}),
172
+ index,
173
+ },
174
+ evidence: {
175
+ level: evidence,
176
+ source: `${namespace}:${source}`,
177
+ },
178
+ visibility: {
179
+ configured: true,
180
+ runtimeRegistered: true,
181
+ modelVisible: evidence === "MODEL_VISIBLE",
182
+ executed: false,
183
+ },
184
+ ...(schema !== undefined ? { inputSchema: schema } : {}),
185
+ safeMetadata,
186
+ once,
187
+ };
188
+ }
189
+ function discover(input, evidence, source, runtimeName) {
190
+ return langChainTools(input)
191
+ .map((tool, index) => observeLangChainTool(tool, evidence, source, index, runtimeName))
192
+ .filter((tool) => Boolean(tool));
193
+ }
194
+ function discoverLangChainRegisteredTools(toolsOrAgentConfig, runtimeName) {
195
+ const tools = discover(toolsOrAgentConfig, "RUNTIME_REGISTERED", "langchain.tools", runtimeName);
196
+ return {
197
+ framework: "langchain",
198
+ ...(runtimeName ? { runtimeName } : {}),
199
+ registeredToolCount: tools.length,
200
+ tools,
201
+ externalCallsMade: false,
202
+ toolInvocationsMade: false,
203
+ secretValuesRetained: false,
204
+ };
205
+ }
206
+ function discoverLangChainModelVisibleTools(toolsPassedToBindTools, runtimeName) {
207
+ const tools = discover(toolsPassedToBindTools, "MODEL_VISIBLE", "langchain.bindTools", runtimeName);
208
+ return {
209
+ framework: "langchain",
210
+ ...(runtimeName ? { runtimeName } : {}),
211
+ modelVisibleToolCount: tools.length,
212
+ tools,
213
+ externalCallsMade: false,
214
+ toolInvocationsMade: false,
215
+ secretValuesRetained: false,
216
+ };
217
+ }
218
+ //# sourceMappingURL=langchain-runtime-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain-runtime-discovery.js","sourceRoot":"","sources":["../src/langchain-runtime-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOpenAIAgentsExecutionObserver = createOpenAIAgentsExecutionObserver;
4
+ const execution_observation_js_1 = require("./execution-observation.js");
5
+ const runtime_tool_discovery_js_1 = require("./runtime-tool-discovery.js");
6
+ function asRecord(value) {
7
+ return value && typeof value === "object" && !Array.isArray(value)
8
+ ? value
9
+ : undefined;
10
+ }
11
+ function ownDataValue(value, key) {
12
+ const record = asRecord(value);
13
+ if (!record)
14
+ return undefined;
15
+ const descriptor = Object.getOwnPropertyDescriptor(record, key);
16
+ return descriptor && "value" in descriptor
17
+ ? descriptor.value
18
+ : undefined;
19
+ }
20
+ function ownString(value, key) {
21
+ const raw = ownDataValue(value, key);
22
+ return typeof raw === "string" && raw.trim() !== ""
23
+ ? raw
24
+ : undefined;
25
+ }
26
+ function agentTools(agent) {
27
+ const tools = ownDataValue(agent, "tools");
28
+ return Array.isArray(tools) ? tools : [];
29
+ }
30
+ function safeAgentSnapshot(agent) {
31
+ const name = ownString(agent, "name");
32
+ const tools = agentTools(agent);
33
+ const mcpServers = ownDataValue(agent, "mcpServers");
34
+ const mcpConfig = ownDataValue(agent, "mcpConfig");
35
+ return (0, runtime_tool_discovery_js_1.discoverOpenAIAgentRuntime)({
36
+ ...(name ? { name } : {}),
37
+ tools,
38
+ ...(Array.isArray(mcpServers) ? { mcpServers } : {}),
39
+ ...(mcpConfig && typeof mcpConfig === "object" ? { mcpConfig } : {}),
40
+ });
41
+ }
42
+ function findToolArgument(args, byObject) {
43
+ for (const arg of args) {
44
+ if (!arg || typeof arg !== "object")
45
+ continue;
46
+ const observation = byObject.get(arg);
47
+ if (observation) {
48
+ return {
49
+ raw: arg,
50
+ observation,
51
+ };
52
+ }
53
+ }
54
+ return undefined;
55
+ }
56
+ function callIdFromArgs(args) {
57
+ for (let index = args.length - 1; index >= 0; index--) {
58
+ const details = args[index];
59
+ const toolCall = ownDataValue(details, "toolCall");
60
+ const callId = ownString(toolCall, "callId");
61
+ if (callId)
62
+ return callId;
63
+ }
64
+ return undefined;
65
+ }
66
+ /**
67
+ * Build dependency-free OpenAI Agents lifecycle handlers for execution evidence.
68
+ *
69
+ * The returned callbacks are meant to be registered with either an Agent or a
70
+ * Runner `agent_tool_start` / `agent_tool_end` hook. This helper never registers
71
+ * itself, never invokes a tool, and never reads tool arguments/results/context.
72
+ *
73
+ * `agent_tool_end` is proof that the tool lifecycle reached the end hook, so it
74
+ * can establish EXECUTED evidence. The v1 adapter records outcome as UNKNOWN:
75
+ * framework end hooks alone are not treated as authoritative proof that an
76
+ * external side effect succeeded.
77
+ */
78
+ function createOpenAIAgentsExecutionObserver(agent) {
79
+ const rawTools = agentTools(agent);
80
+ const snapshot = safeAgentSnapshot(agent);
81
+ const byObject = new WeakMap();
82
+ for (const observation of snapshot.tools) {
83
+ const index = observation.origin.index;
84
+ const raw = rawTools[index];
85
+ if (raw && typeof raw === "object") {
86
+ byObject.set(raw, observation);
87
+ }
88
+ }
89
+ const pendingByCallId = new Map();
90
+ const pendingWithoutCallId = new WeakMap();
91
+ const collected = [];
92
+ let pendingWithoutIdCount = 0;
93
+ const onToolStart = (...args) => {
94
+ const match = findToolArgument(args, byObject);
95
+ if (!match)
96
+ return;
97
+ const callId = callIdFromArgs(args);
98
+ const pending = {
99
+ tool: match.observation,
100
+ startedAtMs: Date.now(),
101
+ ...(callId ? { callId } : {}),
102
+ };
103
+ if (callId) {
104
+ pendingByCallId.set(callId, pending);
105
+ return;
106
+ }
107
+ const queue = pendingWithoutCallId.get(match.raw) ?? [];
108
+ queue.push(pending);
109
+ pendingWithoutCallId.set(match.raw, queue);
110
+ pendingWithoutIdCount += 1;
111
+ };
112
+ const onToolEnd = (...args) => {
113
+ const match = findToolArgument(args, byObject);
114
+ if (!match)
115
+ return;
116
+ const callId = callIdFromArgs(args);
117
+ let pending;
118
+ if (callId) {
119
+ pending = pendingByCallId.get(callId);
120
+ pendingByCallId.delete(callId);
121
+ }
122
+ else {
123
+ const queue = pendingWithoutCallId.get(match.raw);
124
+ pending = queue?.shift();
125
+ if (pending)
126
+ pendingWithoutIdCount -= 1;
127
+ if (queue && queue.length === 0) {
128
+ pendingWithoutCallId.delete(match.raw);
129
+ }
130
+ }
131
+ const tool = pending?.tool ?? match.observation;
132
+ const now = Date.now();
133
+ const durationMs = pending
134
+ ? Math.max(0, now - pending.startedAtMs)
135
+ : undefined;
136
+ const result = (0, execution_observation_js_1.observeToolExecution)({
137
+ ...(callId ? { eventId: `openai-tool-call:${callId}` } : {}),
138
+ toolId: tool.toolId,
139
+ namespacedName: tool.namespacedName,
140
+ descriptorFingerprint: (0, execution_observation_js_1.executionToolFingerprint)(tool),
141
+ canonicalName: tool.canonicalName,
142
+ framework: tool.framework,
143
+ runtimeName: tool.origin.agentName,
144
+ source: "framework_callback",
145
+ status: "UNKNOWN",
146
+ observedAt: new Date(now).toISOString(),
147
+ ...(durationMs !== undefined ? { durationMs } : {}),
148
+ });
149
+ if (result.accepted) {
150
+ collected.push(result.event);
151
+ }
152
+ };
153
+ return Object.freeze({
154
+ snapshot,
155
+ onToolStart,
156
+ onToolEnd,
157
+ events: () => Object.freeze([...collected]),
158
+ drain: () => {
159
+ const drained = Object.freeze([...collected]);
160
+ collected.length = 0;
161
+ return drained;
162
+ },
163
+ pendingCount: () => pendingByCallId.size + pendingWithoutIdCount,
164
+ });
165
+ }
166
+ //# sourceMappingURL=openai-agents-execution-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-agents-execution-observer.js","sourceRoot":"","sources":["../src/openai-agents-execution-observer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.observeOtelGenAiToolExecutions = observeOtelGenAiToolExecutions;
4
+ const execution_observation_js_1 = require("./execution-observation.js");
5
+ function asRecord(value) {
6
+ return value && typeof value === "object" && !Array.isArray(value)
7
+ ? value
8
+ : undefined;
9
+ }
10
+ function ownDataValue(value, key) {
11
+ const record = asRecord(value);
12
+ if (!record)
13
+ return undefined;
14
+ const descriptor = Object.getOwnPropertyDescriptor(record, key);
15
+ return descriptor && "value" in descriptor
16
+ ? descriptor.value
17
+ : undefined;
18
+ }
19
+ function ownString(value, key) {
20
+ const raw = ownDataValue(value, key);
21
+ return typeof raw === "string" && raw.trim() !== ""
22
+ ? raw
23
+ : undefined;
24
+ }
25
+ function attributesOf(span) {
26
+ const raw = ownDataValue(span, "attributes");
27
+ return asRecord(raw);
28
+ }
29
+ function attrString(attributes, key) {
30
+ if (!attributes)
31
+ return undefined;
32
+ const descriptor = Object.getOwnPropertyDescriptor(attributes, key);
33
+ if (!descriptor || !("value" in descriptor))
34
+ return undefined;
35
+ return typeof descriptor.value === "string" && descriptor.value.trim() !== ""
36
+ ? descriptor.value
37
+ : undefined;
38
+ }
39
+ function toolIndex(tools) {
40
+ const map = new Map();
41
+ for (const tool of tools) {
42
+ const current = map.get(tool.canonicalName);
43
+ if (current === undefined) {
44
+ map.set(tool.canonicalName, tool);
45
+ }
46
+ else {
47
+ // Generic OTel spans commonly identify the tool by name only. If the
48
+ // caller supplies multiple same-named candidates, fail closed rather
49
+ // than choosing one by order.
50
+ map.set(tool.canonicalName, null);
51
+ }
52
+ }
53
+ return map;
54
+ }
55
+ function spanStatus(span, attributes) {
56
+ // Only presence matters; the value itself is intentionally not retained.
57
+ if (attrString(attributes, "error.type"))
58
+ return "FAILED";
59
+ const status = ownDataValue(span, "status");
60
+ const statusRecord = asRecord(status);
61
+ const rawCode = statusRecord
62
+ ? ownDataValue(statusRecord, "code")
63
+ : status;
64
+ if (rawCode === 2 || rawCode === "ERROR")
65
+ return "FAILED";
66
+ if (rawCode === 1 || rawCode === "OK")
67
+ return "SUCCEEDED";
68
+ return "UNKNOWN";
69
+ }
70
+ function spanEventId(span, attributes) {
71
+ const traceId = ownString(span, "traceId");
72
+ const spanId = ownString(span, "spanId");
73
+ if (traceId && spanId) {
74
+ return `otel-span:${traceId}:${spanId}`;
75
+ }
76
+ const callId = attrString(attributes, "gen_ai.tool.call.id");
77
+ return callId ? `otel-tool-call:${callId}` : undefined;
78
+ }
79
+ function durationMs(span) {
80
+ const raw = ownDataValue(span, "durationMs");
81
+ return typeof raw === "number" && Number.isFinite(raw) && raw >= 0
82
+ ? raw
83
+ : undefined;
84
+ }
85
+ /**
86
+ * Ingest already-materialized OpenTelemetry GenAI tool-execution spans.
87
+ *
88
+ * Only spans with `gen_ai.operation.name=execute_tool` are considered. The
89
+ * implementation deliberately reads a tiny allowlist of low-risk attributes
90
+ * and never reads `gen_ai.tool.call.arguments`, `gen_ai.tool.call.result`,
91
+ * exception messages/stacks, prompts, provider/model metadata, results or
92
+ * other content-bearing fields.
93
+ *
94
+ * Generic OTel tool spans commonly identify tools by name. Therefore a name
95
+ * must resolve to exactly one caller-supplied Tool Graph observation; duplicate
96
+ * names fail closed instead of being correlated by array order.
97
+ */
98
+ function observeOtelGenAiToolExecutions(spans, tools) {
99
+ const byName = toolIndex(tools);
100
+ const events = [];
101
+ for (const span of spans) {
102
+ const attributes = attributesOf(span);
103
+ if (attrString(attributes, "gen_ai.operation.name") !== "execute_tool") {
104
+ continue;
105
+ }
106
+ const toolName = attrString(attributes, "gen_ai.tool.name");
107
+ if (!toolName)
108
+ continue;
109
+ const tool = byName.get(toolName);
110
+ if (!tool)
111
+ continue;
112
+ const eventId = spanEventId(span, attributes);
113
+ const duration = durationMs(span);
114
+ const observedAt = ownString(span, "endTime") ?? new Date().toISOString();
115
+ const observed = (0, execution_observation_js_1.observeToolExecution)({
116
+ ...(eventId ? { eventId } : {}),
117
+ toolId: tool.toolId,
118
+ namespacedName: tool.namespacedName,
119
+ descriptorFingerprint: (0, execution_observation_js_1.executionToolFingerprint)(tool),
120
+ canonicalName: tool.canonicalName,
121
+ source: "otel",
122
+ status: spanStatus(span, attributes),
123
+ observedAt,
124
+ ...(duration !== undefined ? { durationMs: duration } : {}),
125
+ });
126
+ if (observed.accepted) {
127
+ events.push(observed.event);
128
+ }
129
+ }
130
+ return Object.freeze(events);
131
+ }
132
+ //# sourceMappingURL=otel-execution-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-execution-observer.js","sourceRoot":"","sources":["../src/otel-execution-observer.ts"],"names":[],"mappings":"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"}