@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.
- package/README.md +76 -1
- package/dist/cli.js +50 -1
- package/dist/cli.js.map +1 -1
- package/dist/connect/identity.d.ts +22 -0
- package/dist/connect/identity.d.ts.map +1 -0
- package/dist/connect/identity.js +159 -0
- package/dist/connect/identity.js.map +1 -0
- package/dist/connect/index.d.ts +17 -0
- package/dist/connect/index.d.ts.map +1 -0
- package/dist/connect/index.js +9 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connect/local-agent-tool.d.ts +30 -7
- package/dist/connect/local-agent-tool.d.ts.map +1 -1
- package/dist/connect/local-agent-tool.js +81 -9
- package/dist/connect/local-agent-tool.js.map +1 -1
- package/dist/connect/manifest.d.ts +55 -0
- package/dist/connect/manifest.d.ts.map +1 -0
- package/dist/connect/manifest.js +166 -0
- package/dist/connect/manifest.js.map +1 -0
- package/dist/connect/openai-function-tools.d.ts +66 -0
- package/dist/connect/openai-function-tools.d.ts.map +1 -0
- package/dist/connect/openai-function-tools.js +182 -0
- package/dist/connect/openai-function-tools.js.map +1 -0
- package/dist/connect/payload.d.ts +30 -0
- package/dist/connect/payload.d.ts.map +1 -0
- package/dist/connect/payload.js +122 -0
- package/dist/connect/payload.js.map +1 -0
- package/dist/connect/tool-classifier.d.ts +40 -0
- package/dist/connect/tool-classifier.d.ts.map +1 -0
- package/dist/connect/tool-classifier.js +271 -0
- package/dist/connect/tool-classifier.js.map +1 -0
- package/dist/connect/toolset.d.ts +42 -0
- package/dist/connect/toolset.d.ts.map +1 -0
- package/dist/connect/toolset.js +123 -0
- package/dist/connect/toolset.js.map +1 -0
- package/dist/discovery/index.d.ts +13 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/execution-observation.d.ts +122 -0
- package/dist/execution-observation.d.ts.map +1 -0
- package/dist/execution-observation.js +324 -0
- package/dist/execution-observation.js.map +1 -0
- package/dist/gateway/index.d.ts +9 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/local-toolset.d.ts +32 -0
- package/dist/gateway/local-toolset.d.ts.map +1 -0
- package/dist/gateway/local-toolset.js +79 -0
- package/dist/gateway/local-toolset.js.map +1 -0
- package/dist/gateway/openai-function-tools.d.ts +28 -0
- package/dist/gateway/openai-function-tools.d.ts.map +1 -0
- package/dist/gateway/openai-function-tools.js +117 -0
- package/dist/gateway/openai-function-tools.js.map +1 -0
- package/dist/gateway/planner.d.ts +53 -0
- package/dist/gateway/planner.d.ts.map +1 -0
- package/dist/gateway/planner.js +155 -0
- package/dist/gateway/planner.js.map +1 -0
- package/dist/gateway/tool-graph-binding.d.ts +51 -0
- package/dist/gateway/tool-graph-binding.d.ts.map +1 -0
- package/dist/gateway/tool-graph-binding.js +123 -0
- package/dist/gateway/tool-graph-binding.js.map +1 -0
- package/dist/langchain-execution-observer.d.ts +22 -0
- package/dist/langchain-execution-observer.d.ts.map +1 -0
- package/dist/langchain-execution-observer.js +128 -0
- package/dist/langchain-execution-observer.js.map +1 -0
- package/dist/langchain-runtime-discovery.d.ts +33 -0
- package/dist/langchain-runtime-discovery.d.ts.map +1 -0
- package/dist/langchain-runtime-discovery.js +214 -0
- package/dist/langchain-runtime-discovery.js.map +1 -0
- package/dist/mcp-live-discovery.d.ts +71 -0
- package/dist/mcp-live-discovery.d.ts.map +1 -0
- package/dist/mcp-live-discovery.js +710 -0
- package/dist/mcp-live-discovery.js.map +1 -0
- package/dist/mcp-live-report.d.ts +3 -0
- package/dist/mcp-live-report.d.ts.map +1 -0
- package/dist/mcp-live-report.js +50 -0
- package/dist/mcp-live-report.js.map +1 -0
- package/dist/mcp-tool-refresh-report.d.ts +3 -0
- package/dist/mcp-tool-refresh-report.d.ts.map +1 -0
- package/dist/mcp-tool-refresh-report.js +44 -0
- package/dist/mcp-tool-refresh-report.js.map +1 -0
- package/dist/mcp-tool-refresh.d.ts +33 -0
- package/dist/mcp-tool-refresh.d.ts.map +1 -0
- package/dist/mcp-tool-refresh.js +489 -0
- package/dist/mcp-tool-refresh.js.map +1 -0
- package/dist/openai-agents-execution-observer.d.ts +24 -0
- package/dist/openai-agents-execution-observer.d.ts.map +1 -0
- package/dist/openai-agents-execution-observer.js +163 -0
- package/dist/openai-agents-execution-observer.js.map +1 -0
- package/dist/otel-execution-observer.d.ts +16 -0
- package/dist/otel-execution-observer.d.ts.map +1 -0
- package/dist/otel-execution-observer.js +129 -0
- package/dist/otel-execution-observer.js.map +1 -0
- package/dist/runtime-tool-discovery.d.ts +86 -0
- package/dist/runtime-tool-discovery.d.ts.map +1 -0
- package/dist/runtime-tool-discovery.js +429 -0
- package/dist/runtime-tool-discovery.js.map +1 -0
- package/dist/tool-discovery.d.ts +51 -0
- package/dist/tool-discovery.d.ts.map +1 -0
- package/dist/tool-discovery.js +487 -0
- package/dist/tool-discovery.js.map +1 -0
- package/dist/tool-importance.d.ts +34 -0
- package/dist/tool-importance.d.ts.map +1 -0
- package/dist/tool-importance.js +269 -0
- package/dist/tool-importance.js.map +1 -0
- package/dist/tool-report.d.ts +3 -0
- package/dist/tool-report.d.ts.map +1 -0
- package/dist/tool-report.js +75 -0
- package/dist/tool-report.js.map +1 -0
- package/dist/vercel-execution-observer.d.ts +12 -0
- package/dist/vercel-execution-observer.d.ts.map +1 -0
- package/dist/vercel-execution-observer.js +97 -0
- package/dist/vercel-execution-observer.js.map +1 -0
- package/dist-cjs/connect/identity.js +162 -0
- package/dist-cjs/connect/identity.js.map +1 -0
- package/dist-cjs/connect/index.js +26 -0
- package/dist-cjs/connect/index.js.map +1 -0
- package/dist-cjs/connect/local-agent-tool.js +82 -9
- package/dist-cjs/connect/local-agent-tool.js.map +1 -1
- package/dist-cjs/connect/manifest.js +171 -0
- package/dist-cjs/connect/manifest.js.map +1 -0
- package/dist-cjs/connect/openai-function-tools.js +187 -0
- package/dist-cjs/connect/openai-function-tools.js.map +1 -0
- package/dist-cjs/connect/payload.js +125 -0
- package/dist-cjs/connect/payload.js.map +1 -0
- package/dist-cjs/connect/tool-classifier.js +276 -0
- package/dist-cjs/connect/tool-classifier.js.map +1 -0
- package/dist-cjs/connect/toolset.js +126 -0
- package/dist-cjs/connect/toolset.js.map +1 -0
- package/dist-cjs/discovery/index.js +26 -0
- package/dist-cjs/discovery/index.js.map +1 -0
- package/dist-cjs/execution-observation.js +330 -0
- package/dist-cjs/execution-observation.js.map +1 -0
- package/dist-cjs/gateway/index.js +16 -0
- package/dist-cjs/gateway/index.js.map +1 -0
- package/dist-cjs/gateway/local-toolset.js +84 -0
- package/dist-cjs/gateway/local-toolset.js.map +1 -0
- package/dist-cjs/gateway/openai-function-tools.js +120 -0
- package/dist-cjs/gateway/openai-function-tools.js.map +1 -0
- package/dist-cjs/gateway/planner.js +160 -0
- package/dist-cjs/gateway/planner.js.map +1 -0
- package/dist-cjs/gateway/tool-graph-binding.js +126 -0
- package/dist-cjs/gateway/tool-graph-binding.js.map +1 -0
- package/dist-cjs/langchain-execution-observer.js +131 -0
- package/dist-cjs/langchain-execution-observer.js.map +1 -0
- package/dist-cjs/langchain-runtime-discovery.js +218 -0
- package/dist-cjs/langchain-runtime-discovery.js.map +1 -0
- package/dist-cjs/openai-agents-execution-observer.js +166 -0
- package/dist-cjs/openai-agents-execution-observer.js.map +1 -0
- package/dist-cjs/otel-execution-observer.js +132 -0
- package/dist-cjs/otel-execution-observer.js.map +1 -0
- package/dist-cjs/runtime-tool-discovery.js +436 -0
- package/dist-cjs/runtime-tool-discovery.js.map +1 -0
- package/dist-cjs/tool-importance.js +272 -0
- package/dist-cjs/tool-importance.js.map +1 -0
- package/dist-cjs/vercel-execution-observer.js +100 -0
- package/dist-cjs/vercel-execution-observer.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GATEWAY_PLAN_VERSION = exports.GATEWAY_ROUTE = void 0;
|
|
4
|
+
exports.gatewayDescriptorFingerprint = gatewayDescriptorFingerprint;
|
|
5
|
+
exports.planGatewayToolset = planGatewayToolset;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const manifest_js_1 = require("../connect/manifest.js");
|
|
8
|
+
const tool_classifier_js_1 = require("../connect/tool-classifier.js");
|
|
9
|
+
exports.GATEWAY_ROUTE = Object.freeze({
|
|
10
|
+
DIRECT: "DIRECT",
|
|
11
|
+
PROTECT: "PROTECT",
|
|
12
|
+
BLOCK: "BLOCK",
|
|
13
|
+
});
|
|
14
|
+
exports.GATEWAY_PLAN_VERSION = "once-gateway-plan-v1";
|
|
15
|
+
const secretNamePattern = /(?:^|[_-])(authorization|api[_-]?key|token|password|passwd|secret|credential|cookie)(?:$|[_-])/i;
|
|
16
|
+
function canonicalGatewayValue(value, depth = 0, seen = new Set(), secretContext = false) {
|
|
17
|
+
if (secretContext)
|
|
18
|
+
return "<redacted>";
|
|
19
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
if (typeof value === "number") {
|
|
23
|
+
return Number.isFinite(value) ? value : null;
|
|
24
|
+
}
|
|
25
|
+
if (typeof value !== "object" || depth > 12) {
|
|
26
|
+
return "<opaque>";
|
|
27
|
+
}
|
|
28
|
+
const objectValue = value;
|
|
29
|
+
if (seen.has(objectValue))
|
|
30
|
+
return "<cycle>";
|
|
31
|
+
seen.add(objectValue);
|
|
32
|
+
try {
|
|
33
|
+
if (Array.isArray(value)) {
|
|
34
|
+
const output = [];
|
|
35
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
36
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
37
|
+
output.push(descriptor && "value" in descriptor
|
|
38
|
+
? canonicalGatewayValue(descriptor.value, depth + 1, seen)
|
|
39
|
+
: "<opaque>");
|
|
40
|
+
}
|
|
41
|
+
return output;
|
|
42
|
+
}
|
|
43
|
+
const prototype = Object.getPrototypeOf(value);
|
|
44
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
45
|
+
return "<opaque>";
|
|
46
|
+
}
|
|
47
|
+
const output = {};
|
|
48
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
49
|
+
for (const key of Object.keys(descriptors).sort()) {
|
|
50
|
+
const descriptor = descriptors[key];
|
|
51
|
+
if (!("value" in descriptor)) {
|
|
52
|
+
output[key] = "<opaque>";
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
output[key] = canonicalGatewayValue(descriptor.value, depth + 1, seen, secretNamePattern.test(key));
|
|
56
|
+
}
|
|
57
|
+
return output;
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
seen.delete(objectValue);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Stable, secret-safe fingerprint of the exact descriptor shape used for
|
|
65
|
+
* gateway routing. Getter-backed/non-plain runtime state is never evaluated.
|
|
66
|
+
*/
|
|
67
|
+
function gatewayDescriptorFingerprint(descriptor) {
|
|
68
|
+
const canonical = canonicalGatewayValue(descriptor);
|
|
69
|
+
return (0, node_crypto_1.createHash)("sha256")
|
|
70
|
+
.update(JSON.stringify(canonical))
|
|
71
|
+
.digest("hex");
|
|
72
|
+
}
|
|
73
|
+
function mapRoute(decision) {
|
|
74
|
+
if (decision === tool_classifier_js_1.CONNECT_TOOL_DECISION.BYPASS) {
|
|
75
|
+
return exports.GATEWAY_ROUTE.DIRECT;
|
|
76
|
+
}
|
|
77
|
+
if (decision === tool_classifier_js_1.CONNECT_TOOL_DECISION.PROTECT) {
|
|
78
|
+
return exports.GATEWAY_ROUTE.PROTECT;
|
|
79
|
+
}
|
|
80
|
+
return exports.GATEWAY_ROUTE.BLOCK;
|
|
81
|
+
}
|
|
82
|
+
function freezeEntry(entry) {
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
...entry,
|
|
85
|
+
signals: Object.freeze([...entry.signals]),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function invalidPlan() {
|
|
89
|
+
const entries = Object.freeze([]);
|
|
90
|
+
const summary = Object.freeze({
|
|
91
|
+
total: 0,
|
|
92
|
+
direct: 0,
|
|
93
|
+
protect: 0,
|
|
94
|
+
blocked: 0,
|
|
95
|
+
});
|
|
96
|
+
return Object.freeze({
|
|
97
|
+
version: exports.GATEWAY_PLAN_VERSION,
|
|
98
|
+
valid: false,
|
|
99
|
+
ready: false,
|
|
100
|
+
reason: "INVALID_MANIFEST",
|
|
101
|
+
entries,
|
|
102
|
+
direct: entries,
|
|
103
|
+
protect: entries,
|
|
104
|
+
blocked: entries,
|
|
105
|
+
summary,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Plan how a runtime-selected tool subset should cross the Once Gateway.
|
|
110
|
+
*
|
|
111
|
+
* This is a pure control-plane operation. It does not execute tools, resolve
|
|
112
|
+
* per-invocation operation identity/effect payload, open local protection
|
|
113
|
+
* state, contact MCP/providers, or retain executable implementations.
|
|
114
|
+
*
|
|
115
|
+
* Existing Connect classification remains authoritative:
|
|
116
|
+
* BYPASS -> DIRECT, PROTECT -> PROTECT, UNKNOWN -> BLOCK.
|
|
117
|
+
*/
|
|
118
|
+
function planGatewayToolset(manifest) {
|
|
119
|
+
const normalized = (0, manifest_js_1.normalizeConnectToolManifest)(manifest);
|
|
120
|
+
const connectPlan = (0, manifest_js_1.planConnectToolManifest)(manifest);
|
|
121
|
+
if (!normalized ||
|
|
122
|
+
!connectPlan.valid ||
|
|
123
|
+
normalized.length !== connectPlan.entries.length) {
|
|
124
|
+
return invalidPlan();
|
|
125
|
+
}
|
|
126
|
+
const entries = connectPlan.entries.map((connectEntry, index) => {
|
|
127
|
+
const normalizedEntry = normalized[index];
|
|
128
|
+
return freezeEntry({
|
|
129
|
+
index,
|
|
130
|
+
name: connectEntry.name,
|
|
131
|
+
source: connectEntry.source,
|
|
132
|
+
route: mapRoute(connectEntry.decision),
|
|
133
|
+
descriptorFingerprint: gatewayDescriptorFingerprint(normalizedEntry.descriptor),
|
|
134
|
+
connectDecision: connectEntry.decision,
|
|
135
|
+
connectReason: connectEntry.reason,
|
|
136
|
+
signals: connectEntry.signals,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
const direct = entries.filter(entry => entry.route === exports.GATEWAY_ROUTE.DIRECT);
|
|
140
|
+
const protect = entries.filter(entry => entry.route === exports.GATEWAY_ROUTE.PROTECT);
|
|
141
|
+
const blocked = entries.filter(entry => entry.route === exports.GATEWAY_ROUTE.BLOCK);
|
|
142
|
+
const summary = Object.freeze({
|
|
143
|
+
total: entries.length,
|
|
144
|
+
direct: direct.length,
|
|
145
|
+
protect: protect.length,
|
|
146
|
+
blocked: blocked.length,
|
|
147
|
+
});
|
|
148
|
+
return Object.freeze({
|
|
149
|
+
version: exports.GATEWAY_PLAN_VERSION,
|
|
150
|
+
valid: true,
|
|
151
|
+
ready: blocked.length === 0,
|
|
152
|
+
reason: "PLANNED",
|
|
153
|
+
entries: Object.freeze(entries),
|
|
154
|
+
direct: Object.freeze(direct),
|
|
155
|
+
protect: Object.freeze(protect),
|
|
156
|
+
blocked: Object.freeze(blocked),
|
|
157
|
+
summary,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/gateway/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bindGatewayPlanToToolGraph = bindGatewayPlanToToolGraph;
|
|
4
|
+
const planner_js_1 = require("./planner.js");
|
|
5
|
+
function nonEmptyString(value) {
|
|
6
|
+
return typeof value === "string" && value.trim() !== "";
|
|
7
|
+
}
|
|
8
|
+
function validScore(value) {
|
|
9
|
+
return value === undefined ||
|
|
10
|
+
(typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 100);
|
|
11
|
+
}
|
|
12
|
+
const evidenceLevels = new Set([
|
|
13
|
+
"EXECUTED",
|
|
14
|
+
"MODEL_VISIBLE",
|
|
15
|
+
"RUNTIME_REGISTERED",
|
|
16
|
+
"SERVER_AUTHORITATIVE",
|
|
17
|
+
"HOST_CONFIGURED",
|
|
18
|
+
"SOURCE_DISCOVERED",
|
|
19
|
+
"REGISTRY_CANDIDATE",
|
|
20
|
+
]);
|
|
21
|
+
const protectionStates = new Set([
|
|
22
|
+
"NONE",
|
|
23
|
+
"NATIVE_IDEMPOTENCY",
|
|
24
|
+
"AUTHORITATIVE_RECONCILIATION",
|
|
25
|
+
"ONCE_HEALTHY",
|
|
26
|
+
"ONCE_UNVERIFIED",
|
|
27
|
+
]);
|
|
28
|
+
function normalizeBinding(value) {
|
|
29
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const record = value;
|
|
33
|
+
if (!nonEmptyString(record.toolId) ||
|
|
34
|
+
!nonEmptyString(record.namespacedName) ||
|
|
35
|
+
!nonEmptyString(record.canonicalName) ||
|
|
36
|
+
!nonEmptyString(record.descriptorFingerprint) ||
|
|
37
|
+
!evidenceLevels.has(record.evidenceLevel) ||
|
|
38
|
+
!validScore(record.actionPriorityScore) ||
|
|
39
|
+
(record.protection !== undefined &&
|
|
40
|
+
!protectionStates.has(record.protection))) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
toolId: record.toolId,
|
|
45
|
+
namespacedName: record.namespacedName,
|
|
46
|
+
canonicalName: record.canonicalName,
|
|
47
|
+
descriptorFingerprint: record.descriptorFingerprint,
|
|
48
|
+
evidenceLevel: record.evidenceLevel,
|
|
49
|
+
...(record.actionPriorityScore !== undefined
|
|
50
|
+
? { actionPriorityScore: record.actionPriorityScore }
|
|
51
|
+
: {}),
|
|
52
|
+
...(record.protection !== undefined
|
|
53
|
+
? { protection: record.protection }
|
|
54
|
+
: {}),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function blockedEntry(entry, bindingStatus) {
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
index: entry.index,
|
|
60
|
+
name: entry.name,
|
|
61
|
+
plannedRoute: entry.route,
|
|
62
|
+
route: planner_js_1.GATEWAY_ROUTE.BLOCK,
|
|
63
|
+
descriptorFingerprint: entry.descriptorFingerprint,
|
|
64
|
+
bindingStatus,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Bind a gateway route plan to safe Tool Graph identity records.
|
|
69
|
+
*
|
|
70
|
+
* Binding is intentionally stricter than name matching: one and only one
|
|
71
|
+
* Tool Graph record must match both canonical name and the exact gateway
|
|
72
|
+
* descriptor fingerprint. Evidence/protection state is retained only for
|
|
73
|
+
* reporting; it never downgrades a PROTECT route to DIRECT.
|
|
74
|
+
*
|
|
75
|
+
* The caller may pass a larger/global Tool Graph binding set. Unrelated
|
|
76
|
+
* entries are ignored, so binding the selected runtime subset does not force
|
|
77
|
+
* the global catalog into model context or into the returned plan.
|
|
78
|
+
*/
|
|
79
|
+
function bindGatewayPlanToToolGraph(plan, bindings) {
|
|
80
|
+
const normalized = Array.isArray(bindings)
|
|
81
|
+
? bindings
|
|
82
|
+
.map(normalizeBinding)
|
|
83
|
+
.filter((binding) => Boolean(binding))
|
|
84
|
+
: [];
|
|
85
|
+
const entries = plan.entries.map(entry => {
|
|
86
|
+
if (entry.route === planner_js_1.GATEWAY_ROUTE.BLOCK || !entry.name) {
|
|
87
|
+
return blockedEntry(entry, "NOT_ROUTABLE");
|
|
88
|
+
}
|
|
89
|
+
const sameName = normalized.filter(binding => binding.canonicalName === entry.name);
|
|
90
|
+
const exact = sameName.filter(binding => binding.descriptorFingerprint === entry.descriptorFingerprint);
|
|
91
|
+
if (exact.length > 1) {
|
|
92
|
+
return blockedEntry(entry, "AMBIGUOUS");
|
|
93
|
+
}
|
|
94
|
+
if (exact.length === 0) {
|
|
95
|
+
return blockedEntry(entry, sameName.length > 0 ? "FINGERPRINT_MISMATCH" : "MISSING");
|
|
96
|
+
}
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
index: entry.index,
|
|
99
|
+
name: entry.name,
|
|
100
|
+
plannedRoute: entry.route,
|
|
101
|
+
route: entry.route,
|
|
102
|
+
descriptorFingerprint: entry.descriptorFingerprint,
|
|
103
|
+
bindingStatus: "MATCHED",
|
|
104
|
+
toolGraph: exact[0],
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
const matched = entries.filter(entry => entry.bindingStatus === "MATCHED");
|
|
108
|
+
const blocked = entries.filter(entry => entry.route === planner_js_1.GATEWAY_ROUTE.BLOCK);
|
|
109
|
+
const summary = Object.freeze({
|
|
110
|
+
total: entries.length,
|
|
111
|
+
matched: matched.length,
|
|
112
|
+
missing: entries.filter(entry => entry.bindingStatus === "MISSING").length,
|
|
113
|
+
fingerprintMismatch: entries.filter(entry => entry.bindingStatus === "FINGERPRINT_MISMATCH").length,
|
|
114
|
+
ambiguous: entries.filter(entry => entry.bindingStatus === "AMBIGUOUS").length,
|
|
115
|
+
blocked: blocked.length,
|
|
116
|
+
});
|
|
117
|
+
return Object.freeze({
|
|
118
|
+
valid: plan.valid,
|
|
119
|
+
ready: plan.valid && plan.ready && blocked.length === 0,
|
|
120
|
+
entries: Object.freeze(entries),
|
|
121
|
+
matched: Object.freeze(matched),
|
|
122
|
+
blocked: Object.freeze(blocked),
|
|
123
|
+
summary,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=tool-graph-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-graph-binding.js","sourceRoot":"","sources":["../../src/gateway/tool-graph-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLangChainExecutionObserver = createLangChainExecutionObserver;
|
|
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 optionalArgString(args, index) {
|
|
26
|
+
const value = args[index];
|
|
27
|
+
return typeof value === "string" && value.trim() !== ""
|
|
28
|
+
? value
|
|
29
|
+
: undefined;
|
|
30
|
+
}
|
|
31
|
+
function toolByName(snapshot) {
|
|
32
|
+
const map = new Map();
|
|
33
|
+
for (const tool of snapshot.tools) {
|
|
34
|
+
if (!map.has(tool.canonicalName)) {
|
|
35
|
+
map.set(tool.canonicalName, tool);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
map.set(tool.canonicalName, null);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return map;
|
|
42
|
+
}
|
|
43
|
+
function serializedToolName(serialized) {
|
|
44
|
+
const direct = ownString(serialized, "name");
|
|
45
|
+
if (direct)
|
|
46
|
+
return direct;
|
|
47
|
+
const id = ownDataValue(serialized, "id");
|
|
48
|
+
if (!Array.isArray(id) || id.length === 0)
|
|
49
|
+
return undefined;
|
|
50
|
+
const last = id[id.length - 1];
|
|
51
|
+
return typeof last === "string" && last.trim() !== ""
|
|
52
|
+
? last
|
|
53
|
+
: undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a dependency-free object compatible with LangChain callback handler
|
|
57
|
+
* methods for tool execution observation.
|
|
58
|
+
*
|
|
59
|
+
* The observer never invokes a tool and never retains input, output, errors,
|
|
60
|
+
* tags, metadata or parent run state. A matching handleToolStart establishes
|
|
61
|
+
* exact tool identity; handleToolEnd/handleToolError close that run as
|
|
62
|
+
* SUCCEEDED/FAILED respectively.
|
|
63
|
+
*/
|
|
64
|
+
function createLangChainExecutionObserver(visibleSnapshot) {
|
|
65
|
+
const byName = toolByName(visibleSnapshot);
|
|
66
|
+
const pending = new Map();
|
|
67
|
+
const collected = [];
|
|
68
|
+
const handleToolStart = (...args) => {
|
|
69
|
+
// Current CallbackHandlerMethods shape:
|
|
70
|
+
// (serializedTool, input, runId, parentRunId?, tags?, metadata?, runName?, toolCallId?)
|
|
71
|
+
const runId = optionalArgString(args, 2);
|
|
72
|
+
if (!runId)
|
|
73
|
+
return;
|
|
74
|
+
const serialized = args[0];
|
|
75
|
+
const runName = optionalArgString(args, 6);
|
|
76
|
+
const name = runName ?? serializedToolName(serialized);
|
|
77
|
+
if (!name)
|
|
78
|
+
return;
|
|
79
|
+
const tool = byName.get(name);
|
|
80
|
+
if (!tool)
|
|
81
|
+
return;
|
|
82
|
+
const toolCallId = optionalArgString(args, 7);
|
|
83
|
+
pending.set(runId, {
|
|
84
|
+
tool,
|
|
85
|
+
startedAtMs: Date.now(),
|
|
86
|
+
...(toolCallId ? { toolCallId } : {}),
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const finish = (status, args) => {
|
|
90
|
+
// handleToolEnd(output, runId, ...)
|
|
91
|
+
// handleToolError(error, runId, ...)
|
|
92
|
+
const runId = optionalArgString(args, 1);
|
|
93
|
+
if (!runId)
|
|
94
|
+
return;
|
|
95
|
+
const started = pending.get(runId);
|
|
96
|
+
if (!started)
|
|
97
|
+
return;
|
|
98
|
+
pending.delete(runId);
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
const observed = (0, execution_observation_js_1.observeToolExecution)({
|
|
101
|
+
eventId: `langchain-tool-run:${runId}`,
|
|
102
|
+
toolId: started.tool.toolId,
|
|
103
|
+
namespacedName: started.tool.namespacedName,
|
|
104
|
+
descriptorFingerprint: (0, execution_observation_js_1.executionToolFingerprint)(started.tool),
|
|
105
|
+
canonicalName: started.tool.canonicalName,
|
|
106
|
+
framework: "langchain",
|
|
107
|
+
runtimeName: visibleSnapshot.runtimeName,
|
|
108
|
+
source: "framework_callback",
|
|
109
|
+
status,
|
|
110
|
+
observedAt: new Date(now).toISOString(),
|
|
111
|
+
durationMs: Math.max(0, now - started.startedAtMs),
|
|
112
|
+
});
|
|
113
|
+
if (observed.accepted) {
|
|
114
|
+
collected.push(observed.event);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
return Object.freeze({
|
|
118
|
+
name: "once-execution-observer",
|
|
119
|
+
handleToolStart,
|
|
120
|
+
handleToolEnd: (...args) => finish("SUCCEEDED", args),
|
|
121
|
+
handleToolError: (...args) => finish("FAILED", args),
|
|
122
|
+
events: () => Object.freeze([...collected]),
|
|
123
|
+
drain: () => {
|
|
124
|
+
const drained = Object.freeze([...collected]);
|
|
125
|
+
collected.length = 0;
|
|
126
|
+
return drained;
|
|
127
|
+
},
|
|
128
|
+
pendingCount: () => pending.size,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=langchain-execution-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain-execution-observer.js","sourceRoot":"","sources":["../src/langchain-execution-observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|