Commit Graph
982 Commits
Author SHA1 Message Date
imccyu f19c25123d style(apiproxy): remove stale spacing 2026-08-27 03:08:53 +08:00
imccyu fd7f2065b2 refactor(apiproxy)!: remove settings and credentials RPCs 2026-08-27 03:01:29 +08:00
imccyu 0a9a9ee686 docs(api): record settings Remote migration 2026-08-27 03:00:25 +08:00
imccyu 54d77eff00 docs(directory-picker): record the Remote transport 2026-08-27 02:20:40 +08:00
imccyu 6e4087626d refactor(apiproxy)!: remove directory-picker RPCs 2026-08-27 02:20:39 +08:00
imccyu 76dedd4862 feat(workspace-controller): expose directory picking through Remote 2026-08-27 02:20:38 +08:00
imccyu 3007864cfe refactor(directory-picker): expose client-safe listing types 2026-08-27 01:44:15 +08:00
imccyu 64575de655 docs(subagent): regenerate Remote references 2026-08-26 14:52:53 +08:00
imccyu 91fea67745 test(subagent): cover Remote control migration 2026-08-26 14:52:53 +08:00
imccyu 377f3b4f1d feat(subagent): migrate browser control to Remote 2026-08-26 14:52:53 +08:00
imccyu c5be99838c test(agent-presets): cover the Remote migration 2026-08-26 11:18:28 +08:00
imccyu 306419cc84 refactor(agent-presets): expose browser operations through Remote 2026-08-26 11:18:28 +08:00
imccyu f18f2215b6 Merge pull request #3073 from deepseek-harness/worktree-apire-a
refactor(apiproxy): delete the goal unary domain
2026-08-25 23:54:01 +08:00
Magolor 0b5eba0c8d docs: rebuild the documentation skill and standards (#2983) 2026-08-25 23:47:20 +08:00
imccyu f04e2fe44a build(apiproxy): drop the now-unused goal dependency
Nothing under packages/host/apiproxy imports @deepseek-ai/dsh-goal after the
unary domain deletion, so the dependency and its project reference go too.
2026-08-25 20:55:03 +08:00
imccyu 243f6629ef refactor(apiproxy): delete the goal unary domain
The goal domain has been served by GoalService's @Remote namespace since it
shipped; the API Proxy copy was a second implementation of the same six
mutations. Remove the goals contract, schemas, route rows, IApiClient stub,
host implementation, and the fixture's compatibility face, leaving
ctx.remote.goals as the only path.

The fixture's goal fold keeps its coverage through the Goal Remotes: its
lifecycle case moves out of the unary-dispatch test, which no longer has
goal rows to cover.
2026-08-25 20:52:46 +08:00
07akioni 61b65d3147 fix(web): show system prompts in chat
Render reconstructable system prompts at each request-series boundary, preserve series declarations through pre-step wrappers, and keep the presentation and replay snapshots aligned across clients.
2026-08-25 14:44:08 +08:00
Tianyi Cui 9c964848cd fix(web): keep browser authentication synchronous 2026-08-25 14:23:47 +08:00
Tianyi Cui 5595d593d1 docs(web): state authentication contracts directly 2026-08-25 14:23:47 +08:00
Tianyi Cui 3e24087bfa fix(web): authenticate the browser Host API 2026-08-25 14:23:45 +08:00
imccyu 08ed5a54a8 refactor(webserver): minimize HTTP gzip integration 2026-08-25 06:43:24 +08:00
imccyu f5f0448bee refactor(subagent): consume shared session observations 2026-08-25 06:09:25 +08:00
lsdsjy 47bf44a5bb fix(client-modules,webserver,webworker-runtime): preserve batched boot across transports 2026-08-24 20:49:12 +08:00
imccyu 54d739cf53 chore(api): align controller assembly and package graph 2026-08-23 16:16:02 +08:00
imccyu dcddaa1a6e refactor(client): replace legacy Host event carriers 2026-08-23 16:16:02 +08:00
imccyu ae25df3ac6 refactor(workspace): move APIs into Workspace Controller 2026-08-23 16:16:02 +08:00
imccyu d26acfa2e3 refactor(session): move APIs into Session Controller 2026-08-23 16:16:02 +08:00
ericcaiwx-star 9a2217b74a test(directory-picker-win32): use a synthetic path in the UTF-16 fixture
The U+5F00 case only needs that code unit in the buffer. A real-looking user desktop path does not belong in a public fixture.
2026-08-23 14:08:39 +08:00
ericcaiwx-star 51c242749a fix(directory-picker-native): stop truncating Win32 UTF-16 paths at U+XX00
readUtf16 treated any zero low byte as NUL, so BMP characters such as 开 (U+5F00) cut the folder-picker path in half.
2026-08-23 13:56:48 +08:00
Tianyi Cui 934976732d docs: purge residual chain-of-thought leakage 2026-08-22 13:10:23 +08:00
imccyu 0bee546177 feat(util): mint UUIDs without crypto.randomUUID in every context 2026-08-21 20:35:34 +08:00
imccyu 50bfb00985 feat(web): single-build preview page and its acceptance e2e
One Vite build emits dist/index.html and dist/preview.html sharing every
chunk; the only difference is one prepended bootstrap entry whose module
connects the worker host, so the page from the stock entry onward is the
served startup chain verbatim. The dist moves to a relative base so the
preview mounts under any static directory, and the served form anchors
deep SPA-fallback paths with a rendered <base href="/">. The preview-boot
e2e serves the real built pages, packs the VFS image when absent, and
holds the boot line's lowering contract, the interactive hero, and a
clean page-error channel in headless Chromium.
2026-08-21 20:35:33 +08:00
imccyu fd3112a23f feat(web): unify served and preview startup behind a boot-ready seam
The webserver renders a boot-readiness tail after the injection rows and
AppWebEntry.run awaits the __DSH_BOOT_READY__ deferred before reading any
injected state. Whichever bootstrap applies the injection table settles
the deferred - the served renderer resolves it inline, an asynchronous
bootstrap installs it ahead of the entry module and settles it with the
handshake - so both deployments run one startup chain and a failed
handshake surfaces on the boot page instead of proceeding on missing
globals.
2026-08-21 20:35:32 +08:00
imccyu aa6c361a97 release(dsh): 0.1.1-rc.2 2026-08-21 19:48:58 +08:00
creatixchu d4b24b5148 Merge remote-tracking branch 'origin/master' into worktree/image-management-strategy 2026-08-21 16:55:00 +08:00
imccyu 7ce85283b5 Revert "Merge pull request #2608 from deepseek-harness/fix/permission-copy-and-default"
This reverts commit d51f4106a2b0669d33e0f5dc1d5dcf21a764d313, reversing
changes made to 69ace51625b6ac665b2f2ec1e81005d5b055f152.
2026-08-21 16:21:13 +08:00
creatixchu 2491e12fd8 refactor(attachment): normalize image storage API 2026-08-21 15:06:24 +08:00
creatixchu 48a58b9090 fix(images): address unified pipeline review 2026-08-21 15:06:10 +08:00
creatixchu d29855f97c feat(images): unify master and Files request pipeline 2026-08-21 15:05:54 +08:00
creatixchu 8f83853b60 refactor(attachment): saveImage returns the canonical ref beside source facts
AttachmentStore.saveImage now resolves SavedImageAttachment: the durable
reference paired with the submitted raster's intrinsic facts, so a store may
persist a canonical re-encoding while callers keep the source dimensions for
coordinate mapping. saveImages keeps returning refs; every fake store and the
cordis API catalog follow the new signature.
2026-08-21 15:01:45 +08:00
imccyu 3ec5e8f8c4 release(dsh): 0.1.1-rc.1 2026-08-21 14:11:09 +08:00
lsdsjy 600f3a3110 fix(frontend-static): return 404 for a missing index 2026-08-20 20:03:18 +08:00
lsdsjy 92723cafeb fix(frontend-static): return 404 for missing paths 2026-08-20 20:02:11 +08:00
pku-xht 84cbec28e9 Merge remote-tracking branch 'origin/master' into codex/localized-chinese-doc-links
# Conflicts:
#	.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml
#	.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.zh.md
#	.agents/notes/implemented/architecture/2026-06-18-shared-persistence-write-coordinator.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.zh.md
#	.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-06-sandbox.zh.md
#	.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-cross-session-references.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-cross-session-references.zh.md
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
#	.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-31-permission-default-for-new-sessions.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.zh.md
#	.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
#	.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md
#	.agents/notes/implemented/feature/2026-08-11-workspace-sidebar-order-and-folding.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml
#	.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml
#	.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.zh.md
#	.agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.i18n.yaml
#	.agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.zh.md
#	.agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.i18n.yaml
#	.agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.zh.md
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md
#	.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml
#	.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md
#	.agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml
#	README.i18n.yaml
#	README.zh.md
#	docs/architecture.i18n.yaml
#	docs/architecture.zh.md
#	docs/development.i18n.yaml
#	docs/development.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.zh.md
#	docs/subsystems/README.i18n.yaml
#	docs/subsystems/README.zh.md
#	docs/subsystems/agent-team.i18n.yaml
#	docs/subsystems/agent-team.zh.md
#	docs/subsystems/client-modules.i18n.yaml
#	docs/subsystems/client-modules.zh.md
#	docs/subsystems/commands.i18n.yaml
#	docs/subsystems/commands.zh.md
#	docs/subsystems/persistence.i18n.yaml
#	docs/subsystems/persistence.zh.md
#	docs/subsystems/session-reference.i18n.yaml
#	docs/tool-catalog.i18n.yaml
#	docs/tool-catalog.zh.md
#	docs/user/guide/providers.i18n.yaml
#	docs/user/guide/providers.zh.md
#	packages/README.i18n.yaml
#	packages/README.zh.md
#	packages/bundle/web-app/README.i18n.yaml
#	packages/bundle/web-app/README.zh.md
#	packages/client/README.i18n.yaml
#	packages/client/README.zh.md
#	packages/client/connection/README.i18n.yaml
#	packages/client/connection/README.zh.md
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.zh.md
#	packages/client/ui-primitives/README.i18n.yaml
#	packages/client/ui-primitives/README.zh.md
#	packages/client/ui-sidebar/README.i18n.yaml
#	packages/client/ui-sidebar/README.zh.md
#	packages/client/ui-workspace/README.i18n.yaml
#	packages/client/ui-workspace/README.zh.md
#	packages/context/README.i18n.yaml
#	packages/context/README.zh.md
#	packages/core/agent-loop/README.i18n.yaml
#	packages/credentials/README.i18n.yaml
#	packages/credentials/README.zh.md
#	packages/experimental/agent-team/README.i18n.yaml
#	packages/experimental/agent-team/README.zh.md
#	packages/experimental/tool-agent-team/README.i18n.yaml
#	packages/experimental/tool-agent-team/README.zh.md
#	packages/host/frontend-static/README.i18n.yaml
#	packages/host/frontend-static/README.zh.md
#	packages/host/webserver/README.i18n.yaml
#	packages/host/webserver/README.zh.md
#	packages/interaction/commands/README.i18n.yaml
#	packages/interaction/commands/README.zh.md
#	packages/plan/plan-mode/README.i18n.yaml
#	packages/plan/plan-mode/README.zh.md
#	packages/sandbox/sandbox-local/README.i18n.yaml
#	packages/sandbox/sandbox-local/README.zh.md
#	packages/session/README.i18n.yaml
#	packages/session/README.zh.md
#	packages/session/session-persistence-sqlite/README.i18n.yaml
#	packages/session/session-persistence-sqlite/README.zh.md
#	packages/session/session-projection-cache/README.i18n.yaml
#	packages/session/session-projection-cache/README.zh.md
#	packages/shell/tool-pwsh/README.i18n.yaml
#	packages/shell/tool-pwsh/README.zh.md
#	packages/subagent/subagent-codex/README.i18n.yaml
#	packages/subagent/subagent-codex/README.zh.md
#	packages/subagent/subagent/README.i18n.yaml
#	packages/subagent/subagent/README.zh.md
#	packages/web/tool-web/README.i18n.yaml
#	packages/web/tool-web/README.zh.md
#	scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-08-20 19:15:33 +08:00
Yichen Jiang fecfabcac4 fix(credentials): name reference update event explicitly 2026-08-20 17:58:39 +08:00
Yichen Jiang 86a9f8c862 feat(credentials): store durable credential records beside references
The seam answered one question — what is behind this environment-variable
name — and that shape cannot hold what an authorization grant is: a
multi-field, rotating value keyed by a provider id rather than by a POSIX
identifier. The Models page already works around the gap by inventing a
synthetic environment name (`MINIMAX_CN_API_KEY`) for a route the user added
by hand, because the store's key must look like one.

`CredentialKey` is `<scope>/<id>`, where the scope is the owning plugin's
registered name. The owner is in the key because a `grant` payload is written
in its owner's format: two plugins serving the same provider name would
otherwise read each other's payload, and a record left by an uninstalled
plugin could not be told from a live one. The `/` also keeps the grammar
disjoint from `CredentialRef`, so the key spaces cannot collide.

`CredentialRecord` is `api-key` (key and/or provider environment values) or
`grant` (an opaque, owner-owned payload). The asymmetry is deliberate: an api
key is the harness's own data, a grant is a package it carries for someone
else. `modifyRecord` is the only write path because a correct write depends
on the current value — a token refresh is read-decide-replace under one
cross-process lock, without which two processes rotating one refresh token
lose whichever wrote first.

`.credentials.yaml` becomes a versioned two-section document. The pre-release
flat layout is refused by name, with the entry count and the one edit needed,
rather than read as an empty store — which would surface as an authentication
failure on the first request instead of at load. A grant payload is admitted
in both directions, so a value the document could not read back exactly as
written is refused rather than stored lossily.
2026-08-20 17:58:38 +08:00
Yichen Jiang 6d6262703b Merge pull request #2820 from deepseek-harness/feat/1687-multiline-question-answer
feat(web): answer ask_user_question over multiple lines
2026-08-20 17:12:39 +08:00
imccyu d582939783 docs(web): align injection-surface JSDoc, notes, and bilingual READMEs 2026-08-20 16:13:05 +08:00
imccyu 156bd075a9 feat(webserver): structured index injection table and the client boot seams
Replace per-plugin tapIndex regex edits with pure-data IndexInjection rows
collected fresh per render over one webserver/index-inject event. One table,
two renderers: the served form renders rows into index.html; a static worker
form ships the same rows over its boot payload. tapIndex survives as the
raw-HTML escape hatch, applied after row rendering; client-modules and
ui-theme move to the event, and the manifest global renders as
globalThis["__DSH_BOOT__"].

The client boot chain gains the seams a pre-injected transport needs: the
module loader takes loadBundle from the transport global by default, HTTP
prefetch stands down when a transport owns bundle bytes, the web-app bundle
can decline frontend serving, the gateway client installs a namespace's
whole method group inside its fiber apply so a parked dependent never
observes the service without its methods, and the dynamic-code precheck
gates through new Function so hosts without a real node:vm keep the
define-time parse gate.
2026-08-20 16:13:04 +08:00
Yichen Jiang 4562616c9b docs(apiproxy): record that a pending question dies with the host
The pending-question registry holds the awaiting tool call's own
resolve/reject, so it is host-process memory. events.mux replays every
still-pending question on reopen, which covers a browser reload or a
reconnect, but a host restart takes the awaiting turn with it and the
reopened Session offers no composer for that question.
2026-08-20 15:29:14 +08:00