Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
64047a6
Add files via upload
Synoppy Jul 8, 2026
94edbaf
Improve basic auth page language refs + style (#4782)
katmayb Jul 8, 2026
e2cdcb0
Update deepagents changelog heading to v0.7.0a6 and remove SDK-only n…
langsmith-fleet[bot] Jul 8, 2026
6175691
add more tested code samples for subagents and streaming (#4785)
npentrel Jul 8, 2026
b6dec16
add deepagents RAG tutorial (#4653)
npentrel Jul 8, 2026
5ba998a
Clarify Docker is optional in deploy quickstart prerequisites (#4784)
langsmith-fleet[bot] Jul 8, 2026
7deb7ba
clarify gp inheritance (#4787)
imnishitha Jul 8, 2026
77d684c
Evaluator spend project (#3893)
fjmorris Jul 8, 2026
a63d1e6
Add detail on the bulk export compression default (#4791)
katmayb Jul 8, 2026
d2f1324
Pin Node 22 for docs development (#4797)
mdrxy Jul 9, 2026
0d3f590
docs: add AI-agent migration prompt and consolidate SDK version requi…
KiewanVillatel Jul 9, 2026
6777368
update dcode structure (#4713)
npentrel Jul 9, 2026
8dba3d5
chore: run OpenAPI spec sync daily instead of weekly (#4799)
KiewanVillatel Jul 9, 2026
5b6d04c
Enable pull request trigger for code samples workflow (#4804)
npentrel Jul 9, 2026
ce7c1f2
make sandbox code samples testable (#4807)
npentrel Jul 9, 2026
69f4305
chore(deps): bump soupsieve from 2.8 to 2.8.4 in the uv group across …
dependabot[bot] Jul 9, 2026
b134c54
Fix code snippets (#4811)
npentrel Jul 9, 2026
c699119
Fix Group by limit in LangSmith docs (5 → 20) (#4808)
langsmith-fleet[bot] Jul 9, 2026
1144e33
docs(self-hosted): add Terraform guides for AWS, GCP, and Azure (#4187)
devfreddy-langchain Jul 9, 2026
f2398aa
Publish documentation page for Engine Security (#4611)
fjmorris Jul 9, 2026
a7d6a18
chore: refresh LangSmith platform OpenAPI spec (#4816)
github-actions[bot] Jul 10, 2026
41790b1
docs: add exceptions table and not-found example to SmithDB migration…
KiewanVillatel Jul 10, 2026
ab6e97c
docs: update SmithDB exceptions table for TypeScript and add cURL tab…
KiewanVillatel Jul 10, 2026
7c41778
add /dcode redirect to Deep Agents Code overview (#4814)
langsmith-fleet[bot] Jul 12, 2026
7ed3452
Merge branch 'main' into add-synoppy
Synoppy Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/refresh-langsmith-openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ name: Refresh LangSmith OpenAPI spec

on:
schedule:
# Weekly on Monday at 10:00 AM UTC
- cron: "0 10 * * 1"
# Daily at 10:00 AM UTC
- cron: "0 10 * * *"
workflow_dispatch: {}

jobs:
Expand Down Expand Up @@ -59,7 +59,7 @@ jobs:
--title "chore: refresh LangSmith platform OpenAPI spec" \
--body "$(cat <<'EOF'
## Summary
Automated weekly refresh of the LangSmith Platform API spec.
Automated daily refresh of the LangSmith Platform API spec.

## Details
- Fetched latest spec from api.smith.langchain.com
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/test-code-samples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ permissions:
contents: read

on:
# pull_request:
# paths:
# - "src/code-samples/**"
# - ".github/workflows/test-code-samples.yml"
pull_request:
paths:
- "src/code-samples/**"
- ".github/workflows/test-code-samples.yml"
workflow_dispatch:
schedule:
# Run every Sunday at 00:00 UTC
Expand Down Expand Up @@ -126,6 +126,9 @@ jobs:
id: test
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_BASE_URL: ${{ secrets.ANTHROPIC_BASE_URL }}
ANTHROPIC_CUSTOM_HEADERS: ${{ secrets.ANTHROPIC_CUSTOM_HEADERS }}
LS_GATEWAY_KEY: ${{ secrets.LS_GATEWAY_KEY }}
LANGSMITH_API_KEY: ${{ secrets.LANGSMITH_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
POSTGRES_URI: postgresql://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable
Expand Down
1 change: 1 addition & 0 deletions .node-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ Flat groups (no tabs):

See [Contributing to documentation](/oss/contributing/documentation) for setup instructions.

### Command-line tools

Two distinct binaries drive local work. Do not assume `mint` is the only command just because the `Makefile` targets shell out to it: `docs` is a first-class, preferred entry point installed separately via Python:

- **`docs`**: The primary CLI, a Python console script (`docs = "pipeline.cli:main"` in `pyproject.toml`) installed into the virtualenv by `uv sync` (the first step of `make install`). Provides `docs dev`, `docs build`, `docs migrate`, and `docs mv`. The `make` targets wrap this CLI. If `docs` is not found after `make install`, relaunch your shell (or activate the venv) so `.venv/bin/docs` lands on `PATH`.
- **`mint`**: Mintlify's CLI, a separate global npm binary (`npm install -g mint@latest`). The build targets shell out to it for `mint dev`, `mint broken-links`, and `mint export`.

## Frontmatter

Every MDX file requires:
Expand Down
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ Flat groups (no tabs):

See [Contributing to documentation](/oss/contributing/documentation) for setup instructions.

### Command-line tools

Two distinct binaries drive local work. Do not assume `mint` is the only command just because the `Makefile` targets shell out to it: `docs` is a first-class, preferred entry point installed separately via Python:

- **`docs`**: The primary CLI, a Python console script (`docs = "pipeline.cli:main"` in `pyproject.toml`) installed into the virtualenv by `uv sync` (the first step of `make install`). Provides `docs dev`, `docs build`, `docs migrate`, and `docs mv`. The `make` targets wrap this CLI. If `docs` is not found after `make install`, relaunch your shell (or activate the venv) so `.venv/bin/docs` lands on `PATH`.
- **`mint`**: Mintlify's CLI, a separate global npm binary (`npm install -g mint@latest`). The build targets shell out to it for `mint dev`, `mint broken-links`, and `mint export`.

## Frontmatter

Every MDX file requires:
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ install:
uv sync --all-groups
npm install
npm install -g mint@latest
@echo "If the docs command is not available, relaunch your shell so it picks up the docs binary."

clean:
@echo "Cleaning build artifacts..."
Expand Down
2 changes: 2 additions & 0 deletions pipeline/core/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ def __init__(self, src_dir: Path, build_dir: Path) -> None:
".jpg",
".jpeg",
".gif",
".mp4",
".webm",
".yml",
".yaml",
".css",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ dependencies = [
"langchain-quickjs>=0.3.2",
"langgraph>=1.2.5",
"langgraph-checkpoint-sqlite>=3.1.0",
"langsmith>=0.9.8",
"langsmith>=0.10.2",
"deepagents-acp>=0.0.9",
"slack-sdk>=3.43.0",
]
Expand Down
1 change: 1 addition & 0 deletions src/.codespellignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ SAIs
iTerm
SOM
AKS
aks
ACI
1 change: 1 addition & 0 deletions src/code-samples/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
legacy-peer-deps=true
35 changes: 35 additions & 0 deletions src/code-samples/deepagents/api/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
async function seedSandbox(_sandbox: LangSmithSandbox) {
// See File transfers in Going to production for seeding patterns.
}

// :snippet-start: frontend-sandbox-utils-js
// src/api/utils.ts
import { Client } from "@langchain/langgraph-sdk";
import { LangSmithSandbox } from "deepagents";
import { SandboxClient } from "langsmith/sandbox";

export async function getOrCreateSandboxForThread(threadId: string) {
const client = new Client({ apiUrl: "http://localhost:2024" });
const thread = await client.threads.get(threadId);
const sandboxId = thread.metadata?.sandbox_id;

if (sandboxId) {
const existing = await new SandboxClient().getSandbox(sandboxId);
if (existing.status === "ready") {
return new LangSmithSandbox({ sandbox: existing });
}
}

const sandbox = await LangSmithSandbox.create({ templateName: "my-template" });
await seedSandbox(sandbox);
await client.threads.update(threadId, { metadata: { sandbox_id: sandbox.id } });
return sandbox;
}
// :snippet-end:

// :remove-start:
if (typeof getOrCreateSandboxForThread !== "function") {
throw new Error("expected getOrCreateSandboxForThread export");
}
console.log("✓ frontend-sandbox-utils-js validated");
// :remove-end:

This file was deleted.

17 changes: 0 additions & 17 deletions src/code-samples/deepagents/code/configuration-bash-auth.sh

This file was deleted.

23 changes: 0 additions & 23 deletions src/code-samples/deepagents/code/configuration-bash-cli.sh

This file was deleted.

45 changes: 0 additions & 45 deletions src/code-samples/deepagents/code/configuration-hooks-handler.py

This file was deleted.

89 changes: 76 additions & 13 deletions src/code-samples/deepagents/context-engineering-long-term-memory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,103 @@ import {
StateBackend,
StoreBackend,
} from "deepagents";
import { InMemoryStore } from "@langchain/langgraph-checkpoint";
import { InMemoryStore } from "@langchain/langgraph";

const agent = await createDeepAgent({
model: "google-genai:gemini-3.5-flash",
store: new InMemoryStore(),
backend: new CompositeBackend(new StateBackend(), {
"/memories/": new StoreBackend(),
"/memories/": new StoreBackend({
namespace: () => ["memories"],
}),
}),
systemPrompt: `When users tell you their preferences, save them to /memories/user_preferences.txt so you remember them in future conversations.`,
});
// :snippet-end:

// :remove-start:
const result = await agent.invoke({
import { isAIMessage } from "@langchain/core/messages";

function fileDataToText(file: unknown): string {
if (!file || typeof file !== "object" || !("content" in file)) {
return "";
}
const content = (file as { content: unknown }).content;
if (Array.isArray(content)) {
return content.map(String).join("\n");
}
return String(content);
}

function storeItemToText(item: { value: unknown }): string {
if (typeof item.value === "string") {
return item.value;
}
return fileDataToText(item.value);
}

const testStore = new InMemoryStore();
const testAgent = await createDeepAgent({
model: "openai:gpt-5.5",
store: testStore,
backend: new CompositeBackend(new StateBackend(), {
"/memories/": new StoreBackend({
namespace: () => ["memories"],
}),
}),
systemPrompt:
"When the user shares a preference, you MUST call write_file to save it " +
"to /memories/user_preferences.txt before replying. Include the preference " +
"text verbatim in the file content.",
});

const result = await testAgent.invoke({
messages: [
{
role: "user",
content: "Remember that I prefer concise responses.",
},
],
});

const preferencesPath = "/memories/user_preferences.txt";
const preferencesFile = result.files?.[preferencesPath];
const fileContent =
preferencesFile &&
typeof preferencesFile === "object" &&
"content" in preferencesFile
? String(preferencesFile.content)
: "";
let fileContent = fileDataToText(result.files?.[preferencesPath]);

if (!fileContent.toLowerCase().includes("concise")) {
const stored = await testStore.get(["memories"], preferencesPath);
if (stored) {
fileContent = storeItemToText(stored);
}
}

if (!fileContent.toLowerCase().includes("concise")) {
for (const item of await testStore.search(["memories"])) {
const text = storeItemToText(item);
if (text.toLowerCase().includes("concise")) {
fileContent = text;
break;
}
}
}

if (!fileContent.toLowerCase().includes("concise")) {
throw new Error(
`expected ${preferencesPath} to contain "concise", got: ${fileContent || "(missing file)"}`,
);
const wrotePreference = (result.messages ?? []).some((message) => {
if (!isAIMessage(message) || !message.tool_calls?.length) {
return false;
}
return message.tool_calls.some((toolCall) => {
if (toolCall.name !== "write_file") {
return false;
}
const argsText = JSON.stringify(toolCall.args ?? {}).toLowerCase();
return argsText.includes("concise");
});
});
if (!wrotePreference) {
throw new Error(
`expected ${preferencesPath} to contain "concise", got: ${fileContent || "(missing file)"}`,
);
}
}

console.log("✓ context-engineering-long-term-memory sample validated");
Expand Down
Loading