@mongodb-js/agent-engine-sdk-langgraph 0.11.3

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 (128) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE.md +201 -0
  3. package/README.md +149 -0
  4. package/dist/agent.d.ts +53 -0
  5. package/dist/agent.d.ts.map +1 -0
  6. package/dist/agent.js +508 -0
  7. package/dist/agent.js.map +1 -0
  8. package/dist/backends/tool_sandbox.d.ts +15 -0
  9. package/dist/backends/tool_sandbox.d.ts.map +1 -0
  10. package/dist/backends/tool_sandbox.js +15 -0
  11. package/dist/backends/tool_sandbox.js.map +1 -0
  12. package/dist/backends/toolpod.d.ts +68 -0
  13. package/dist/backends/toolpod.d.ts.map +1 -0
  14. package/dist/backends/toolpod.js +451 -0
  15. package/dist/backends/toolpod.js.map +1 -0
  16. package/dist/call_interrupt.d.ts +20 -0
  17. package/dist/call_interrupt.d.ts.map +1 -0
  18. package/dist/call_interrupt.js +23 -0
  19. package/dist/call_interrupt.js.map +1 -0
  20. package/dist/checkpoint_branch.d.ts +58 -0
  21. package/dist/checkpoint_branch.d.ts.map +1 -0
  22. package/dist/checkpoint_branch.js +239 -0
  23. package/dist/checkpoint_branch.js.map +1 -0
  24. package/dist/checkpointer.d.ts +21 -0
  25. package/dist/checkpointer.d.ts.map +1 -0
  26. package/dist/checkpointer.js +31 -0
  27. package/dist/checkpointer.js.map +1 -0
  28. package/dist/deep_agent.d.ts +49 -0
  29. package/dist/deep_agent.d.ts.map +1 -0
  30. package/dist/deep_agent.js +110 -0
  31. package/dist/deep_agent.js.map +1 -0
  32. package/dist/deep_agent_checkpointer.d.ts +11 -0
  33. package/dist/deep_agent_checkpointer.d.ts.map +1 -0
  34. package/dist/deep_agent_checkpointer.js +19 -0
  35. package/dist/deep_agent_checkpointer.js.map +1 -0
  36. package/dist/deep_agent_task.d.ts +26 -0
  37. package/dist/deep_agent_task.d.ts.map +1 -0
  38. package/dist/deep_agent_task.js +49 -0
  39. package/dist/deep_agent_task.js.map +1 -0
  40. package/dist/durable_deep_agent.d.ts +23 -0
  41. package/dist/durable_deep_agent.d.ts.map +1 -0
  42. package/dist/durable_deep_agent.js +176 -0
  43. package/dist/durable_deep_agent.js.map +1 -0
  44. package/dist/durable_message_identity.d.ts +5 -0
  45. package/dist/durable_message_identity.d.ts.map +1 -0
  46. package/dist/durable_message_identity.js +106 -0
  47. package/dist/durable_message_identity.js.map +1 -0
  48. package/dist/durable_session.d.ts +30 -0
  49. package/dist/durable_session.d.ts.map +1 -0
  50. package/dist/durable_session.js +400 -0
  51. package/dist/durable_session.js.map +1 -0
  52. package/dist/durable_subgraphs.d.ts +13 -0
  53. package/dist/durable_subgraphs.d.ts.map +1 -0
  54. package/dist/durable_subgraphs.js +82 -0
  55. package/dist/durable_subgraphs.js.map +1 -0
  56. package/dist/durable_tools.d.ts +12 -0
  57. package/dist/durable_tools.d.ts.map +1 -0
  58. package/dist/durable_tools.js +41 -0
  59. package/dist/durable_tools.js.map +1 -0
  60. package/dist/execution_session.d.ts +63 -0
  61. package/dist/execution_session.d.ts.map +1 -0
  62. package/dist/execution_session.js +300 -0
  63. package/dist/execution_session.js.map +1 -0
  64. package/dist/index.d.ts +19 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +17 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/llm_adapter.d.ts +41 -0
  69. package/dist/llm_adapter.d.ts.map +1 -0
  70. package/dist/llm_adapter.js +177 -0
  71. package/dist/llm_adapter.js.map +1 -0
  72. package/dist/messages.d.ts +56 -0
  73. package/dist/messages.d.ts.map +1 -0
  74. package/dist/messages.js +592 -0
  75. package/dist/messages.js.map +1 -0
  76. package/dist/node_logger_adapter.d.ts +51 -0
  77. package/dist/node_logger_adapter.d.ts.map +1 -0
  78. package/dist/node_logger_adapter.js +163 -0
  79. package/dist/node_logger_adapter.js.map +1 -0
  80. package/dist/platform_checkpointer.d.ts +70 -0
  81. package/dist/platform_checkpointer.d.ts.map +1 -0
  82. package/dist/platform_checkpointer.js +252 -0
  83. package/dist/platform_checkpointer.js.map +1 -0
  84. package/dist/query.d.ts +103 -0
  85. package/dist/query.d.ts.map +1 -0
  86. package/dist/query.js +623 -0
  87. package/dist/query.js.map +1 -0
  88. package/dist/runtime.d.ts +336 -0
  89. package/dist/runtime.d.ts.map +1 -0
  90. package/dist/runtime.js +881 -0
  91. package/dist/runtime.js.map +1 -0
  92. package/dist/secure_llm.d.ts +93 -0
  93. package/dist/secure_llm.d.ts.map +1 -0
  94. package/dist/secure_llm.js +423 -0
  95. package/dist/secure_llm.js.map +1 -0
  96. package/dist/session_factory.d.ts +6 -0
  97. package/dist/session_factory.d.ts.map +1 -0
  98. package/dist/session_factory.js +29 -0
  99. package/dist/session_factory.js.map +1 -0
  100. package/dist/session_fork.d.ts +76 -0
  101. package/dist/session_fork.d.ts.map +1 -0
  102. package/dist/session_fork.js +428 -0
  103. package/dist/session_fork.js.map +1 -0
  104. package/dist/subagents.d.ts +37 -0
  105. package/dist/subagents.d.ts.map +1 -0
  106. package/dist/subagents.js +67 -0
  107. package/dist/subagents.js.map +1 -0
  108. package/dist/suspend.d.ts +27 -0
  109. package/dist/suspend.d.ts.map +1 -0
  110. package/dist/suspend.js +87 -0
  111. package/dist/suspend.js.map +1 -0
  112. package/dist/thread_id.d.ts +30 -0
  113. package/dist/thread_id.d.ts.map +1 -0
  114. package/dist/thread_id.js +69 -0
  115. package/dist/thread_id.js.map +1 -0
  116. package/dist/workflow_json.d.ts +11 -0
  117. package/dist/workflow_json.d.ts.map +1 -0
  118. package/dist/workflow_json.js +49 -0
  119. package/dist/workflow_json.js.map +1 -0
  120. package/dist/workflow_message.d.ts +11 -0
  121. package/dist/workflow_message.d.ts.map +1 -0
  122. package/dist/workflow_message.js +179 -0
  123. package/dist/workflow_message.js.map +1 -0
  124. package/dist/workflow_state.d.ts +7 -0
  125. package/dist/workflow_state.d.ts.map +1 -0
  126. package/dist/workflow_state.js +62 -0
  127. package/dist/workflow_state.js.map +1 -0
  128. package/package.json +66 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * LangChain SDK Runtime.
