From 497d46a074ce6c0d61549bc054f3276a3fb7615e Mon Sep 17 00:00:00 2001 From: Hunter Lovell Date: Mon, 9 Feb 2026 17:39:02 -0800 Subject: [PATCH 1/2] feat(deepagents): add SDK version metadata to agent traces --- .changeset/sdk-trace-metadata.md | 5 +++++ libs/deepagents/src/agent.ts | 14 +++++++++++++- libs/deepagents/tsdown.config.ts | 11 +++++++++++ libs/deepagents/vitest.config.ts | 10 ++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 .changeset/sdk-trace-metadata.md diff --git a/.changeset/sdk-trace-metadata.md b/.changeset/sdk-trace-metadata.md new file mode 100644 index 000000000..fdd4dad93 --- /dev/null +++ b/.changeset/sdk-trace-metadata.md @@ -0,0 +1,5 @@ +--- +"deepagents": patch +--- + +feat(deepagents): Add SDK version metadata to agent traces diff --git a/libs/deepagents/src/agent.ts b/libs/deepagents/src/agent.ts index 446a08c70..b620d2867 100644 --- a/libs/deepagents/src/agent.ts +++ b/libs/deepagents/src/agent.ts @@ -40,6 +40,12 @@ import type { import type * as _messages from "@langchain/core/messages"; import type * as _Command from "@langchain/langgraph"; +/** + * SDK version injected at build time by tsdown's `define` option. + * Falls back to "unknown" during tests or when not built via tsdown. + */ +declare const __SDK_VERSION__: string; + const BASE_PROMPT = `In order to complete the objective that the user asks of you, you have access to a number of standard tools.`; /** @@ -304,7 +310,13 @@ export function createDeepAgent< checkpointer, store, name, - }).withConfig({ recursionLimit: 10_000 }); + }).withConfig({ + recursionLimit: 10_000, + metadata: { + sdk: "deepagents-js", + sdk_version: __SDK_VERSION__, + }, + }); /** * Combine custom middleware with flattened subagent middleware for complete type inference diff --git a/libs/deepagents/tsdown.config.ts b/libs/deepagents/tsdown.config.ts index a8c48ec87..5e2eb0071 100644 --- a/libs/deepagents/tsdown.config.ts +++ b/libs/deepagents/tsdown.config.ts @@ -1,8 +1,13 @@ import { defineConfig } from "tsdown"; +import { readFileSync } from "node:fs"; // Mark all node_modules as external since this is a library const external = [/^[^./]/]; +const { version } = JSON.parse( + readFileSync(new URL("./package.json", import.meta.url), "utf-8"), +); + export default defineConfig([ { entry: ["./src/index.ts"], @@ -13,6 +18,9 @@ export default defineConfig([ outDir: "dist", outExtensions: () => ({ js: ".js" }), external, + define: { + __SDK_VERSION__: JSON.stringify(version), + }, }, { entry: ["./src/index.ts"], @@ -23,5 +31,8 @@ export default defineConfig([ outDir: "dist", outExtensions: () => ({ js: ".cjs" }), external, + define: { + __SDK_VERSION__: JSON.stringify(version), + }, }, ]); diff --git a/libs/deepagents/vitest.config.ts b/libs/deepagents/vitest.config.ts index c1e6bde9a..e265932e9 100644 --- a/libs/deepagents/vitest.config.ts +++ b/libs/deepagents/vitest.config.ts @@ -1,4 +1,5 @@ import path from "node:path"; +import { readFileSync } from "node:fs"; import { configDefaults, defineConfig, @@ -9,8 +10,15 @@ import dotenv from "dotenv"; // Load .env from workspace root (two levels up from libs/deepagents) dotenv.config({ path: path.resolve(__dirname, "../../.env") }); +const { version } = JSON.parse( + readFileSync(path.resolve(__dirname, "package.json"), "utf-8"), +); + export default defineConfig((env) => { const common: ViteUserConfigExport = { + define: { + __SDK_VERSION__: JSON.stringify(version), + }, test: { environment: "node", hideSkippedTests: true, @@ -27,6 +35,7 @@ export default defineConfig((env) => { if (env.mode === "int") { return { + define: common.define, test: { ...common.test, globals: false, @@ -39,6 +48,7 @@ export default defineConfig((env) => { } return { + define: common.define, test: { ...common.test, include: ["src/**/*.test.ts"], From aa9ef055027946164140434791badb3d6264fced Mon Sep 17 00:00:00 2001 From: Hunter Lovell <40191806+hntrl@users.noreply.github.com> Date: Tue, 10 Feb 2026 16:53:43 -0800 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Christian Bromann --- libs/deepagents/tsdown.config.ts | 2 +- libs/deepagents/vitest.config.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/deepagents/tsdown.config.ts b/libs/deepagents/tsdown.config.ts index 5e2eb0071..509583d20 100644 --- a/libs/deepagents/tsdown.config.ts +++ b/libs/deepagents/tsdown.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from "tsdown"; -import { readFileSync } from "node:fs"; +import { version } from "./package.json" with { type: "json" }; // Mark all node_modules as external since this is a library const external = [/^[^./]/]; diff --git a/libs/deepagents/vitest.config.ts b/libs/deepagents/vitest.config.ts index e265932e9..7a94759b1 100644 --- a/libs/deepagents/vitest.config.ts +++ b/libs/deepagents/vitest.config.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readFileSync } from "node:fs"; +import { version } from "./package.json" with { type: "json" }; import { configDefaults, defineConfig,