managed-deepagents 0.0.3-dev.32 → 0.0.3-dev.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/connectors.d.ts +2 -7
  2. package/dist/connectors.d.ts.map +1 -1
  3. package/dist/connectors.js +1 -18
  4. package/dist/connectors.js.map +1 -1
  5. package/dist/index.d.ts +0 -5
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +0 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/runtime/index.d.ts +0 -13
  10. package/dist/runtime/index.d.ts.map +1 -1
  11. package/dist/runtime/index.js +12 -39
  12. package/dist/runtime/index.js.map +1 -1
  13. package/dist/runtime/types.d.ts +7 -23
  14. package/dist/runtime/types.d.ts.map +1 -1
  15. package/dist/types.d.ts +0 -9
  16. package/dist/types.d.ts.map +1 -1
  17. package/package.json +8 -12
  18. package/dist/connectors/langsmith.d.ts +0 -133
  19. package/dist/connectors/langsmith.d.ts.map +0 -1
  20. package/dist/connectors/langsmith.js +0 -262
  21. package/dist/connectors/langsmith.js.map +0 -1
  22. package/dist/identity.d.ts +0 -273
  23. package/dist/identity.d.ts.map +0 -1
  24. package/dist/identity.js +0 -358
  25. package/dist/identity.js.map +0 -1
  26. package/dist/runtime/auth.d.ts +0 -54
  27. package/dist/runtime/auth.d.ts.map +0 -1
  28. package/dist/runtime/auth.js +0 -191
  29. package/dist/runtime/auth.js.map +0 -1
  30. package/dist/runtime/connector.d.ts +0 -138
  31. package/dist/runtime/connector.d.ts.map +0 -1
  32. package/dist/runtime/connector.js +0 -82
  33. package/dist/runtime/connector.js.map +0 -1
  34. package/dist/runtime/credentials.d.ts +0 -60
  35. package/dist/runtime/credentials.d.ts.map +0 -1
  36. package/dist/runtime/credentials.js +0 -189
  37. package/dist/runtime/credentials.js.map +0 -1
  38. package/dist/runtime/identity-http.d.ts +0 -27
  39. package/dist/runtime/identity-http.d.ts.map +0 -1
  40. package/dist/runtime/identity-http.js +0 -150
  41. package/dist/runtime/identity-http.js.map +0 -1
  42. package/dist/runtime/identity-runtime.d.ts +0 -54
  43. package/dist/runtime/identity-runtime.d.ts.map +0 -1
  44. package/dist/runtime/identity-runtime.js +0 -151
  45. package/dist/runtime/identity-runtime.js.map +0 -1
  46. package/dist/runtime/langsmith-connector.d.ts +0 -113
  47. package/dist/runtime/langsmith-connector.d.ts.map +0 -1
  48. package/dist/runtime/langsmith-connector.js +0 -410
  49. package/dist/runtime/langsmith-connector.js.map +0 -1
  50. package/dist/runtime/managed-middleware.d.ts +0 -25
  51. package/dist/runtime/managed-middleware.d.ts.map +0 -1
  52. package/dist/runtime/managed-middleware.js +0 -76
  53. package/dist/runtime/managed-middleware.js.map +0 -1
  54. package/dist/runtime/managed-tools.d.ts +0 -61
  55. package/dist/runtime/managed-tools.d.ts.map +0 -1
  56. package/dist/runtime/managed-tools.js +0 -102
  57. package/dist/runtime/managed-tools.js.map +0 -1
  58. package/dist/runtime/validated-token.d.ts +0 -25
  59. package/dist/runtime/validated-token.d.ts.map +0 -1
  60. package/dist/runtime/validated-token.js +0 -260
  61. package/dist/runtime/validated-token.js.map +0 -1