3
+ *
4
+ * Port of `agent_engine_sdk_langgraph/runtime.py`.
5
+ */
6
+ import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
7
+ import { type StructuredTool } from "@langchain/core/tools";
8
+ import { type ZodType } from "zod";
9
+ import { BaseApp, LLMToolSchema, type ToolDefinition } from "@mongodb-js/agent-engine-sdk";
10
+ import { Memory } from "@mongodb-js/agent-engine-sdk-memory";
11
+ import { RuntimeMode, type SessionFinishStatus } from "@mongodb-js/agent-engine-runner-shared";
12
+ import type { AnyBackendProtocol } from "deepagents";
13
+ import type { BaseCheckpointSaver } from "@langchain/langgraph";
14
+ import { LangGraphBaseAgent } from "./agent.js";
15
+ import type { PrepareAgentInput, ResolveThreadId } from "./agent.js";
16
+ import { createAgentEngineDeepAgent, type CreateAgentEngineDeepAgentOptions } from "./deep_agent.js";
17
+ import { PlatformCheckpointer } from "./platform_checkpointer.js";
18
+ /** Options for {@link App.deepAgent}. */
19
+ export interface DeepAgentOptions extends Omit<CreateAgentEngineDeepAgentOptions, "checkpointer" | "skillsBaseDir"> {
20
+ /**
21
+ * Checkpointer selection. Omitted (`undefined`) resolves to
22
+ * `app.checkpointer()` (MongoDB when configured, else none). `false` disables
23
+ * checkpointing. A `BaseCheckpointSaver` instance is used directly.
24
+ *
25
+ * Note the mapping differs from Python (`None` disables there): in TS,
26
+ * "disable" is `false`, and "use the default" is simply leaving it out.
27
+ */
28
+ checkpointer?: BaseCheckpointSaver | boolean;
29
+ /**
30
+ * Backend for filesystem/shell ops. Defaults to `AgentEngineToolPodBackend`, so
31
+ * every op is OE-audited and sandboxed in the Tool Pod. Pass a custom backend
32
+ * (e.g. deepagents' in-memory `StateBackend`) to override — note that doing so
33
+ * bypasses the OE audit path.
34
+ */
35
+ backend?: AnyBackendProtocol;
36
+ }
37
+ export type ToolDefinitionData = ToolDefinition;
38
+ export interface AppOptions {
39
+ appName: string;
40
+ appVersion?: string;
41
+ mongodbUri?: string | null;
42
+ databaseName?: string | null;
43
+ tracesCollectionName?: string;
44
+ /** @deprecated Ignored. The org is taken from the `ORG_ID` env var, which the platform injects. */
45
+ orgId?: string | null;
46
+ }
47
+ export interface ToolDecoratorOptions {
48
+ isLocal?: boolean;
49
+ providerType?: string;
50
+ scopes?: readonly string[];
51
+ network?: readonly string[];
52
+ timeout?: number;
53
+ redactFields?: readonly string[];
54
+ /**
55
+ * Human-readable description shown to the LLM (mirrors Python's docstring).
56
+ * TypeScript has no docstring introspection, so callers pass it explicitly.
57
+ */
58
+ description?: string;
59
+ /**
60
+ * Zod schema describing the tool's arguments. Without it, the LLM has no
61
+ * structured view of the parameters and tool calling will fail. Mirrors the
62
+ * type hints + Pydantic-style auto-schema that Python's `@app.tool()`
63
+ * derives from the function signature.
64
+ */
65
+ schema?: ZodType;
66
+ /** Override the registered tool name. Defaults to the wrapped function's `name`. */
67
+ name?: string;
68
+ }
69
+ /**
70
+ * LangChain SDK for the Atlas Agent Engine.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * import { App } from '@mongodb-js/agent-engine-sdk-langgraph';
75
+ *
76
+ * const app = new App({ appName: 'My Agent' });
77
+ *
78
+ * app.tool()((args: { query: string }) => 'result');
79
+ *
80
+ * app.entrypoint(() => {
81
+ * const llm = app.llm(chatModel);
82
+ * const checkpointer = app.checkpointer();
83
+ * const tools = app.getTools();
84
+ * // Build LangGraph...
85
+ * return graph;
86
+ * });
87
+ * ```
88
+ */
89
+ export declare class App extends BaseApp {
90
+ private readonly runtime;
91
+ private builderFn;
92
+ private graphCache;
93
+ private prepareInputFn;
94
+ private resolveThreadIdFn;
95
+ private readonly toolDefs;
96
+ private readonly lcTools;
97
+ private mongoClient;
98
+ private _checkpointer;
99
+ private readonly mcpToolsReady;
100
+ private resolvedCheckpointDb;
101
+ private _memory;
102
+ /**
103
+ * Unified memory facade over app-bound adapters.
104
+ *
105
+ * Lazily constructed on first access and cached (a long-lived singleton over
106
+ * per-request context). Operations resolve the end-user and session from the
107
+ * ambient execution context, so agent code calls `app.memory.saveSemantic(...)`
108
+ * without threading identity through. Requests route through the OE memory
109
+ * proxy; memory is reachable only while handling a platform request.
110
+ */
111
+ get memory(): Memory;
112
+ constructor(options: AppOptions);
113
+ /**
114
+ * Resolved once configured MCP servers have been discovered and registered
115
+ * as tools. `TenantRuntime.runAsync()` awaits this (via `GraphBuilderLike.ready()`)
116
+ * before starting the server.
117
+ */
118
+ ready(): Promise<void>;
119
+ /**
120
+ * Discover configured MCP servers' tools and register them the same way
121
+ * `App.tool()` registers author-declared tools. Port of Python's
122
+ * `_register_mcp_tools_from_config`.
123
+ */
124
+ private registerMcpTools;
125
+ get agentConfig(): ReturnType<typeof this.runtime.getAgentConfig>;
126
+ getToolDefinitions(): ToolDefinitionData[];
127
+ tools(): unknown[];
128
+ private registerToolDefinition;
129
+ /**
130
+ * Register a tool function.
131
+ *
132
+ * Returns a function that, when applied to a tool function, registers it
133
+ * and returns the function unchanged. Mirrors Python's `@app.tool()` shape.
134
+ */
135
+ tool(options?: ToolDecoratorOptions): <F extends (...input: never[]) => unknown>(fn: F) => F;
136
+ /** Mark the graph builder function. */
137
+ entrypoint<F extends () => unknown>(fn: F): F;
138
+ /**
139
+ * Register a hook that builds the graph's starting input from the caller's
140
+ * `AgentInput` and `RequestContext` for a fresh execution. Resume stays
141
+ * platform-managed. Returns the function unchanged so it can be used as a
142
+ * decorator. Equivalent to the Python SDK's `@app.prepare_agent_input`.
143
+ */
144
+ prepareAgentInput<F extends PrepareAgentInput>(fn: F): F;
145
+ /**
146
+ * Register a hook that builds the LangGraph checkpoint `thread_id`.
147
+ *
148
+ * Callers manage Atlas Agent Engine `session_id` (and authenticated `user_id`). The
149
+ * agent owns how those map to the LangGraph checkpoint key. When registered,
150
+ * the hook's return value is used verbatim on every invocation — fresh and
151
+ * resume — with no workspace suffix appended. When no hook is registered,
152
+ * the adapter derives `session_id:workspace_id` as today.
153
+ *
154
+ * Custom keys are invisible to Atlas Agent Engine session-history queries
155
+ * (`/query/sessions*`), which still look up only the default
156
+ * session/workspace-derived keys. Agents that bypass workspace scoping also
157
+ * own collision isolation within the checkpoint database.
158
+ *
159
+ * Equivalent to the Python SDK's `@app.resolve_thread_id`.
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * app.resolveThreadId((ctx) => `${ctx.sessionId}__${actorFrom(ctx.userId)}`);
164
+ * ```
165
+ */
166
+ resolveThreadId<F extends ResolveThreadId>(fn: F): F;
167
+ /**
168
+ * Build and return a `LangGraphBaseAgent` instance.
169
+ *
170
+ * Matches `GraphBuilderLike.getAgent({ callbacks? })` — agent-engine-runner-shared's
171
+ * `TenantRuntime.registerAndRun` introspects this method to compile the graph.
172
+ * Accepts an options object with an optional `callbacks` array, each wrapped
173
+ * in `LangGraphCallbackAdapter` before being passed to the graph.
174
+ */
175
+ getAgent(opts?: {
176
+ callbacks?: readonly unknown[];
177
+ }): LangGraphBaseAgent;
178
+ /**
179
+ * Return the materialized graph, building it at most once.
180
+ *
181
+ * `getAgent()` used to call the entrypoint on every `/execute` — real,
182
+ * measurable first-invoke latency. The graph carries no per-request
183
+ * state (callbacks/agent wrapper are still rebuilt fresh by every
184
+ * `getAgent()` call), so caching it is safe.
185
+ */
186
+ private getOrBuildGraph;
187
+ /**
188
+ * Build and cache the graph when explicitly requested. The TypeScript AER
189
+ * intentionally leaves construction on the existing lazy `/execute` path:
190
+ * this synchronous builder cannot run during standby warming without
191
+ * blocking the Node event loop and server health.
192
+ */
193
+ warmUp(): void;
194
+ /**
195
+ * Start the agent service.
196
+ *
197
+ * Async because the per-project store-DB name is resolved against the live
198
+ * cluster (an async listDatabases round trip in the Node driver) before the
199
+ * query plugin and checkpointer are wired, so AER writes land in the same
200
+ * database the OE reads. The synchronous framework hooks are still registered
201
+ * before the first `await`, preserving their ordering relative to startup.
202
+ */
203
+ run(options?: Record<string, unknown>): Promise<void>;
204
+ /**
205
+ * Resolve the store DB name once, before the checkpointer and query plugin
206
+ * are constructed. Honors `CHECKPOINT_DB_NAME` as an exact override (no
207
+ * project scoping). No-op outside AER mode or without a MongoDB URI when
208
+ * the override is unset (the checkpointer returns null in those cases).
209
+ */
210
+ private resolveCheckpointDbName;
211
+ /**
212
+ * Exact `CHECKPOINT_DB_NAME` override when set, else null.
213
+ * Shared by resolve / checkpointer / query plugin so the three paths cannot
214
+ * drift on trim/precedence.
215
+ */
216
+ private checkpointDbOverride;
217
+ /**
218
+ * Final MongoDBSaver / query-plugin database name for this app.
219
+ * Prefer the exact env override; otherwise the resolved (or base) store DB.
220
+ */
221
+ private checkpointDbName;
222
+ /**
223
+ * Register the LangGraph-backed `AERQueryPlugin` (AER mode only). A
224
+ * missing MongoDB URI or a failing checkpointer construction degrades to
225
+ * "no plugin" (routes return 501) instead of failing startup.
226
+ */
227
+ private registerQueryPlugin;
228
+ /**
229
+ * Register framework-specific hooks so agent-engine-runner-shared can dispatch to
230
+ * LangChain/LangGraph code without importing this package. Mirrors Python's
231
+ * `App._register_hooks` (static method).
232
+ */
233
+ private static registerHooks;
234
+ /**
235
+ * Wrap a LangChain LLM for audited I/O through the Orchestration Engine.
236
+ *
237
+ * In AER mode the LLM is wrapped in `SecureWrappedLLM`. In TOOL mode the raw
238
+ * LLM is returned unwrapped (the tool pod is the execution end of the chain).
239
+ *
240
+ * For agents with a single LLM, call without `llmId`. For agents with
241
+ * multiple LLMs every call must supply a unique `llmId`:
242
+ * const fast = app.llm(ChatOpenAI("gpt-5.4-mini"), "fast")
243
+ * const primary = app.llm(ChatOpenAI("gpt-5.4"), "primary")
244
+ * Unnamed calls register under the sentinel id `"__default__"`; a second
245
+ * unnamed call therefore raises the same duplicate-id error as a second
246
+ * named call with the same id.
247
+ */
248
+ llm(llm: BaseChatModel, llmId?: string): BaseChatModel;
249
+ /**
250
+ * Get the platform checkpointer for LangGraph.
251
+ *
252
+ * Lazily constructs and wraps a `MongoDBSaver` on first call in AER mode.
253
+ * Native sessions use that saver through the request-scoped platform
254
+ * wrapper. The underlying `MongoClient` is closed by `App.close()`.
255
+ *
256
+ * The database name is read from `CHECKPOINT_DB_NAME` when set (exact
257
+ * override, no project scoping). Otherwise the existing
258
+ * `MDB_AGENTIC_STORE_DB` / per-project store resolution is used
259
+ * (default: `"mdb_store"`). The URI comes from `MONGODB_URI` — the same
260
+ * source `TenantRuntime` uses internally.
261
+ *
262
+ * Mirrors Python `runtime.py:checkpointer()`.
263
+ */
264
+ checkpointer(): PlatformCheckpointer | null;
265
+ /**
266
+ * Build a deepagents graph pre-wired for Atlas Agent Engine AER.
267
+ *
268
+ * Wraps `llm` in `SecureWrappedLLM`, resolves relative skill paths, validates
269
+ * the subagent tree (string models are rejected — they would bypass OE
270
+ * routing), then delegates to deepagents' `createDeepAgent`.
271
+ *
272
+ * Each `skills` entry is a parent source directory. At runtime, deepagents
273
+ * lists it through the configured backend and treats each immediate child
274
+ * directory containing `SKILL.md` as one skill; discovery is not recursive.
275
+ * deepagents skips unreadable or unparsable frontmatter and skills missing
276
+ * `name` or `description`; it warns but may still load Agent Skills naming or
277
+ * directory-name violations.
278
+ *
279
+ * Mirrors Python `runtime.py:App.deep_agent()`.
280
+ *
281
+ * @throws {Error} `features.deep_agent` is not enabled, or a subagent spec
282
+ * uses a string model, or nesting exceeds the recursion cap.
283
+ */
284
+ deepAgent(llm: BaseChatModel, options?: DeepAgentOptions): ReturnType<typeof createAgentEngineDeepAgent>;
285
+ /**
286
+ * Resolve the base directory for relative skill paths: the directory
287
+ * containing `agent.yaml`, optionally narrowed by the source-root-relative
288
+ * `AGENTIC_SKILLS_DIR` override.
289
+ */
290
+ private resolveSkillsBaseDir;
291
+ /** Release resources held by this App instance. */
292
+ close(): Promise<void>;
293
+ /**
294
+ * Get wrapped tools for LangGraph's `ToolNode`.
295
+ *
296
+ * In AER mode, every tool is wrapped with `SecureToolWrapper` (via
297
+ * `createSecureToolFunction`) so executions route through OE for logging
298
+ * and policy enforcement. In other modes, the raw LangChain tools are
299
+ * returned unchanged.
300
+ */
301
+ getTools(): readonly StructuredTool[];
302
+ /** Get tool schemas for `llm.bindTools()`. Always the unwrapped LangChain tools. */
303
+ getToolSchemas(): readonly unknown[];
304
+ /**
305
+ * Generate a suspend command. If a tool should suspend, return the result of
306
+ * this method instead of completing normally.
307
+ */
308
+ suspend(reason: string, context: Record<string, unknown>): string;
309
+ /**
310
+ * Mark this session finished so the platform frees its compute now.
311
+ *
312
+ * Call it when the agent is done with the session. The current turn keeps
313
+ * running and returns its result normally; once it completes, the platform
314
+ * cancels any live sub-agent runs and releases the session's AER and tool
315
+ * pods instead of holding them until the idle timeout expires.
316
+ *
317
+ * Safe to call more than once: the first call returns "requested", later
318
+ * ones "already_requested". Outside an agent run (local scripts, tool pods)
319
+ * there is no session to finish and the call returns "unavailable" without
320
+ * throwing. Calling it after the turn has already ended - e.g. from a
321
+ * setTimeout or a floating promise scheduled during the turn but resolving
322
+ * after it - also returns "unavailable": by then nothing is listening for
323
+ * the request anymore, so reporting "requested" would promise a release
324
+ * that will never happen.
325
+ *
326
+ * A turn that suspends for human review, or that fails, keeps its
327
+ * resources so it stays resumable and diagnosable; the session then falls
328
+ * back to the idle timeout.
329
+ */
330
+ finishSession(): SessionFinishStatus;
331
+ getCurrentUserId(): string | null;
332
+ getCurrentSessionId(): string | null;
333
+ }
334
+ export { LLMToolSchema };
335
+ export { RuntimeMode };
336
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}