Commit Graph
23542 Commits
Author SHA1 Message Date
07akioni 72f814c5ca fix(i18n): correct French collapse label 2026-10-22 20:21:59 +08:00
07akioni b86f0cfd11 fix(i18n): align navigation and collapse terminology 2026-10-22 20:13:47 +08:00
07akioni b053d8a3f7 fix(i18n): refine common actions and thinking status copy 2026-10-22 20:01:21 +08:00
07akioni 84edeadc2b feat(i18n): add Spanish French German Russian and Portuguese 2026-10-22 19:53:52 +08:00
imccyu 2ae65c16b7 Merge pull request #6966 from deepseek-harness/revert-6959-xtr/fix-web-agent-initialization
Revert "fix(session-controller): 在 Web 操作中等待本地 Agent 初始化"
2026-10-22 18:18:43 +08:00
imccyu f185b5fa6d Revert "fix(session-controller): 在 Web 操作中等待本地 Agent 初始化" 2026-10-22 18:18:01 +08:00
_Kerman a3d5e4f9e3 Merge pull request #6959 from deepseek-harness/xtr/fix-web-agent-initialization
fix(session-controller): 在 Web 操作中等待本地 Agent 初始化
2026-10-22 18:12:26 +08:00
_Kerman d3972b1af5 fix(session-controller): handle initialization join failures 2026-10-22 17:44:40 +08:00
Chinesezjc 43f4c9a4ee Merge pull request #6789 from deepseek-harness/work/restore-subagent-end-turn
fix(prompt): end the turn while waiting on subagents
2026-10-22 17:35:12 +08:00
Magolor a9dd195400 refactor(approval): persist policy and turn state in projection (#6816)
* refactor(approval): persist policy and turn state in projection

* fix(approval): require ready projection state and host-owned recovery

* chore(approval): retire obsolete test cast allowances

* docs(approval): make activation migration requirement explicit

* docs(session-projection): clarify recovery ownership and readiness

* docs(approval): keep projection skill in dedicated PR
2026-10-22 17:27:54 +08:00
Chinesezjc 3b30f69c9f test(snapshot): carry the end-turn guidance into merged scenarios
The branch merge from master brought four scenarios added after the prompt
refresh (background-wait-steer, session-resume, model-switch-compaction,
web-search-unconfigured); their system-prompt sidecars still show the
guidance without the restored sentence, so the keyless replay fails. Apply
the same sentence to those six expected lines.
2026-10-22 17:17:06 +08:00
Shigma 1fd099f7e2 Merge pull request #6207 from deepseek-harness/feat/cordis-loader-resolver
feat(cordis): sync project-relative Loader resolution
2026-10-22 17:16:54 +08:00
_Kerman e5b68798b9 fix(session-controller): wait for initializing local agents 2026-10-22 17:04:51 +08:00
Chinesezjc 83a51c5d65 Merge branch 'master' into work/restore-subagent-end-turn 2026-10-22 16:59:48 +08:00
Chinesezjc f48596d2f7 Merge pull request #6863 from deepseek-harness/fix/weighted-approval-app-check
feat(ci): publish the approval decision label from a dedicated approval App
2026-10-22 16:47:28 +08:00
Shigma 90499e2e61 Merge branch 'master' into feat/cordis-loader-resolver 2026-10-22 16:35:55 +08:00
Chinesezjc 6f12142abb docs(ci): state how the App token fallback fails 2026-10-22 16:31:28 +08:00
Chinesezjc 1e25d64a2e fix(ci): select decision runs by the publishing app
The App token cannot update a run the job token created and vice versa, so
selecting runs by `app.slug === 'github-actions'` missed every App run: each
phase created another run, a published App success was never revoked, and a
head with an older job-token run made the App patch fail. Select runs by the
publishing app slug instead, pass `vars.DSH_APPROVAL_APP_SLUG`, and set the
external_id marker on the setup-phase run too.

Cover the App-owned update and the job-run coexistence, and align the note with
the measured earliest-suite rule and the App slug variable.
2026-10-22 16:31:01 +08:00
Chinesezjc 7cf0362dce fix(ci): re-record the note pairing and keep the issue App assertion
The dedicated-App edit changed the note's decision section without re-recording
its translation sidecar, and the client-id replacement also hit the issue
lifecycle workflow assertion. Re-record the pair and restore the issue App's
variable names in that test.
2026-10-22 16:29:07 +08:00
Chinesezjc 8cd82e8001 Merge branch 'master' into work/restore-subagent-end-turn 2026-10-22 16:21:42 +08:00
Magolor 88d2ab67b0 Merge pull request #6801 from deepseek-harness/projection-plugin-rules
docs(session-projection): 明确插件状态恢复与兼容规范
2026-10-22 16:21:36 +08:00
Feiyu Xia 904a1caa2d Merge pull request #6664 from deepseek-harness/feat/mobile-input-viewport
fix(client): improve mobile input focus and caret scrolling
2026-10-22 15:58:15 +08:00
Yichen Jiang c1238b8792 Merge pull request #5263 from deepseek-harness/worktree/web-search-dynamic-tool-e26c2b
feat(web): withhold web_search and web_fetch from requests without credentials
2026-10-22 15:53:05 +08:00
Turtle 644eb3158e Merge pull request #6838 from deepseek-harness/turtle/market-install-allowbuilds-8b6f87a8284b
fix(plugin-manager): offer script approval for git-hosted packages
2026-10-22 15:52:14 +08:00
Yichen Jiang fb378dacf2 fix(web): offer DeepSeek web tools whenever a credential exists
The DeepSeek search and Search/Fetch API providers now report readiness
from credential presence alone, on any model route: the account token
first on the deepseek-account route, then a literal apiKey or a
configured apiKeyEnv reference. A conversation on another provider's
model keeps web_search and web_fetch while a DeepSeek key is configured,
as on master, so the route refusal WEB_PROVIDER_ROUTE_DISABLED and its
upgrade guide are removed.

The pi-ai-conversation-updates and deepseek-messages-system-prompt
snapshots replay their master recordings again, the headless keyless
smoke points its search key reference at an unset variable, and the
readiness Agent Note records the rejected route and endpoint rules.
2026-10-22 15:38:16 +08:00
Turtle b70735089d docs(plugin-manager): keep pendingBuilds JSDoc on one line 2026-10-22 15:38:14 +08:00
Turtle a8bf3e7600 fix(plugin-manager): harden git allowBuilds key parsing
Capture git keys that contain spaces, skip keys whose git URL carries a
credential, and isolate Git configuration for the real pnpm test.
2026-10-22 15:38:14 +08:00
Turtle 220301c614 fix(plugin-manager): offer script approval for git-hosted packages
pnpm 11 refuses to prepare a git-hosted dependency with
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED instead of reporting ignored build
scripts. Classify that error as build-blocked and record the allowBuilds
key pnpm suggests, so the existing approval-and-retry flow applies.

Fixes #6837
2026-10-22 15:37:59 +08:00
Turtle 7df9a5a93b Merge pull request #6943 from deepseek-harness/turtle/git-https-source-auth-b46e6aff6136
fix(plugin-manager): install self-hosted Git plugins over SSH when only SSH can read them
2026-10-22 15:26:48 +08:00
Turtle f313e7911b Merge pull request #6564 from deepseek-harness/turtle/plugin-sticky-header-29bfdb179e18
feat(plugin-manager): pin the Plugins page title bar while scrolling
2026-10-22 15:15:12 +08:00
Yichen Jiang a19aabc8ba feat(web): let a key of search's own serve other model routes
A user who gives DeepSeek search a key of its own has chosen what that key
pays for, so the route check now applies only to the shared
DEEPSEEK_API_KEY. A literal apiKey, or an apiKeyEnv other than
DEEPSEEK_API_KEY, opens every model route for Messages search and for the
Search and Fetch APIs; a configured endpoint does not, since the search
still sends the shared key. The Web search settings page saves its key
under the section's apiKeyEnv, DEEPSEEK_API_KEY by default, so a key saved
there keeps serving only the DeepSeek routes.

The route refusal now names the settings that give search a key of its
own, and the READMEs, the readiness Agent Note, and the upgrade guide
describe the exception.
2026-10-22 15:00:39 +08:00
lsdsjy da910572c5 Merge pull request #6948 from deepseek-harness/fix/sidebar-noop-drag-caret
fix(sidebar): 隐藏不改变标签顺序的拖拽定位条
2026-10-22 14:58:05 +08:00
Turtle f837cdbfbf Merge remote-tracking branch 'origin/master' into turtle/plugin-sticky-header-29bfdb179e18
# Conflicts:
#	packages/client/ui-primitives/README.i18n.yaml
2026-10-22 14:50:11 +08:00
lsdsjy 3e2e051bf1 docs(sidebar): 明确无效拖拽落点的释放语义 2026-10-22 14:41:06 +08:00
Yichen Jiang a3c0265456 test(snapshots): share web-fetch's tool schemas with web-search-unconfigured
web-search-unconfigured declares exactly the tool catalog that web-fetch
already pins, so it names web-fetch as its toolSchemasSource instead of
committing a second copy.
2026-10-22 14:36:38 +08:00
Turtle c063b70b85 Merge pull request #6891 from deepseek-harness/turtle/sidebar-first-open-flash-c291a96690d1
fix(ui-sidebar-right): slide the panel in on its first open
2026-10-22 14:33:13 +08:00
Turtle f228c3ffa6 Merge pull request #6064 from deepseek-harness/turtle/async-notice-efficiency
feat(jobs): deliver job output in completion notices and drop repeated notice text
2026-10-22 14:30:55 +08:00
lsdsjy f9ff5d0979 fix(sidebar): 隐藏不改变标签顺序的拖拽定位条 2026-10-22 14:27:54 +08:00
turtle1999 6f4ce88207 Merge remote-tracking branch 'origin/master' into turtle/async-notice-efficiency
# Conflicts:
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
2026-10-22 14:12:42 +08:00
Turtle cce67394c9 docs(config-catalog): regenerate after merging master 2026-10-22 14:11:15 +08:00
Turtle 8255ebe3cc Merge remote-tracking branch 'origin/master' into turtle/git-https-source-auth-b46e6aff6136 2026-10-22 14:09:45 +08:00
Turtle 420a7797f6 fix(plugin-manager): harden Git transport probe prompts, fragments and attribution
Refs #6938
2026-10-22 14:07:10 +08:00
Turtle 1b7923db9d refactor(ui-sidebar-right): start the first-open slide with @starting-style
Replace the layout effect that forced a closed style with an opening marker derived during render. A @starting-style rule under the marker starts items mounted by the opening at the closed position. The marker clears when a transition ends, the panel closes, or the panel leaves the screen.
2026-10-22 14:07:05 +08:00
imccyu b04c1c3261 Merge pull request #6895 from deepseek-harness/turtle/icon-tokens/icons-plugin-tokens-e20dec90761c
feat(client): let themes replace product icons through an SVG sprite
2026-10-22 13:50:35 +08:00
Yichen Jiang 1922f322aa fix(web): gate the DeepSeek web providers on the model route alone
Review found two faults in the endpoint and configuration checks. The
providers took the official chat route's endpoint from the first active
dsh-llm-deepseek-api-key Loader row, so a composition that isolates several
instances answered for an unrelated one: a correct route lost search, or a
gateway's key reached DeepSeek. And a key saved on the Web search settings
page lands under the default DEEPSEEK_API_KEY reference, so the inference
that search had its own configuration never saw it.

Both DeepSeek web packages now serve only the deepseek-account and
deepseek-official routes, whatever key they are configured with, and no
longer compare the chat endpoint with their own. ready() checks the route
and then credential presence as before; the API-key resolver repeats the
route check and refuses with WEB_PROVIDER_ROUTE_DISABLED. The packages no
longer read Loader rows or depend on dsh-llm-deepseek-api-key, so the
lockfile, the module graph, and the keyless smoke expectations that the
endpoint check had changed return to master's.

An upgrade guide covers conversations on other providers' models, which
lose DeepSeek web search and, with the Search and Fetch APIs selected,
web_fetch.
2026-10-22 13:48:53 +08:00
Stevring 23a9cad68e Merge remote-tracking branch 'origin/master' into feat/mobile-input-viewport 2026-10-22 13:46:22 +08:00
Turtle f59f0dfc67 fix(plugin-manager): install self-hosted Git plugins over SSH when only SSH can read them
Refs #6938
2026-10-22 13:42:56 +08:00
imccyu 73931626be feat(webserver): add resource routes and in-process readResource (#6901)
* feat(webserver): add resource routes and in-process readResource

A webserver route or the fallback seat may now answer through a resource,
a function from a Fetch Request to a Response, besides the existing
node:http handler. register accepts either route form and registerFallback
accepts a handler or { resource }; existing handler callers are unchanged.
HTTP GET and HEAD requests reach a resource; webServer.readResource(request,
peer) follows the same match order and reaches only resources, so handler
routes stay unreachable to in-process readers.

client-modules registers /plugins as the fetchBundle resource, and
frontend-static claims the fallback seat with a resource that renders the
index for a supplied Peer, or runs Connection's existing authorizeIndex for
an HTTP request and renders for the browser Peer.

* fix(webserver): flush resource headers and keep one drain listener per response

Resource responses send their status and headers before the first body
chunk, register one drain/close listener pair per response so the gzip
middleware's zlib stream does not accumulate listeners across backpressure
waits, and readResource drops the body of a HEAD read as HTTP does. HTTP
requests and readResource share one responder lookup.

* chore(scripts): prune the retired client-modules unknown-cast baseline entry

* feat(frontend-static): let browsers revalidate dist files except the index

Every dist file other than the rendered index now carries
cache-control: no-cache and a weak ETag from a SHA-1 of its bytes; a
request whose If-None-Match equals that ETag receives an empty 304. The
index keeps sending no cache headers. In-process reads through
webServer.readResource revalidate the same way.

* fix(webserver): stop reading Host for resource URLs and copy no held body

A resource request's URL is the request target resolved against the same
placeholder origin the route match uses, so a missing or unparsable Host no
longer turns a dist or /plugins request into 400. The webserver ends a
resource response itself and treats any earlier close as an abort, which
also covers the Web Worker tunnel marking an aborted response ended first.
client-modules bundle bodies and frontend-static file bodies are the held
bytes themselves instead of copies, and frontend-static no longer exports
its internal serveStatic helper.

* docs(webserver): document resource route types and the handler-or-resource fallback

Paste WebResource and WebResourceRoute beside WebRoute on the web-server
subsystem page and link the catalog signatures to it, replace the remaining
'fallback handler' wording now that the seat takes a handler or a resource,
and note why the drain listener removal is a no-op under gzip.
2026-10-22 13:41:18 +08:00
Turtleandimccyu 140496c750 Credit review by @imccyu
Co-authored-by: imccyu <[email protected]>
2026-10-22 13:37:32 +08:00
Turtle 5f77d80555 Merge remote-tracking branch 'origin/master' into turtle/icon-tokens/icons-plugin-tokens-e20dec90761c
# Conflicts:
#	packages/client/ui-primitives/README.i18n.yaml
2026-10-22 13:24:28 +08:00