@@ -1,410 +0,0 @@
1
- /**
2
- * LangSmith connector — runtime enforcement engine.
3
- *
4
- * Mounted by the connector's `http(ctx)` hook on its namespaced sub-router.
5
- * Exposes one uniform endpoint per capability:
6
- *
7
- * POST /connectors/langsmith/capabilities/{capability_id}
8
- *
9
- * with a JSON body naming the `action` and its parameters. Per request the
10
- * engine resolves identity (resolve-or-401), checks the caller surface, checks
11
- * the action, validates typed constraints, performs the LangSmith operation
12
- * server-side with the workspace key, and returns an allowlisted response.
13
- *
14
- * v0 does NOT prove object ownership (`runId` is treated as an unguessable
15
- * capability, matching the app being replaced), and has no rate limiting, audit,
16
- * or multi-workspace fan-out.
17
- */
18
- import { Client } from "langsmith";
19
- /** An error carrying an HTTP status the engine surfaces to the caller. */
20
- export class EnforcementError extends Error {
21
- status;
22
- constructor(status, message) {
23
- super(message);
24
- this.status = status;
25
- this.name = "EnforcementError";
26
- }
27
- }
28
- /**
29
- * Mount the capability route on the connector's namespaced sub-router. Runs the
30
- * identity-dependent authoring checks at mount time (fails startup on an illegal
31
- * scope/ingress combination), then registers the uniform POST endpoint.
32
- */
33
- export function mountLangSmithRoutes(ctx, capabilities, client = defaultClient()) {
34
- validateAgainstIdentity(capabilities, ctx.identity);
35
- const deps = {
36
- capabilitiesById: new Map(capabilities.map((c) => [c.id, c])),
37
- client,
38
- identityConfig: ctx.identity,
39
- requireIdentity: ctx.requireIdentity,
40
- };
41
- ctx.router.post("/capabilities/:id", (request) => handleCapabilityRequest(request, deps));
42
- }
43
- /** Identity-aware authoring validation, run when the app is constructed. */
44
- export function validateAgainstIdentity(capabilities, identity) {
45
- const httpMode = identity?.ingress.http;
46
- const hasValidatedToken = httpMode !== undefined && httpMode !== "trusted_backend";
47
- const tenancy = identity?.tenancy ?? "single";
48
- for (const capability of capabilities) {
49
- const externallyExposed = capability.exposeTo.length > 0;
50
- const identityScoped = capability.scope === "actor" ||
51
- capability.scope === "tenant" ||
52
- capability.scope === "thread" ||
53
- capability.scope === "run";
54
- if (!identity) {
55
- const readOnly = capability.actions.every((a) => a.startsWith("read"));
56
- if (externallyExposed && !(capability.scope === "agent" && readOnly)) {
57
- throw new Error(`LangSmith capability "${capability.id}" is exposed externally but the ` +
58
- `deployment has no identity configured. Only agent-scoped, read-only ` +
59
- `capabilities may be exposed without identity.`);
60
- }
61
- continue;
62
- }
63
- if (capability.scope === "tenant" && tenancy === "single") {
64
- throw new Error(`LangSmith capability "${capability.id}" is tenant-scoped but the ` +
65
- `deployment is tenancy: "single".`);
66
- }
67
- if (capability.exposeTo.includes("browser") &&
68
- identityScoped &&
69
- !hasValidatedToken) {
70
- throw new Error(`LangSmith capability "${capability.id}" is ${capability.scope}-scoped and ` +
71
- `exposed to browser, but the deployment has no validated_token ingress ` +
72
- `to resolve an end-user identity.`);
73
- }
74
- }
75
- }
76
- /** The per-request enforcement pipeline. Returns a JSON `Response`. */
77
- export async function handleCapabilityRequest(request, deps) {
78
- try {
79
- const capabilityId = capabilityIdFromUrl(request.url);
80
- const capability = deps.capabilitiesById.get(capabilityId);
81
- if (!capability) {
82
- throw new EnforcementError(404, `unknown capability "${capabilityId}"`);
83
- }
84
- const identity = await deps.requireIdentity(request);
85
- const surface = callerSurface(identity, deps.identityConfig);
86
- if (!capability.exposeTo.includes(surface)) {
87
- throw new EnforcementError(403, `capability "${capability.id}" is not exposed to ${surface}`);
88
- }
89
- const body = await parseJsonBody(request);
90
- const action = String(body.action ?? "");
91
- if (!capability.actions.includes(action)) {
92
- throw new EnforcementError(403, `action "${action}" is not allowed for capability "${capability.id}"`);
93
- }
94
- const raw = toRecord(await performLangSmithCall(capability, action, body, deps));
95
- const shaped = shapeResponse(raw, capability);
96
- return jsonResponse(200, { data: shaped });
97
- }
98
- catch (error) {
99
- if (error instanceof EnforcementError) {
100
- return jsonResponse(error.status, { error: error.message });
101
- }
102
- const status = statusFromUnknownError(error);
103
- return jsonResponse(status, { error: errorMessage(error) });
104
- }
105
- }
106
- /** Map the resolved identity + ingress mode to a caller surface. */
107
- export function callerSurface(identity, identityConfig) {
108
- const provider = identity.source.provider;
109
- if (provider === "slack") {
110
- return "channel";
111
- }
112
- if (provider === "schedule") {
113
- return "schedule";
114
- }
115
- // http / cli: browser vs trusted_backend depends on the ingress mode.
116
- return identityConfig?.ingress.http === "trusted_backend"
117
- ? "trusted_backend"
118
- : "browser";
119
- }
120
- // --- Call mapping ----------------------------------------------------------
121
- async function performLangSmithCall(capability, action, body, deps) {
122
- switch (capability.resource) {
123
- case "feedback":
124
- return feedbackCall(capability, action, body, deps.client);
125
- case "runs":
126
- return runsCall(action, body, deps.client);
127
- case "examples":
128
- return examplesCall(capability, body, deps.client);
129
- case "annotation_queues":
130
- return annotationQueueCall(capability, body, deps.client);
131
- case "prompts":
132
- return deps.client.readPrompt({ name: requireString(body, "name") });
133
- case "threads":
134
- return threadsCall(capability, action, body, deps.client);
135
- default:
136
- throw new EnforcementError(400, `resource "${capability.resource}" is not supported in v0`);
137
- }
138
- }
139
- async function feedbackCall(capability, action, body, client) {
140
- const c = capability.constraints ?? {};
141
- if (action === "create") {
142
- const key = requireString(body, "key");
143
- assertAllowed(c.keys, key, "key");
144
- // Validated against the `scores` allowlist, then handed to the SDK as a
145
- // categorical score/value (see LangSmithClient docs).
146
- const score = body.score;
147
- if (score !== undefined) {
148
- assertAllowed(c.scores, String(score), "score");
149
- }
150
- const comment = optionalComment(body, c.maxCommentChars);
151
- return client.createFeedback({
152
- runId: requireString(body, "runId"),
153
- key,
154
- ...(score !== undefined ? { score } : {}),
155
- ...(comment !== undefined ? { comment } : {}),
156
- ...(typeof body.feedbackId === "string"
157
- ? { feedbackId: body.feedbackId }
158
- : {}),
159
- });
160
- }
161
- if (action === "update") {
162
- const comment = optionalComment(body, c.maxCommentChars);
163
- const score = body.score;
164
- return client.updateFeedback({
165
- feedbackId: requireString(body, "feedbackId"),
166
- ...(score !== undefined ? { score } : {}),
167
- ...(comment !== undefined ? { comment } : {}),
168
- });
169
- }
170
- if (action === "delete") {
171
- return client.deleteFeedback({
172
- feedbackId: requireString(body, "feedbackId"),
173
- });
174
- }
175
- throw new EnforcementError(400, `unknown feedback action "${action}"`);
176
- }
177
- async function runsCall(action, body, client) {
178
- const runId = requireString(body, "runId");
179
- if (action === "read") {
180
- return client.readRun({ runId });
181
- }
182
- if (action === "share") {
183
- return client.shareRun({ runId });
184
- }
185
- throw new EnforcementError(400, `unknown runs action "${action}"`);
186
- }
187
- async function examplesCall(capability, body, client) {
188
- const c = capability.constraints ?? {};
189
- const dataset = c.dataset;
190
- if (!dataset) {
191
- throw new EnforcementError(400, "examples capability has no dataset");
192
- }
193
- const inputs = requireObject(body, "inputs");
194
- const allowedFields = c.allowedFields;
195
- if (allowedFields) {
196
- for (const field of Object.keys(inputs)) {
197
- if (!allowedFields.includes(field)) {
198
- throw new EnforcementError(400, `field "${field}" is not allowed`);
199
- }
200
- }
201
- }
202
- const outputs = body.outputs && typeof body.outputs === "object"
203
- ? body.outputs
204
- : undefined;
205
- return client.createExample({
206
- dataset,
207
- inputs,
208
- ...(outputs ? { outputs } : {}),
209
- });
210
- }
211
- async function annotationQueueCall(capability, body, client) {
212
- const c = capability.constraints ?? {};
213
- const queue = c.queue;
214
- if (!queue) {
215
- throw new EnforcementError(400, "annotation queue capability has no queue");
216
- }
217
- const priority = body.priority;
218
- if (priority !== undefined) {
219
- assertAllowed(c.allowedPriorities, String(priority), "priority");
220
- }
221
- const note = optionalComment(body, c.maxNoteChars, "note");
222
- return client.enqueueRun({
223
- queue,
224
- runId: requireString(body, "runId"),
225
- ...(typeof priority === "string" ? { priority } : {}),
226
- ...(note !== undefined ? { note } : {}),
227
- });
228
- }
229
- async function threadsCall(capability, action, body, client) {
230
- const threadId = requireString(body, "threadId");
231
- if (action === "read") {
232
- return client.readThread({ threadId });
233
- }
234
- if (action === "update_metadata") {
235
- const c = capability.constraints ?? {};
236
- const metadata = requireObject(body, "metadata");
237
- const metadataKeys = c.metadataKeys;
238
- if (metadataKeys) {
239
- for (const key of Object.keys(metadata)) {
240
- if (!metadataKeys.includes(key)) {
241
- throw new EnforcementError(400, `metadata key "${key}" is not allowed`);
242
- }
243
- }
244
- }
245
- const maxTitle = c.maxTitleChars;
246
- if (maxTitle !== undefined && typeof metadata.title === "string") {
247
- if (metadata.title.length > maxTitle) {
248
- throw new EnforcementError(400, `title exceeds ${maxTitle} characters`);
249
- }
250
- }
251
- return client.updateThreadMetadata({ threadId, metadata });
252
- }
253
- throw new EnforcementError(400, `unknown threads action "${action}"`);
254
- }
255
- // --- Response shaping ------------------------------------------------------
256
- /** Apply the capability's `include` allowlist, then drop any `redact` roots. */
257
- export function shapeResponse(raw, capability) {
258
- const include = capability.response?.include ?? [];
259
- const redact = new Set(capability.response?.redact ?? []);
260
- const picked = {};
261
- for (const path of include) {
262
- const [root, ...rest] = path.split(".");
263
- if (root === undefined || redact.has(root)) {
264
- continue;
265
- }
266
- if (rest.length === 0) {
267
- if (root in raw) {
268
- picked[root] = raw[root];
269
- }
270
- continue;
271
- }
272
- const nested = pickNested(raw[root], rest);
273
- if (nested !== undefined) {
274
- const existing = picked[root] ?? {};
275
- picked[root] = { ...existing, [rest.join(".")]: nested };
276
- }
277
- }
278
- return picked;
279
- }
280
- function pickNested(value, path) {
281
- let current = value;
282
- for (const segment of path) {
283
- if (current && typeof current === "object" && segment in current) {
284
- current = current[segment];
285
- }
286
- else {
287
- return undefined;
288
- }
289
- }
290
- return current;
291
- }
292
- // --- Helpers ---------------------------------------------------------------
293
- function capabilityIdFromUrl(url) {
294
- const { pathname } = new URL(url);
295
- const marker = "/capabilities/";
296
- const index = pathname.lastIndexOf(marker);
297
- if (index === -1) {
298
- throw new EnforcementError(404, "capability id missing from path");
299
- }
300
- return decodeURIComponent(pathname.slice(index + marker.length));
301
- }
302
- async function parseJsonBody(request) {
303
- try {
304
- const parsed = await request.json();
305
- if (parsed && typeof parsed === "object") {
306
- return parsed;
307
- }
308
- }
309
- catch {
310
- // fall through to the uniform error below
311
- }
312
- throw new EnforcementError(400, "request body must be a JSON object");
313
- }
314
- function requireString(body, key) {
315
- const value = body[key];
316
- if (typeof value !== "string" || value.length === 0) {
317
- throw new EnforcementError(400, `missing or invalid "${key}"`);
318
- }
319
- return value;
320
- }
321
- function requireObject(body, key) {
322
- const value = body[key];
323
- if (!value || typeof value !== "object" || Array.isArray(value)) {
324
- throw new EnforcementError(400, `missing or invalid "${key}"`);
325
- }
326
- return value;
327
- }
328
- function assertAllowed(allowed, value, label) {
329
- if (allowed && !allowed.includes(value)) {
330
- throw new EnforcementError(400, `${label} "${value}" is not allowed`);
331
- }
332
- }
333
- function optionalComment(body, maxChars, field = "comment") {
334
- const value = body[field];
335
- if (value === undefined || value === null) {
336
- return undefined;
337
- }
338
- if (typeof value !== "string") {
339
- throw new EnforcementError(400, `"${field}" must be a string`);
340
- }
341
- if (maxChars !== undefined && value.length > maxChars) {
342
- throw new EnforcementError(400, `"${field}" exceeds ${maxChars} characters`);
343
- }
344
- return value;
345
- }
346
- function jsonResponse(status, body) {
347
- return new Response(JSON.stringify(body), {
348
- status,
349
- headers: { "content-type": "application/json" },
350
- });
351
- }
352
- function statusFromUnknownError(error) {
353
- const status = error?.status;
354
- if (typeof status === "number" && status >= 400 && status <= 599) {
355
- return status;
356
- }
357
- return 502;
358
- }
359
- function errorMessage(error) {
360
- if (error instanceof Error) {
361
- return error.message;
362
- }
363
- return "internal error";
364
- }
365
- /** Coerce an SDK result (object | void | null) into a plain record for shaping. */
366
- function toRecord(value) {
367
- if (value && typeof value === "object") {
368
- return { ...value };
369
- }
370
- return {};
371
- }
372
- /**
373
- * Default client backed by the `langsmith` SDK {@link Client}. The underlying
374
- * client is created on first use so building the engine (e.g. for an app with no
375
- * requests yet) never requires `LANGSMITH_API_KEY`.
376
- *
377
- * A connector "score" is numeric/boolean → LangSmith `score`, or categorical
378
- * (string/object) → LangSmith feedback `value`.
379
- */
380
- export function defaultClient() {
381
- let client;
382
- const sdk = () => {
383
- client ??= new Client({ apiKey: process.env.LANGSMITH_API_KEY });
384
- return client;
385
- };
386
- const isScore = (value) => typeof value === "number" || typeof value === "boolean" || value === null;
387
- const scoreOrValue = (value) => {
388
- if (isScore(value)) {
389
- return { score: value };
390
- }
391
- return value === undefined ? {} : { value };
392
- };
393
- return {
394
- createFeedback: ({ runId, key, score, comment, feedbackId }) => sdk().createFeedback(runId, key, {
395
- ...scoreOrValue(score),
396
- comment,
397
- feedbackId,
398
- }),
399
- updateFeedback: ({ feedbackId, score, comment }) => sdk().updateFeedback(feedbackId, { ...scoreOrValue(score), comment }),
400
- deleteFeedback: ({ feedbackId }) => sdk().deleteFeedback(feedbackId),
401
- readRun: ({ runId }) => sdk().readRun(runId),
402
- shareRun: async ({ runId }) => ({ url: await sdk().shareRun(runId) }),
403
- createExample: ({ dataset, inputs, outputs }) => sdk().createExample({ inputs, outputs, dataset_name: dataset }),
404
- enqueueRun: ({ queue, runId }) => sdk().addRunsToAnnotationQueue(queue, [runId]),
405
- readPrompt: ({ name }) => sdk().getPrompt(name),
406
- readThread: ({ threadId }) => sdk().readRun(threadId),
407
- updateThreadMetadata: ({ threadId, metadata }) => sdk().updateRun(threadId, { extra: metadata }),
408
- };
409
- }
410
- //# sourceMappingURL=langsmith-connector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langsmith-connector.js","sourceRoot":"","sources":["../../src/runtime/langsmith-connector.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { IdentityConfig } from "../identity.js";
2
- /**
3
- * A middleware from MDA's perspective: an object carrying optional lifecycle and
4
- * wrap hooks. Kept structural so the wrapper works across `createMiddleware`
5
- * objects and class-based `AgentMiddleware` instances alike.
6
- */
7
- export interface ManagedMiddleware {
8
- [key: string]: unknown;
9
- }
10
- /**
11
- * Wrap a middleware so every hook sees `runtime.identity` (…) without changing
12
- * its name, schema, registered tools, or class.
13
- *
14
- * A `Proxy` intercepts only the hook properties: lifecycle hooks
15
- * (`beforeAgent`/`beforeModel`/`afterModel`/`afterAgent`, in either function or
16
- * `{ hook, canJumpTo }` form) get their `runtime` argument augmented, and the
17
- * `wrap*` hooks get `request.runtime` augmented. Every other property and method
18
- * — including the middleware brand, `name`, and `stateSchema` — passes through,
19
- * preserving hook detection, `instanceof`, and framework wiring. Hooks are bound
20
- * to the original instance so class-based middleware keep their `this`.
21
- */
22
- export declare function withManagedMiddleware<T extends ManagedMiddleware>(middleware: T, cfg?: IdentityConfig): T;
23
- /** Wrap every middleware in a list with {@link withManagedMiddleware}. */
24
- export declare function wrapMiddlewareWithManagedRuntime<T extends ManagedMiddleware>(middleware: readonly T[], cfg?: IdentityConfig): T[];
25
- //# sourceMappingURL=managed-middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-middleware.d.ts","sourceRoot":"","sources":["../../src/runtime/managed-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMrD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA4ED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,iBAAiB,EAC/D,UAAU,EAAE,CAAC,EACb,GAAG,CAAC,EAAE,cAAc,GACnB,CAAC,CAgBH;AAED,0EAA0E;AAC1E,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,iBAAiB,EAC1E,UAAU,EAAE,SAAS,CAAC,EAAE,EACxB,GAAG,CAAC,EAAE,cAAc,GACnB,CAAC,EAAE,CAEL"}
@@ -1,76 +0,0 @@
1
- import { managedRuntimeOverrides, } from "./managed-tools.js";
2
- /** Lifecycle hooks receive `(state, runtime)`; either a fn or `{ hook, canJumpTo }`. */
3
- const LIFECYCLE_HOOKS = new Set([
4
- "beforeAgent",
5
- "beforeModel",
6
- "afterModel",
7
- "afterAgent",
8
- ]);
9
- /** Wrap hooks receive `(request, handler)` with `request.runtime`. */
10
- const WRAP_HOOKS = new Set(["wrapModelCall", "wrapToolCall"]);
11
- /**
12
- * Return a copy of the middleware runtime with the managed primitives
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
- */
18
- function augmentRuntime(runtime, cfg) {
19
- const overrides = managedRuntimeOverrides(runtime, cfg);
20
- return Object.keys(overrides).length > 0
21
- ? { ...runtime, ...overrides }
22
- : runtime;
23
- }
24
- function wrapLifecycleHook(target, value, cfg) {
25
- if (typeof value === "function") {
26
- const fn = value;
27
- return (state, runtime) => fn.call(target, state, augmentRuntime(runtime, cfg));
28
- }
29
- if (value && typeof value.hook === "function") {
30
- const original = value;
31
- const fn = original.hook;
32
- return {
33
- ...original,
34
- hook: (state, runtime) => fn.call(target, state, augmentRuntime(runtime, cfg)),
35
- };
36
- }
37
- return value;
38
- }
39
- function wrapWrapHook(target, value, cfg) {
40
- const fn = value;
41
- return (request, handler) => fn.call(target, { ...request, runtime: augmentRuntime(request?.runtime, cfg) }, handler);
42
- }
43
- /**
44
- * Wrap a middleware so every hook sees `runtime.identity` (…) without changing
45
- * its name, schema, registered tools, or class.
46
- *
47
- * A `Proxy` intercepts only the hook properties: lifecycle hooks
48
- * (`beforeAgent`/`beforeModel`/`afterModel`/`afterAgent`, in either function or
49
- * `{ hook, canJumpTo }` form) get their `runtime` argument augmented, and the
50
- * `wrap*` hooks get `request.runtime` augmented. Every other property and method
51
- * — including the middleware brand, `name`, and `stateSchema` — passes through,
52
- * preserving hook detection, `instanceof`, and framework wiring. Hooks are bound
53
- * to the original instance so class-based middleware keep their `this`.
54
- */
55
- export function withManagedMiddleware(middleware, cfg) {
56
- return new Proxy(middleware, {
57
- get(target, property, receiver) {
58
- const value = Reflect.get(target, property, receiver);
59
- if (value == null || typeof property !== "string") {
60
- return value;
61
- }
62
- if (LIFECYCLE_HOOKS.has(property)) {
63
- return wrapLifecycleHook(target, value, cfg);
64
- }
65
- if (WRAP_HOOKS.has(property)) {
66
- return wrapWrapHook(target, value, cfg);
67
- }
68
- return value;
69
- },
70
- });
71
- }
72
- /** Wrap every middleware in a list with {@link withManagedMiddleware}. */
73
- export function wrapMiddlewareWithManagedRuntime(middleware, cfg) {
74
- return middleware.map((entry) => withManagedMiddleware(entry, cfg));
75
- }
76
- //# sourceMappingURL=managed-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-middleware.js","sourceRoot":"","sources":["../../src/runtime/managed-middleware.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import type { ToolRuntime } from "@langchain/core/tools";
2
- import type { IdentityConfig, RuntimeIdentity } from "../identity.js";
3
- import { type CredentialsProvider } from "./credentials.js";
4
- import type { RuntimeConfigLike } from "./identity-runtime.js";
5
- export type { RuntimeConfigLike } from "./identity-runtime.js";
6
- /**
7
- * A LangChain/LangGraph tool from MDA's perspective: the only surface the runtime
8
- * seam touches is `invoke(input, runtime)`. Kept structural so the wrapper works
9
- * across `DynamicStructuredTool`, MCP tools, and any other tool shape.
10
- */
11
- export interface InvokableTool {
12
- invoke(input: unknown, runtime?: RuntimeConfigLike): unknown;
13
- }
14
- /** The managed primitives MDA layers onto the tool runtime. */
15
- export interface ManagedRuntimeExtras {
16
- identity?: RuntimeIdentity;
17
- /**
18
- * Per-run credential minting for custom mode (`scoping.credentials: "custom"`).
19
- * Absent in managed/`none` modes. Call `runtime.credentials.for(target)` and
20
- * attach the returned headers to the downstream request.
21
- */
22
- credentials?: CredentialsProvider;
23
- }
24
- /**
25
- * The runtime surface managed Deep Agent tools receive: LangGraph's
26
- * {@link ToolRuntime} plus MDA-managed primitives such as `identity`.
27
- *
28
- * Annotate the second parameter of a `tool(...)` handler when you need the
29
- * frozen identity envelope for the current run.
30
- */
31
- export interface ManagedDeepAgentRuntime<TState = unknown, TContext = unknown> extends ToolRuntime<TState, TContext>, ManagedRuntimeExtras {
32
- }
33
- /**
34
- * Derive the managed runtime primitives for a run from its config. Identity is
35
- * built only from the trusted `configurable.langgraph_auth_user` the custom-auth
36
- * handler produced — the field LangGraph propagates to every node and tool.
37
- */
38
- export declare function managedRuntimeExtras(runtime: RuntimeConfigLike | undefined, cfg?: IdentityConfig): ManagedRuntimeExtras;
39
- /**
40
- * The fields MDA overlays onto the runtime a tool/middleware hook receives:
41
- * the frozen `identity` (when an actor resolved) and a `configurable` with the
42
- * reserved identity keys stripped (§8) so downstream code can't read a
43
- * client-spoofed `actor_id`/`tenant_id`. Returns an empty object when there is
44
- * nothing to change, so the original runtime passes through untouched.
45
- */
46
- export declare function managedRuntimeOverrides(runtime: RuntimeConfigLike | undefined, cfg?: IdentityConfig): ManagedRuntimeExtras & {
47
- configurable?: Record<string, unknown>;
48
- };
49
- /**
50
- * Wrap a tool so its runtime carries the managed primitives (`runtime.identity`,
51
- * …) without changing its name, schema, or class.
52
- *
53
- * Augments `invoke` (for LangGraph's `ToolNode`) and patches the tool's internal
54
- * `func`/`coroutine` so identity reaches the authored handler even when LangChain
55
- * rewrites the runtime into a RunnableConfig before calling the tool function.
56
- * Every other property/method passes through untouched.
57
- */
58
- export declare function withManagedRuntime<T extends InvokableTool>(managedTool: T, cfg?: IdentityConfig): T;
59
- /** Wrap every tool in a list with {@link withManagedRuntime}. */
60
- export declare function wrapToolsWithManagedRuntime<T extends InvokableTool>(tools: readonly T[], cfg?: IdentityConfig): T[];
61
- //# sourceMappingURL=managed-tools.d.ts.map
@@ -1 +0,0 @@
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,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,kBAAkB,CAAC;AAM1B,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;;;;OAIG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;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;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,GAAG,CAAC,EAAE,cAAc,GACnB,oBAAoB,CAatB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,GAAG,CAAC,EAAE,cAAc,GACnB,oBAAoB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA8BnE;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,aAAa,EACxD,WAAW,EAAE,CAAC,EACd,GAAG,CAAC,EAAE,cAAc,GACnB,CAAC,CAoCH;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,aAAa,EACjE,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,GAAG,CAAC,EAAE,cAAc,GACnB,CAAC,EAAE,CAEL"}