2023-03-31 00:15:32 +00:00
|
|
|
{
|
2023-04-09 06:30:35 +00:00
|
|
|
"name": "obsidian-copilot",
|
2026-05-21 01:27:22 +00:00
|
|
|
"version": "3.3.3",
|
2025-05-31 03:06:25 +00:00
|
|
|
"description": "Your AI Copilot: Chat with Your Second Brain, Learn Faster, Work Smarter.",
|
2023-03-31 00:30:47 +00:00
|
|
|
"main": "main.js",
|
|
|
|
|
"scripts": {
|
2026-05-14 08:12:52 +00:00
|
|
|
"dev": "run-p dev:*",
|
2024-12-28 18:41:08 +00:00
|
|
|
"dev:tailwind": "npx tailwindcss -i src/styles/tailwind.css -o styles.css --watch",
|
|
|
|
|
"dev:esbuild": "node esbuild.config.mjs",
|
|
|
|
|
"build": "npm run build:tailwind && npm run build:esbuild || exit 1",
|
|
|
|
|
"build:tailwind": "npx tailwindcss -i src/styles/tailwind.css -o styles.css --minify",
|
|
|
|
|
"build:esbuild": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
|
2026-05-13 07:49:49 +00:00
|
|
|
"lint": "eslint .",
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"lint:dead": "npx --yes knip@5",
|
2026-05-13 07:49:49 +00:00
|
|
|
"lint:fix": "eslint . --fix",
|
2024-08-21 22:16:22 +00:00
|
|
|
"format": "prettier --write 'src/**/*.{js,ts,tsx,md}'",
|
|
|
|
|
"format:check": "prettier --check 'src/**/*.{js,ts,tsx,md}'",
|
chore(release): make prerelease tooling stop poisoning master's manifest.json (#2429)
* chore(release): make prerelease tooling stop poisoning master's manifest.json
Background: Obsidian's community plugin store reads manifest.json from master
to decide which GitHub Release to serve installers. The prerelease agent's
npm version bump was rewriting manifest.json with a prerelease version, which
broke plugin installs until hotfix #2428 reverted master's manifest.json to
the stable version.
This PR fixes the underlying tooling so it can't recur.
Changes:
- version-bump.mjs now branches on whether npm_package_version is a prerelease
(contains a hyphen). Stable: writes to manifest.json + versions.json. Prerelease:
writes to manifest-beta.json + versions.json, leaving manifest.json untouched.
Seeds manifest-beta.json from manifest.json when it doesn't exist yet.
On a stable bump that finds a stale manifest-beta.json, removes it (git rm)
because the new stable supersedes the in-flight beta. Stages the right files
itself; package.json no longer needs the explicit git-add step.
- package.json: simplifies the "version" lifecycle script to just
"node version-bump.mjs" since the script now stages files itself.
- release.yml:
* "Verify version matches manifest" step now selects the file based on
is_prerelease (manifest.json for stable, manifest-beta.json for prerelease).
For stable runs nothing changes.
* Adds a "Prepare release-asset manifest" step before the release upload that
copies manifest-beta.json over manifest.json IN THE RUNNER only when the
release is a prerelease. This makes the uploaded manifest.json asset carry
the prerelease version so testers sideloading the assets get a consistent
manifest. The committed master manifest.json is never touched by the
workflow (the workflow doesn't push back).
- .claude/agents/release.md: adds a Step 0 pre-flight assertion that master's
manifest.json.version equals the latest non-prerelease GitHub Release tag.
Catches drift loudly before doing any work. Notes the manifest-beta.json
auto-removal in the rules.
- .claude/agents/prerelease.md: documents the manifest.json / manifest-beta.json
split. Adds the same Step 0 drift assertion. Updates the git add step to
stage manifest-beta.json instead of manifest.json. Adds an explicit guard
rule that manifest.json must not change during a prerelease bump.
Verified locally by exercising version-bump.mjs in a throwaway repo:
- Stable 3.2.8 -> 3.2.9: writes manifest.json + versions.json, no beta side
- Prerelease 3.2.8 -> 3.2.9-beta.0: creates manifest-beta.json, manifest.json untouched
- Prerelease iteration 3.2.9-beta.0 -> 3.2.9-beta.1: updates manifest-beta.json,
manifest.json untouched
- Stable supersedes beta 3.2.9-beta.1 -> 3.2.9: writes manifest.json,
git-rm's manifest-beta.json
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(release): address Codex review on PR #2429
1. release.yml: when verifying a prerelease, also assert that the committed
manifest.json on the merge commit still equals the latest non-prerelease
GitHub Release tag. This catches an old-style version bump or hand edit
that accidentally modified master's manifest.json — without this guard,
the verify step only inspected manifest-beta.json so a poisoned
manifest.json could merge unnoticed and break the Obsidian plugin store.
2. version-bump.mjs: don't fail stable bumps when manifest-beta.json exists
on disk but is untracked (or has local modifications). Check git
trackedness first; use `git rm -f` only when tracked, fall back to a
plain unlink for working-tree-only files. Logs which path it took.
Verified both scenarios in a throwaway repo:
- Untracked manifest-beta.json + stable bump: unlinked, no git rm error
- Tracked manifest-beta.json + stable bump: staged deletion via git rm -f
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(release): use /releases/latest API for stable-drift guard
gh release list defaults to 30 results, so a cluster of 30+ prereleases
since the last stable would make the prerelease drift guard return empty
and fail valid prerelease publishes. Switch to GitHub's /releases/latest
endpoint instead, which by design returns only the most-recent
non-prerelease, non-draft release in a single call regardless of how
many prereleases have accumulated.
Applied the same fix to the Step 0 drift check in both the release agent
and prerelease agent doc for consistency.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 22:53:48 +00:00
|
|
|
"version": "node version-bump.mjs",
|
2025-05-31 03:06:25 +00:00
|
|
|
"test": "jest --testPathIgnorePatterns=src/integration_tests/",
|
fix(mobile): guard Agent Mode off the mobile load path (#2577)
* fix(mobile): shim `process` so the bundle survives module-eval on mobile
Follow-up to #2576 (preview issue #125). After the EventEmitter fix, mobile now
crashes at load with "ReferenceError: Can't find variable: process".
Cause: Agent Mode is desktop-only but its modules are statically imported, so
they're evaluated on every platform. Several read the Node global `process` at
module scope (e.g. `InstallCommandRow.tsx`'s `const DEFAULT_LABEL =
process.platform === "win32" ? ...`, the codex/claude/opencode descriptors),
and bundled Node deps read `process.env` at init. Mobile's WebView has no
`process`, so evaluating any of them throws during import and kills the plugin.
Fix: prepend a minimal `process` shim in the esbuild banner —
`var process = globalThis.process || { env:{}, platform:"", ... }`. Desktop
(Electron) has a real `globalThis.process` and uses it unchanged; mobile gets
the stub, so module evaluation no longer throws. The desktop-only code paths
that actually use `process` never run on mobile.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore(test-vault): copy-deploy into iCloud-synced vaults for mobile testing
`npm run test:vault` symlinks main.js/styles.css by default, but iCloud syncs
file contents, not link targets, so a symlinked build never reaches the phone.
Detect iCloud vaults (path under "/Mobile Documents/") and copy real files
instead, so deploying to an iCloud vault makes the build testable on Obsidian
mobile. Mirrors the existing WSL copy-mode rule.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(mobile): keep agent mode off load path
* test(mobile): add load smoke check
* fix(mobile): share agent chat mode constant
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:56:58 +00:00
|
|
|
"test:mobile-load": "npm run build && node scripts/mobile-load-smoke.cjs",
|
2025-05-31 03:06:25 +00:00
|
|
|
"test:integration": "jest src/integration_tests/",
|
2025-10-11 04:38:50 +00:00
|
|
|
"prepare": "husky",
|
2026-05-19 19:05:49 +00:00
|
|
|
"prompt:debug": "node scripts/printPromptDebug.js",
|
2026-05-27 18:01:24 +00:00
|
|
|
"test:vault": "bash scripts/test-vault.sh",
|
|
|
|
|
"test:reset-data": "bash scripts/test-reset-data.sh"
|
2023-03-31 00:30:47 +00:00
|
|
|
},
|
|
|
|
|
"keywords": [],
|
2024-08-21 04:53:09 +00:00
|
|
|
"author": "Logan Yang",
|
2026-05-14 08:12:52 +00:00
|
|
|
"nano-staged": {
|
2024-08-21 04:53:09 +00:00
|
|
|
"*.{js,jsx,ts,tsx,json,css,md}": [
|
2026-03-15 03:10:05 +00:00
|
|
|
"prettier --write"
|
|
|
|
|
],
|
|
|
|
|
"*.{js,jsx,ts,tsx}": [
|
feat(tools): add base:create command and .base active note support (#2303)
* feat(tools): add base:create command and .base active note support
Add `base:create` to the obsidianBases CLI tool, enabling creation of
new items in Obsidian Bases through natural language. Also add .base
files as recognized active notes so they appear in chat context.
Changes:
- Add base:create command with name, content, view params to CLI tool
- Support .base files as active notes in chat context
- Add TEXT_READABLE_EXTENSIONS and ALLOWED_NOTE_CONTEXT_EXTENSIONS to
constants.ts as single source of truth for file extension checks
- Use isTextReadableFile() in contextProcessor and utils instead of
hardcoded extension checks
- Register .base in MarkdownParser for content reading
- Fix inaccurate filter syntax in Base YAML prompt instructions
- Fix broken lint-staged eslint flag (--no-warn-ignored not in eslint 8)
- Update design doc with base:create in v1 tier and write policy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tools): improve LLM routing for .base file operations
Add explicit disambiguation in both writeToFile and obsidianBases
prompts to prevent the LLM from using Composer for .base operations.
writeToFile now excludes .base files by default, and obsidianBases
declares itself as the primary tool for all .base operations with
clear examples of when each tool should be used.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tools): add execution-time guard for .base file routing
Add a code-level guard in executeSequentialToolCall that intercepts
writeToFile/replaceInFile calls targeting .base files and redirects
the LLM to use obsidianBases instead. This is more reliable than
prompt-only disambiguation since it works regardless of what the LLM
decides.
The guard only fires when obsidianBases is available (desktop). On
mobile or when the tool is disabled, writeToFile proceeds normally.
The error message tells the LLM exactly which commands to use, so it
self-corrects on the next iteration.
Also simplifies the prompt instructions by removing the verbose
disambiguation text that wasn't working reliably.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(composer): respect user auto-accept setting over LLM confirmation param
The writeToFile tool allowed the LLM to bypass the diff preview by
passing confirmation=false, even when the user had not enabled
auto-accept edits in settings. Now the preview is always shown unless
the user has explicitly enabled auto-accept. The LLM's confirmation
parameter is ignored.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(tools): add daily command to create today's daily note
The agent had no way to create a daily note - daily:append/prepend
require non-empty content and don't apply templates. Add the CLI
`daily` command which creates today's daily note with the user's
configured template and folder from the core Daily Notes plugin.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tools): allow composer to create new .base files
The execution-time guard was blocking writeToFile for ALL .base paths,
including creating brand new .base files. Now the guard only redirects
when the .base file already exists (editing an existing base should
use CLI). Creating a new .base file via composer proceeds normally.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tools): improve Base YAML filter syntax and add validation step
Fix LLM generating invalid Base YAML by adding explicit filter format
rules: single string or and/or/not objects only, bare YAML lists are
invalid. Also add a validation step that calls base:views after
creating a .base file to verify it parses correctly, enabling the
agent to self-correct on errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tools): remove .base file execution guard
The guard was too aggressive - it blocked legitimate .base YAML edits
(adding columns, changing filters) because the CLI has no commands to
modify .base file structure. Editing .base YAML requires writeToFile.
Routing between CLI (base:create, base:query) and composer (YAML
edits) is now handled entirely by prompt instructions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: restrict embedded note segment parsing to markdown files only
Revert the embed gate from isTextReadableFile() back to .md-only.
The extractMarkdownSegment logic treats # as a heading reference,
but .base files use # for view names (![[Library.base#To Read]]).
Routing .base embeds through heading parsing would fail and return
an error block instead of usable context.
The chain restriction check (Plus-mode gating) correctly uses
isTextReadableFile since it's about access control, not parsing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:08:14 +00:00
|
|
|
"eslint --fix"
|
2024-08-21 04:53:09 +00:00
|
|
|
]
|
|
|
|
|
},
|
2023-04-22 03:40:53 +00:00
|
|
|
"license": "AGPL-3.0",
|
2023-03-31 00:30:47 +00:00
|
|
|
"devDependencies": {
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"@codemirror/state": "^6.5.2",
|
|
|
|
|
"@codemirror/view": "^6.36.4",
|
2026-05-14 08:12:52 +00:00
|
|
|
"@eslint-react/eslint-plugin": "^1.38.4",
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"@google/generative-ai": "^0.24.0",
|
2026-05-13 09:01:32 +00:00
|
|
|
"@jest/globals": "^29.7.0",
|
2026-02-04 06:18:39 +00:00
|
|
|
"@langchain/ollama": "^1.2.2",
|
2026-05-19 21:55:21 +00:00
|
|
|
"@svgr/core": "^8.1.0",
|
|
|
|
|
"@svgr/plugin-jsx": "^8.1.0",
|
2024-12-30 21:55:30 +00:00
|
|
|
"@tailwindcss/container-queries": "^0.1.1",
|
2023-04-09 05:57:45 +00:00
|
|
|
"@testing-library/react": "^14.0.0",
|
2025-05-31 03:06:25 +00:00
|
|
|
"@types/diff": "^7.0.1",
|
2024-01-28 06:51:54 +00:00
|
|
|
"@types/jest": "^29.5.11",
|
2024-11-22 01:36:52 +00:00
|
|
|
"@types/luxon": "^3.4.2",
|
2023-03-31 00:30:47 +00:00
|
|
|
"@types/node": "^16.11.6",
|
2023-04-04 02:17:23 +00:00
|
|
|
"@types/react": "^18.0.33",
|
|
|
|
|
"@types/react-dom": "^18.0.11",
|
2026-01-13 01:54:54 +00:00
|
|
|
"@types/turndown": "^5.0.6",
|
2026-05-12 21:11:53 +00:00
|
|
|
"@types/uuid": "^10.0.0",
|
2024-02-22 05:47:55 +00:00
|
|
|
"electron": "^27.3.2",
|
2025-02-20 19:17:36 +00:00
|
|
|
"esbuild": "^0.25.0",
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"esbuild-plugin-svg": "^0.1.0",
|
2026-05-13 07:49:49 +00:00
|
|
|
"eslint": "^9.18.0",
|
2026-05-19 21:55:21 +00:00
|
|
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
|
|
|
"eslint-plugin-boundaries": "^6.0.2",
|
2026-05-12 21:11:53 +00:00
|
|
|
"eslint-plugin-obsidianmd": "^0.3.0",
|
2025-01-07 06:45:12 +00:00
|
|
|
"eslint-plugin-react-hooks": "^5.1.0",
|
2025-06-01 05:30:54 +00:00
|
|
|
"eslint-plugin-tailwindcss": "^3.18.0",
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"globals": "^15.14.0",
|
2024-08-21 04:53:09 +00:00
|
|
|
"husky": "^9.1.5",
|
2024-01-28 06:51:54 +00:00
|
|
|
"jest": "^29.7.0",
|
2023-04-09 05:57:45 +00:00
|
|
|
"jest-environment-jsdom": "^29.5.0",
|
2026-05-14 08:12:52 +00:00
|
|
|
"nano-staged": "^0.8.0",
|
|
|
|
|
"npm-run-all2": "^7.0.2",
|
2024-08-25 06:29:44 +00:00
|
|
|
"obsidian": "^1.2.5",
|
2026-05-19 21:55:21 +00:00
|
|
|
"prettier": "3.8.3",
|
2024-12-28 18:41:08 +00:00
|
|
|
"tailwindcss": "^3.4.15",
|
chore(deps): remove unused deps and dead code to shrink bundle (#2460)
Drop unused runtime deps (huggingface, koa, langchain, react-markdown,
react-syntax-highlighter, next-i18next, p-queue, trie-search, sse,
codemirror-companion-extension, tabler/icons-react, etc.) and demote
build-only packages to devDependencies. Delete dead source files
(quick-ask modes, ListPromptModal, NewChatConfirmModal,
PatternMatchingModal, ContainerContext, command-ui chat-message,
ui/tabs) and unused exports flagged by knip. Add `lint:dead` script
backed by knip and a knip.json config.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:25:59 +00:00
|
|
|
"tailwindcss-animate": "^1.0.7",
|
2023-04-09 05:57:45 +00:00
|
|
|
"ts-jest": "^29.1.0",
|
2023-03-31 00:30:47 +00:00
|
|
|
"tslib": "2.4.0",
|
2024-12-28 18:41:28 +00:00
|
|
|
"typescript": "^5.7.2",
|
2026-05-14 08:12:52 +00:00
|
|
|
"web-streams-polyfill": "^3.3.2",
|
|
|
|
|
"yaml": "^2.6.1"
|
2023-04-02 20:41:20 +00:00
|
|
|
},
|
|
|
|
|
"dependencies": {
|
2026-05-19 21:55:21 +00:00
|
|
|
"@agentclientprotocol/sdk": "^0.20.0",
|
|
|
|
|
"@anthropic-ai/claude-agent-sdk": "^0.2.126",
|
2025-02-12 21:11:09 +00:00
|
|
|
"@dnd-kit/core": "^6.3.1",
|
|
|
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
|
|
|
"@dnd-kit/utilities": "^3.2.2",
|
fix(anthropic+bedrock): adaptive thinking + summarized display for claude-opus-4-7+ (#2471)
* fix(anthropic): use thinking.type=adaptive for claude-opus-4-7+
claude-opus-4-7 rejects the legacy thinking shape with a 400:
`thinking.type.enabled` is not supported for this model.
Use `thinking.type.adaptive` and `output_config.effort`.
Detect opus-4 minor version in getModelInfo and emit
{ type: "adaptive" } for >=7, keeping { type: "enabled", budget_tokens }
for opus-4-6 and earlier, sonnet-4, and 3-7-sonnet.
Bumps @langchain/anthropic ^1.0.0 -> ^1.3.29 to pick up the adaptive
ThinkingConfigParam variant and an updated tool-schema typing that lets
BedrockChatModel.convertTools drop its now-redundant Record cast.
Fixes #2361. Replaces stale PR #2362.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(bedrock): use thinking.type=adaptive for claude-opus-4-7+
Same 400 from claude-opus-4-7+ as the direct Anthropic path (fixed in
the previous commit), but the Bedrock provider has its own payload
builder in BedrockChatModel.buildRequestBody that was unaffected.
Add the same minor-version detection inside that payload builder.
Uses an unanchored regex /claude-opus-4-(\d+)/ because Bedrock model
IDs carry a provider/profile prefix (e.g.
"global.anthropic.claude-opus-4-7-20260115-v1:0").
Fixes #2384.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test: use real sonnet model IDs
claude-sonnet-4-7 doesn't exist; tests were asserting against a
fabricated ID. Switch the non-opus negative cases to a real
claude-sonnet-4-5 (and keep the existing claude-3-7-sonnet test).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(thinking): set output_config.display=summarized for claude-opus-4-7+
Adaptive thinking on Opus 4.7+ alone restores the request shape but
leaves the UI empty — Anthropic flipped the default for
output_config.display from "summarized" to "omitted" on this model
line, so the API stops emitting visible thinking content blocks.
Pre-4.7 models still default to "summarized" server-side.
Set display: "summarized" alongside thinking: { type: "adaptive" } on
both the direct Anthropic and Bedrock paths so opus-4-7 renders
thinking summaries the same way sonnet 4.6 does today.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(thinking): nest display=summarized inside thinking config
The Anthropic API places `display: 'summarized' | 'omitted'` on the
thinking config itself (ThinkingConfigAdaptive / ThinkingConfigEnabled),
not on a top-level `output_config`. The previous commit set
`outputConfig: { display: "summarized" }` on the ChatAnthropic config and
`output_config: { display: "summarized" }` on the Bedrock request body,
which broke the TS build (the SDK's OutputConfig only exposes
effort/format) and would not have produced the intended server behavior
for the adaptive thinking summarization toggle.
- chatModelManager.ts: emit `thinking: { type: "adaptive", display: "summarized" }`
- BedrockChatModel.ts: same, on the request payload
- BedrockChatModel.test.ts: update assertions to the new shape
* fix(thinking): constrain Opus minor regex so dated snapshots don't match
The previous `^claude-opus-4-(\d+)` (Anthropic) and unanchored
`claude-opus-4-(\d+)` (Bedrock) regex captured the date portion of
snapshot IDs like `claude-opus-4-20250514` as if it were the minor
version, so `usesAdaptiveThinking` evaluated as `true` (20250514 >= 7)
for pre-4.7 Opus models. That would send `thinking: { type: "adaptive" }`
for the legacy 4.0 snapshot and could trigger 400s on REASONING-enabled
runs.
Constrain the minor capture to 1-2 digits followed by `-`/`.` or end of
string. Real Anthropic minor versions are single/double digit; dated
snapshots have an 8-digit date that this regex now rejects.
- src/utils.ts: anchored fix for the Anthropic path
- src/LLMProviders/BedrockChatModel.ts: unanchored fix for Bedrock IDs
- regression tests for dated 4.0/4.1 snapshots in both src/utils.test.ts
and src/LLMProviders/BedrockChatModel.test.ts
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 00:29:36 +00:00
|
|
|
"@langchain/anthropic": "^1.3.29",
|
2026-05-12 21:11:53 +00:00
|
|
|
"@langchain/classic": "^1.0.9",
|
2026-03-03 08:03:37 +00:00
|
|
|
"@langchain/core": "^1.1.29",
|
2025-10-21 00:52:50 +00:00
|
|
|
"@langchain/deepseek": "^1.0.0",
|
2026-03-03 08:03:37 +00:00
|
|
|
"@langchain/google-genai": "^2.1.23",
|
2025-10-21 00:52:50 +00:00
|
|
|
"@langchain/groq": "^1.0.0",
|
|
|
|
|
"@langchain/openai": "^1.0.0",
|
|
|
|
|
"@langchain/textsplitters": "^1.0.0",
|
|
|
|
|
"@langchain/xai": "^1.0.0",
|
2025-10-11 04:38:50 +00:00
|
|
|
"@lexical/react": "^0.34.0",
|
2024-10-05 18:13:34 +00:00
|
|
|
"@orama/orama": "^3.0.0-rc-2",
|
2026-02-04 01:37:33 +00:00
|
|
|
"@radix-ui/react-checkbox": "^1.3.3",
|
2024-12-30 21:55:30 +00:00
|
|
|
"@radix-ui/react-collapsible": "^1.1.2",
|
2026-01-14 05:38:17 +00:00
|
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
2025-01-22 06:03:22 +00:00
|
|
|
"@radix-ui/react-dropdown-menu": "^2.1.4",
|
2026-01-14 05:38:17 +00:00
|
|
|
"@radix-ui/react-label": "^2.1.7",
|
2025-10-11 04:38:50 +00:00
|
|
|
"@radix-ui/react-popover": "^1.1.15",
|
2025-08-08 16:59:00 +00:00
|
|
|
"@radix-ui/react-progress": "^1.1.7",
|
2025-10-11 04:38:50 +00:00
|
|
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
2026-01-14 05:38:17 +00:00
|
|
|
"@radix-ui/react-select": "^2.2.6",
|
2025-06-24 19:35:48 +00:00
|
|
|
"@radix-ui/react-separator": "^1.1.7",
|
2025-08-16 04:32:29 +00:00
|
|
|
"@radix-ui/react-slider": "^1.3.5",
|
2026-02-04 01:37:33 +00:00
|
|
|
"@radix-ui/react-slot": "^1.2.4",
|
2026-01-14 05:38:17 +00:00
|
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
2025-03-05 06:30:56 +00:00
|
|
|
"async-mutex": "^0.5.0",
|
2025-03-03 03:04:05 +00:00
|
|
|
"buffer": "^6.0.3",
|
2024-11-22 01:36:52 +00:00
|
|
|
"chrono-node": "^2.7.7",
|
2024-12-28 18:41:08 +00:00
|
|
|
"class-variance-authority": "^0.7.1",
|
|
|
|
|
"clsx": "^2.1.1",
|
2025-05-31 03:06:25 +00:00
|
|
|
"diff": "^7.0.0",
|
2026-05-19 21:55:21 +00:00
|
|
|
"dotenv": "^17.4.2",
|
2025-10-11 04:38:50 +00:00
|
|
|
"fuzzysort": "^3.1.0",
|
2024-12-01 06:36:23 +00:00
|
|
|
"jotai": "^2.10.3",
|
2025-10-11 04:38:50 +00:00
|
|
|
"lexical": "^0.34.0",
|
2024-11-27 20:15:58 +00:00
|
|
|
"lucide-react": "^0.462.0",
|
2024-11-22 01:36:52 +00:00
|
|
|
"luxon": "^3.5.0",
|
2026-01-10 06:30:30 +00:00
|
|
|
"minisearch": "^7.2.0",
|
2026-05-19 21:55:21 +00:00
|
|
|
"openai": "^6.34.0",
|
2023-04-04 02:17:23 +00:00
|
|
|
"react": "^18.2.0",
|
2023-04-05 19:13:34 +00:00
|
|
|
"react-dom": "^18.2.0",
|
2025-06-24 19:35:48 +00:00
|
|
|
"react-resizable-panels": "^3.0.2",
|
2024-12-28 18:41:08 +00:00
|
|
|
"tailwind-merge": "^2.5.5",
|
2026-05-12 21:11:53 +00:00
|
|
|
"turndown": "^7.2.2",
|
|
|
|
|
"uuid": "^11.1.0",
|
2026-05-19 21:55:21 +00:00
|
|
|
"zod": "^4.4.2"
|
|
|
|
|
},
|
|
|
|
|
"overrides": {
|
|
|
|
|
"@browserbasehq/stagehand": "3.2.1"
|
2023-03-31 00:30:47 +00:00
|
|
|
}
|
2025-06-07 21:18:24 +00:00
|
|
|
}
|