managed-deepagents 0.6.2-dev.7 → 0.6.2-dev.8
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/dist/channels/schedule-delivery.d.ts +2 -0
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +40 -4
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/trigger/client.d.ts +1 -0
- package/dist/channels/trigger/client.d.ts.map +1 -1
- package/dist/channels/trigger/client.js +19 -8
- package/dist/channels/trigger/client.js.map +1 -1
- package/dist/channels/trigger/types.d.ts +1 -1
- package/dist/channels/trigger/types.d.ts.map +1 -1
- package/dist/connectors/mcp/index.d.ts +89 -29
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +50 -227
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/connectors/mcp/load.d.ts +12 -0
- package/dist/connectors/mcp/load.d.ts.map +1 -0
- package/dist/connectors/mcp/load.js +122 -0
- package/dist/connectors/mcp/load.js.map +1 -0
- package/dist/connectors/tool-selection.d.ts +18 -9
- package/dist/connectors/tool-selection.d.ts.map +1 -1
- package/dist/connectors/tool-selection.js +58 -32
- package/dist/connectors/tool-selection.js.map +1 -1
- package/dist/identity/index.d.ts +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/types.d.ts +5 -45
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/auth.d.ts +4 -9
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/http.d.ts +1 -1
- package/dist/runtime/http.d.ts.map +1 -1
- package/dist/runtime/http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +5 -55
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +0 -107
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +7 -12
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/managed-middleware.d.ts +2 -2
- package/dist/runtime/managed-middleware.js +6 -6
- package/dist/runtime/managed-tools.d.ts +15 -19
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +13 -14
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/types.d.ts +2 -2
- package/package.json +7 -7
- package/dist/agent-auth.d.ts +0 -104
- package/dist/agent-auth.d.ts.map +0 -1
- package/dist/agent-auth.js +0 -224
- package/dist/agent-auth.js.map +0 -1
- package/dist/connectors/mcp/schema.d.ts +0 -12
- package/dist/connectors/mcp/schema.d.ts.map +0 -1
- package/dist/connectors/mcp/schema.js +0 -55
- package/dist/connectors/mcp/schema.js.map +0 -1
- package/dist/connectors/mcp/types.d.ts +0 -62
- package/dist/connectors/mcp/types.d.ts.map +0 -1
- package/dist/connectors/mcp/types.js +0 -2
- package/dist/connectors/mcp/types.js.map +0 -1
- package/dist/credential-gate.d.ts +0 -39
- package/dist/credential-gate.d.ts.map +0 -1
- package/dist/credential-gate.js +0 -209
- package/dist/credential-gate.js.map +0 -1
- package/dist/credentials.d.ts +0 -88
- package/dist/credentials.d.ts.map +0 -1
- package/dist/credentials.js +0 -246
- package/dist/credentials.js.map +0 -1
package/dist/runtime/index.js
CHANGED
|
@@ -3,8 +3,6 @@ import { LazyManagedSandboxBackend } from "./backend.js";
|
|
|
3
3
|
import { loadConnectorTools } from "./connector.js";
|
|
4
4
|
import { createScheduleDeliveryMiddleware } from "../channels/schedule-delivery.js";
|
|
5
5
|
import { createChannelResponseFormatMiddleware } from "../channels/response-format.js";
|
|
6
|
-
import { createCredentialGateMiddleware } from "../credential-gate.js";
|
|
7
|
-
import { mcpCredentialConsumers } from "../connectors/mcp/index.js";
|
|
8
6
|
import { wrapMiddlewareWithManagedRuntime, } from "./managed-middleware.js";
|
|
9
7
|
import { wrapToolsWithManagedRuntime, } from "./managed-tools.js";
|
|
10
8
|
import { createMemoryInstructionsMiddleware, hasAgentMemorySlice, hotMemoryPaths, } from "../memory/index.js";
|
|
@@ -34,8 +32,8 @@ export async function compileManagedAgent(definition, config, options) {
|
|
|
34
32
|
// one object, but mounting is owned by the managed HTTP app — leave it on
|
|
35
33
|
// `options` unused here.
|
|
36
34
|
// Resolution + thread/store scoping run in the generated custom-auth handler
|
|
37
|
-
// (`buildManagedAuth`). When identity is declared, the seam also surfaces
|
|
38
|
-
// `runtime.
|
|
35
|
+
// (`buildManagedAuth`). When identity is declared, the seam also surfaces the
|
|
36
|
+
// frozen `runtime.identity` envelope to authored + connector tools (below).
|
|
39
37
|
identity,
|
|
40
38
|
// The root `memory.{ts,py}` declaration. Absent → no durable memory: the
|
|
41
39
|
// slices a run mounts come from here and nowhere else.
|
|
@@ -110,14 +108,15 @@ export async function compileManagedAgent(definition, config, options) {
|
|
|
110
108
|
const authoredTools = Array.isArray(params.tools) ? params.tools : [];
|
|
111
109
|
params.tools = [...authoredTools, ...connectorTools];
|
|
112
110
|
}
|
|
113
|
-
// With identity declared, surface `runtime.
|
|
114
|
-
// every tool receives,
|
|
111
|
+
// With identity declared, surface the frozen `runtime.identity` envelope on
|
|
112
|
+
// the runtime every tool receives, built from the trusted
|
|
113
|
+
// `langgraph_auth_user`.
|
|
115
114
|
if (identity && Array.isArray(params.tools)) {
|
|
116
115
|
params.tools = wrapToolsWithManagedRuntime(params.tools);
|
|
117
116
|
}
|
|
118
117
|
// Do the same for authored middleware: each hook's `runtime` (and the `wrap*`
|
|
119
|
-
// hooks' `request.runtime`) gains `runtime.
|
|
120
|
-
//
|
|
118
|
+
// hooks' `request.runtime`) gains `runtime.identity`, built from the same
|
|
119
|
+
// trusted `langgraph_auth_user` on `runtime.configurable`.
|
|
121
120
|
const authoredMiddleware = Array.isArray(params.middleware)
|
|
122
121
|
? params.middleware
|
|
123
122
|
: [];
|
|
@@ -125,18 +124,14 @@ export async function compileManagedAgent(definition, config, options) {
|
|
|
125
124
|
? wrapMiddlewareWithManagedRuntime(authoredMiddleware)
|
|
126
125
|
: authoredMiddleware;
|
|
127
126
|
// Always-on schedule deliverTo auto-post (cron runs); prepend before authored.
|
|
128
|
-
// The credential gate runs early so OAuth interrupts happen before the model
|
|
129
|
-
// turn; it only installs when a declaration names a user-owned credential.
|
|
130
127
|
// The memory policy goes last on purpose. First in this list is outermost, so a
|
|
131
128
|
// middleware placed earlier can have its prompt replaced by an authored one that
|
|
132
129
|
// rewrites `systemPrompt` wholesale — and this policy is a security control, not a
|
|
133
130
|
// hint. Last means nothing authored runs after it. deepagents still appends its own
|
|
134
131
|
// `<agent_memory>` block after the whole custom stack, so the policy's "block below"
|
|
135
132
|
// wording stays accurate.
|
|
136
|
-
const credentialGate = createCredentialGateMiddleware(mcpCredentialConsumers(connectors));
|
|
137
133
|
params.middleware = [
|
|
138
134
|
createScheduleDeliveryMiddleware(),
|
|
139
|
-
...(credentialGate ? [credentialGate] : []),
|
|
140
135
|
...wrappedAuthored,
|
|
141
136
|
createChannelResponseFormatMiddleware(),
|
|
142
137
|
...(mountsMemory ? [createMemoryInstructionsMiddleware()] : []),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ export interface ManagedMiddleware {
|
|
|
7
7
|
[key: string]: unknown;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Wrap a middleware so every hook sees `runtime.
|
|
11
|
-
*
|
|
10
|
+
* Wrap a middleware so every hook sees `runtime.identity` (…) without changing
|
|
11
|
+
* its name, schema, registered tools, or class.
|
|
12
12
|
*
|
|
13
13
|
* A `Proxy` intercepts only the hook properties: lifecycle hooks
|
|
14
14
|
* (`beforeAgent`/`beforeModel`/`afterModel`/`afterAgent`, in either function or
|
|
@@ -10,10 +10,10 @@ const LIFECYCLE_HOOKS = new Set([
|
|
|
10
10
|
const WRAP_HOOKS = new Set(["wrapModelCall", "wrapToolCall"]);
|
|
11
11
|
/**
|
|
12
12
|
* Return a copy of the middleware runtime with the managed primitives
|
|
13
|
-
* (`runtime.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* (`runtime.identity`, …) layered on. Identity is built from the trusted
|
|
14
|
+
* `runtime.configurable.langgraph_auth_user` the custom-auth handler produced —
|
|
15
|
+
* the same channel tools use — since the platform, not us, invokes the graph and
|
|
16
|
+
* `runtime.context` is caller-supplied per-run data we do not control.
|
|
17
17
|
*/
|
|
18
18
|
function augmentRuntime(runtime) {
|
|
19
19
|
const overrides = managedRuntimeOverrides(runtime);
|
|
@@ -41,8 +41,8 @@ function wrapWrapHook(target, value) {
|
|
|
41
41
|
return (request, handler) => fn.call(target, { ...request, runtime: augmentRuntime(request?.runtime) }, handler);
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
* Wrap a middleware so every hook sees `runtime.
|
|
45
|
-
*
|
|
44
|
+
* Wrap a middleware so every hook sees `runtime.identity` (…) without changing
|
|
45
|
+
* its name, schema, registered tools, or class.
|
|
46
46
|
*
|
|
47
47
|
* A `Proxy` intercepts only the hook properties: lifecycle hooks
|
|
48
48
|
* (`beforeAgent`/`beforeModel`/`afterModel`/`afterAgent`, in either function or
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ToolRuntime } from "@langchain/core/tools";
|
|
2
|
+
import type { RuntimeIdentity } from "../identity/index.js";
|
|
2
3
|
import type { RuntimeChannel } from "../channels/types.js";
|
|
3
|
-
import type {
|
|
4
|
-
export type {
|
|
4
|
+
import type { RuntimeConfigLike } from "./identity-runtime.js";
|
|
5
|
+
export type { RuntimeConfigLike } from "./identity-runtime.js";
|
|
5
6
|
/**
|
|
6
7
|
* A LangChain/LangGraph tool from MDA's perspective: the only surface the runtime
|
|
7
8
|
* seam touches is `invoke(input, runtime)`. Kept structural so the wrapper works
|
|
@@ -12,11 +13,7 @@ export interface InvokableTool {
|
|
|
12
13
|
}
|
|
13
14
|
/** The managed primitives MDA layers onto the tool runtime. */
|
|
14
15
|
export interface ManagedRuntimeExtras {
|
|
15
|
-
|
|
16
|
-
* LangGraph server metadata with the author-facing principal on `principal`
|
|
17
|
-
* (plus `subject` / `link`) and LangGraph AuthUser on `user`.
|
|
18
|
-
*/
|
|
19
|
-
serverInfo?: ManagedServerInfo;
|
|
16
|
+
identity?: RuntimeIdentity;
|
|
20
17
|
/**
|
|
21
18
|
* Present only for channel-originated runs. Ordinary HTTP and schedule runs
|
|
22
19
|
* leave this undefined.
|
|
@@ -25,32 +22,31 @@ export interface ManagedRuntimeExtras {
|
|
|
25
22
|
}
|
|
26
23
|
/**
|
|
27
24
|
* The runtime surface managed Deep Agent tools receive: LangGraph's
|
|
28
|
-
* {@link ToolRuntime} plus MDA-managed primitives such as `
|
|
25
|
+
* {@link ToolRuntime} plus MDA-managed primitives such as `identity`.
|
|
29
26
|
*
|
|
30
27
|
* Annotate the second parameter of a `tool(...)` handler when you need the
|
|
31
|
-
*
|
|
28
|
+
* frozen identity envelope for the current run.
|
|
32
29
|
*/
|
|
33
30
|
export interface ManagedDeepAgentRuntime<TState = unknown, TContext = unknown> extends ToolRuntime<TState, TContext>, ManagedRuntimeExtras {
|
|
34
31
|
}
|
|
35
32
|
/**
|
|
36
33
|
* The fields MDA overlays onto the runtime a tool/middleware hook receives:
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* untouched.
|
|
34
|
+
* the frozen `identity` (when an actor resolved) and a `configurable` with the
|
|
35
|
+
* reserved identity keys stripped so downstream code can't read a
|
|
36
|
+
* client-spoofed `actor_id`/`tenant_id`. Returns an empty object when there is
|
|
37
|
+
* nothing to change, so the original runtime passes through untouched.
|
|
42
38
|
*/
|
|
43
39
|
export declare function managedRuntimeOverrides(runtime: RuntimeConfigLike | undefined): ManagedRuntimeExtras & {
|
|
44
40
|
configurable?: Record<string, unknown>;
|
|
45
41
|
};
|
|
46
42
|
/**
|
|
47
|
-
* Wrap a tool so its runtime carries the managed primitives
|
|
48
|
-
*
|
|
43
|
+
* Wrap a tool so its runtime carries the managed primitives (`runtime.identity`,
|
|
44
|
+
* …) without changing its name, schema, or class.
|
|
49
45
|
*
|
|
50
46
|
* Augments `invoke` (for LangGraph's `ToolNode`) and patches a shallow copy's
|
|
51
|
-
* internal `func`/`coroutine` so
|
|
52
|
-
*
|
|
53
|
-
*
|
|
47
|
+
* internal `func`/`coroutine` so identity reaches the authored handler even when
|
|
48
|
+
* LangChain rewrites the runtime into a RunnableConfig before calling the tool
|
|
49
|
+
* function. The original tool instance is left untouched.
|
|
54
50
|
*/
|
|
55
51
|
export declare function withManagedRuntime<T extends InvokableTool>(managedTool: T): T;
|
|
56
52
|
/** Wrap every tool in a list with {@link withManagedRuntime}. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-tools.d.ts","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"managed-tools.d.ts","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC;CAC9D;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB,CAAC,MAAM,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,CAC3E,SAAQ,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,oBAAoB;CAAG;AAEhE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GACrC,oBAAoB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAgCnE;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,aAAa,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAqC7E;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,aAAa,EACjE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,CAAC,EAAE,CAEL"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { resolveRuntimeChannel } from "../channels/binding.js";
|
|
2
|
-
import {
|
|
2
|
+
import { buildRuntimeIdentity, resolveRuntimeConfigurable, sanitizeConfigurable, } from "./identity-runtime.js";
|
|
3
3
|
/**
|
|
4
4
|
* The fields MDA overlays onto the runtime a tool/middleware hook receives:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* untouched.
|
|
5
|
+
* the frozen `identity` (when an actor resolved) and a `configurable` with the
|
|
6
|
+
* reserved identity keys stripped so downstream code can't read a
|
|
7
|
+
* client-spoofed `actor_id`/`tenant_id`. Returns an empty object when there is
|
|
8
|
+
* nothing to change, so the original runtime passes through untouched.
|
|
10
9
|
*/
|
|
11
10
|
export function managedRuntimeOverrides(runtime) {
|
|
12
11
|
const overrides = {};
|
|
13
12
|
const configurable = resolveRuntimeConfigurable(runtime);
|
|
14
|
-
const
|
|
15
|
-
if (
|
|
16
|
-
overrides.
|
|
13
|
+
const identity = buildRuntimeIdentity(configurable);
|
|
14
|
+
if (identity) {
|
|
15
|
+
overrides.identity = identity;
|
|
17
16
|
}
|
|
18
17
|
if (runtime?.channel) {
|
|
19
18
|
overrides.channel = runtime.channel;
|
|
@@ -50,13 +49,13 @@ function wrapToolCallable(original, receiver) {
|
|
|
50
49
|
return (input, runManager, config) => original.call(receiver, input, runManager, augmentToolConfig(config));
|
|
51
50
|
}
|
|
52
51
|
/**
|
|
53
|
-
* Wrap a tool so its runtime carries the managed primitives
|
|
54
|
-
*
|
|
52
|
+
* Wrap a tool so its runtime carries the managed primitives (`runtime.identity`,
|
|
53
|
+
* …) without changing its name, schema, or class.
|
|
55
54
|
*
|
|
56
55
|
* Augments `invoke` (for LangGraph's `ToolNode`) and patches a shallow copy's
|
|
57
|
-
* internal `func`/`coroutine` so
|
|
58
|
-
*
|
|
59
|
-
*
|
|
56
|
+
* internal `func`/`coroutine` so identity reaches the authored handler even when
|
|
57
|
+
* LangChain rewrites the runtime into a RunnableConfig before calling the tool
|
|
58
|
+
* function. The original tool instance is left untouched.
|
|
60
59
|
*/
|
|
61
60
|
export function withManagedRuntime(managedTool) {
|
|
62
61
|
const patchable = Object.assign(Object.create(Object.getPrototypeOf(managedTool)), managedTool);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-tools.js","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"managed-tools.js","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -61,8 +61,8 @@ export interface ManagedAgentOptions {
|
|
|
61
61
|
/**
|
|
62
62
|
* The root `identity.ts` declaration, if the project opts into managed
|
|
63
63
|
* identity. Resolution + thread scoping run in the generated custom-auth
|
|
64
|
-
* handler (`buildManagedAuth`); this seam reserves the declaration for
|
|
65
|
-
* `runtime.
|
|
64
|
+
* handler (`buildManagedAuth`); this seam reserves the declaration for the
|
|
65
|
+
* frozen `runtime.identity` envelope and memory namespacing.
|
|
66
66
|
*/
|
|
67
67
|
identity?: IdentityDefinition;
|
|
68
68
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "managed-deepagents",
|
|
3
|
-
"version": "0.6.2-dev.
|
|
3
|
+
"version": "0.6.2-dev.8",
|
|
4
4
|
"description": "Managed Deep Agents — the `defineDeepAgent` authoring interface plus the CLI that compiles and deploys a code-first Deep Agent repository to a managed LangGraph runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"langchain",
|
|
@@ -66,12 +66,12 @@
|
|
|
66
66
|
"zod": "^4.4.3"
|
|
67
67
|
},
|
|
68
68
|
"optionalDependencies": {
|
|
69
|
-
"@langchain/managed-deepagents-darwin-arm64": "0.6.2-dev.
|
|
70
|
-
"@langchain/managed-deepagents-darwin-x64": "0.6.2-dev.
|
|
71
|
-
"@langchain/managed-deepagents-linux-arm64": "0.6.2-dev.
|
|
72
|
-
"@langchain/managed-deepagents-linux-x64": "0.6.2-dev.
|
|
73
|
-
"@langchain/managed-deepagents-win32-arm64": "0.6.2-dev.
|
|
74
|
-
"@langchain/managed-deepagents-win32-x64": "0.6.2-dev.
|
|
69
|
+
"@langchain/managed-deepagents-darwin-arm64": "0.6.2-dev.8",
|
|
70
|
+
"@langchain/managed-deepagents-darwin-x64": "0.6.2-dev.8",
|
|
71
|
+
"@langchain/managed-deepagents-linux-arm64": "0.6.2-dev.8",
|
|
72
|
+
"@langchain/managed-deepagents-linux-x64": "0.6.2-dev.8",
|
|
73
|
+
"@langchain/managed-deepagents-win32-arm64": "0.6.2-dev.8",
|
|
74
|
+
"@langchain/managed-deepagents-win32-x64": "0.6.2-dev.8"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@types/node": "^26.1.1",
|
package/dist/agent-auth.d.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Auth client used by `credentials.get` and the pre-run credential gate.
|
|
3
|
-
*
|
|
4
|
-
* Talks to the shipped Agent Auth APIs (credentials + oauth-authorization-sessions),
|
|
5
|
-
* not the aspirational `credentials/mint` endpoint.
|
|
6
|
-
*/
|
|
7
|
-
export declare const AGENT_AUTH_TIMEOUT_MS = 10000;
|
|
8
|
-
export declare const AGENT_AUTH_PROVIDER_PAGE_SIZE = 100;
|
|
9
|
-
export declare const AGENT_AUTH_MAX_PROVIDER_PAGES = 20;
|
|
10
|
-
export interface AgentAuthHttpConfig {
|
|
11
|
-
apiKey?: string;
|
|
12
|
-
workspaceId?: string;
|
|
13
|
-
}
|
|
14
|
-
/** Query string that addresses one credential by its natural key. */
|
|
15
|
-
export declare function agentAuthCredentialQuery(options: {
|
|
16
|
-
ownerType: string;
|
|
17
|
-
ownerId: string;
|
|
18
|
-
kind: string;
|
|
19
|
-
slug: string;
|
|
20
|
-
}): string;
|
|
21
|
-
export declare function agentAuthHeaders(config: AgentAuthHttpConfig): Record<string, string>;
|
|
22
|
-
/** One Agent Auth HTTP call: no redirects, bounded timeout, JSON body. */
|
|
23
|
-
export declare function requestAgentAuthJson(options: {
|
|
24
|
-
url: string;
|
|
25
|
-
init?: Omit<RequestInit, "headers" | "signal">;
|
|
26
|
-
config: AgentAuthHttpConfig;
|
|
27
|
-
timeoutMs: number;
|
|
28
|
-
fetchImpl: typeof fetch;
|
|
29
|
-
}): Promise<{
|
|
30
|
-
ok: boolean;
|
|
31
|
-
status: number;
|
|
32
|
-
body: Record<string, unknown>;
|
|
33
|
-
}>;
|
|
34
|
-
export interface AgentAuthContext {
|
|
35
|
-
baseUrl: string;
|
|
36
|
-
/** Deployment id, passed to oauth-authorization-sessions as `agent_id`. */
|
|
37
|
-
agentId: string;
|
|
38
|
-
/** Authenticated caller, used as `owner_id` for user credentials. */
|
|
39
|
-
principalId: string;
|
|
40
|
-
apiKey?: string;
|
|
41
|
-
workspaceId?: string;
|
|
42
|
-
}
|
|
43
|
-
/** One credential slug the caller has not granted, with its connect URL. */
|
|
44
|
-
export interface PendingAuthorization {
|
|
45
|
-
slug: string;
|
|
46
|
-
connectUrl: string;
|
|
47
|
-
authId: string;
|
|
48
|
-
}
|
|
49
|
-
export declare class CredentialAuthorizationRequiredError extends Error {
|
|
50
|
-
readonly slugs: readonly string[];
|
|
51
|
-
readonly name = "CredentialAuthorizationRequiredError";
|
|
52
|
-
constructor(slugs: readonly string[]);
|
|
53
|
-
}
|
|
54
|
-
export declare class AgentAuthUnknownProviderError extends Error {
|
|
55
|
-
readonly slug: string;
|
|
56
|
-
readonly name = "AgentAuthUnknownProviderError";
|
|
57
|
-
constructor(slug: string);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Agent Auth could not answer. Callers pass a fixed message: a response body
|
|
61
|
-
* can quote secret material, so it never reaches this error.
|
|
62
|
-
*/
|
|
63
|
-
export declare class CredentialStoreError extends Error {
|
|
64
|
-
readonly status?: number | undefined;
|
|
65
|
-
readonly name = "CredentialStoreError";
|
|
66
|
-
constructor(message: string, status?: number | undefined);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Bound Agent Auth HTTP client. One instance per caller/run; headers, origin,
|
|
70
|
-
* and the request timeout stay on the instance rather than each call site.
|
|
71
|
-
*/
|
|
72
|
-
export declare class AgentAuth {
|
|
73
|
-
#private;
|
|
74
|
-
readonly context: AgentAuthContext;
|
|
75
|
-
constructor(context: AgentAuthContext, fetchImpl?: typeof fetch, timeoutMs?: number);
|
|
76
|
-
/**
|
|
77
|
-
* Read the caller's OAuth access token for a slug without starting a session.
|
|
78
|
-
*
|
|
79
|
-
* Reads never mint, so a caller can be probed repeatedly — on every replay of
|
|
80
|
-
* an interrupted node, for instance — without leaving authorization sessions
|
|
81
|
-
* behind.
|
|
82
|
-
*
|
|
83
|
-
* @returns The access token, or `undefined` when the caller must connect.
|
|
84
|
-
*/
|
|
85
|
-
readUserAccessToken(slug: string): Promise<string | undefined>;
|
|
86
|
-
/**
|
|
87
|
-
* Start an OAuth authorization session for a slug the caller has not granted.
|
|
88
|
-
*
|
|
89
|
-
* @returns The pending session, including the user-facing connect URL.
|
|
90
|
-
*/
|
|
91
|
-
startAuthorizationSession(slug: string): Promise<PendingAuthorization>;
|
|
92
|
-
/** oauth-providers has no slug filter, so the match is made across pages. */
|
|
93
|
-
resolveOAuthProviderId(slug: string): Promise<string>;
|
|
94
|
-
/** The credential key is `credential_id`, never `id`. */
|
|
95
|
-
findCredentialId(options: {
|
|
96
|
-
ownerType: string;
|
|
97
|
-
ownerId: string;
|
|
98
|
-
kind: string;
|
|
99
|
-
slug: string;
|
|
100
|
-
}): Promise<string | undefined>;
|
|
101
|
-
/** @returns The secret, or `undefined` when Agent Auth has no value (404). */
|
|
102
|
-
readSecret(credentialId: string): Promise<string | undefined>;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=agent-auth.d.ts.map
|
package/dist/agent-auth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-auth.d.ts","sourceRoot":"","sources":["../src/agent-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-auth.js
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Auth client used by `credentials.get` and the pre-run credential gate.
|
|
3
|
-
*
|
|
4
|
-
* Talks to the shipped Agent Auth APIs (credentials + oauth-authorization-sessions),
|
|
5
|
-
* not the aspirational `credentials/mint` endpoint.
|
|
6
|
-
*/
|
|
7
|
-
import { fetchWithTimeout } from "./runtime/http.js";
|
|
8
|
-
export const AGENT_AUTH_TIMEOUT_MS = 10_000;
|
|
9
|
-
export const AGENT_AUTH_PROVIDER_PAGE_SIZE = 100;
|
|
10
|
-
export const AGENT_AUTH_MAX_PROVIDER_PAGES = 20;
|
|
11
|
-
/** Query string that addresses one credential by its natural key. */
|
|
12
|
-
export function agentAuthCredentialQuery(options) {
|
|
13
|
-
return new URLSearchParams({
|
|
14
|
-
owner_type: options.ownerType,
|
|
15
|
-
owner_id: options.ownerId,
|
|
16
|
-
kind: options.kind,
|
|
17
|
-
slug: options.slug,
|
|
18
|
-
}).toString();
|
|
19
|
-
}
|
|
20
|
-
export function agentAuthHeaders(config) {
|
|
21
|
-
const headers = {
|
|
22
|
-
accept: "application/json",
|
|
23
|
-
"content-type": "application/json",
|
|
24
|
-
"x-langsmith-product": "mda",
|
|
25
|
-
};
|
|
26
|
-
const apiKey = config.apiKey?.trim();
|
|
27
|
-
if (apiKey) {
|
|
28
|
-
headers["x-api-key"] = apiKey;
|
|
29
|
-
}
|
|
30
|
-
const workspaceId = config.workspaceId?.trim();
|
|
31
|
-
if (workspaceId) {
|
|
32
|
-
headers["x-tenant-id"] = workspaceId;
|
|
33
|
-
}
|
|
34
|
-
return headers;
|
|
35
|
-
}
|
|
36
|
-
/** One Agent Auth HTTP call: no redirects, bounded timeout, JSON body. */
|
|
37
|
-
export async function requestAgentAuthJson(options) {
|
|
38
|
-
const response = await fetchWithTimeout(options.url, {
|
|
39
|
-
...options.init,
|
|
40
|
-
redirect: "error",
|
|
41
|
-
headers: agentAuthHeaders(options.config),
|
|
42
|
-
}, options.timeoutMs, options.fetchImpl);
|
|
43
|
-
const decoded = await response.json().catch(() => ({}));
|
|
44
|
-
return {
|
|
45
|
-
ok: response.ok,
|
|
46
|
-
status: response.status,
|
|
47
|
-
body: decoded && typeof decoded === "object"
|
|
48
|
-
? decoded
|
|
49
|
-
: {},
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
export class CredentialAuthorizationRequiredError extends Error {
|
|
53
|
-
slugs;
|
|
54
|
-
name = "CredentialAuthorizationRequiredError";
|
|
55
|
-
constructor(slugs) {
|
|
56
|
-
super(`the caller has not connected: ${slugs.join(", ")}. ` +
|
|
57
|
-
"Declare the credential on a connector so the pre-run gate can request it.");
|
|
58
|
-
this.slugs = slugs;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export class AgentAuthUnknownProviderError extends Error {
|
|
62
|
-
slug;
|
|
63
|
-
name = "AgentAuthUnknownProviderError";
|
|
64
|
-
constructor(slug) {
|
|
65
|
-
super(`Agent Auth has no OAuth provider registered for slug "${slug}". ` +
|
|
66
|
-
"Register the provider or fix the credential slug.");
|
|
67
|
-
this.slug = slug;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Agent Auth could not answer. Callers pass a fixed message: a response body
|
|
72
|
-
* can quote secret material, so it never reaches this error.
|
|
73
|
-
*/
|
|
74
|
-
export class CredentialStoreError extends Error {
|
|
75
|
-
status;
|
|
76
|
-
name = "CredentialStoreError";
|
|
77
|
-
constructor(message, status) {
|
|
78
|
-
super(status === undefined ? message : `${message} (status ${status})`);
|
|
79
|
-
this.status = status;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Bound Agent Auth HTTP client. One instance per caller/run; headers, origin,
|
|
84
|
-
* and the request timeout stay on the instance rather than each call site.
|
|
85
|
-
*/
|
|
86
|
-
export class AgentAuth {
|
|
87
|
-
context;
|
|
88
|
-
#fetchImpl;
|
|
89
|
-
#timeoutMs;
|
|
90
|
-
constructor(context, fetchImpl = fetch, timeoutMs = AGENT_AUTH_TIMEOUT_MS) {
|
|
91
|
-
this.context = context;
|
|
92
|
-
this.#fetchImpl = fetchImpl;
|
|
93
|
-
this.#timeoutMs = timeoutMs;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Read the caller's OAuth access token for a slug without starting a session.
|
|
97
|
-
*
|
|
98
|
-
* Reads never mint, so a caller can be probed repeatedly — on every replay of
|
|
99
|
-
* an interrupted node, for instance — without leaving authorization sessions
|
|
100
|
-
* behind.
|
|
101
|
-
*
|
|
102
|
-
* @returns The access token, or `undefined` when the caller must connect.
|
|
103
|
-
*/
|
|
104
|
-
async readUserAccessToken(slug) {
|
|
105
|
-
const credentialId = await this.findCredentialId({
|
|
106
|
-
ownerType: "user",
|
|
107
|
-
ownerId: this.context.principalId,
|
|
108
|
-
kind: "oauth2",
|
|
109
|
-
slug,
|
|
110
|
-
});
|
|
111
|
-
if (!credentialId)
|
|
112
|
-
return undefined;
|
|
113
|
-
return await this.#fetchAccessToken(credentialId);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Start an OAuth authorization session for a slug the caller has not granted.
|
|
117
|
-
*
|
|
118
|
-
* @returns The pending session, including the user-facing connect URL.
|
|
119
|
-
*/
|
|
120
|
-
async startAuthorizationSession(slug) {
|
|
121
|
-
const providerId = await this.resolveOAuthProviderId(slug);
|
|
122
|
-
const { ok, status, body } = await this.#request("/v1/agent-auth/oauth-authorization-sessions", {
|
|
123
|
-
method: "POST",
|
|
124
|
-
body: JSON.stringify({
|
|
125
|
-
provider_id: providerId,
|
|
126
|
-
principal_id: this.context.principalId,
|
|
127
|
-
agent_id: this.context.agentId,
|
|
128
|
-
}),
|
|
129
|
-
});
|
|
130
|
-
if (!ok) {
|
|
131
|
-
throw new CredentialStoreError("Agent Auth create oauth-authorization-session failed", status);
|
|
132
|
-
}
|
|
133
|
-
const authId = String(body.id ?? "");
|
|
134
|
-
const connectUrl = String(body.verification_url ?? "");
|
|
135
|
-
if (!authId || !connectUrl) {
|
|
136
|
-
throw new CredentialStoreError("Agent Auth oauth-authorization-session missing id or verification_url");
|
|
137
|
-
}
|
|
138
|
-
return { slug, connectUrl, authId };
|
|
139
|
-
}
|
|
140
|
-
/** oauth-providers has no slug filter, so the match is made across pages. */
|
|
141
|
-
async resolveOAuthProviderId(slug) {
|
|
142
|
-
let cursor;
|
|
143
|
-
for (let page = 0; page < AGENT_AUTH_MAX_PROVIDER_PAGES; page += 1) {
|
|
144
|
-
const params = new URLSearchParams({
|
|
145
|
-
page_size: String(AGENT_AUTH_PROVIDER_PAGE_SIZE),
|
|
146
|
-
});
|
|
147
|
-
if (cursor)
|
|
148
|
-
params.set("cursor", cursor);
|
|
149
|
-
const { ok, status, body } = await this.#request(`/v1/agent-auth/oauth-providers?${params.toString()}`, { method: "GET" });
|
|
150
|
-
if (!ok) {
|
|
151
|
-
throw new CredentialStoreError("Agent Auth list oauth-providers failed", status);
|
|
152
|
-
}
|
|
153
|
-
const items = Array.isArray(body.items) ? body.items : [];
|
|
154
|
-
const match = items.find((item) => !!item &&
|
|
155
|
-
typeof item === "object" &&
|
|
156
|
-
String(item.slug) === slug);
|
|
157
|
-
if (match?.id) {
|
|
158
|
-
return String(match.id);
|
|
159
|
-
}
|
|
160
|
-
const next = body.next_cursor;
|
|
161
|
-
if (typeof next !== "string" || !next || next === cursor) {
|
|
162
|
-
throw new AgentAuthUnknownProviderError(slug);
|
|
163
|
-
}
|
|
164
|
-
cursor = next;
|
|
165
|
-
}
|
|
166
|
-
throw new CredentialStoreError("Agent Auth oauth-provider list returned too many pages");
|
|
167
|
-
}
|
|
168
|
-
/** The credential key is `credential_id`, never `id`. */
|
|
169
|
-
async findCredentialId(options) {
|
|
170
|
-
const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials?${agentAuthCredentialQuery(options)}`, { method: "GET" });
|
|
171
|
-
if (!ok) {
|
|
172
|
-
throw new CredentialStoreError("Agent Auth list credentials failed", status);
|
|
173
|
-
}
|
|
174
|
-
const [row] = Array.isArray(body.items) ? body.items : [];
|
|
175
|
-
const id = row?.credential_id;
|
|
176
|
-
return typeof id === "string" ? id : undefined;
|
|
177
|
-
}
|
|
178
|
-
/** @returns The secret, or `undefined` when Agent Auth has no value (404). */
|
|
179
|
-
async readSecret(credentialId) {
|
|
180
|
-
const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials/${encodeURIComponent(credentialId)}/secret`, { method: "GET" });
|
|
181
|
-
if (status === 404) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
if (!ok) {
|
|
185
|
-
throw new CredentialStoreError("Agent Auth get secret failed", status);
|
|
186
|
-
}
|
|
187
|
-
const secret = body.secret;
|
|
188
|
-
return typeof secret === "string" && secret.length > 0 ? secret : undefined;
|
|
189
|
-
}
|
|
190
|
-
async #fetchAccessToken(credentialId) {
|
|
191
|
-
const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials/${encodeURIComponent(credentialId)}/oauth2`, { method: "GET" });
|
|
192
|
-
if (isAuthorizationRequired(status, body)) {
|
|
193
|
-
return undefined;
|
|
194
|
-
}
|
|
195
|
-
if (!ok) {
|
|
196
|
-
throw new CredentialStoreError("Agent Auth get oauth2 failed", status);
|
|
197
|
-
}
|
|
198
|
-
const oauth2 = body.oauth2 && typeof body.oauth2 === "object"
|
|
199
|
-
? body.oauth2
|
|
200
|
-
: body;
|
|
201
|
-
const token = oauth2.access_token;
|
|
202
|
-
return typeof token === "string" && token ? token : undefined;
|
|
203
|
-
}
|
|
204
|
-
async #request(path, init = {}) {
|
|
205
|
-
return await requestAgentAuthJson({
|
|
206
|
-
url: `${this.context.baseUrl}${path}`,
|
|
207
|
-
init,
|
|
208
|
-
config: this.context,
|
|
209
|
-
timeoutMs: this.#timeoutMs,
|
|
210
|
-
fetchImpl: this.#fetchImpl,
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
/** Agent Auth answers 409 when a stored grant has lapsed and needs re-auth. */
|
|
215
|
-
function isAuthorizationRequired(status, body) {
|
|
216
|
-
if (status !== 409) {
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
const detail = String(body.detail ?? body.title ?? body.error ?? "").toLowerCase();
|
|
220
|
-
return (body.error === "authorization_required" ||
|
|
221
|
-
detail.includes("authorization is required") ||
|
|
222
|
-
detail.includes("oauth authorization"));
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=agent-auth.js.map
|