@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
package/README.md
CHANGED
|
@@ -1,10 +1,86 @@
|
|
|
1
1
|
# @once-agent/sdk
|
|
2
2
|
|
|
3
|
+
> **Automatic Connect in 0.1.12:** this SDK version includes the
|
|
4
|
+
> `@once-agent/sdk/connect` public surface for automatic tool classification,
|
|
5
|
+
> whole-toolset wiring, trusted intent identity, conservative effect binding,
|
|
6
|
+
> and OpenAI Agents FunctionTool wrapping. It has passed source, packed-package,
|
|
7
|
+
> ESM/CommonJS, and Node.js 24.15 protected-execution gates.
|
|
8
|
+
>
|
|
9
|
+
> Full guide: https://github.com/stringsofthemind-oss/once/blob/main/docs/CONNECT_AUTO.md
|
|
10
|
+
|
|
3
11
|
> **Local protection:** `protectLocal` wraps an existing async function using a
|
|
4
12
|
> durable same-machine SQLite file. This feature requires Node.js 24.15 or
|
|
5
13
|
> later. See the local function guide:
|
|
6
14
|
> https://github.com/stringsofthemind-oss/once/blob/main/examples/local-function/README.md
|
|
7
15
|
|
|
16
|
+
## Automatic Connect
|
|
17
|
+
|
|
18
|
+
Automatic Connect is designed for the integration path where an application
|
|
19
|
+
already has a registry or framework list of agent tools.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import {
|
|
23
|
+
connectLocalAgentToolsetAuto
|
|
24
|
+
} from "@once-agent/sdk/connect";
|
|
25
|
+
|
|
26
|
+
const connected = connectLocalAgentToolsetAuto(
|
|
27
|
+
{
|
|
28
|
+
search_web: {
|
|
29
|
+
async execute(input: { query: string }) {
|
|
30
|
+
return search(input.query);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
send_email: {
|
|
34
|
+
async execute(input: {
|
|
35
|
+
intentId: string;
|
|
36
|
+
destination: string;
|
|
37
|
+
body: string;
|
|
38
|
+
}) {
|
|
39
|
+
return mailer.send({
|
|
40
|
+
to: input.destination,
|
|
41
|
+
body: input.body
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
manifest: [
|
|
48
|
+
{
|
|
49
|
+
name: "search_web",
|
|
50
|
+
description: "Search the public web."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "send_email",
|
|
54
|
+
description: "Send an email to a recipient.",
|
|
55
|
+
_meta: {
|
|
56
|
+
once: {
|
|
57
|
+
identityFields: ["intentId"],
|
|
58
|
+
effectFields: ["destination", "body"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
statePath: ".once/agent-tools.sqlite"
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Give the agent only the connected tools.
|
|
68
|
+
const toolsForAgent = connected.tools;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Automatic Connect classifies tools as `BYPASS`, `PROTECT`, or `UNKNOWN`.
|
|
72
|
+
`UNKNOWN` fails closed. Whole-toolset connection is all-or-nothing: duplicate,
|
|
73
|
+
missing, undeclared, invalid, or unresolved tools block connection rather than
|
|
74
|
+
silently exposing a partially protected registry.
|
|
75
|
+
|
|
76
|
+
Protected automatic local execution still requires a trustworthy logical action
|
|
77
|
+
identity and a payload that represents the consequential effect. Explicit
|
|
78
|
+
`identityFields` and `effectFields` are preferred when available. Framework or
|
|
79
|
+
transport attempt IDs are not automatically treated as business intent.
|
|
80
|
+
|
|
81
|
+
The automatic local path requires Node.js 24.15+ and shared durable SQLite state
|
|
82
|
+
on one machine. It is not a universal exactly-once or multi-host guarantee.
|
|
83
|
+
|
|
8
84
|
|
|
9
85
|
<!-- ONCE_STRIPE_SANDBOX_NOTICE -->
|
|
10
86
|
|
|
@@ -533,4 +609,3 @@ That is the failure mode Once is built to address.
|
|
|
533
609
|
## License
|
|
534
610
|
|
|
535
611
|
MIT
|
|
536
|
-
|
package/dist/cli.js
CHANGED
|
@@ -6,16 +6,26 @@ import { runProtect } from "./protect.js";
|
|
|
6
6
|
import { applyProtectionPlan } from "./apply.js";
|
|
7
7
|
import { runBenchmark } from "./benchmark.js";
|
|
8
8
|
import { runTraceFetch } from "./trace.js";
|
|
9
|
+
import { discoverToolGraph } from "./tool-discovery.js";
|
|
10
|
+
import { printToolDiscoveryReport } from "./tool-report.js";
|
|
11
|
+
import { discoverLiveMcpTools } from "./mcp-live-discovery.js";
|
|
12
|
+
import { printMcpLiveDiscoveryReport } from "./mcp-live-report.js";
|
|
13
|
+
import { watchMcpToolListOnce } from "./mcp-tool-refresh.js";
|
|
14
|
+
import { printMcpToolRefreshReport } from "./mcp-tool-refresh-report.js";
|
|
9
15
|
function printHelp() {
|
|
10
16
|
console.log("");
|
|
11
17
|
console.log("Once");
|
|
12
18
|
console.log("----");
|
|
13
19
|
console.log("");
|
|
14
20
|
console.log("Commands:");
|
|
15
|
-
console.log(" once doctor [directory] [--protect] [--connection]");
|
|
21
|
+
console.log(" once doctor [directory] [--protect] [--connection] [--tools] [--tools-live=<host/name>] [--tools-watch-ms=<ms>]");
|
|
16
22
|
console.log(" Run the low-friction local safety check. No API key required.");
|
|
17
23
|
console.log(" Use --protect to generate a review plan and snippets without changing source.");
|
|
18
24
|
console.log(" Use --connection to also verify the hosted Once API connection.");
|
|
25
|
+
console.log(" Use --tools to inventory local/configured tool surfaces and rank source-discovered capabilities.");
|
|
26
|
+
console.log(" Use --tools-live=<host/name> with --tools to explicitly enumerate one configured remote HTTP MCP server. Repeat to select more than one.");
|
|
27
|
+
console.log(" Use --tools-watch-ms=<50..60000> with exactly one --tools-live target to wait for one modern MCP tool-list change, refresh tools/list, report the diff, then exit.");
|
|
28
|
+
console.log(" Live tool enumeration/watch never launches configured stdio servers and does not follow redirects.");
|
|
19
29
|
console.log("");
|
|
20
30
|
console.log(" once protect [directory]");
|
|
21
31
|
console.log(" Review candidate operations for Once protection.");
|
|
@@ -40,6 +50,9 @@ function printHelp() {
|
|
|
40
50
|
console.log("");
|
|
41
51
|
console.log("Examples:");
|
|
42
52
|
console.log(" once doctor .");
|
|
53
|
+
console.log(" once doctor . --tools");
|
|
54
|
+
console.log(" once doctor . --tools --tools-live=cursor/docs");
|
|
55
|
+
console.log(" once doctor . --tools --tools-live=cursor/docs --tools-watch-ms=5000");
|
|
43
56
|
console.log(" once doctor . --protect");
|
|
44
57
|
console.log(" once doctor . --connection");
|
|
45
58
|
console.log(" once protect .");
|
|
@@ -58,10 +71,46 @@ async function main() {
|
|
|
58
71
|
switch (command) {
|
|
59
72
|
case "doctor": {
|
|
60
73
|
const requestedPath = args.find(value => !value.startsWith("--")) ?? ".";
|
|
74
|
+
const liveSelectors = args
|
|
75
|
+
.filter(value => value.startsWith("--tools-live="))
|
|
76
|
+
.map(value => value.substring("--tools-live=".length).trim())
|
|
77
|
+
.filter(Boolean);
|
|
78
|
+
const watchArgument = args.find(value => value.startsWith("--tools-watch-ms="));
|
|
79
|
+
const watchMs = watchArgument
|
|
80
|
+
? Number(watchArgument.substring("--tools-watch-ms=".length))
|
|
81
|
+
: undefined;
|
|
82
|
+
if (args.includes("--tools-live")) {
|
|
83
|
+
throw new Error("--tools-live requires an explicit configured server selector. Example: --tools-live=cursor/docs");
|
|
84
|
+
}
|
|
85
|
+
if (args.includes("--tools-watch-ms")) {
|
|
86
|
+
throw new Error("--tools-watch-ms requires a bounded millisecond value. Example: --tools-watch-ms=5000");
|
|
87
|
+
}
|
|
88
|
+
if (liveSelectors.length > 0 &&
|
|
89
|
+
!args.includes("--tools")) {
|
|
90
|
+
throw new Error("--tools-live must be used with --tools so the configured server inventory is reviewed before live enumeration.");
|
|
91
|
+
}
|
|
92
|
+
if (watchArgument && liveSelectors.length !== 1) {
|
|
93
|
+
throw new Error("--tools-watch-ms requires exactly one --tools-live=<host/name> target.");
|
|
94
|
+
}
|
|
95
|
+
if (watchArgument && !Number.isFinite(watchMs)) {
|
|
96
|
+
throw new Error("--tools-watch-ms must be a finite millisecond value.");
|
|
97
|
+
}
|
|
61
98
|
await runDoctor(requestedPath, {
|
|
62
99
|
protect: args.includes("--protect"),
|
|
63
100
|
connection: args.includes("--connection")
|
|
64
101
|
});
|
|
102
|
+
if (args.includes("--tools")) {
|
|
103
|
+
const discovery = await discoverToolGraph(requestedPath);
|
|
104
|
+
printToolDiscoveryReport(discovery);
|
|
105
|
+
if (liveSelectors.length > 0) {
|
|
106
|
+
const live = await discoverLiveMcpTools(requestedPath, discovery.configuredSources, liveSelectors);
|
|
107
|
+
printMcpLiveDiscoveryReport(live);
|
|
108
|
+
if (watchArgument && watchMs !== undefined) {
|
|
109
|
+
const refresh = await watchMcpToolListOnce(requestedPath, discovery.configuredSources, liveSelectors[0], live, { watchMs });
|
|
110
|
+
printMcpToolRefreshReport(refresh);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
65
114
|
return;
|
|
66
115
|
}
|
|
67
116
|
case "trace": {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,OAAO,EACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CACT,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ConnectToolDescriptor } from "./tool-classifier.js";
|
|
2
|
+
export type ConnectIdentitySource = "explicit" | "input:once_operation_id" | "input:onceOperationId" | "input:operation_id" | "input:operationId" | "input:idempotency_key" | "input:idempotencyKey" | "input:intent_id" | "input:intentId" | "input:intent_key" | "input:intentKey" | "meta:identity_fields";
|
|
3
|
+
export type ConnectIdentityResult = Readonly<{
|
|
4
|
+
status: "FOUND";
|
|
5
|
+
operationId: string;
|
|
6
|
+
source: ConnectIdentitySource;
|
|
7
|
+
reason: string;
|
|
8
|
+
}> | Readonly<{
|
|
9
|
+
status: "REQUIRED";
|
|
10
|
+
reason: string;
|
|
11
|
+
}> | Readonly<{
|
|
12
|
+
status: "CONFLICT";
|
|
13
|
+
sources: readonly ConnectIdentitySource[];
|
|
14
|
+
reason: string;
|
|
15
|
+
}>;
|
|
16
|
+
export interface ResolveConnectIdentityInput {
|
|
17
|
+
tool: Pick<ConnectToolDescriptor, "name" | "_meta">;
|
|
18
|
+
input: unknown;
|
|
19
|
+
explicitIdentity?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function resolveConnectToolOperationIdentity(request: ResolveConnectIdentityInput): ConnectIdentityResult;
|
|
22
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/connect/identity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,qBAAqB,GAC7B,UAAU,GACV,yBAAyB,GACzB,uBAAuB,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,uBAAuB,GACvB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,CAAC;IACP,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,GACF,QAAQ,CAAC;IACP,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,GACF,QAAQ,CAAC;IACP,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEP,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsID,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CA+EvB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { canonicalizeConnectPayload, } from "./binding.js";
|
|
3
|
+
const INPUT_FIELDS = [
|
|
4
|
+
{ key: "once_operation_id", source: "input:once_operation_id" },
|
|
5
|
+
{ key: "onceOperationId", source: "input:onceOperationId" },
|
|
6
|
+
{ key: "operation_id", source: "input:operation_id" },
|
|
7
|
+
{ key: "operationId", source: "input:operationId" },
|
|
8
|
+
{ key: "idempotency_key", source: "input:idempotency_key" },
|
|
9
|
+
{ key: "idempotencyKey", source: "input:idempotencyKey" },
|
|
10
|
+
{ key: "intent_id", source: "input:intent_id" },
|
|
11
|
+
{ key: "intentId", source: "input:intentId" },
|
|
12
|
+
{ key: "intent_key", source: "input:intent_key" },
|
|
13
|
+
{ key: "intentKey", source: "input:intentKey" },
|
|
14
|
+
];
|
|
15
|
+
function cleanString(value) {
|
|
16
|
+
if (typeof value !== "string") {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const cleaned = value.trim();
|
|
20
|
+
return cleaned.length > 0 ? cleaned : null;
|
|
21
|
+
}
|
|
22
|
+
function plainObject(value) {
|
|
23
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const objectValue = value;
|
|
27
|
+
const prototype = Object.getPrototypeOf(objectValue);
|
|
28
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return objectValue;
|
|
32
|
+
}
|
|
33
|
+
function metadataIdentityFields(tool) {
|
|
34
|
+
const meta = plainObject(tool._meta);
|
|
35
|
+
if (!meta) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const once = plainObject(meta.once);
|
|
39
|
+
if (!once || !Array.isArray(once.identityFields)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const fields = once.identityFields;
|
|
43
|
+
if (fields.length === 0 ||
|
|
44
|
+
fields.some(field => typeof field !== "string" ||
|
|
45
|
+
field.trim().length === 0 ||
|
|
46
|
+
field.includes("."))) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return Object.freeze(fields.map(field => field.trim()));
|
|
50
|
+
}
|
|
51
|
+
function metadataIdentityCandidate(tool, input) {
|
|
52
|
+
const fields = metadataIdentityFields(tool);
|
|
53
|
+
if (!fields) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const identity = {};
|
|
57
|
+
for (const field of fields) {
|
|
58
|
+
if (!(field in input)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const value = input[field];
|
|
62
|
+
if (value === undefined) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
identity[field] = value;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
return {
|
|
69
|
+
source: "meta:identity_fields",
|
|
70
|
+
value: canonicalizeConnectPayload(identity),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function buildOperationId(toolName, identity) {
|
|
78
|
+
const hash = createHash("sha256");
|
|
79
|
+
hash.update("once-connect-id-v1\u0000", "utf8");
|
|
80
|
+
for (const value of [toolName, identity]) {
|
|
81
|
+
const bytes = Buffer.from(value, "utf8");
|
|
82
|
+
const length = Buffer.allocUnsafe(4);
|
|
83
|
+
length.writeUInt32BE(bytes.length, 0);
|
|
84
|
+
hash.update(length);
|
|
85
|
+
hash.update(bytes);
|
|
86
|
+
}
|
|
87
|
+
const prefix = toolName
|
|
88
|
+
.toLowerCase()
|
|
89
|
+
.replace(/[^a-z0-9._:-]+/g, "-")
|
|
90
|
+
.replace(/^[^a-z0-9]+/, "")
|
|
91
|
+
.replace(/-+$/g, "")
|
|
92
|
+
.slice(0, 48) || "tool";
|
|
93
|
+
return `${prefix}:${hash.digest("hex").slice(0, 32)}`;
|
|
94
|
+
}
|
|
95
|
+
export function resolveConnectToolOperationIdentity(request) {
|
|
96
|
+
if (!request ||
|
|
97
|
+
!request.tool ||
|
|
98
|
+
typeof request.tool.name !== "string" ||
|
|
99
|
+
request.tool.name.trim().length === 0) {
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
status: "REQUIRED",
|
|
102
|
+
reason: "A stable tool name is required before operation identity can be resolved.",
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const input = plainObject(request.input);
|
|
106
|
+
if (!input) {
|
|
107
|
+
return Object.freeze({
|
|
108
|
+
status: "REQUIRED",
|
|
109
|
+
reason: "Parsed plain-object tool input is required before operation identity can be resolved.",
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
const candidates = [];
|
|
113
|
+
const explicit = cleanString(request.explicitIdentity);
|
|
114
|
+
if (explicit) {
|
|
115
|
+
candidates.push({
|
|
116
|
+
source: "explicit",
|
|
117
|
+
value: explicit,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
for (const field of INPUT_FIELDS) {
|
|
121
|
+
const value = cleanString(input[field.key]);
|
|
122
|
+
if (value) {
|
|
123
|
+
candidates.push({
|
|
124
|
+
source: field.source,
|
|
125
|
+
value,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (candidates.length > 0) {
|
|
130
|
+
const values = Array.from(new Set(candidates.map(candidate => candidate.value)));
|
|
131
|
+
if (values.length !== 1) {
|
|
132
|
+
return Object.freeze({
|
|
133
|
+
status: "CONFLICT",
|
|
134
|
+
sources: Object.freeze(candidates.map(candidate => candidate.source)),
|
|
135
|
+
reason: "Stable identity carriers disagree. Once Connect refuses ambiguous logical-operation identity.",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return Object.freeze({
|
|
139
|
+
status: "FOUND",
|
|
140
|
+
operationId: buildOperationId(request.tool.name.trim(), values[0]),
|
|
141
|
+
source: candidates[0].source,
|
|
142
|
+
reason: "Stable logical-operation identity found and deterministically scoped to this tool.",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const metadataCandidate = metadataIdentityCandidate(request.tool, input);
|
|
146
|
+
if (metadataCandidate) {
|
|
147
|
+
return Object.freeze({
|
|
148
|
+
status: "FOUND",
|
|
149
|
+
operationId: buildOperationId(request.tool.name.trim(), metadataCandidate.value),
|
|
150
|
+
source: metadataCandidate.source,
|
|
151
|
+
reason: "Tool metadata declared the input fields that define stable logical-operation identity.",
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return Object.freeze({
|
|
155
|
+
status: "REQUIRED",
|
|
156
|
+
reason: "No trustworthy stable identity carrier was found. Once Connect refuses to guess from the full payload.",
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/connect/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { CONNECT_DECISION, classifyConnectOperation, } from "./classifier.js";
|
|
2
|
+
export type { ConnectDecision, ConnectSafetyDeclaration, ConnectClassification, } from "./classifier.js";
|
|
3
|
+
export { CONNECT_TOOL_DECISION, classifyConnectTool, classifyConnectTools, } from "./tool-classifier.js";
|
|
4
|
+
export type { ConnectToolDecision, ConnectToolAnnotations, ConnectToolDescriptor, ConnectToolClassificationReason, ConnectToolClassification, } from "./tool-classifier.js";
|
|
5
|
+
export { CONNECT_MANIFEST_VERSION, planConnectToolManifest, } from "./manifest.js";
|
|
6
|
+
export type { ConnectManifestToolSource, ConnectManifestPlanEntry, ConnectManifestPlanSummary, ConnectManifestPlan, } from "./manifest.js";
|
|
7
|
+
export { resolveConnectToolOperationIdentity, } from "./identity.js";
|
|
8
|
+
export type { ConnectIdentitySource, ConnectIdentityResult, ResolveConnectIdentityInput, } from "./identity.js";
|
|
9
|
+
export { resolveConnectToolEffectPayload, } from "./payload.js";
|
|
10
|
+
export type { ConnectPayloadSource, ConnectEffectPayloadResult, ResolveConnectEffectPayloadInput, } from "./payload.js";
|
|
11
|
+
export { connectLocalAgentToolAuto, AgentToolConnectionError, } from "./local-agent-tool.js";
|
|
12
|
+
export type { AgentTool, AutoLocalAgentToolContract, } from "./local-agent-tool.js";
|
|
13
|
+
export { connectLocalAgentToolsetAuto, } from "./toolset.js";
|
|
14
|
+
export type { LocalAgentToolRegistry, ConnectedLocalAgentToolRegistry, AutoLocalAgentToolsetOverride, AutoLocalAgentToolsetOptions, ConnectedLocalAgentToolset, } from "./toolset.js";
|
|
15
|
+
export { connectOpenAIAgentsFunctionToolsAuto, OpenAIAgentsConnectError, } from "./openai-function-tools.js";
|
|
16
|
+
export type { OpenAIAgentsParsedToolInput, OpenAIAgentsFunctionToolLike, OpenAIAgentsFunctionToolOverride, ConnectOpenAIAgentsFunctionToolsOptions, ConnectedOpenAIAgentsFunctionTools, } from "./openai-function-tools.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connect/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,mCAAmC,GACpC,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,SAAS,EACT,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,sBAAsB,EACtB,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,gCAAgC,EAChC,uCAAuC,EACvC,kCAAkC,GACnC,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { CONNECT_DECISION, classifyConnectOperation, } from "./classifier.js";
|
|
2
|
+
export { CONNECT_TOOL_DECISION, classifyConnectTool, classifyConnectTools, } from "./tool-classifier.js";
|
|
3
|
+
export { CONNECT_MANIFEST_VERSION, planConnectToolManifest, } from "./manifest.js";
|
|
4
|
+
export { resolveConnectToolOperationIdentity, } from "./identity.js";
|
|
5
|
+
export { resolveConnectToolEffectPayload, } from "./payload.js";
|
|
6
|
+
export { connectLocalAgentToolAuto, AgentToolConnectionError, } from "./local-agent-tool.js";
|
|
7
|
+
export { connectLocalAgentToolsetAuto, } from "./toolset.js";
|
|
8
|
+
export { connectOpenAIAgentsFunctionToolsAuto, OpenAIAgentsConnectError, } from "./openai-function-tools.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connect/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AASvB,OAAO,EACL,mCAAmC,GACpC,MAAM,eAAe,CAAC;AAQvB,OAAO,EACL,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAQtB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ConnectSafetyDeclaration } from "./classifier.js";
|
|
2
|
+
import { type ConnectToolDescriptor } from "./tool-classifier.js";
|
|
2
3
|
import { type LocalObservation } from "../local.js";
|
|
3
4
|
type EffectPayload = Record<string, unknown>;
|
|
4
5
|
export interface AgentTool<Input, Result> {
|
|
@@ -21,19 +22,41 @@ export interface LocalAgentToolContract<Input, Result> {
|
|
|
21
22
|
payload: EffectPayload;
|
|
22
23
|
}) => Promise<LocalObservation<Result>> | LocalObservation<Result>;
|
|
23
24
|
}
|
|
25
|
+
export interface AutoLocalAgentToolContract<Input, Result> {
|
|
26
|
+
/** Tool metadata used by Once Connect to infer PROTECT/BYPASS/UNKNOWN. */
|
|
27
|
+
descriptor: ConnectToolDescriptor;
|
|
28
|
+
/** Optional explicit stable intent identity. When omitted, Once may resolve a trustworthy identity carrier from input. */
|
|
29
|
+
id?: (input: Input) => string;
|
|
30
|
+
/** Optional effect selector. When omitted, Once conservatively binds the full plain-object input or descriptor-declared effectFields. */
|
|
31
|
+
payload?: (input: Input) => EffectPayload;
|
|
32
|
+
/** Durable same-machine SQLite file, shared by all callers of this tool. */
|
|
33
|
+
statePath?: string;
|
|
34
|
+
/** Read-only, authoritative provider lookup for an uncertain outcome. */
|
|
35
|
+
reconcile?: (context: {
|
|
36
|
+
id: string;
|
|
37
|
+
payload: EffectPayload;
|
|
38
|
+
}) => Promise<LocalObservation<Result>> | LocalObservation<Result>;
|
|
39
|
+
}
|
|
24
40
|
export declare class AgentToolConnectionError extends Error {
|
|
25
41
|
readonly code: string;
|
|
26
42
|
constructor(code: string, message: string);
|
|
27
43
|
}
|
|
44
|
+
export declare function connectLocalAgentTool<Input, Result>(tool: AgentTool<Input, Result>, contract: LocalAgentToolContract<Input, Result>): AgentTool<Input, Result>;
|
|
28
45
|
/**
|
|
29
|
-
* Connect
|
|
30
|
-
*
|
|
46
|
+
* Connect a local agent tool using its descriptor instead of hand-authored
|
|
47
|
+
* routing declarations.
|
|
48
|
+
*
|
|
49
|
+
* Automatic routing is intentionally conservative:
|
|
50
|
+
* - PROTECT -> delegate to the existing protected local connector;
|
|
51
|
+
* - BYPASS -> delegate to the existing bypass path;
|
|
52
|
+
* - UNKNOWN -> refuse connection until the tool is clarified.
|
|
31
53
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
54
|
+
* For protected tools, stable identity may be supplied by `id()` or resolved
|
|
55
|
+
* from trustworthy operation/idempotency/intent carriers. Effect payload may
|
|
56
|
+
* be supplied by `payload()` or conservatively bound from the full plain-object
|
|
57
|
+
* input. `_meta.once.effectFields` can explicitly narrow that binding.
|
|
58
|
+
* Missing/invalid identity or payload fails before the side effect.
|
|
36
59
|
*/
|
|
37
|
-
export declare function
|
|
60
|
+
export declare function connectLocalAgentToolAuto<Input, Result>(tool: AgentTool<Input, Result>, contract: AutoLocalAgentToolContract<Input, Result>): AgentTool<Input, Result>;
|
|
38
61
|
export {};
|
|
39
62
|
//# sourceMappingURL=local-agent-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-agent-tool.d.ts","sourceRoot":"","sources":["../../src/connect/local-agent-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAErB,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,MAAM,WAAW,SAAS,CAAC,KAAK,EAAE,MAAM;IACtC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB,CAAC,KAAK,EAAE,MAAM;IACnD,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,MAAM,EAAE,wBAAwB,CAAC;IACjC,8EAA8E;IAC9E,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9B,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC;IAC1C,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,aAAa,CAAC;KACxB,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAInD;AAED
|
|
1
|
+
{"version":3,"file":"local-agent-tool.d.ts","sourceRoot":"","sources":["../../src/connect/local-agent-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAErB,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,MAAM,WAAW,SAAS,CAAC,KAAK,EAAE,MAAM;IACtC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB,CAAC,KAAK,EAAE,MAAM;IACnD,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,MAAM,EAAE,wBAAwB,CAAC;IACjC,8EAA8E;IAC9E,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9B,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC;IAC1C,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,aAAa,CAAC;KACxB,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,0BAA0B,CAAC,KAAK,EAAE,MAAM;IACvD,0EAA0E;IAC1E,UAAU,EAAE,qBAAqB,CAAC;IAClC,0HAA0H;IAC1H,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9B,yIAAyI;IACzI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC;IAC1C,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,aAAa,CAAC;KACxB,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAInD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EACjD,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,GAC9C,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CA8D1B;AAgBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EACrD,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,GAClD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CA4E1B"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { CONNECT_DECISION, classifyConnectOperation, } from "./classifier.js";
|
|
2
|
+
import { CONNECT_TOOL_DECISION, classifyConnectTool, } from "./tool-classifier.js";
|
|
3
|
+
import { resolveConnectToolOperationIdentity, } from "./identity.js";
|
|
4
|
+
import { resolveConnectToolEffectPayload, } from "./payload.js";
|
|
2
5
|
import { protectLocal, } from "../local.js";
|
|
3
6
|
export class AgentToolConnectionError extends Error {
|
|
4
7
|
code;
|
|
@@ -8,15 +11,6 @@ export class AgentToolConnectionError extends Error {
|
|
|
8
11
|
this.name = "AgentToolConnectionError";
|
|
9
12
|
}
|
|
10
13
|
}
|
|
11
|
-
/**
|
|
12
|
-
* Connect one registered agent tool to Once. The agent calls execute normally;
|
|
13
|
-
* classification happens for every invocation without a model-side Once call.
|
|
14
|
-
*
|
|
15
|
-
* The tool owner must review the safety declaration, identity and effect
|
|
16
|
-
* payload. This same-machine path never auto-discovers arbitrary tools and
|
|
17
|
-
* cannot coordinate hosts with separate SQLite files. Supply only the
|
|
18
|
-
* returned tool to the agent; an exposed original tool remains a bypass.
|
|
19
|
-
*/
|
|
20
14
|
export function connectLocalAgentTool(tool, contract) {
|
|
21
15
|
if (!tool || typeof tool.execute !== "function") {
|
|
22
16
|
throw new AgentToolConnectionError("INVALID_TOOL", "Once needs a tool with an execute(input) function.");
|
|
@@ -56,4 +50,82 @@ export function connectLocalAgentTool(tool, contract) {
|
|
|
56
50
|
execute: (input) => protectedExecute(input),
|
|
57
51
|
};
|
|
58
52
|
}
|
|
53
|
+
const AUTO_PROTECTED_SAFETY = Object.freeze({
|
|
54
|
+
changesExternalState: true,
|
|
55
|
+
retryPossible: true,
|
|
56
|
+
ambiguousOutcomePossible: true,
|
|
57
|
+
duplicateUndesirable: true,
|
|
58
|
+
});
|
|
59
|
+
const AUTO_BYPASS_SAFETY = Object.freeze({
|
|
60
|
+
changesExternalState: false,
|
|
61
|
+
retryPossible: false,
|
|
62
|
+
ambiguousOutcomePossible: false,
|
|
63
|
+
duplicateUndesirable: false,
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* Connect a local agent tool using its descriptor instead of hand-authored
|
|
67
|
+
* routing declarations.
|
|
68
|
+
*
|
|
69
|
+
* Automatic routing is intentionally conservative:
|
|
70
|
+
* - PROTECT -> delegate to the existing protected local connector;
|
|
71
|
+
* - BYPASS -> delegate to the existing bypass path;
|
|
72
|
+
* - UNKNOWN -> refuse connection until the tool is clarified.
|
|
73
|
+
*
|
|
74
|
+
* For protected tools, stable identity may be supplied by `id()` or resolved
|
|
75
|
+
* from trustworthy operation/idempotency/intent carriers. Effect payload may
|
|
76
|
+
* be supplied by `payload()` or conservatively bound from the full plain-object
|
|
77
|
+
* input. `_meta.once.effectFields` can explicitly narrow that binding.
|
|
78
|
+
* Missing/invalid identity or payload fails before the side effect.
|
|
79
|
+
*/
|
|
80
|
+
export function connectLocalAgentToolAuto(tool, contract) {
|
|
81
|
+
if (!contract || !contract.descriptor) {
|
|
82
|
+
throw new AgentToolConnectionError("UNKNOWN_TOOL_SAFETY", "Once Connect needs a tool descriptor before automatic routing can be established.");
|
|
83
|
+
}
|
|
84
|
+
const classification = classifyConnectTool(contract.descriptor);
|
|
85
|
+
if (classification.decision === CONNECT_TOOL_DECISION.UNKNOWN) {
|
|
86
|
+
throw new AgentToolConnectionError("UNKNOWN_TOOL_SAFETY", `Once Connect cannot safely auto-route ${contract.descriptor.name || "this tool"}: ${classification.reason}.`);
|
|
87
|
+
}
|
|
88
|
+
if (classification.decision === CONNECT_TOOL_DECISION.BYPASS) {
|
|
89
|
+
return connectLocalAgentTool(tool, {
|
|
90
|
+
name: contract.descriptor.name,
|
|
91
|
+
safety: AUTO_BYPASS_SAFETY,
|
|
92
|
+
statePath: contract.statePath,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const identity = typeof contract.id === "function"
|
|
96
|
+
? contract.id
|
|
97
|
+
: (input) => {
|
|
98
|
+
const result = resolveConnectToolOperationIdentity({
|
|
99
|
+
tool: contract.descriptor,
|
|
100
|
+
input,
|
|
101
|
+
});
|
|
102
|
+
if (result.status === "FOUND") {
|
|
103
|
+
return result.operationId;
|
|
104
|
+
}
|
|
105
|
+
if (result.status === "CONFLICT") {
|
|
106
|
+
throw new AgentToolConnectionError("IDENTITY_CONFLICT", result.reason);
|
|
107
|
+
}
|
|
108
|
+
throw new AgentToolConnectionError("IDENTITY_REQUIRED", result.reason);
|
|
109
|
+
};
|
|
110
|
+
const payload = typeof contract.payload === "function"
|
|
111
|
+
? contract.payload
|
|
112
|
+
: (input) => {
|
|
113
|
+
const result = resolveConnectToolEffectPayload({
|
|
114
|
+
tool: contract.descriptor,
|
|
115
|
+
input,
|
|
116
|
+
});
|
|
117
|
+
if (result.status === "FOUND") {
|
|
118
|
+
return { ...result.payload };
|
|
119
|
+
}
|
|
120
|
+
throw new AgentToolConnectionError("PAYLOAD_REQUIRED", result.reason);
|
|
121
|
+
};
|
|
122
|
+
return connectLocalAgentTool(tool, {
|
|
123
|
+
name: contract.descriptor.name,
|
|
124
|
+
safety: AUTO_PROTECTED_SAFETY,
|
|
125
|
+
id: identity,
|
|
126
|
+
payload,
|
|
127
|
+
statePath: contract.statePath,
|
|
128
|
+
reconcile: contract.reconcile,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
59
131
|
//# sourceMappingURL=local-agent-tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-agent-tool.js","sourceRoot":"","sources":["../../src/connect/local-agent-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,GAEb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"local-agent-tool.js","sourceRoot":"","sources":["../../src/connect/local-agent-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mCAAmC,GACpC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,GAEb,MAAM,aAAa,CAAC;AA0CrB,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC5B;IAArB,YAAqB,IAAY,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QADI,SAAI,GAAJ,IAAI,CAAQ;QAE/B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CACnC,IAA8B,EAC9B,QAA+C;IAE/C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,wBAAwB,CAChC,cAAc,EACd,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,IACE,CAAC,QAAQ;QACT,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QACjC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7C,CAAC;QACD,MAAM,IAAI,wBAAwB,CAChC,mBAAmB,EACnB,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,QAAQ,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,wBAAwB,CAChC,4BAA4B,EAC5B,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,QAAQ,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,EAAE,KAAK,UAAU,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAChF,MAAM,IAAI,wBAAwB,CAChC,qBAAqB,EACrB,8GAA8G,CAC/G,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,MAAM,gBAAgB,GAAG,YAAY,CACnC,KAAK,EAAE,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EACtD;QACE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;gBACvD,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE;gBACrB,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CACF,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAA6B,MAAM,CAAC,MAAM,CAAC;IACpE,oBAAoB,EAAE,IAAI;IAC1B,aAAa,EAAE,IAAI;IACnB,wBAAwB,EAAE,IAAI;IAC9B,oBAAoB,EAAE,IAAI;CAC3B,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAA6B,MAAM,CAAC,MAAM,CAAC;IACjE,oBAAoB,EAAE,KAAK;IAC3B,aAAa,EAAE,KAAK;IACpB,wBAAwB,EAAE,KAAK;IAC/B,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAA8B,EAC9B,QAAmD;IAEnD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,wBAAwB,CAChC,qBAAqB,EACrB,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEhE,IAAI,cAAc,CAAC,QAAQ,KAAK,qBAAqB,CAAC,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,wBAAwB,CAChC,qBAAqB,EACrB,yCAAyC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,WAAW,KAAK,cAAc,CAAC,MAAM,GAAG,CAC9G,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,QAAQ,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAC7D,OAAO,qBAAqB,CAAC,IAAI,EAAE;YACjC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI;YAC9B,MAAM,EAAE,kBAAkB;YAC1B,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,UAAU;QAChD,CAAC,CAAC,QAAQ,CAAC,EAAE;QACb,CAAC,CAAC,CAAC,KAAY,EAAU,EAAE;YACvB,MAAM,MAAM,GAAG,mCAAmC,CAAC;gBACjD,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC,WAAW,CAAC;YAC5B,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,IAAI,wBAAwB,CAChC,mBAAmB,EACnB,MAAM,CAAC,MAAM,CACd,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,wBAAwB,CAChC,mBAAmB,EACnB,MAAM,CAAC,MAAM,CACd,CAAC;QACJ,CAAC,CAAC;IAEN,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU;QACpD,CAAC,CAAC,QAAQ,CAAC,OAAO;QAClB,CAAC,CAAC,CAAC,KAAY,EAAiB,EAAE;YAC9B,MAAM,MAAM,GAAG,+BAA+B,CAAC;gBAC7C,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,IAAI,wBAAwB,CAChC,kBAAkB,EAClB,MAAM,CAAC,MAAM,CACd,CAAC;QACJ,CAAC,CAAC;IAEN,OAAO,qBAAqB,CAAC,IAAI,EAAE;QACjC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI;QAC9B,MAAM,EAAE,qBAAqB;QAC7B,EAAE,EAAE,QAAQ;QACZ,OAAO;QACP,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC,CAAC;AACL,CAAC"}
|