@once-agent/sdk 0.1.11 → 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 (160) 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 +30 -7
  13. package/dist/connect/local-agent-tool.d.ts.map +1 -1
  14. package/dist/connect/local-agent-tool.js +81 -9
  15. package/dist/connect/local-agent-tool.js.map +1 -1
  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/langchain-execution-observer.d.ts +22 -0
  65. package/dist/langchain-execution-observer.d.ts.map +1 -0
  66. package/dist/langchain-execution-observer.js +128 -0
  67. package/dist/langchain-execution-observer.js.map +1 -0
  68. package/dist/langchain-runtime-discovery.d.ts +33 -0
  69. package/dist/langchain-runtime-discovery.d.ts.map +1 -0
  70. package/dist/langchain-runtime-discovery.js +214 -0
  71. package/dist/langchain-runtime-discovery.js.map +1 -0
  72. package/dist/mcp-live-discovery.d.ts +71 -0
  73. package/dist/mcp-live-discovery.d.ts.map +1 -0
  74. package/dist/mcp-live-discovery.js +710 -0
  75. package/dist/mcp-live-discovery.js.map +1 -0
  76. package/dist/mcp-live-report.d.ts +3 -0
  77. package/dist/mcp-live-report.d.ts.map +1 -0
  78. package/dist/mcp-live-report.js +50 -0
  79. package/dist/mcp-live-report.js.map +1 -0
  80. package/dist/mcp-tool-refresh-report.d.ts +3 -0
  81. package/dist/mcp-tool-refresh-report.d.ts.map +1 -0
  82. package/dist/mcp-tool-refresh-report.js +44 -0
  83. package/dist/mcp-tool-refresh-report.js.map +1 -0
  84. package/dist/mcp-tool-refresh.d.ts +33 -0
  85. package/dist/mcp-tool-refresh.d.ts.map +1 -0
  86. package/dist/mcp-tool-refresh.js +489 -0
  87. package/dist/mcp-tool-refresh.js.map +1 -0
  88. package/dist/openai-agents-execution-observer.d.ts +24 -0
  89. package/dist/openai-agents-execution-observer.d.ts.map +1 -0
  90. package/dist/openai-agents-execution-observer.js +163 -0
  91. package/dist/openai-agents-execution-observer.js.map +1 -0
  92. package/dist/otel-execution-observer.d.ts +16 -0
  93. package/dist/otel-execution-observer.d.ts.map +1 -0
  94. package/dist/otel-execution-observer.js +129 -0
  95. package/dist/otel-execution-observer.js.map +1 -0
  96. package/dist/runtime-tool-discovery.d.ts +86 -0
  97. package/dist/runtime-tool-discovery.d.ts.map +1 -0
  98. package/dist/runtime-tool-discovery.js +429 -0
  99. package/dist/runtime-tool-discovery.js.map +1 -0
  100. package/dist/tool-discovery.d.ts +51 -0
  101. package/dist/tool-discovery.d.ts.map +1 -0
  102. package/dist/tool-discovery.js +487 -0
  103. package/dist/tool-discovery.js.map +1 -0
  104. package/dist/tool-importance.d.ts +34 -0
  105. package/dist/tool-importance.d.ts.map +1 -0
  106. package/dist/tool-importance.js +269 -0
  107. package/dist/tool-importance.js.map +1 -0
  108. package/dist/tool-report.d.ts +3 -0
  109. package/dist/tool-report.d.ts.map +1 -0
  110. package/dist/tool-report.js +75 -0
  111. package/dist/tool-report.js.map +1 -0
  112. package/dist/vercel-execution-observer.d.ts +12 -0
  113. package/dist/vercel-execution-observer.d.ts.map +1 -0
  114. package/dist/vercel-execution-observer.js +97 -0
  115. package/dist/vercel-execution-observer.js.map +1 -0
  116. package/dist-cjs/connect/identity.js +162 -0
  117. package/dist-cjs/connect/identity.js.map +1 -0
  118. package/dist-cjs/connect/index.js +26 -0
  119. package/dist-cjs/connect/index.js.map +1 -0
  120. package/dist-cjs/connect/local-agent-tool.js +82 -9
  121. package/dist-cjs/connect/local-agent-tool.js.map +1 -1
  122. package/dist-cjs/connect/manifest.js +171 -0
  123. package/dist-cjs/connect/manifest.js.map +1 -0
  124. package/dist-cjs/connect/openai-function-tools.js +187 -0
  125. package/dist-cjs/connect/openai-function-tools.js.map +1 -0
  126. package/dist-cjs/connect/payload.js +125 -0
  127. package/dist-cjs/connect/payload.js.map +1 -0
  128. package/dist-cjs/connect/tool-classifier.js +276 -0
  129. package/dist-cjs/connect/tool-classifier.js.map +1 -0
  130. package/dist-cjs/connect/toolset.js +126 -0
  131. package/dist-cjs/connect/toolset.js.map +1 -0
  132. package/dist-cjs/discovery/index.js +26 -0
  133. package/dist-cjs/discovery/index.js.map +1 -0
  134. package/dist-cjs/execution-observation.js +330 -0
  135. package/dist-cjs/execution-observation.js.map +1 -0
  136. package/dist-cjs/gateway/index.js +16 -0
  137. package/dist-cjs/gateway/index.js.map +1 -0
  138. package/dist-cjs/gateway/local-toolset.js +84 -0
  139. package/dist-cjs/gateway/local-toolset.js.map +1 -0
  140. package/dist-cjs/gateway/openai-function-tools.js +120 -0
  141. package/dist-cjs/gateway/openai-function-tools.js.map +1 -0
  142. package/dist-cjs/gateway/planner.js +160 -0
  143. package/dist-cjs/gateway/planner.js.map +1 -0
  144. package/dist-cjs/gateway/tool-graph-binding.js +126 -0
  145. package/dist-cjs/gateway/tool-graph-binding.js.map +1 -0
  146. package/dist-cjs/langchain-execution-observer.js +131 -0
  147. package/dist-cjs/langchain-execution-observer.js.map +1 -0
  148. package/dist-cjs/langchain-runtime-discovery.js +218 -0
  149. package/dist-cjs/langchain-runtime-discovery.js.map +1 -0
  150. package/dist-cjs/openai-agents-execution-observer.js +166 -0
  151. package/dist-cjs/openai-agents-execution-observer.js.map +1 -0
  152. package/dist-cjs/otel-execution-observer.js +132 -0
  153. package/dist-cjs/otel-execution-observer.js.map +1 -0
  154. package/dist-cjs/runtime-tool-discovery.js +436 -0
  155. package/dist-cjs/runtime-tool-discovery.js.map +1 -0
  156. package/dist-cjs/tool-importance.js +272 -0
  157. package/dist-cjs/tool-importance.js.map +1 -0
  158. package/dist-cjs/vercel-execution-observer.js +100 -0
  159. package/dist-cjs/vercel-execution-observer.js.map +1 -0
  160. package/package.json +25 -3
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveConnectToolEffectPayload = resolveConnectToolEffectPayload;
4
+ const binding_js_1 = require("./binding.js");
5
+ function plainObject(value) {
6
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
7
+ return null;
8
+ }
9
+ const objectValue = value;
10
+ const prototype = Object.getPrototypeOf(objectValue);
11
+ if (prototype !== Object.prototype && prototype !== null) {
12
+ return null;
13
+ }
14
+ return objectValue;
15
+ }
16
+ function configuredEffectFields(tool) {
17
+ const meta = plainObject(tool._meta);
18
+ if (!meta) {
19
+ return null;
20
+ }
21
+ const once = plainObject(meta.once);
22
+ if (!once || once.effectFields === undefined) {
23
+ return null;
24
+ }
25
+ if (!Array.isArray(once.effectFields) || once.effectFields.length === 0) {
26
+ return "INVALID";
27
+ }
28
+ const fields = once.effectFields;
29
+ if (fields.some(field => typeof field !== "string" ||
30
+ field.trim().length === 0 ||
31
+ field.includes("."))) {
32
+ return "INVALID";
33
+ }
34
+ const normalized = fields.map(field => field.trim());
35
+ if (new Set(normalized).size !== normalized.length) {
36
+ return "INVALID";
37
+ }
38
+ return Object.freeze(normalized);
39
+ }
40
+ function jsonSafeSnapshot(value) {
41
+ try {
42
+ const canonical = (0, binding_js_1.canonicalizeConnectPayload)(value);
43
+ return Object.freeze(JSON.parse(canonical));
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ /**
50
+ * Resolve the effect-bearing payload to bind to a protected tool call.
51
+ *
52
+ * Safety policy:
53
+ * - tool-authored `_meta.once.effectFields` may explicitly narrow the bound
54
+ * payload to complete, top-level effect fields;
55
+ * - otherwise the entire parsed plain-object input is bound.
56
+ *
57
+ * The full-input fallback is deliberately conservative. It may produce a
58
+ * conflict when unrelated retry metadata changes, but it cannot silently omit
59
+ * an input field that changes the external effect. Callers that need a narrower
60
+ * contract can keep using an explicit payload callback or declare effectFields.
61
+ */
62
+ function resolveConnectToolEffectPayload(request) {
63
+ if (!request ||
64
+ !request.tool ||
65
+ typeof request.tool.name !== "string" ||
66
+ request.tool.name.trim().length === 0) {
67
+ return Object.freeze({
68
+ status: "REQUIRED",
69
+ reason: "A stable tool descriptor is required before an effect payload can be resolved.",
70
+ });
71
+ }
72
+ const input = plainObject(request.input);
73
+ if (!input) {
74
+ return Object.freeze({
75
+ status: "REQUIRED",
76
+ reason: "Automatic effect binding requires parsed plain-object tool input. Supply an explicit payload callback for other input shapes.",
77
+ });
78
+ }
79
+ const fields = configuredEffectFields(request.tool);
80
+ if (fields === "INVALID") {
81
+ return Object.freeze({
82
+ status: "REQUIRED",
83
+ reason: "Tool metadata contains an invalid once.effectFields declaration.",
84
+ });
85
+ }
86
+ if (fields) {
87
+ const selected = {};
88
+ for (const field of fields) {
89
+ if (!(field in input) || input[field] === undefined) {
90
+ return Object.freeze({
91
+ status: "REQUIRED",
92
+ reason: `Declared effect field "${field}" is missing from the tool input.`,
93
+ });
94
+ }
95
+ selected[field] = input[field];
96
+ }
97
+ const payload = jsonSafeSnapshot(selected);
98
+ if (!payload) {
99
+ return Object.freeze({
100
+ status: "REQUIRED",
101
+ reason: "Declared effect fields are not canonical JSON-safe data.",
102
+ });
103
+ }
104
+ return Object.freeze({
105
+ status: "FOUND",
106
+ payload,
107
+ source: "meta:effect_fields",
108
+ reason: "Tool metadata declared the complete top-level fields that define the external effect.",
109
+ });
110
+ }
111
+ const payload = jsonSafeSnapshot(input);
112
+ if (!payload) {
113
+ return Object.freeze({
114
+ status: "REQUIRED",
115
+ reason: "Automatic full-input effect binding requires canonical JSON-safe data. Supply an explicit payload callback to select safe effect-bearing values.",
116
+ });
117
+ }
118
+ return Object.freeze({
119
+ status: "FOUND",
120
+ payload,
121
+ source: "full_input",
122
+ reason: "The entire parsed tool input is conservatively bound as effect-bearing data.",
123
+ });
124
+ }
125
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/connect/payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONNECT_TOOL_DECISION = void 0;
4
+ exports.classifyConnectTool = classifyConnectTool;
5
+ exports.classifyConnectTools = classifyConnectTools;
6
+ exports.CONNECT_TOOL_DECISION = Object.freeze({
7
+ PROTECT: "PROTECT",
8
+ BYPASS: "BYPASS",
9
+ UNKNOWN: "UNKNOWN",
10
+ });
11
+ /*
12
+ * Keep this list action-oriented. Object nouns such as email, message,
13
+ * order, and post are intentionally excluded so names like search_messages
14
+ * and list_orders do not look mutating merely because of their subject.
15
+ */
16
+ const MUTATION_NAME_TOKENS = new Set([
17
+ "activate",
18
+ "add",
19
+ "approve",
20
+ "archive",
21
+ "assign",
22
+ "book",
23
+ "buy",
24
+ "cancel",
25
+ "charge",
26
+ "close",
27
+ "comment",
28
+ "commit",
29
+ "create",
30
+ "deactivate",
31
+ "delete",
32
+ "deploy",
33
+ "disable",
34
+ "edit",
35
+ "enable",
36
+ "execute",
37
+ "follow",
38
+ "grant",
39
+ "invite",
40
+ "lock",
41
+ "mark",
42
+ "merge",
43
+ "modify",
44
+ "move",
45
+ "pay",
46
+ "place",
47
+ "provision",
48
+ "publish",
49
+ "purchase",
50
+ "refund",
51
+ "reject",
52
+ "remove",
53
+ "rename",
54
+ "reserve",
55
+ "reschedule",
56
+ "restart",
57
+ "restore",
58
+ "revoke",
59
+ "save",
60
+ "schedule",
61
+ "send",
62
+ "set",
63
+ "share",
64
+ "sign",
65
+ "start",
66
+ "stop",
67
+ "submit",
68
+ "subscribe",
69
+ "transfer",
70
+ "unlock",
71
+ "unfollow",
72
+ "unsubscribe",
73
+ "unschedule",
74
+ "update",
75
+ "upload",
76
+ "write",
77
+ ]);
78
+ const READ_ONLY_NAME_TOKENS = new Set([
79
+ "analyze",
80
+ "calculate",
81
+ "check",
82
+ "compute",
83
+ "convert",
84
+ "describe",
85
+ "fetch",
86
+ "find",
87
+ "format",
88
+ "generate",
89
+ "get",
90
+ "history",
91
+ "inspect",
92
+ "list",
93
+ "lookup",
94
+ "metrics",
95
+ "parse",
96
+ "preview",
97
+ "read",
98
+ "render",
99
+ "retrieve",
100
+ "search",
101
+ "show",
102
+ "stats",
103
+ "status",
104
+ "summarize",
105
+ "translate",
106
+ "validate",
107
+ "view",
108
+ ]);
109
+ const MUTATION_DESCRIPTION_PATTERNS = [
110
+ /\b(activates?|adds?|approves?|archives?|assigns?)\b/i,
111
+ /\b(books?|buys?|cancels?|charges?|closes?|commits?|creates?)\b/i,
112
+ /\b(deactivates?|deletes?|deploys?|disables?|edits?|enables?)\b/i,
113
+ /\b(follows?|grants?|invites?|locks?|marks?|merges?|modifies?|moves?)\b/i,
114
+ /\b(pays?|places?|provisions?|publishes?|purchases?|refunds?)\b/i,
115
+ /\b(rejects?|removes?|renames?|reserves?|reschedules?|restarts?)\b/i,
116
+ /\b(restores?|revokes?|saves?|schedules?|sends?|sets?|shares?|signs?)\b/i,
117
+ /\b(starts?|stops?|submits?|subscribes?|transfers?|unlocks?)\b/i,
118
+ /\b(unfollows?|unsubscribes?|unschedules?|updates?|uploads?|writes?)\b/i,
119
+ /\b(changes? external state|modifies? external state|side[- ]effecting)\b/i,
120
+ ];
121
+ const READ_ONLY_DESCRIPTION_PATTERNS = [
122
+ /\bread[- ]only\b/i,
123
+ /\bno side effects?\b/i,
124
+ /\bdoes not (?:modify|change|write|mutate)\b/i,
125
+ /\bwithout (?:modifying|changing|writing|mutating|saving)\b/i,
126
+ /\b(searches?|reads?|retrieves?|fetches?|lists?|looks? up|inspects?)\b/i,
127
+ /\b(generates?|summarizes?|translates?|analyzes?|calculates?|computes?)\b/i,
128
+ /\b(converts?|formats?|parses?|renders?|validates?)\b/i,
129
+ ];
130
+ function freezeResult(decision, reason, signals) {
131
+ return Object.freeze({
132
+ decision,
133
+ reason,
134
+ signals: Object.freeze([...signals]),
135
+ });
136
+ }
137
+ function normalizeName(name) {
138
+ return name
139
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
140
+ .toLowerCase()
141
+ .split(/[^a-z0-9]+/g)
142
+ .filter(Boolean);
143
+ }
144
+ function hasPattern(text, patterns) {
145
+ return patterns.some(pattern => pattern.test(text));
146
+ }
147
+ function validateAnnotations(value) {
148
+ if (value === undefined) {
149
+ return true;
150
+ }
151
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
152
+ return false;
153
+ }
154
+ const candidate = value;
155
+ for (const key of [
156
+ "readOnlyHint",
157
+ "destructiveHint",
158
+ "idempotentHint",
159
+ "openWorldHint",
160
+ ]) {
161
+ if (candidate[key] !== undefined &&
162
+ typeof candidate[key] !== "boolean") {
163
+ return false;
164
+ }
165
+ }
166
+ if (candidate.title !== undefined &&
167
+ typeof candidate.title !== "string") {
168
+ return false;
169
+ }
170
+ return true;
171
+ }
172
+ /**
173
+ * Infer whether a tool should cross the Once Connect safety boundary.
174
+ *
175
+ * This is intentionally conservative. Explicit metadata and deterministic
176
+ * name/description semantics cross-check one another. Weak or contradictory
177
+ * evidence resolves to UNKNOWN rather than permission.
178
+ *
179
+ * UNKNOWN is not a bypass decision. Callers should require an explicit safety
180
+ * declaration, human/config policy, or another trusted classifier before
181
+ * executing a consequential operation outside Once.
182
+ */
183
+ function classifyConnectTool(tool) {
184
+ if (!tool || typeof tool !== "object" || Array.isArray(tool)) {
185
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "INVALID_TOOL_DESCRIPTOR", []);
186
+ }
187
+ const candidate = tool;
188
+ if (typeof candidate.name !== "string" ||
189
+ candidate.name.trim().length === 0) {
190
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "INVALID_TOOL_DESCRIPTOR", []);
191
+ }
192
+ if (candidate.description !== undefined &&
193
+ typeof candidate.description !== "string") {
194
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "INVALID_TOOL_DESCRIPTOR", []);
195
+ }
196
+ if (!validateAnnotations(candidate.annotations)) {
197
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "INVALID_TOOL_ANNOTATIONS", []);
198
+ }
199
+ const annotations = candidate.annotations;
200
+ const nameTokens = normalizeName(candidate.name);
201
+ const description = typeof candidate.description === "string"
202
+ ? candidate.description
203
+ : "";
204
+ const mutationNameTokens = nameTokens.filter(token => MUTATION_NAME_TOKENS.has(token));
205
+ const readOnlyNameTokens = nameTokens.filter(token => READ_ONLY_NAME_TOKENS.has(token));
206
+ const mutationDescription = hasPattern(description, MUTATION_DESCRIPTION_PATTERNS);
207
+ const readOnlyDescription = hasPattern(description, READ_ONLY_DESCRIPTION_PATTERNS);
208
+ const mutationSignal = mutationNameTokens.length > 0 || mutationDescription;
209
+ const readOnlySignal = readOnlyNameTokens.length > 0 || readOnlyDescription;
210
+ const signals = [];
211
+ for (const token of mutationNameTokens) {
212
+ signals.push(`name:${token}`);
213
+ }
214
+ for (const token of readOnlyNameTokens) {
215
+ signals.push(`name:${token}`);
216
+ }
217
+ if (mutationDescription) {
218
+ signals.push("description:mutation");
219
+ }
220
+ if (readOnlyDescription) {
221
+ signals.push("description:read-only");
222
+ }
223
+ if (mutationSignal && readOnlySignal) {
224
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "CONFLICTING_SIGNALS", signals);
225
+ }
226
+ if (annotations?.readOnlyHint === true) {
227
+ signals.push("annotations.readOnlyHint=true");
228
+ if (annotations.destructiveHint === true ||
229
+ mutationSignal) {
230
+ if (annotations.destructiveHint === true) {
231
+ signals.push("annotations.destructiveHint=true");
232
+ }
233
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "CONFLICTING_SIGNALS", signals);
234
+ }
235
+ return freezeResult(exports.CONNECT_TOOL_DECISION.BYPASS, "EXPLICIT_READ_ONLY", signals);
236
+ }
237
+ if (annotations?.readOnlyHint === false) {
238
+ signals.push("annotations.readOnlyHint=false");
239
+ if (readOnlySignal && !mutationSignal) {
240
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "CONFLICTING_SIGNALS", signals);
241
+ }
242
+ if (annotations.idempotentHint === true) {
243
+ signals.push("annotations.idempotentHint=true");
244
+ return freezeResult(exports.CONNECT_TOOL_DECISION.BYPASS, "EXPLICIT_IDEMPOTENT_WRITE", signals);
245
+ }
246
+ if (annotations.idempotentHint === false) {
247
+ signals.push("annotations.idempotentHint=false");
248
+ }
249
+ if (annotations.destructiveHint !== undefined) {
250
+ signals.push(`annotations.destructiveHint=${String(annotations.destructiveHint)}`);
251
+ }
252
+ return freezeResult(exports.CONNECT_TOOL_DECISION.PROTECT, "EXPLICIT_WRITE", signals);
253
+ }
254
+ if (annotations?.idempotentHint === true) {
255
+ signals.push("annotations.idempotentHint=true");
256
+ return freezeResult(exports.CONNECT_TOOL_DECISION.BYPASS, "EXPLICIT_IDEMPOTENT_WRITE", signals);
257
+ }
258
+ if (annotations?.destructiveHint === true) {
259
+ signals.push("annotations.destructiveHint=true");
260
+ if (readOnlySignal) {
261
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "CONFLICTING_SIGNALS", signals);
262
+ }
263
+ return freezeResult(exports.CONNECT_TOOL_DECISION.PROTECT, "EXPLICIT_WRITE", signals);
264
+ }
265
+ if (mutationSignal) {
266
+ return freezeResult(exports.CONNECT_TOOL_DECISION.PROTECT, "MUTATION_SIGNAL", signals);
267
+ }
268
+ if (readOnlySignal) {
269
+ return freezeResult(exports.CONNECT_TOOL_DECISION.BYPASS, "READ_ONLY_SIGNAL", signals);
270
+ }
271
+ return freezeResult(exports.CONNECT_TOOL_DECISION.UNKNOWN, "INSUFFICIENT_EVIDENCE", signals);
272
+ }
273
+ function classifyConnectTools(tools) {
274
+ return Object.freeze(tools.map(tool => classifyConnectTool(tool)));
275
+ }
276
+ //# sourceMappingURL=tool-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-classifier.js","sourceRoot":"","sources":["../../src/connect/tool-classifier.ts"],"names":[],"mappings":";;;AA6OA,kDAmNC;AAED,oDAIC;AAtcY,QAAA,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC,CAAC;AAsCZ;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU;IACV,KAAK;IACL,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,KAAK;IACL,OAAO;IACP,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,WAAW;IACX,UAAU;IACV,QAAQ;IACR,UAAU;IACV,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,SAAS;IACT,WAAW;IACX,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,UAAU;IACV,KAAK;IACL,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,MAAM;IACN,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;IACX,WAAW;IACX,UAAU;IACV,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG;IACpC,sDAAsD;IACtD,iEAAiE;IACjE,iEAAiE;IACjE,yEAAyE;IACzE,iEAAiE;IACjE,oEAAoE;IACpE,yEAAyE;IACzE,gEAAgE;IAChE,wEAAwE;IACxE,2EAA2E;CAC5E,CAAC;AAEF,MAAM,8BAA8B,GAAG;IACrC,mBAAmB;IACnB,uBAAuB;IACvB,8CAA8C;IAC9C,6DAA6D;IAC7D,wEAAwE;IACxE,2EAA2E;IAC3E,uDAAuD;CACxD,CAAC;AAEF,SAAS,YAAY,CACnB,QAA6B,EAC7B,MAAuC,EACvC,OAAiB;IAEjB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ;QACR,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE;SACb,KAAK,CAAC,aAAa,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,QAAkB;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAgC,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI;QAChB,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,eAAe;KAChB,EAAE,CAAC;QACF,IACE,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS;YAC5B,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EACnC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IACE,SAAS,CAAC,KAAK,KAAK,SAAS;QAC7B,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CACjC,IAAa;IAEb,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,yBAAyB,EACzB,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAA+B,CAAC;IAElD,IACE,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAClC,CAAC;QACD,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,yBAAyB,EACzB,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IACE,SAAS,CAAC,WAAW,KAAK,SAAS;QACnC,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,EACzC,CAAC;QACD,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,yBAAyB,EACzB,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,0BAA0B,EAC1B,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,WAEjB,CAAC;IAEd,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GACf,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;QACvC,CAAC,CAAC,SAAS,CAAC,WAAW;QACvB,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnD,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAChC,CAAC;IAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnD,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CACjC,CAAC;IAEF,MAAM,mBAAmB,GACvB,UAAU,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;IAEzD,MAAM,mBAAmB,GACvB,UAAU,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;IAE1D,MAAM,cAAc,GAClB,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC;IAEvD,MAAM,cAAc,GAClB,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC;IAEvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,cAAc,IAAI,cAAc,EAAE,CAAC;QACrC,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,qBAAqB,EACrB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAE9C,IACE,WAAW,CAAC,eAAe,KAAK,IAAI;YACpC,cAAc,EACd,CAAC;YACD,IAAI,WAAW,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,qBAAqB,EACrB,OAAO,CACR,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CACjB,6BAAqB,CAAC,MAAM,EAC5B,oBAAoB,EACpB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE/C,IAAI,cAAc,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,qBAAqB,EACrB,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAEhD,OAAO,YAAY,CACjB,6BAAqB,CAAC,MAAM,EAC5B,2BAA2B,EAC3B,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,WAAW,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CACV,+BAA+B,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAEhD,OAAO,YAAY,CACjB,6BAAqB,CAAC,MAAM,EAC5B,2BAA2B,EAC3B,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAEjD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,qBAAqB,EACrB,OAAO,CACR,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,iBAAiB,EACjB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,YAAY,CACjB,6BAAqB,CAAC,MAAM,EAC5B,kBAAkB,EAClB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CACjB,6BAAqB,CAAC,OAAO,EAC7B,uBAAuB,EACvB,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAyB;IAEzB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.connectLocalAgentToolsetAuto = connectLocalAgentToolsetAuto;
4
+ const manifest_js_1 = require("./manifest.js");
5
+ const local_agent_tool_js_1 = require("./local-agent-tool.js");
6
+ function isRecord(value) {
7
+ if (value === null ||
8
+ typeof value !== "object" ||
9
+ Array.isArray(value)) {
10
+ return false;
11
+ }
12
+ const prototype = Object.getPrototypeOf(value);
13
+ return prototype === Object.prototype || prototype === null;
14
+ }
15
+ function hasOwn(value, key) {
16
+ return Object.prototype.hasOwnProperty.call(value, key);
17
+ }
18
+ function formatUnknownTools(plan) {
19
+ return plan.unknown
20
+ .map(entry => `${entry.name ?? `#${entry.index}`}:${entry.reason}`)
21
+ .join(", ");
22
+ }
23
+ /**
24
+ * Connect an entire local agent tool registry in one fail-closed operation.
25
+ *
26
+ * Safety properties:
27
+ * - the manifest must fully classify with no UNKNOWN entries;
28
+ * - every declared tool must have exactly one same-named implementation;
29
+ * - undeclared executable registry entries are rejected;
30
+ * - duplicate or invalid tool names are rejected before wrappers are built;
31
+ * - the original registry is never mutated;
32
+ * - every returned tool delegates through connectLocalAgentToolAuto(), so the
33
+ * existing routing, identity, payload and SQLite protection rules remain the
34
+ * single source of execution behaviour.
35
+ *
36
+ * Per-call identity/payload can still fail closed at invocation time because
37
+ * those values depend on actual input. Only expose `result.tools` to the agent;
38
+ * retaining and using the original registry remains an intentional bypass.
39
+ */
40
+ function connectLocalAgentToolsetAuto(tools, options) {
41
+ if (!isRecord(tools)) {
42
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOLSET", "Once Connect needs a plain-object registry of named agent tools.");
43
+ }
44
+ if (!options || !("manifest" in options)) {
45
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOL_MANIFEST", "Once Connect needs a complete tool manifest before toolset wiring.");
46
+ }
47
+ const normalized = (0, manifest_js_1.normalizeConnectToolManifest)(options.manifest);
48
+ const plan = (0, manifest_js_1.planConnectToolManifest)(options.manifest);
49
+ if (!normalized || !plan.valid) {
50
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOL_MANIFEST", "Once Connect could not parse the supplied tool manifest.");
51
+ }
52
+ if (!plan.ready) {
53
+ throw new local_agent_tool_js_1.AgentToolConnectionError("UNKNOWN_TOOLSET_SAFETY", `Once Connect refuses partial automatic wiring while tool safety is unresolved: ${formatUnknownTools(plan)}.`);
54
+ }
55
+ if (normalized.length !== plan.entries.length) {
56
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOL_MANIFEST", "Once Connect manifest normalization and classification disagree.");
57
+ }
58
+ const descriptors = new Map();
59
+ for (let index = 0; index < normalized.length; index += 1) {
60
+ const item = normalized[index];
61
+ const name = item.name;
62
+ if (typeof name !== "string" ||
63
+ !/^[A-Za-z0-9_-]{1,100}$/.test(name) ||
64
+ !isRecord(item.descriptor)) {
65
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOL_NAME", `Once Connect requires a stable registry-safe tool name at manifest index ${index}.`);
66
+ }
67
+ if (descriptors.has(name)) {
68
+ throw new local_agent_tool_js_1.AgentToolConnectionError("DUPLICATE_TOOL_NAME", `Once Connect cannot safely map duplicate manifest tool name "${name}" to one implementation.`);
69
+ }
70
+ descriptors.set(name, item.descriptor);
71
+ }
72
+ for (const name of descriptors.keys()) {
73
+ if (!hasOwn(tools, name)) {
74
+ throw new local_agent_tool_js_1.AgentToolConnectionError("MISSING_TOOL_IMPLEMENTATION", `The manifest declares "${name}" but the tool registry has no same-named implementation.`);
75
+ }
76
+ const implementation = tools[name];
77
+ if (!implementation ||
78
+ typeof implementation.execute !== "function") {
79
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOL_IMPLEMENTATION", `Tool "${name}" must expose execute(input).`);
80
+ }
81
+ }
82
+ for (const name of Object.keys(tools)) {
83
+ if (!descriptors.has(name)) {
84
+ throw new local_agent_tool_js_1.AgentToolConnectionError("UNDECLARED_TOOL_IMPLEMENTATION", `Tool registry entry "${name}" is executable but absent from the manifest. Once refuses to leave an undeclared bypass in the connected registry.`);
85
+ }
86
+ }
87
+ if (options.overrides !== undefined &&
88
+ !isRecord(options.overrides)) {
89
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOLSET_OVERRIDES", "Once Connect toolset overrides must be a plain object keyed by tool name.");
90
+ }
91
+ if (options.overrides) {
92
+ for (const name of Object.keys(options.overrides)) {
93
+ if (!descriptors.has(name)) {
94
+ throw new local_agent_tool_js_1.AgentToolConnectionError("UNDECLARED_TOOL_OVERRIDE", `Override "${name}" does not correspond to a declared tool.`);
95
+ }
96
+ const override = options.overrides[name];
97
+ if (override !== undefined && !isRecord(override)) {
98
+ throw new local_agent_tool_js_1.AgentToolConnectionError("INVALID_TOOLSET_OVERRIDES", `Override "${name}" must be a plain object when provided.`);
99
+ }
100
+ }
101
+ }
102
+ const connected = Object.create(null);
103
+ for (const [name, descriptor] of descriptors) {
104
+ const implementation = tools[name];
105
+ const override = options.overrides?.[name];
106
+ const wrapped = (0, local_agent_tool_js_1.connectLocalAgentToolAuto)(implementation, {
107
+ descriptor,
108
+ statePath: override?.statePath ?? options.statePath,
109
+ id: override?.id,
110
+ payload: override?.payload,
111
+ reconcile: override?.reconcile,
112
+ });
113
+ Object.defineProperty(connected, name, {
114
+ value: Object.freeze(wrapped),
115
+ enumerable: true,
116
+ configurable: false,
117
+ writable: false,
118
+ });
119
+ }
120
+ const frozenTools = Object.freeze(connected);
121
+ return Object.freeze({
122
+ plan,
123
+ tools: frozenTools,
124
+ });
125
+ }
126
+ //# sourceMappingURL=toolset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/connect/toolset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.observeOtelGenAiToolExecutions = exports.createLangChainExecutionObserver = exports.observeVercelAiSdkStepExecutions = exports.createOpenAIAgentsExecutionObserver = exports.promoteToolExecution = exports.executionToolFingerprint = exports.aggregateToolExecutions = exports.observeToolExecution = exports.discoverLangChainModelVisibleTools = exports.discoverLangChainRegisteredTools = exports.mergeRuntimeToolEvidence = exports.discoverVercelAiSdkModelVisibleTools = exports.discoverVercelAiSdkRegisteredTools = exports.discoverOpenAIResponsesModelVisibleTools = exports.discoverOpenAIAgentRuntime = void 0;
4
+ var runtime_tool_discovery_js_1 = require("../runtime-tool-discovery.js");
5
+ Object.defineProperty(exports, "discoverOpenAIAgentRuntime", { enumerable: true, get: function () { return runtime_tool_discovery_js_1.discoverOpenAIAgentRuntime; } });
6
+ Object.defineProperty(exports, "discoverOpenAIResponsesModelVisibleTools", { enumerable: true, get: function () { return runtime_tool_discovery_js_1.discoverOpenAIResponsesModelVisibleTools; } });
7
+ Object.defineProperty(exports, "discoverVercelAiSdkRegisteredTools", { enumerable: true, get: function () { return runtime_tool_discovery_js_1.discoverVercelAiSdkRegisteredTools; } });
8
+ Object.defineProperty(exports, "discoverVercelAiSdkModelVisibleTools", { enumerable: true, get: function () { return runtime_tool_discovery_js_1.discoverVercelAiSdkModelVisibleTools; } });
9
+ Object.defineProperty(exports, "mergeRuntimeToolEvidence", { enumerable: true, get: function () { return runtime_tool_discovery_js_1.mergeRuntimeToolEvidence; } });
10
+ var langchain_runtime_discovery_js_1 = require("../langchain-runtime-discovery.js");
11
+ Object.defineProperty(exports, "discoverLangChainRegisteredTools", { enumerable: true, get: function () { return langchain_runtime_discovery_js_1.discoverLangChainRegisteredTools; } });
12
+ Object.defineProperty(exports, "discoverLangChainModelVisibleTools", { enumerable: true, get: function () { return langchain_runtime_discovery_js_1.discoverLangChainModelVisibleTools; } });
13
+ var execution_observation_js_1 = require("../execution-observation.js");
14
+ Object.defineProperty(exports, "observeToolExecution", { enumerable: true, get: function () { return execution_observation_js_1.observeToolExecution; } });
15
+ Object.defineProperty(exports, "aggregateToolExecutions", { enumerable: true, get: function () { return execution_observation_js_1.aggregateToolExecutions; } });
16
+ Object.defineProperty(exports, "executionToolFingerprint", { enumerable: true, get: function () { return execution_observation_js_1.executionToolFingerprint; } });
17
+ Object.defineProperty(exports, "promoteToolExecution", { enumerable: true, get: function () { return execution_observation_js_1.promoteToolExecution; } });
18
+ var openai_agents_execution_observer_js_1 = require("../openai-agents-execution-observer.js");
19
+ Object.defineProperty(exports, "createOpenAIAgentsExecutionObserver", { enumerable: true, get: function () { return openai_agents_execution_observer_js_1.createOpenAIAgentsExecutionObserver; } });
20
+ var vercel_execution_observer_js_1 = require("../vercel-execution-observer.js");
21
+ Object.defineProperty(exports, "observeVercelAiSdkStepExecutions", { enumerable: true, get: function () { return vercel_execution_observer_js_1.observeVercelAiSdkStepExecutions; } });
22
+ var langchain_execution_observer_js_1 = require("../langchain-execution-observer.js");
23
+ Object.defineProperty(exports, "createLangChainExecutionObserver", { enumerable: true, get: function () { return langchain_execution_observer_js_1.createLangChainExecutionObserver; } });
24
+ var otel_execution_observer_js_1 = require("../otel-execution-observer.js");
25
+ Object.defineProperty(exports, "observeOtelGenAiToolExecutions", { enumerable: true, get: function () { return otel_execution_observer_js_1.observeOtelGenAiToolExecutions; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":";;;AAAA,0EAMsC;AALpC,uIAAA,0BAA0B,OAAA;AAC1B,qJAAA,wCAAwC,OAAA;AACxC,+IAAA,kCAAkC,OAAA;AAClC,iJAAA,oCAAoC,OAAA;AACpC,qIAAA,wBAAwB,OAAA;AAG1B,oFAG2C;AAFzC,kJAAA,gCAAgC,OAAA;AAChC,oJAAA,kCAAkC,OAAA;AAGpC,wEAKqC;AAJnC,gIAAA,oBAAoB,OAAA;AACpB,mIAAA,uBAAuB,OAAA;AACvB,oIAAA,wBAAwB,OAAA;AACxB,gIAAA,oBAAoB,OAAA;AAGtB,8FAEgD;AAD9C,0JAAA,mCAAmC,OAAA;AAGrC,gFAEyC;AADvC,gJAAA,gCAAgC,OAAA;AAGlC,sFAE4C;AAD1C,mJAAA,gCAAgC,OAAA;AAGlC,4EAEuC;AADrC,4IAAA,8BAA8B,OAAA"}